OwnCloud könnte mal richtig toll werden. Im Moment ändert sich jedoch alle naselang die Webseite, das Aussehen, die Funktionen.. also alles. Da auch ständig Sicherheitslücken bekannt werden, und einen Patch den nächsten jagt, sollte man hier stets auf die neuste Version achten.

Dazu gibt es im Adminbereich eine schöne Funktion, welche einem anzeigt ob man die aktuelle Version hat. Das wollten wir nun automatisch wissen, um uns nicht ständig auf der Admin-Seite einloggen zu müssen.

Die Funktion von der Seite stellt OC_Updater::check() aus lib/updater.php. Dabei wird ein String zusammen aus Version, Installationsdatum, letztes Updatedatum und Update-Kanal erstellt.

Die Daten werden dabei mit “x” separiert. Auch der Versionsstring ist durch das “x” in major, minor und nochmalminor getrennt. Aus Version “4.90.4” wird zum Beispiel “4x90x4”.

Ich habe keine Ahnung ob es da eine offizielle API Doku für gibt (Owncloud hat gerade die ganze Webseite umstruktuiert und viele Suchmaschinentreffer gehen gerade ins Leere), doch habe ich folgendes (im Moment) beobachten können:
– So lange die Anzahl der erwarteten “x”e im String ist, spuckt der Server also eine Antwort aus.
– Ist in der XML-Antwort keine Version angegeben ist alles ok.
– Ist ein Versionsstring angegeben unterscheidet sich die aktuelle Version mit der empfohlenen aus dem “Update-Kanal” (wobei auch hier “stable” als “default”-Kanal gegeben scheint)

So genügt zum Beispiel der String “4x90x4xxxx” für einen Request.

Achtung: Major-Versionssprünge werden nicht als neue Version angekündigt. 4.90.4 wird z.b. als aktuell gewertet, auch wenn bereits 5.0.0 verfügbar ist.

Und so sieht das ganze als schneller Hack für ein Nagios Script aus:

#!/bin/bash
#Reminder: Nagios return codes: 0 OK, 1 WARN, 2 CRIT, 3 UNKNOWN
#Reminder2: Full “featured” version request example: http://apps.owncloud.com/updater.php?version=5x0x0x1356382022.183×1363606253.8263xstablex

VER=`grep version /pfad/zur/owncloud/config/config.php | sed ‘s/[^0-9.]*//g’`

if [[ “${#VER}” > 0 ]]; then
#Replace all matches of . with x
VERSNIPPED=${VER//./x}
APPURL=”http://apps.owncloud.com/updater.php?version=””$VERSNIPPED””xxxx”

NEWVER=`wget -qO – “$APPURL” | grep “” | sed ‘s/[^0-9.]*//g’`

if [[ $? == 0 ]];then
if [[ ${#NEWVER} > 0 ]]; then
echo “New version: $NEWVER”
exit 2
else
echo “Version $VER is up to date”
exit 0
fi
else
echo “Could not wget version request from apps.owncloud.com”
exit 2
fi
else
echo “Could not parse local version from config.php”
exit 3
fi

..funktioniert vermutlich so nur ein paar Monate. Das Prinzip ist aber klar 🙂