ncc.zabbix_fbsd_templates
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh
.. v1.r202602.4 * Исправлена ошибка с неверным перенаправлением логов ошибок, приводящая к отправке сообщений не в файл, а в демону cron * Если в результате плохой связности не удалось оюновить базы данных пакетов или аудита, не делаем ничего с имеющимися данными. Это позаоляет не флапать мониторингом на плохих каналах.
1.1 --- a/src/aw.fbsd-mon-helper/lib/pkg.sh Sat Oct 04 12:27:40 2025 +0300 1.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh Sun Feb 15 18:19:43 2026 +0300 1.3 @@ -5,6 +5,7 @@ 1.4 v_pkg_detail_status_tmp="${TMP_ROOT}/pkg_detail" 1.5 1.6 v_pkg_update_status="${TMP_ROOT}/pkg_update" 1.7 +v_pkg_update_status_subs="${TMP_ROOT}/pkg_update.subs" 1.8 v_pkg_update_status_res="${STATE_ROOT}/pkg_update" 1.9 v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list" 1.10 1.11 @@ -13,12 +14,20 @@ 1.12 mkdir -p "$v_pkg_detail_status" 1.13 fi 1.14 1.15 - if ! [ -d "${v_pkg_detail_status_tmp}" ] ; then 1.16 + if ! [ -d "${v_pkg_detail_status_tmp}" ]; then 1.17 mkdir -p "${v_pkg_detail_status_tmp}" 1.18 fi 1.19 1.20 + if ! [ -d "${v_pkg_update_status_subs}" ]; then 1.21 + mkdir -p "${v_pkg_update_status_subs}" 1.22 + fi 1.23 + 1.24 log "Update pakages" 1.25 - pkg update 2>&1 | log 1.26 + ( 1.27 + pkg update 2>&1 1.28 + echo $? > "${v_pkg_update_status_subs}/pkg_update" 1.29 + 1.30 + ) | log 1.31 # Обновление базы аудита происходит на получении общих данных по пакетам 1.32 1.33 touch "${v_pkg_detail_status_list}" 1.34 @@ -170,8 +179,13 @@ 1.35 1.36 # - 1.37 # Удаляем старые файлы, в которые давно не не пишутся данные по пакетам 1.38 - log "Clean old files -- detail and audit pakages" 1.39 - find "$v_pkg_detail_status" -type f -cmin +30 -print0 | xargs -0n 1 rm -frv 2>&1 | log 1.40 + if [ "$(cat "${v_pkg_update_status_subs}/pkg_update")" -eq 0 ] ; then 1.41 + log "Clean old files -- detail and audit pakages" 1.42 + find "$v_pkg_detail_status" -type f -cmin +30 -print0 | xargs -0n 1 rm -frv 2>&1 | log 1.43 + 1.44 + else 1.45 + log "WARN: pkg update end with error, do nothing" 1.46 + fi 1.47 } 1.48 1.49 1.50 @@ -189,11 +203,29 @@ 1.51 else 1.52 pkg_init 1.53 1.54 - pkg_check_up_status 1.55 - pkg audit -qrF > "${v_pkg_update_status}.audit" 1.56 - mv -f "${v_pkg_update_status}.audit" "${v_pkg_update_status_res}.audit" 1.57 + if [ "$(cat "${v_pkg_update_status_subs}/pkg_update")" -ne 0 ] ; then 1.58 + log_err "Error on update packages. pkg update status: $(cat "${v_pkg_update_status_subs}/pkg_update")" 1.59 + 1.60 + else 1.61 + pkg_check_up_status 1.62 + pkg_make_detail 1.63 + fi 1.64 + 1.65 + pkg audit -qrF \ 1.66 + > "${v_pkg_update_status}.audit" \ 1.67 + 2> "${v_pkg_update_status_subs}/pkg_audit_err" 1.68 1.69 - pkg_make_detail 1.70 + # Финт ушами, поскольку pkg audit возвращает 1 если всё нормально, но есть пакеты с уязвимостями 1.71 + # и если не всё нормально тоже... 1.72 + if [ "$(cat "${v_pkg_update_status_subs}/pkg_audit_err" | wc -l)" -eq 0 ] ; then 1.73 + mv -f "${v_pkg_update_status}.audit" "${v_pkg_update_status_res}.audit" 1.74 + 1.75 + else 1.76 + log_err "Error on fetch vuln data. pkg audit err:" 1.77 + cat "${v_pkg_update_status_subs}/pkg_audit_err" | awk '{print "PKG AUDIT ERR:", $0}' | log_err 1.78 + touch "${v_pkg_update_status_res}.audit" 1.79 + fi 1.80 + 1.81 fi 1.82 1.83 pkg_finaly