#!/bin/bash # =============================================================== # # PACKAGE MANAGER: YUM # CentOS # # included by ../check_packages2install # # --------------------------------------------------------------- # ah <axel.hahn@unibe.ch> # 2022-06-03 v1.0 ah first version # 2022-06-07 v1.1 ah add sudo for yum --bugfix check-update # rename functions # 2022-08-31 v1.2 ah status line depends on os major version # 2023-07-17 v1.3 ah fix hiding obsolete packages # 2023-08-24 v1.4 ah centos9: update getStatusLine() + getSecurityCount # 2023-08-25 v1.5 ah centos9: fix package lists # 2023-09-12 v1.6 ah almalinux9: fix package lists # 2023-10-20 v1.7 ah harden sudo command execution # =============================================================== # --------------------------------------------------------------- # command to list of updates function yum.getUpdates(){ sudo -n /usr/bin/yum -y check-update } # --------------------------------------------------------------- # extract list of packages 2 install # global string packagemanOut output of update lister command function yum.getPackageList(){ # detect number of line containing "Obsoleting Packages" (if grep '^Obsoleting Packages' <<< "$packagemanOut" >/dev/null ; then local iStart=1 local iEnd; typeset -i iEnd iEnd=$( echo "$packagemanOut" | grep -n '^Obsoleting Packages' | cut -f 1 -d ':' )-1 echo "$packagemanOut" | sed -n ${iStart},${iEnd}p else echo "$packagemanOut" fi) | grep -v "^Last metadata" | grep -i "[a-z]" } # --------------------------------------------------------------- # get custom status # global string packages2install output of yum.getPackageList() - see ../check_packages2install function yum.getStatusLine(){ local _osversion typeset -i _osversion _osversion=$( ph.getOSMajor ) case "$_osversion" in 6|7) if ! sudo /usr/bin/yum --bugfix check-update 2>&1 | grep security; then echo "No update available (older version v$_osversion). rc = $?" fi ;; 8) if ! sudo /usr/bin/yum --security check-update 2>&1 | grep "available" ; then echo "No update available. rc = $?" fi ;; 9) local _total; _total=$( echo -n "${packages2install}" | wc -l ) local _sec; _sec=$( sudo /usr/bin/yum -y --security check-update \ | grep -v "^Last" \ | grep -v "^No security updates needed" \ | grep -c "[a-z]" ) # create a status line like in former yum versions if [ -z "$_sec" ]; then echo "No packages needed for security; ${_total} packages available" else echo "$_sec package(s) needed for security, out of $_total available" fi ;; *) echo "see below ... version ${_osversion} not implemented yet..." ;; esac } # --------------------------------------------------------------- # extract count of critical packages # param string text to extract critical counter from function yum.getSecurityCount(){ local summary="$1" # example outputs: # I No packages needed for security; 223 packages available # II 2 package(s) needed for security, out of 237 available # III No security updates needed, but 61 updates available << centos 8 stream # IV [yum] No packages needed for security; 223 packages available << centos 9 # V [yum] 2 package(s) needed for security, out of 237 available << centos 9 echo "$summary" | cut -f 2 -d ' ' | sed "s#[^0-9]##g" } # ---------------------------------------------------------------