Skip to content

Instantly share code, notes, and snippets.

@ryrun
Created December 5, 2024 08:08
Show Gist options
  • Save ryrun/f97b9d07854f3c0bca3529209ce98b83 to your computer and use it in GitHub Desktop.
Save ryrun/f97b9d07854f3c0bca3529209ce98b83 to your computer and use it in GitHub Desktop.
Add delay mk_apt to reduce update reports, based on https://github.com/ypid-bot/check_mk/blob/master/agents/plugins/mk_apt
#!/bin/bash
# Check for APT updates (Debian, Ubuntu)
# +------------------------------------------------------------------+
# | ____ _ _ __ __ _ __ |
# | / ___| |__ ___ ___| | __ | \/ | |/ / |
# | | | | '_ \ / _ \/ __| |/ / | |\/| | ' / |
# | | |___| | | | __/ (__| < | | | | . \ |
# | \____|_| |_|\___|\___|_|\_\___|_| |_|_|\_\ |
# | |
# | Copyright Mathias Kettner 2014 [email protected] |
# +------------------------------------------------------------------+
#
# This file is part of Check_MK.
# The official homepage is at http://mathias-kettner.de/check_mk.
#
# check_mk is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation in version 2. check_mk is distributed
# in the hope that it will be useful, but WITHOUT ANY WARRANTY; with-
# out even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU General Public License for more de-
# tails. You should have received a copy of the GNU General Public
# License along with GNU Make; see the file COPYING. If not, write
# to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
# Boston, MA 02110-1301 USA.
# TODO:
# Einstellungen:
# - upgrade oder dist-upgrade
# - vorher ein update machen
# Bakery:
# - Bakelet anlegen
# - Async-Zeit einstellbar machen und das Ding immer async laufen lassen
# Check programmieren:
# * Schwellwerte auf Anzahlen
# * Regexen auf Pakete, die zu CRIT/WARN führen
# - Graph malen mit zwei Kurven
# This variable can either be "upgrade" or "dist-upgrade"
UPGRADE=upgrade
DO_UPDATE=yes
STATUS_FILE="/tmp/apt_update_status.txt"
WAIT_DAYS=7
function check_apt_update {
if [ "$DO_UPDATE" = yes ] ; then
# NOTE: Even with -qq, apt-get update can output several lines to
# stderr, e.g.:
#
# W: There is no public key available for the following key IDs:
# 1397BC53640DB551
apt-get update -qq 2> /dev/null
fi
apt-get -o 'Debug::NoLocking=true' -s -qq "$UPGRADE" | grep -v '^Conf'
}
function days_since_update {
if [ -f "$STATUS_FILE" ]; then
last_update=$(cat "$STATUS_FILE")
now=$(date +%s)
elapsed_days=$(( (now - last_update) / 86400 ))
echo "$elapsed_days"
else
echo "-1"
fi
}
if type apt-get > /dev/null ; then
echo '<<<apt:sep(0)>>>'
out=$(check_apt_update)
if [ -z "$out" ]; then
echo "No updates pending for installation"
[ -f "$STATUS_FILE" ] && rm "$STATUS_FILE"
else
elapsed_days=$(days_since_update)
if [ "$elapsed_days" -lt 0 ]; then
echo "$(date +%s)" > "$STATUS_FILE"
echo "No updates pending for installation"
elif [ "$elapsed_days" -ge "$WAIT_DAYS" ]; then
# Wartezeit ist abgelaufen
echo "$out"
else
echo "No updates pending for installation"
fi
fi
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment