ncc.zabbix_fbsd_templates

Yohn Y. 2024-10-13 Parent:238da22c2de7 Child:1464321598bd

5:00d9437374a1 Go to Latest

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

+ Запчасти для слежения за логами

History
awgur@0 1 #!/bin/sh
awgur@0 2 # Различная статистика по пакетам
awgur@0 3
awgur@0 4 v_pkg_detail_status="$STATE_ROOT/pkg_detail"
awgur@0 5 v_pkg_update_status="$STATE_ROOT/pkg_update"
awgur@0 6
awgur@0 7 pkg_init () {
awgur@0 8 if ! [ -d "$v_pkg_detail_status" ]; then
awgur@0 9 mkdir -p "$v_pkg_detail_status"
awgur@0 10 else
awgur@0 11 # Удаляем старые директории, в которые давно не не пишутся данные по пакетам
awgur@0 12 log "Clean old detail pakages"
awgur@0 13 find "$v_pkg_detail_status" -type f -ctime +1 -print0 | xargs -0n 1 rm -frv 2>&1 | log
awgur@0 14 fi
awgur@0 15 log "Update pakages"
awgur@0 16 pkg update 2>&1 | log
awgur@0 17 # Обновление базы аудита происходит на получении общих данных по пакетам
awgur@0 18 }
awgur@0 19
awgur@0 20 pkg_make_detail () {
awgur@4 21 local vl_pkg_fullname
awgur@0 22 local vl_pkg_repo
awgur@0 23 local vl_pkg_name
awgur@0 24 local vl_pkg_ver
awgur@0 25 local vl_status_file
awgur@0 26 local vl_pkg_status
awgur@0 27
awgur@0 28 service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read svc_file; do
awgur@0 29 if ! [ -f "$svc_file" ] ; then
awgur@0 30 continue
awgur@0 31 fi
awgur@0 32
awgur@4 33 vl_pkg_fullname="$(pkg which "$svc_file" | awk '$0 ~ "was installed by package" {print $6}')"
awgur@4 34 if [ -z "$vl_pkg_fullname" ] ; then
awgur@0 35 log "$svc_file have no matched pkg"
awgur@0 36 continue
awgur@0 37 fi
awgur@0 38
awgur@4 39 vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")"
awgur@4 40 vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")"
awgur@4 41 vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")"
awgur@4 42 vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')"
awgur@0 43
awgur@0 44 case "$vl_pkg_status" in
awgur@0 45 = )
awgur@0 46 vl_pkg_status=OK
awgur@0 47 ;;
awgur@0 48
awgur@0 49 "<" )
awgur@0 50 vl_pkg_status="NEED UPDATE"
awgur@0 51 ;;
awgur@0 52
awgur@0 53 ">" )
awgur@0 54 vl_pkg_status="REPO VERSION LOWER"
awgur@0 55 ;;
awgur@0 56
awgur@0 57 "?" )
awgur@0 58 vl_pkg_status="NO PACKAGE IN REPO"
awgur@0 59 ;;
awgur@0 60
awgur@0 61 "!" )
awgur@0 62 vl_pkg_status="ERROR"
awgur@4 63 log_err -s "${vl_pkg_name}: pkg can not compare version of package"
awgur@0 64 ;;
awgur@0 65
awgur@0 66 * )
awgur@4 67 log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}"
awgur@0 68 vl_pkg_status="ERROR"
awgur@0 69 ;;
awgur@0 70
awgur@0 71 esac
awgur@0 72
awgur@0 73 vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}"
awgur@4 74 pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \
awgur@0 75 > "${vl_status_file}"
awgur@0 76
awgur@0 77 printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file"
awgur@4 78 pkg audit "$vl_pkg_fullname" \
awgur@0 79 | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \
awgur@0 80 > "${vl_status_file}.audit"
awgur@0 81
awgur@0 82 done
awgur@0 83 }
awgur@0 84
awgur@0 85 pkg_do () {
awgur@0 86 log_start "pkg_do"
awgur@0 87
awgur@0 88 pkg_init
awgur@0 89 pkg version -qUL = | awk '$2 != ">" {print $1}' > "$v_pkg_update_status"
awgur@0 90 pkg audit -qF > "${v_pkg_update_status}.audit"
awgur@0 91
awgur@0 92 pkg_make_detail
awgur@0 93
awgur@0 94 log_end
awgur@0 95 }