ncc.zabbix_fbsd_templates

Yohn Y. 2026-02-15 Parent:b86351df3265 Child:40a104df6589

25:c1d9bf2ab39e Go to Latest

ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh

.. v1.r202602.4 * Исправлена ошибка с неверным перенаправлением логов ошибок, приводящая к отправке сообщений не в файл, а в демону cron * Если в результате плохой связности не удалось оюновить базы данных пакетов или аудита, не делаем ничего с имеющимися данными. Это позаоляет не флапать мониторингом на плохих каналах.

History
     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