ncc.zabbix_fbsd_templates

Yohn Y. 2024-12-20 Parent:f5d65a7f34b3 Child:4b52905c8a66

14:6f7c75523337 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@10 6 v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list"
awgur@0 7
awgur@0 8 pkg_init () {
awgur@0 9 if ! [ -d "$v_pkg_detail_status" ]; then
awgur@0 10 mkdir -p "$v_pkg_detail_status"
awgur@0 11 else
awgur@0 12 # Удаляем старые директории, в которые давно не не пишутся данные по пакетам
awgur@0 13 log "Clean old detail pakages"
awgur@0 14 find "$v_pkg_detail_status" -type f -ctime +1 -print0 | xargs -0n 1 rm -frv 2>&1 | log
awgur@0 15 fi
awgur@0 16 log "Update pakages"
awgur@0 17 pkg update 2>&1 | log
awgur@0 18 # Обновление базы аудита происходит на получении общих данных по пакетам
awgur@10 19
awgur@10 20 touch "${v_pkg_detail_status_list}"
awgur@10 21 }
awgur@10 22
awgur@10 23 pkg_get_detail_pkg_list () {
awgur@11 24 local vl_pkg_name
awgur@10 25 local vl_buf
awgur@10 26
awgur@10 27 cat "${USER_MON_PKG_LIST}" | while read vl_buf; do
awgur@11 28 vl_pkg_name=$(pkg query '%n' "${vl_buf}")
awgur@11 29 [ -n "${vl_pkg_fullname}" ] && echo "${vl_pkg_name}" >> "${v_pkg_detail_status_list}"
awgur@10 30 done
awgur@10 31
awgur@10 32 service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read vl_buf; do
awgur@10 33 if ! [ -f "$vl_buf" ] ; then
awgur@10 34 continue
awgur@10 35 fi
awgur@10 36
awgur@11 37 vl_pkg_name="$(pkg which "$vl_buf" | awk '$0 ~ "was installed by package" {print $6}')"
awgur@10 38
awgur@11 39 if [ -z "$vl_pkg_name" ] ; then
awgur@10 40 log "$vl_buf have no matched pkg"
awgur@10 41 continue
awgur@10 42 fi
awgur@10 43
awgur@11 44 vl_pkg_name="$(pkg query '%n' "$vl_pkg_name")"
awgur@11 45
awgur@10 46 {
awgur@11 47 echo "${vl_pkg_name}"
awgur@11 48 pkg query '%rn' "${vl_pkg_name}"
awgur@11 49 pkg query '%dn' "${vl_pkg_name}"
awgur@10 50 } >> "${v_pkg_detail_status_list}"
awgur@10 51 done
awgur@0 52 }
awgur@0 53
awgur@0 54 pkg_make_detail () {
awgur@11 55 local vl_pkg_buf
awgur@4 56 local vl_pkg_fullname
awgur@0 57 local vl_pkg_repo
awgur@0 58 local vl_pkg_name
awgur@0 59 local vl_pkg_ver
awgur@0 60 local vl_status_file
awgur@0 61 local vl_pkg_status
awgur@0 62
awgur@10 63 pkg_get_detail_pkg_list
awgur@11 64 cat "${v_pkg_detail_status_list}" | sort | uniq | while read vl_pkg_buf; do
awgur@11 65 log "Working with $vl_pkg_buf"
awgur@0 66
awgur@11 67 vl_pkg_fullname="$(pkg query '%n-%v' "${vl_pkg_buf}")"
awgur@10 68 vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")"
awgur@10 69 vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")"
awgur@10 70 vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")"
awgur@10 71 vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')"
awgur@0 72
awgur@10 73 case "$vl_pkg_status" in
awgur@10 74 = )
awgur@10 75 vl_pkg_status=OK
awgur@10 76 ;;
awgur@0 77
awgur@10 78 "<" )
awgur@10 79 vl_pkg_status="NEED UPDATE"
awgur@10 80 ;;
awgur@0 81
awgur@10 82 ">" )
awgur@10 83 vl_pkg_status="REPO VERSION LOWER"
awgur@10 84 ;;
awgur@0 85
awgur@10 86 "?" )
awgur@10 87 vl_pkg_status="NO PACKAGE IN REPO"
awgur@10 88 ;;
awgur@0 89
awgur@10 90 "!" )
awgur@10 91 vl_pkg_status="ERROR"
awgur@10 92 log_err -s "${vl_pkg_name}: pkg can not compare version of package"
awgur@10 93 ;;
awgur@0 94
awgur@10 95 * )
awgur@10 96 log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}"
awgur@10 97 vl_pkg_status="ERROR"
awgur@10 98 ;;
awgur@0 99
awgur@10 100 esac
awgur@0 101
awgur@10 102 vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}"
awgur@10 103 pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \
awgur@10 104 > "${vl_status_file}"
awgur@0 105
awgur@10 106 printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file"
awgur@10 107 pkg audit "$vl_pkg_fullname" \
awgur@10 108 | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \
awgur@10 109 > "${vl_status_file}.audit"
awgur@0 110
awgur@10 111 done
awgur@0 112 }
awgur@0 113
awgur@6 114 pkg_check_up_status () {
awgur@6 115 # Проверка статуса наличия обновления для пакета
awgur@7 116 local vl_pkg_name
awgur@7 117 local vl_pkg_repo
awgur@6 118
awgur@6 119 cat /dev/null > "$v_pkg_update_status"
awgur@6 120 pkg version -qUL = | awk '$2 != ">" {print $1}' | while read _pkg; do
awgur@7 121 vl_pkg_name="$(pkg query '%n' "${_pkg}")"
awgur@7 122 vl_pkg_repo="$(pkg query '%R' "${_pkg}")"
awgur@8 123 log "Check update for ${vl_pkg_name} in ${vl_pkg_repo}"
awgur@7 124 pkg version -Ur "${vl_pkg_repo}" -n "${vl_pkg_name}" \
awgur@6 125 | awk '$2 != ">" && $2 != "=" {print $1}' \
awgur@9 126 | tee -a "$v_pkg_update_status" \
awgur@9 127 | awk '$0 != "" {print "UPDATE STATUS:", $0}' | log
awgur@6 128 done
awgur@8 129
awgur@8 130 pkg upgrade -Uqn | tee -a "$v_pkg_update_status" | awk '$0 != "" {print "PKG UPGRADE:", $0}' | log
awgur@6 131 }
awgur@6 132
awgur@0 133 pkg_do () {
awgur@0 134 log_start "pkg_do"
awgur@0 135
awgur@0 136 pkg_init
awgur@6 137
awgur@6 138 pkg_check_up_status
awgur@0 139 pkg audit -qF > "${v_pkg_update_status}.audit"
awgur@0 140
awgur@0 141 pkg_make_detail
awgur@0 142
awgur@0 143 log_end
awgur@0 144 }