From bd9befb31e532a9b5b3e065ef819d9ff35f81c9a Mon Sep 17 00:00:00 2001 From: "Hahn Axel (hahn)" <axel.hahn@iml.unibe.ch> Date: Thu, 16 Dec 2021 16:04:03 +0100 Subject: [PATCH] task-4888 show filtered overview of packages --- check_packages2install | 127 +++++++++++++++--- check_packages2install-data/01_OS_base.txt | 5 + check_packages2install-data/02_System.txt | 4 + .../10_Programming_languages.txt | 6 + .../10_Webservices.txt | 4 + check_packages2install-data/20_Database.txt | 6 + check_packages2install-data/50_Custom.txt | 5 + 7 files changed, 142 insertions(+), 15 deletions(-) create mode 100644 check_packages2install-data/01_OS_base.txt create mode 100644 check_packages2install-data/02_System.txt create mode 100644 check_packages2install-data/10_Programming_languages.txt create mode 100644 check_packages2install-data/10_Webservices.txt create mode 100644 check_packages2install-data/20_Database.txt create mode 100644 check_packages2install-data/50_Custom.txt diff --git a/check_packages2install b/check_packages2install index 0fafcbd..505bf04 100755 --- a/check_packages2install +++ b/check_packages2install @@ -17,6 +17,7 @@ # 2020-03-11 v1.4 <axel.hahn@iml.unibe.ch> add -c -w limits; added perfdata (yum) # 2021-05-11 v1.4 <axel.hahn@iml.unibe.ch> added centos8 support # 2021-08-20 v1.5 <martin.gasser@iml.unibe.ch> bug fixing - missing sudo in yum command +# 2021-12-16 v1.6 <axel.hahn@iml.unibe.ch> show filtered overview # ====================================================================== @@ -25,6 +26,8 @@ typeset -i iCount=0 tmpfile=/tmp/packages2install.log cronfile=/etc/cron.d/system-updater +MYhost="localhost" + # ---------------------------------------------------------------------- # functions @@ -44,7 +47,62 @@ function showAutoupdate(){ echo Autoupdate OFF fi } +# execute a local or a remote command +function _exec(){ + if [ ${MYhost} = "localhost" ]; then + eval "$1" + else + ${MYsshprefix}${MYhost} "$1" + fi +} + + +function detectPkgManager(){ + local _list="apt yum pamac" + local out=$( _exec "which $_list 2>/dev/null" ) + for mypkg in $_list + do + echo "$out" | grep "/$mypkg" > /dev/null && echo $mypkg + done +} + +# Debian like Linux +# - Debian 11 +function pkgApt(){ + + local sum=$( _exec "sudo apt-get -u upgrade --assume-no" ) + + # detect number of line containing "The following packages will be upgraded:" + typeset -i local iStart=$( echo "$sum" | grep -n '^The following packages will be upgraded:' | cut -f 1 -d ':' ) + + if [ $iStart -eq 0 ]; then + echo "Nothing to install" + else + # show packages = text starting with 2 spaces below start line + # packages are delimited with space -> replace with new line + echo "$sum" | sed -n $iStart,\$p | grep "^\ \ " | sed "s#^\ \ ##g" | tr " " "\n" + fi +} +# Arch Linux, Manjaro +function pkgPamac(){ + _exec "pamac checkupdates | grep -- '->'" +} +# RedHat like Linux +# - Centos 8 +function pkgYum(){ + + local sum=$( _exec "sudo dnf check-update" ) + + local iStart=3 + # detect number of line containing "Obsoleting Packages" + typeset -i iEnd=$( echo "$sum" | grep -n '^Obsoleting Packages' | cut -f 1 -d ':' )-1 + local sEnd=$iEnd + test "$iEnd" = "-1" && sEnd='$' + + echo "$sum" | sed -n ${iStart},${sEnd}p + # echo "show lines ${iStart} -> ${sEnd}" +} # check updates with apt and exit script function checkApt(){ # bug #2818 @@ -116,31 +174,70 @@ function checkYum(){ # main # ---------------------------------------------------------------------- + # set default / override from command line params typeset -i iWarnLimit=` ph.getValueWithParam 1 w "$@"` typeset -i iCriticalLimit=` ph.getValueWithParam 200 c "$@"` -typeset -i bFound=0 - # ----- try package manager apt -if [ `which apt-get 2>/dev/null` ]; then - bFound=1 - checkApt -fi - -# ----- try package manager yum -if [ `which yum 2>/dev/null` ]; then - bFound=1 - checkYum -fi +pgkman=$( detectPkgManager ) +case $pgkman in + "apt") + pkgstatus=$( checkApt ) + pkgsum=$( pkgApt ) + ;; + "pamac") + pkgstatus="" + pkgsum=$( pkgPamac ) + ;; + "yum") + pkgstatus=$( checkYum ) + pkgsum=$( pkgYum ) + ;; + *) + ph.abort "UNKNOWN: package manager [$pgkman] was not detected or is not supported yet." + ;; +esac + +echo "$pkgstatus" + +# filtered package view +if [ ! -z "$pkgsum" ]; then + typeset -i iTotal=$( echo "$pkgsum" | wc -l ) + typeset -i iFound=0 + + # show filtered view + for filterfile in $( ls -1 $0-data/*txt | sort ) + do + filtername=$( echo $filterfile | rev | cut -f 1 -d "/" | rev | sed "s#.txt\$##g" ) + filterdata=$( cat ${filterfile} | grep "^[a-zA-Z]" ) + + out=$( echo "$pkgsum" | _filterPkg "${filterdata}" ) + typeset -i iCount=$( echo "$out" | grep "." | wc -l ) + + test $iCount -ne 0 && ( + echo --- $( echo "$filtername" | sed "s#MYfilter##g" ): $iCount + echo "$out" | nl; echo + ) + iFound=$iFound+$iCount + + done + + # show count of non matching packages + typeset -i iOther=$iTotal-$iFound + if [ $iFound -eq 0 ]; then + echo "No package matched a group filter." + else + echo "Other packages: $iOther" + fi + # total packages + echo Total packages to update [$pgkman]: $iTotal + echo -if [ $bFound -eq 0 ]; then - ph.abort "UNKNOWN: package manager is not supported yet. I only know apt and yum so far." fi showAutoupdate ph.exit - # ---------------------------------------------------------------------- diff --git a/check_packages2install-data/01_OS_base.txt b/check_packages2install-data/01_OS_base.txt new file mode 100644 index 0000000..3b7ef8e --- /dev/null +++ b/check_packages2install-data/01_OS_base.txt @@ -0,0 +1,5 @@ +basesystem +centos +kernel +linux +ubuntu \ No newline at end of file diff --git a/check_packages2install-data/02_System.txt b/check_packages2install-data/02_System.txt new file mode 100644 index 0000000..a09e0de --- /dev/null +++ b/check_packages2install-data/02_System.txt @@ -0,0 +1,4 @@ +openssh +openssl +samba +sssd \ No newline at end of file diff --git a/check_packages2install-data/10_Programming_languages.txt b/check_packages2install-data/10_Programming_languages.txt new file mode 100644 index 0000000..3a08187 --- /dev/null +++ b/check_packages2install-data/10_Programming_languages.txt @@ -0,0 +1,6 @@ +java +python +php +ruby +node +r- \ No newline at end of file diff --git a/check_packages2install-data/10_Webservices.txt b/check_packages2install-data/10_Webservices.txt new file mode 100644 index 0000000..e79fc00 --- /dev/null +++ b/check_packages2install-data/10_Webservices.txt @@ -0,0 +1,4 @@ +apache2 +httpd +haproxy +tomcat \ No newline at end of file diff --git a/check_packages2install-data/20_Database.txt b/check_packages2install-data/20_Database.txt new file mode 100644 index 0000000..c5fc4f6 --- /dev/null +++ b/check_packages2install-data/20_Database.txt @@ -0,0 +1,6 @@ +couchdb +mariadb +mysql +openldap +postgresql +sqlite \ No newline at end of file diff --git a/check_packages2install-data/50_Custom.txt b/check_packages2install-data/50_Custom.txt new file mode 100644 index 0000000..6e32608 --- /dev/null +++ b/check_packages2install-data/50_Custom.txt @@ -0,0 +1,5 @@ +git +httrack +icinga +opencpu +shibboleth \ No newline at end of file -- GitLab