ncc.zabbix_fbsd_templates

Yohn Y. 2024-10-14 Parent:1464321598bd Child:fa5d99e4fcc0

7:af7d644405e9 Go to Latest

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

. Нарушение правил именования переменных

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