ncc.zabbix_fbsd_templates

Yohn Y. 2025-01-24 Parent:f5d65a7f34b3 Child:977edf00b200

15:4b52905c8a66 Go to Latest

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

.. v1.r202501.9 + Атомарно изменяем файлы с информацияе по сосотоянию пакетов + Поддержка приколов pkgng 2.0

History
     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  }