Wie wichtig es ist, zu überwachen, ob es für die Software, die man einsetzt, Updates gibt, wird meiner Meinung nach eher unterschätzt. Da kann man aber was machen.

Zum Beispiel mit CheckMK.

Nextcloud Version Check

Wie man CheckMK betreibt, ist ein anders Kapitel. Hier will ich zeigen, wie einfach das ist, die Software-Version einer Nextcloud-Instanz zu überwachen.

Die Prüfung läuft in zwei Schritten: Ein Skript, das in größeren Abständen die aktuelle Nextcloud-Version aus dem offiziellen Github-Repository sowie die lokal installierte Version abfragt und ein lokaler CheckMK-Check, der die Versionen vergleicht.

Beide Skripte liegen auf dem Nextcloud Server selbst. Auf dem ist auch der CheckMK Agent installiert.

Nextcloud-Versionen abfragen

Das erste Shell Skript fragt alle vier Stunden die neueste Version vom Nextcloud Github Repository und die aktuell lokal Installierte ab.

#!/bin/bash
/usr/bin/curl -SsL https://api.github.com/repos/nextcloud/server/releases/latest | jq -r .tag_name | tr -d v > /tmp/nextcloud.latest
sudo -u www-data php /var/www/nextcloud/occ status --output=json | jq -r .versionstring > /tmp/nextcloud.local

Nextcloud-Versionen vergleichen

Das zweite Skript liegt in /usr/lib/check_mk_agent/local und erzeugt die Alarme für CheckMK.

#!/bin/bash

# Lokaler CheckMK Check fuer Nextcloud Version
# djonz mar 2022

# Versions-Informationen. Werden von nc-ver-check.sh regelmaessig
# (alle x Stunden, einmal am Tag, whatever) geschrieben
NC_LATEST=`cat /tmp/nextcloud.latest`
NC_LOCAL=`cat /tmp/nextcloud.local`

# Beide Files muessen da und nicht leer sein. Sonst: Fehler
if [[ -z $NC_LOCAL || -z $NC_LATEST ]]; then
   echo "2 \"Nextcloud Version\" - Version information files missing."
   exit 1
fi

# Wenn da nicht die ueblichen Zahlen drin stehen: Fehler
if [[ ! $NC_LOCAL =~ ^[0-9]+\.[0-9]+\.[0-9]+$ || ! $NC_LATEST =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
   echo "2 \"Nextcloud Version\" - Unknown version format."
   exit 1
fi

# Warning, wenn neue Version verfuegbar
if [[ $NC_LATEST = $NC_LOCAL ]]; then
   echo "0 \"Nextcloud Version\" - Nextcloud is up to date (Version: $NC_LOCAL)"
else
   echo "1 \"Nextcloud Version\" - Nextcloud update available ($NC_LATEST)"
fi

Eigentlich ziemlich simpel, oder? Kiss-Prinzip eben.

Eleganter wäre der Weg über den CheckMK Host selber mit einem Plugin, aber das müsste man in Python schreiben und das Handling wäre ein bisschen “fummeliger”.