ncc.zabbix_fbsd_templates
ncc.zabbix_fbsd_templates/src/aw.fbsd-mon-helper/lib/pkg.sh
+ Мониторим не только сами активные сетевые сервисы, но и их зависимости, #1 + Версия, для отслеживания состояния набора скиптов через zabbix, #3 + Возможность мониторинга дополнительных пакетов, задаётся в конфиге, #2 + Не позволяем запиститься с отсутствующей директорией состояний, #4
1.1 --- a/src/aw.fbsd-mon-helper/lib/pkg.sh Tue Oct 15 22:57:53 2024 +0300 1.2 +++ b/src/aw.fbsd-mon-helper/lib/pkg.sh Thu Oct 17 22:38:18 2024 +0300 1.3 @@ -3,6 +3,7 @@ 1.4 1.5 v_pkg_detail_status="$STATE_ROOT/pkg_detail" 1.6 v_pkg_update_status="$STATE_ROOT/pkg_update" 1.7 +v_pkg_detail_status_list="${TMP_ROOT}/pkg_detail_status_list" 1.8 1.9 pkg_init () { 1.10 if ! [ -d "$v_pkg_detail_status" ]; then 1.11 @@ -15,6 +16,37 @@ 1.12 log "Update pakages" 1.13 pkg update 2>&1 | log 1.14 # Обновление базы аудита происходит на получении общих данных по пакетам 1.15 + 1.16 + touch "${v_pkg_detail_status_list}" 1.17 +} 1.18 + 1.19 +pkg_get_detail_pkg_list () { 1.20 + local vl_pkg_fullname 1.21 + local vl_buf 1.22 + 1.23 + cat "${USER_MON_PKG_LIST}" | while read vl_buf; do 1.24 + vl_pkg_fullname=$(pkg query '%n-%v' "${vl_buf}") 1.25 + [ -n "${vl_pkg_fullname}" ] && echo "${vl_pkg_fullname}" >> "${v_pkg_detail_status_list}" 1.26 + done 1.27 + 1.28 + service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read vl_buf; do 1.29 + if ! [ -f "$vl_buf" ] ; then 1.30 + continue 1.31 + fi 1.32 + 1.33 + vl_pkg_fullname="$(pkg which "$vl_buf" | awk '$0 ~ "was installed by package" {print $6}')" 1.34 + 1.35 + if [ -z "$vl_pkg_fullname" ] ; then 1.36 + log "$vl_buf have no matched pkg" 1.37 + continue 1.38 + fi 1.39 + 1.40 + { 1.41 + echo "${vl_pkg_fullname}" 1.42 + pkg query '%rn' "${vl_pkg_fullname}" 1.43 + pkg query '%dn' "${vl_pkg_fullname}" 1.44 + } >> "${v_pkg_detail_status_list}" 1.45 + done 1.46 } 1.47 1.48 pkg_make_detail () { 1.49 @@ -25,61 +57,54 @@ 1.50 local vl_status_file 1.51 local vl_pkg_status 1.52 1.53 - service -e | awk '$1 ~ "^/usr/local" {print $1}' | while read svc_file; do 1.54 - if ! [ -f "$svc_file" ] ; then 1.55 - continue 1.56 - fi 1.57 + pkg_get_detail_pkg_list 1.58 + cat "${v_pkg_detail_status_list}" | sort | uniq | while read vl_pkg_fullname; do 1.59 + log "Working with $vl_pkg_fullname" 1.60 1.61 - vl_pkg_fullname="$(pkg which "$svc_file" | awk '$0 ~ "was installed by package" {print $6}')" 1.62 - if [ -z "$vl_pkg_fullname" ] ; then 1.63 - log "$svc_file have no matched pkg" 1.64 - continue 1.65 - fi 1.66 + vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")" 1.67 + vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")" 1.68 + vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")" 1.69 + vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')" 1.70 1.71 - vl_pkg_name="$(pkg query '%n' "$vl_pkg_fullname")" 1.72 - vl_pkg_repo="$(pkg query '%R' "$vl_pkg_fullname")" 1.73 - vl_pkg_ver="$(pkg query '%v' "$vl_pkg_fullname")" 1.74 - vl_pkg_status="$(pkg version -r "$vl_pkg_repo" -qUn "$vl_pkg_name" | awk '{print $2}')" 1.75 + case "$vl_pkg_status" in 1.76 + = ) 1.77 + vl_pkg_status=OK 1.78 + ;; 1.79 1.80 - case "$vl_pkg_status" in 1.81 - = ) 1.82 - vl_pkg_status=OK 1.83 - ;; 1.84 + "<" ) 1.85 + vl_pkg_status="NEED UPDATE" 1.86 + ;; 1.87 1.88 - "<" ) 1.89 - vl_pkg_status="NEED UPDATE" 1.90 - ;; 1.91 + ">" ) 1.92 + vl_pkg_status="REPO VERSION LOWER" 1.93 + ;; 1.94 1.95 - ">" ) 1.96 - vl_pkg_status="REPO VERSION LOWER" 1.97 - ;; 1.98 + "?" ) 1.99 + vl_pkg_status="NO PACKAGE IN REPO" 1.100 + ;; 1.101 1.102 - "?" ) 1.103 - vl_pkg_status="NO PACKAGE IN REPO" 1.104 - ;; 1.105 - 1.106 - "!" ) 1.107 - vl_pkg_status="ERROR" 1.108 - log_err -s "${vl_pkg_name}: pkg can not compare version of package" 1.109 - ;; 1.110 + "!" ) 1.111 + vl_pkg_status="ERROR" 1.112 + log_err -s "${vl_pkg_name}: pkg can not compare version of package" 1.113 + ;; 1.114 1.115 - * ) 1.116 - log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}" 1.117 - vl_pkg_status="ERROR" 1.118 - ;; 1.119 + * ) 1.120 + log_err -s "${vl_pkg_name}: unknown status ${vl_pkg_status}" 1.121 + vl_pkg_status="ERROR" 1.122 + ;; 1.123 1.124 - esac 1.125 + esac 1.126 1.127 - vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 1.128 - pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \ 1.129 - > "${vl_status_file}" 1.130 + vl_status_file="${v_pkg_detail_status}/${vl_pkg_name}" 1.131 + pkg query 'installed=%t\nmainteiner=%m\nsize=%sb\nlocked=%k' "$vl_pkg_fullname" \ 1.132 + > "${vl_status_file}" 1.133 1.134 - printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 1.135 - pkg audit "$vl_pkg_fullname" \ 1.136 - | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 1.137 - > "${vl_status_file}.audit" 1.138 + printf 'ver=%s\nrepo=%s\nstatus=%s\n' "${vl_pkg_ver}" "${vl_pkg_repo}" "${vl_pkg_status}" >> "$vl_status_file" 1.139 + pkg audit "$vl_pkg_fullname" \ 1.140 + | awk '!($0 ~ "[0-9]* problem\\(s\\) in [0-9]* installed package\\(s\\) found") {print $0}' \ 1.141 + > "${vl_status_file}.audit" 1.142 1.143 - done 1.144 + done 1.145 } 1.146 1.147 pkg_check_up_status () {