ncc.zabbix_fbsd_templates
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh
.. v1.r202501.9 + Атомарно изменяем файлы с информацияе по сосотоянию пакетов + Поддержка приколов pkgng 2.0
1.1 --- a/src/aw.fbsd-mon-helper/lib/pkg.sh Fri Dec 20 00:53:27 2024 +0300 1.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh Fri Jan 24 22:13:20 2025 +0300 1.3 @@ -2,17 +2,27 @@ 1.4 # Различная статистика по пакетам 1.5 1.6 v_pkg_detail_status="$STATE_ROOT/pkg_detail" 1.7 +v_pkg_detail_status_tmp="${TMP_ROOT}/pkg_detail" 1.8 + 1.9 v_pkg_update_status="$STATE_ROOT/pkg_update" 1.10 v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list" 1.11 1.12 pkg_init () { 1.13 if ! [ -d "$v_pkg_detail_status" ]; then 1.14 mkdir -p "$v_pkg_detail_status" 1.15 + 1.16 else 1.17 # Удаляем старые директории, в которые давно не не пишутся данные по пакетам 1.18 log "Clean old detail pakages" 1.19 find "$v_pkg_detail_status" -type f -ctime +1 -print0 | xargs -0n 1 rm -frv 2>&1 | log 1.20 + 1.21 fi 1.22 + 1.23 + if ! [ -d "${v_pkg_detail_status_tmp}" ] ; then 1.24 + mkdir -p "${v_pkg_detail_status_tmp}" 1.25 + 1.26 + fi 1.27 + 1.28 log "Update pakages" 1.29 pkg update 2>&1 | log 1.30 # Обновление базы аудита происходит на получении общих данных по пакетам 1.31 @@ -58,6 +68,7 @@ 1.32 local vl_pkg_name 1.33 local vl_pkg_ver 1.34 local vl_status_file 1.35 + local vl_status_tmp_file 1.36 local vl_pkg_status 1.37 1.38 pkg_get_detail_pkg_list 1.39 @@ -68,7 +79,7 @@ 1.40 vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")" 1.41 vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")" 1.42 vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")" 1.43 - vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')" 1.44 + vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | tail -n 1 | awk '{print $2}')" 1.45 1.46 case "$vl_pkg_status" in 1.47 = ) 1.48 @@ -100,13 +111,21 @@ 1.49 esac 1.50 1.51 vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 1.52 + vl_status_tmp_file="${v_pkg_detail_status_tmp}/${vl_pkg_name}" 1.53 + 1.54 pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \ 1.55 - > "${vl_status_file}" 1.56 + > "${vl_status_tmp_file}" 1.57 1.58 - printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 1.59 - pkg audit "$vl_pkg_fullname" \ 1.60 - | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 1.61 - > "${vl_status_file}.audit" 1.62 + printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_tmp_file" 1.63 + 1.64 + ( 1.65 + if [ -n "$(pkg audit -q "$vl_pkg_fullname")" ]; then 1.66 + pkg audit "$vl_pkg_fullname" 1.67 + fi 1.68 + ) > "${vl_status_tmp_file}.audit" 1.69 + 1.70 + mv -f "${vl_status_tmp_file}" "${vl_status_file}" 1.71 + mv -f "${vl_status_tmp_file}.audit" "${vl_status_file}.audit" 1.72 1.73 done 1.74 }