Da Checkmk nicht automatisch über eine neue Version informiert (oder ich hab’s bisher noch nicht gefunden),
erstelle ich mir dafür einfach einen eigenen kleinen check.
30.09.2022 - Anleitung aktualisiert, script update 24.10.2021 - Anleitung aktualisiert, script update 25.12.2020 - Anleitung aktualisiert
check_cmk
#!/bin/bash # 30.09.2022 - script updated, get latest release on tags # 24.10.2021 - script updated, https://github.com/tribe29/checkmk/releases no content # 25.12.2020 - script updated (page layout changed) # 16.10.2019 - script updated (page layout changed) # set YOUR-SITE to check SITE=blan # set desired CMK Release RELEASE=2.0 # old stable #RELEASE=2.1 # current stable # get versions version_online=$(git ls-remote --tags https://github.com/tribe29/checkmk/ -l *$RELEASE.0p??* | cut --delimiter='/' --fields=3 | sort -V | tail -1 | sed 's/v//; s/\^{}//') version_installed=$(omd version $SITE | sed s'/.cre//' | cut -d " " -f7) # check if we can get current available online release if [[ $version_online = "" ]]; then echo Checkmk CRE available release could not be determined! exit 2 fi # check if a newer version is online available if [[ $version_online = $version_installed ]]; then echo Checkmk CRE $version_installed echo "mrpe check every 12 hours" exit 0 else echo Checkmk CRE $version_installed - update to $version_online available echo "https://checkmk.de/download" "Checkmk downloads" exit 1 fi
Die Ausgabe des checks.
Den check lasse ich nur alle 12 Stunden laufen. (siehe Checkmk Intervall für bestimmte service checks anpassen)
# /etc/check_mk/mrpe.cfg check_cmk (interval=43200:appendage=1) /etc/check_mk/check_cmk
Dieses Skript hat einen kleinen Haken: Meiner Erfahrung nach dauert es einige bis viele Stunden von “neue Version wird auf github getagged” bis “Release-Datei steht zum Download bereit”, so dass ich, sobald der Check gelb wird, alle paar Stunden auf die Downloadseite schaue (bzw. per wget versuche, die neue Datei zu laden).
Man könnte den Check so erweitern, dass er bei neuem Tag zusätzlich per curl prüft, ob die neue Version auch tatsächlich schon zum Download bereit steht, z.B. mit zusätzlichem
dlpath="https://download.checkmk.com/checkmk/$version_online/check-mk-raw-${version_online}_0.focal_amd64.deb"
if [ "$(curl -o /dev/null --silent -Iw '%{http_code}' $dlpath)" -eq "404" ]; then
# new version tagged but not yet available for download
echo "0 'Checkmk Version' - Checkmk CRE $version_installed"
exit 0
fi
Da bei mir der Check nur alle 12 Stunden läuft, ist mir das noch nie aufgefallen und der Download einer neuen Version war immer verfügbar.
Die Idee ist aber gut, werde das mal testen und ggf. das Skript erweitern.
Danke und Gruß,
Michael…
Hier mal meine Lösung, basierend auf eurer Grundlage. Es ist gedacht als einfacher Lokaler check des Agenten.
Der Pfad für den Aufruf alle 24h: /usr/lib/check_mk_agent/local/86400/
Im zum Agenten zugehörigen Host Setup einfach einen neuen Suchlauf starten. Getestet mit CheckMK 2.1.0.p14 RAW Edition
#!/bin/sh
# Reason for this no-op: shellcheck disable=... before the first command disables the error for the
# entire script.
:
# Disable unused variable error (needed to keep track of version)
# shellcheck disable=SC2034
CMK_VERSION="2.1.0p14"
# This script based on https://www.bachmann-lan.de/check_mk-version-ueberwachen-check_cmk/
# get the data out
getOut () {
if [ "$1" = "0" ]; then
echo "0 \"CMK Version\" update=0;1;2;0;2; OK: Installed Checkmk CRE $3"
elif [ "$1" = "1" ]; then
echo "1 \"CMK Version\" update=1;1;2;0;2; WARN: Installed Checkmk CRE $3 - update to $2 will soon available"
elif [ "$1" = "2" ]; then
echo "2 \"CMK Version\" update=2;1;2;0;2; CRIT: Installed Checkmk CRE $3 - update to $2 available"
else
echo "3 \"CMK Version\" update=0;1;2;0;2; UNKW: Online CMK Version is UNAVAILABLE"
fi
}
# get distribution codename release
DISTRIB_CODENAME=$(cat /etc/lsb-release | grep "DISTRIB_CODENAME" | tr -d '[DISTRIB_CODENAME=]')
# set YOUR-SITE to check or get your site automatic if you only have one
#SITE=
SITE=$(omd sites | grep .cre | awk {'print $1'})
# get latest online version
VERSION_ONLINE=$(git ls-remote --tags --sort=v:refname https://github.com/tribe29/checkmk/ -l *refs* | tail -1 | grep -o 'v[0-9].[0-9].[0-9][a-z]\?[0-9]\?[0-9]\?-\?[r]\?[c]\?[0-9]\?[0-9]\?' | sed 's/v//;')
VERSION_INSTALLED=$(omd version $SITE | sed s'/.cre//' | cut -d " " -f7)
# check if we can get current available online release
if [ -z "$VERSION_ONLINE" ]; then
echo $(getOut)
exit 2
fi
# check if a newer version is online available
if [ $VERSION_ONLINE = $VERSION_INSTALLED ]; then
echo $(getOut "0" $VERSION_ONLINE $VERSION_INSTALLED)
exit 0
else
# check if new version is tagged but not yet available for download
DLPATH="https://download.checkmk.com/checkmk/$VERSION_ONLINE/check-mk-raw-${VERSION_ONLINE}_0.${DISTRIB_CODENAME}_amd64.deb"
if [ "$(curl -o /dev/null --silent -Iw '%{http_code}' $DLPATH)" -eq "404" ]; then
echo $(getOut "1" $VERSION_ONLINE $VERSION_INSTALLED)
exit 0
fi
echo $(getOut "2" $VERSION_ONLINE $VERSION_INSTALLED)
exit 0
fi
Danke für das Skript, funktioniert gut! :)
Kleine Anpassung: Die /etc/lsb-release gibt es unter Debian nicht.
#DISTRIB_CODENAME=$(cat /etc/lsb-release | grep "DISTRIB_CODENAME" | tr -d '[DISTRIB_CODENAME=]')
DISTRIB_CODENAME=$(cat /etc/os-release | grep "VERSION_CODENAME" | tr -d '[VEERSION_CODENAME=]')