ncc.zabbix_fbsd_templates
2024-10-13
Child:42f11a826ab9
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh
.. init
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh Sun Oct 13 18:44:51 2024 +0300 1.3 @@ -0,0 +1,95 @@ 1.4 +#!/bin/sh 1.5 +# Различная статистика по пакетам 1.6 + 1.7 +v_pkg_detail_status="$STATE_ROOT/pkg_detail" 1.8 +v_pkg_update_status="$STATE_ROOT/pkg_update" 1.9 + 1.10 +pkg_init () { 1.11 + if ! [ -d "$v_pkg_detail_status" ]; then 1.12 + mkdir -p "$v_pkg_detail_status" 1.13 + else 1.14 + # Удаляем старые директории, в которые давно не не пишутся данные по пакетам 1.15 + log "Clean old detail pakages" 1.16 + find "$v_pkg_detail_status" -type f -ctime +1 -print0 | xargs -0n 1 rm -frv 2>&1 | log 1.17 + fi 1.18 + log "Update pakages" 1.19 + pkg update 2>&1 | log 1.20 + # Обновление базы аудита происходит на получении общих данных по пакетам 1.21 +} 1.22 + 1.23 +pkg_make_detail () { 1.24 + local vl_pkg_origin 1.25 + local vl_pkg_repo 1.26 + local vl_pkg_name 1.27 + local vl_pkg_ver 1.28 + local vl_status_file 1.29 + local vl_pkg_status 1.30 + 1.31 + service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read svc_file; do 1.32 + if ! [ -f "$svc_file" ] ; then 1.33 + continue 1.34 + fi 1.35 + 1.36 + vl_pkg_origin="$(pkg which -o "$svc_file" | awk '$0 ~ "was installed by package" {print $6}')" 1.37 + if [ -z "$vl_pkg_origin" ] ; then 1.38 + log "$svc_file have no matched pkg" 1.39 + continue 1.40 + fi 1.41 + 1.42 + vl_pkg_name="$(basename "$vl_pkg_origin")" 1.43 + vl_pkg_repo="$(pkg query '%R' "$vl_pkg_origin")" 1.44 + vl_pkg_ver="$(pkg query '%v' "$vl_pkg_origin")" 1.45 + vl_pkg_status="$(pkg version -qUO "$vl_pkg_origin" | awk '{print $2}')" 1.46 + 1.47 + case "$vl_pkg_status" in 1.48 + = ) 1.49 + vl_pkg_status=OK 1.50 + ;; 1.51 + 1.52 + "<" ) 1.53 + vl_pkg_status="NEED UPDATE" 1.54 + ;; 1.55 + 1.56 + ">" ) 1.57 + vl_pkg_status="REPO VERSION LOWER" 1.58 + ;; 1.59 + 1.60 + "?" ) 1.61 + vl_pkg_status="NO PACKAGE IN REPO" 1.62 + ;; 1.63 + 1.64 + "!" ) 1.65 + vl_pkg_status="ERROR" 1.66 + log_err -s "${vl_pkg_origin}: pkg can not compare version of package" 1.67 + ;; 1.68 + 1.69 + * ) 1.70 + log_err -s "${vl_pkg_origin}: unknown status ${vl_pkg_status}" 1.71 + vl_pkg_status="ERROR" 1.72 + ;; 1.73 + 1.74 + esac 1.75 + 1.76 + vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 1.77 + pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_origin" \ 1.78 + > "${vl_status_file}" 1.79 + 1.80 + printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 1.81 + pkg audit "${vl_pkg_name}-${vl_pkg_ver}" \ 1.82 + | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 1.83 + > "${vl_status_file}.audit" 1.84 + 1.85 + done 1.86 +} 1.87 + 1.88 +pkg_do () { 1.89 + log_start "pkg_do" 1.90 + 1.91 + pkg_init 1.92 + pkg version -qUL = | awk '$2 != ">" {print $1}' > "$v_pkg_update_status" 1.93 + pkg audit -qF > "${v_pkg_update_status}.audit" 1.94 + 1.95 + pkg_make_detail 1.96 + 1.97 + log_end 1.98 +} 1.99 \ No newline at end of file