UPDATE: cool, endlich bietet occ, das Kommandozeilen-Werkzeug von Nextcloud, einen Update-Check.
Das macht das Ganze natürlich viel einfacher. Wir brauchen nur einen Cronjob, der als Apache-User (z.B. www-data) ab und an occ ausführt.
Neu in Nextcloud (vermutlich) Version 15.x: occ update:check
Ein Cronjob könnte z.B. so ausschauen:
24 9 * * 3 www-data /usr/bin/php /var/www/nextcloud/occ update:check
Das umständliche Gebastel mit der komplizierten url erübrigt sich. Was hier im Beitrag noch folgt, ist veraltet und hat höchstens noch Relevanz, falls ein Update auf Nextcloud 15.x (noch) nicht möglich ist.
Nextcloud selbst prüft auf mögliche Updates mit curl und einer recht seltsamen URL. So wird diese in php konstruiert:
$updateURL = $updaterServer . '?version='. str_replace('.', 'x', $this->getConfigOption('version')) .'xxx'.$releaseChannel.'xx'.urlencode($this->buildTime).'x'.PHP_MAJOR_VERSION.'x'.PHP_MINOR_VERSION.'x'.PHP_RELEASE_VERSION;
Wenn man das nachbaut, kann man quasi von außen mit einem Cronjob selbst prüfen und ggf. ein Mail schicken. Erforderliche Infos zur momentanen Version sind aus der Datei "version.php" extrahierbar.
Ich löse das Ganze mit einem Bash-Skript:
#!/bin/bash
#
# Checks for nextcloud updates.
# Builds the weird url, sends mail if updates are available.
###
# Full path to version file.
VERSFILE=/var/www/nextcloud/version.php
# Your mail recipient.
REC='mail@yourdomain.tld'
###
TMPFILE=$(mktemp /tmp/nc-updatecheck.XXXXX)
URLBASE='https://updates.nextcloud.org/updater_server/?version='
PHP=$(php -v | grep -v '(c)' | cut -d ' ' -f 2 | sed -e 's/-.*//g' -e 's/\./x/g')
RCHAN=$(grep 'OC_Channel ' $VERSFILE | cut -d "'" -f 2)
VERSION=$(grep 'OC_Version =' $VERSFILE | cut -d '(' -f 2 | cut -d ')' -f 1)
CURRENT=$(echo $VERSION | sed -e 's/,/./g')
VERSIONURL=$(echo $VERSION | sed -e 's/,/x/g')
BUILD_RAW=$(grep OC_Build $VERSFILE | cut -d "'" -f 2)
BUILD_ENC=$(php -r "print urlencode(\"$BUILD_RAW\");";)
URL=${URLBASE}${VERSIONURL}xxx${RCHAN}xx${BUILD_ENC}x${PHP}
curl -s -A 'Nextcloud Updater' $URL > $TMPFILE
if [ -s $TMPFILE ]
then
NEW=$(grep 'version>' $TMPFILE | sed -e 's/version//g' -e 's/[<>/]//g')
if [ -n "$NEW" ]
then
echo "You are currently running nextcloud version $CURRENT, new version $NEW is available." |
mail -s 'Nextcloud update available' $REC
fi
fi
rm $TMPFILE
exit 0
Gibt es kein Update, ist die heruntergeladene Datei leer, gibt es eines, ist es eine XML Datei, in der u.A. die neue Version drinsteht.
Dann noch einen Cronjob einrichten, der das Skript z.B. einmal pro Woche ausführt.
Natürlich gibt es keine Garantie, wie lange dieses url Konstrukt funktioniert, aber diese Lösung ist allemal besser, als überhaupt nichts von Updates mitzukriegen. Bei Bedarf muss das Skript halt wieder angepasst werden.
Nachtrag: dem netten Mail von bcutter verdanke ich ein paar gute Anregungen für Verbesserungen.
Noch ein Tipp zum Debuggen: ruft das Skript mit "bash -x" auf, also z.B.
bash -x ./nextcloud-up-avail.sh
Dann wird Zeile für Zeile ausgegeben, was passiert. Nur für den Fall, dass etwas nicht ganz so läuft wie erwartet.