ncc.zabbix_fbsd_templates
15:4b52905c8a66
Go to Latest
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh
.. v1.r202501.9
+ Атомарно изменяем файлы с информацияе по сосотоянию пакетов
+ Поддержка приколов pkgng 2.0
2 # Различная статистика по пакетам
4 v_pkg_detail_status="$STATE_ROOT/pkg_detail"
5 v_pkg_detail_status_tmp="${TMP_ROOT}/pkg_detail"
7 v_pkg_update_status="$STATE_ROOT/pkg_update"
8 v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list"
11 if !
[ -d
"$v_pkg_detail_status" ]; then
12 mkdir
-p
"$v_pkg_detail_status"
15 # Удаляем старые директории, в которые давно не не пишутся данные по пакетам
16 log
"Clean old detail pakages"
17 find
"$v_pkg_detail_status" -type
f
-ctime
+1
-print0
| xargs
-0n
1 rm
-frv
2>
&1 | log
21 if !
[ -d
"${v_pkg_detail_status_tmp}" ] ; then
22 mkdir
-p
"${v_pkg_detail_status_tmp}"
28 # Обновление базы аудита происходит на получении общих данных по пакетам
30 touch
"${v_pkg_detail_status_list}"
33 pkg_get_detail_pkg_list
() {
37 cat
"${USER_MON_PKG_LIST}" | while read vl_buf
; do
38 vl_pkg_name=$(pkg
query
'%n' "${vl_buf}")
39 [ -n
"${vl_pkg_fullname}" ] && echo "${vl_pkg_name}" >>
"${v_pkg_detail_status_list}"
42 service
-e
| awk
'$1 ~ "^/usr/local" {print $1}' | while read vl_buf
; do
43 if !
[ -f
"$vl_buf" ] ; then
47 vl_pkg_name="$(pkg
which
"$vl_buf" | awk
'$0 ~ "was installed by package" {print $6}')"
49 if [ -z
"$vl_pkg_name" ] ; then
50 log
"$vl_buf have no matched pkg"
54 vl_pkg_name="$(pkg
query
'%n' "$vl_pkg_name")"
58 pkg
query
'%rn' "${vl_pkg_name}"
59 pkg
query
'%dn' "${vl_pkg_name}"
60 } >>
"${v_pkg_detail_status_list}"
71 local vl_status_tmp_file
74 pkg_get_detail_pkg_list
75 cat
"${v_pkg_detail_status_list}" | sort
| uniq
| while read vl_pkg_buf
; do
76 log
"Working with $vl_pkg_buf"
78 vl_pkg_fullname="$(pkg
query
'%n-%v' "${vl_pkg_buf}")"
79 vl_pkg_name="$(pkg
query
'%n' "$vl_pkg_fullname")"
80 vl_pkg_repo="$(pkg
query
'%R' "$vl_pkg_fullname")"
81 vl_pkg_ver="$(pkg
query
'%v' "$vl_pkg_fullname")"
82 vl_pkg_status="$(pkg
version
-r
"$vl_pkg_repo" -qUn
"$vl_pkg_name" | tail
-n
1 | awk
'{print $2}')"
84 case "$vl_pkg_status" in
90 vl_pkg_status="NEED UPDATE"
94 vl_pkg_status="REPO VERSION LOWER"
98 vl_pkg_status="NO PACKAGE IN REPO"
102 vl_pkg_status="ERROR"
103 log_err
-s
"${vl_pkg_name}: pkg can not compare version of package"
107 log_err
-s
"${vl_pkg_name}: unknown status ${vl_pkg_status}"
108 vl_pkg_status="ERROR"
113 vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}"
114 vl_status_tmp_file="${v_pkg_detail_status_tmp}/${vl_pkg_name}"
116 pkg
query
'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \
117 >
"${vl_status_tmp_file}"
119 printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >>
"$vl_status_tmp_file"
122 if [ -n
"$(pkg
audit
-q
"$vl_pkg_fullname")" ]; then
123 pkg
audit
"$vl_pkg_fullname"
125 ) >
"${vl_status_tmp_file}.audit"
127 mv
-f
"${vl_status_tmp_file}" "${vl_status_file}"
128 mv
-f
"${vl_status_tmp_file}.audit" "${vl_status_file}.audit"
133 pkg_check_up_status
() {
134 # Проверка статуса наличия обновления для пакета
138 cat
/dev/null
>
"$v_pkg_update_status"
139 pkg
version
-qUL
= | awk
'$2 != ">" {print $1}' | while read _pkg
; do
140 vl_pkg_name="$(pkg
query
'%n' "${_pkg}")"
141 vl_pkg_repo="$(pkg
query
'%R' "${_pkg}")"
142 log
"Check update for ${vl_pkg_name} in ${vl_pkg_repo}"
143 pkg
version
-Ur
"${vl_pkg_repo}" -n
"${vl_pkg_name}" \
144 | awk
'$2 != ">" && $2 != "=" {print $1}' \
145 | tee
-a
"$v_pkg_update_status" \
146 | awk
'$0 != "" {print "UPDATE STATUS:", $0}' | log
149 pkg
upgrade
-Uqn
| tee
-a
"$v_pkg_update_status" | awk
'$0 != "" {print "PKG UPGRADE:", $0}' | log
158 pkg
audit
-qF
>
"${v_pkg_update_status}.audit"