Simplify helpers under line cap
This commit is contained in:
@@ -32,6 +32,20 @@ _env_add_warning() {
|
||||
ENV_CHECK_WARNINGS+=("$1")
|
||||
}
|
||||
|
||||
_env_require_cmd() {
|
||||
local cmd=$1 issue=$2
|
||||
command_is_available "${cmd}" && return 0
|
||||
_env_add_issue "${issue}"
|
||||
ENV_CHECK_NEED_PACKAGES=1
|
||||
}
|
||||
|
||||
_env_require_forward() {
|
||||
local file=$1 issue=$2
|
||||
[[ $(_env_file_value "${file}" 2>/dev/null || printf '0') == 1 ]] && return 0
|
||||
_env_add_issue "${issue}"
|
||||
ENV_CHECK_NEED_SYSCTL=1
|
||||
}
|
||||
|
||||
_env_file_value() {
|
||||
local file=$1
|
||||
[[ -f ${file} ]] || return 1
|
||||
@@ -52,30 +66,14 @@ env_check_collect_issues() {
|
||||
ENV_CHECK_NEED_SYSCTL=0
|
||||
ENV_CHECK_NEED_STORAGE=0
|
||||
|
||||
if ! command_is_available "${IPF_CHECK_IPTABLES_CMD}"; then
|
||||
_env_add_issue '缺少 iptables 命令。'
|
||||
ENV_CHECK_NEED_PACKAGES=1
|
||||
fi
|
||||
|
||||
if ! command_is_available "${IPF_CHECK_IP6TABLES_CMD}"; then
|
||||
_env_add_issue '缺少 ip6tables 命令。'
|
||||
ENV_CHECK_NEED_PACKAGES=1
|
||||
fi
|
||||
|
||||
_env_require_cmd "${IPF_CHECK_IPTABLES_CMD}" '缺少 iptables 命令。'
|
||||
_env_require_cmd "${IPF_CHECK_IP6TABLES_CMD}" '缺少 ip6tables 命令。'
|
||||
if ! _env_package_installed || ! command_is_available "${IPF_CHECK_PERSIST_CMD}"; then
|
||||
_env_add_issue '缺少 iptables-persistent / netfilter-persistent。'
|
||||
ENV_CHECK_NEED_PACKAGES=1
|
||||
fi
|
||||
|
||||
if [[ $(_env_file_value "${IPF_IPV4_FORWARD_FILE}" 2>/dev/null || printf '0') != 1 ]]; then
|
||||
_env_add_issue 'IPv4 转发未开启。'
|
||||
ENV_CHECK_NEED_SYSCTL=1
|
||||
fi
|
||||
|
||||
if [[ $(_env_file_value "${IPF_IPV6_FORWARD_FILE}" 2>/dev/null || printf '0') != 1 ]]; then
|
||||
_env_add_issue 'IPv6 转发未开启。'
|
||||
ENV_CHECK_NEED_SYSCTL=1
|
||||
fi
|
||||
_env_require_forward "${IPF_IPV4_FORWARD_FILE}" 'IPv4 转发未开启。'
|
||||
_env_require_forward "${IPF_IPV6_FORWARD_FILE}" 'IPv6 转发未开启。'
|
||||
|
||||
if [[ ! -d ${IPF_STORAGE_DIR} || ! -w ${IPF_STORAGE_DIR} ]]; then
|
||||
_env_add_issue "状态目录不可用: ${IPF_STORAGE_DIR}"
|
||||
@@ -114,10 +112,7 @@ env_check_print_report() {
|
||||
}
|
||||
|
||||
_env_install_packages() {
|
||||
command_is_available "${APT_GET_BIN}" || {
|
||||
log_err '缺少 apt-get,无法自动安装依赖。'
|
||||
return 1
|
||||
}
|
||||
command_is_available "${APT_GET_BIN}" || { log_err '缺少 apt-get,无法自动安装依赖。'; return 1; }
|
||||
command_is_available "${DEBCONF_SET_SELECTIONS_BIN}" || {
|
||||
log_err '缺少 debconf-set-selections,无法预置安装选项。'
|
||||
return 1
|
||||
@@ -161,31 +156,16 @@ SYSCTL
|
||||
}
|
||||
|
||||
env_check_apply_fixes() {
|
||||
if (( ENV_CHECK_NEED_PACKAGES == 1 )); then
|
||||
log_info '正在安装缺失软件包...'
|
||||
_env_install_packages || return 1
|
||||
fi
|
||||
|
||||
if (( ENV_CHECK_NEED_STORAGE == 1 )); then
|
||||
log_info '正在创建状态目录...'
|
||||
mkdir -p "${IPF_STORAGE_DIR}"
|
||||
chmod 750 "${IPF_STORAGE_DIR}"
|
||||
fi
|
||||
|
||||
if (( ENV_CHECK_NEED_SYSCTL == 1 )); then
|
||||
log_info '正在写入 sysctl 配置并启用转发...'
|
||||
_env_write_sysctl || return 1
|
||||
fi
|
||||
(( ENV_CHECK_NEED_PACKAGES == 1 )) && { log_info '正在安装缺失软件包...'; _env_install_packages || return 1; }
|
||||
(( ENV_CHECK_NEED_STORAGE == 1 )) && { log_info '正在创建状态目录...'; mkdir -p "${IPF_STORAGE_DIR}"; chmod 750 "${IPF_STORAGE_DIR}"; }
|
||||
(( ENV_CHECK_NEED_SYSCTL == 1 )) && { log_info '正在写入 sysctl 配置并启用转发...'; _env_write_sysctl || return 1; }
|
||||
}
|
||||
|
||||
env_check_all() {
|
||||
env_check_collect_issues
|
||||
env_check_print_report
|
||||
|
||||
if ((${#ENV_CHECK_ISSUES[@]} == 0)); then
|
||||
return 0
|
||||
fi
|
||||
|
||||
((${#ENV_CHECK_ISSUES[@]} == 0)) && return 0
|
||||
if [[ ${IPF_ASSUME_YES} == 1 ]]; then
|
||||
log_info '已启用自动确认,开始修复。'
|
||||
elif ! prompt_confirm '是否自动修复以上问题?' n; then
|
||||
@@ -197,19 +177,12 @@ env_check_all() {
|
||||
env_check_collect_issues
|
||||
env_check_print_report
|
||||
|
||||
if ((${#ENV_CHECK_ISSUES[@]} > 0)); then
|
||||
log_err '自动修复后仍存在未解决的问题。'
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
((${#ENV_CHECK_ISSUES[@]} == 0)) && return 0
|
||||
log_err '自动修复后仍存在未解决的问题。'
|
||||
return 1
|
||||
}
|
||||
|
||||
env_status_summary() {
|
||||
env_check_collect_issues
|
||||
if ((${#ENV_CHECK_ISSUES[@]} == 0)); then
|
||||
printf '就绪\n'
|
||||
else
|
||||
printf '待修复(%d)\n' "${#ENV_CHECK_ISSUES[@]}"
|
||||
fi
|
||||
((${#ENV_CHECK_ISSUES[@]} == 0)) && printf '就绪\n' || printf '待修复(%d)\n' "${#ENV_CHECK_ISSUES[@]}"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user