#!/usr/bin/env bash ################################################################ # copy this script to /etc/snmp/ and make it executable: # # chmod +x /etc/snmp/os-updates.sh # # ------------------------------------------------------------ # # edit your snmpd.conf and include: # # extend osupdate /opt/os-updates.sh # #--------------------------------------------------------------# # restart snmpd and activate the app for desired host # #--------------------------------------------------------------# # please make sure you have the path/binaries below # ################################################################ BIN_WC='/usr/bin/wc' BIN_GREP='/bin/grep' CMD_GREP='-c' CMD_WC='-l' BIN_ZYPPER='/usr/bin/zypper' CMD_ZYPPER='-q lu' BIN_YUM='/usr/bin/yum' CMD_YUM='-q check-update' BIN_DNF='/usr/bin/dnf' CMD_DNF='-q check-update' BIN_APT='/usr/bin/apt-get' CMD_APT='-qq -s upgrade' BIN_PACMAN='/usr/bin/pacman' CMD_PACMAN='-Sup' ################################################################ # Don't change anything unless you know what are you doing # ################################################################ if [ -f "$BIN_ZYPPER" ]; then # OpenSUSE # shellcheck disable=SC2086 # CMD_* are intentionally-split option strings UPDATES=$("$BIN_ZYPPER" $CMD_ZYPPER | "$BIN_WC" $CMD_WC) if [ "$UPDATES" -ge 2 ]; then echo $((UPDATES-2)); else echo "0"; fi elif [ -f "$BIN_DNF" ]; then # Fedora # shellcheck disable=SC2086 # CMD_* are intentionally-split option strings UPDATES=$("$BIN_DNF" $CMD_DNF | "$BIN_WC" $CMD_WC) if [ "$UPDATES" -ge 1 ]; then echo $((UPDATES-1)); else echo "0"; fi elif [ -f "$BIN_PACMAN" ]; then # Arch # shellcheck disable=SC2086 # CMD_* are intentionally-split option strings UPDATES=$("$BIN_PACMAN" $CMD_PACMAN | "$BIN_WC" $CMD_WC) if [ "$UPDATES" -ge 1 ]; then echo $((UPDATES-1)); else echo "0"; fi elif [ -f "$BIN_YUM" ]; then # CentOS / Redhat # shellcheck disable=SC2086 # CMD_* are intentionally-split option strings UPDATES=$("$BIN_YUM" $CMD_YUM | "$BIN_WC" $CMD_WC) if [ "$UPDATES" -ge 1 ]; then echo $((UPDATES-1)); else echo "0"; fi elif [ -f "$BIN_APT" ]; then # Debian / Devuan / Ubuntu # shellcheck disable=SC2086 # CMD_* are intentionally-split option strings UPDATES=$("$BIN_APT" $CMD_APT | "$BIN_GREP" $CMD_GREP 'Inst') if [ "$UPDATES" -ge 1 ]; then echo "$UPDATES"; else echo "0"; fi else echo "0"; fi