Ich habe einige Nextcloud Instanzen am laufen (https://nextcloud.com/). Und es erscheinen ebenso regelmäßig irgendwelche Updates. Das ist ja auch gut so weil zum einen Sicherheitslücken geschlossen werden, zum anderen zum Teils richtig nette Funktionen mit dazu kommen. Sobald in der Testumgebung alles geklappt hat und richtig läuft kommt die Fleißarbeit: Die ganzen Nextcloud Instanzen von Hand updaten. Hier hört der Spaß allerdings ganz schnell auf – bei mir zumindest.

Es muss also ein Automat her. Bevorzugtes Mittel der Wahl könnte eine Orchestrierungslösung wie ansible oder der gleichen sein. Weil es einfach gehen muss tut es aber auch so etwas wie ein simples Shellskript:

#!/bin/bash

#
# Nextcloud Auto-Updater - Nimmt die Arbeit raus ;-)
#

# Nextcloud Installationen (cloud.sch... fehlt noch)
nc="
    cloud....de/htdocs
    mymer....de/htdocs-nc/nextcloud
    www.xn--...de/htdocs-nc
    ...
"

# Der sudo Befehl ;-)
sd="sudo -u www-data php"

for instance in $nc; do
    echo "~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~"
    figlet -fsmall $(echo $instance | cut -d/ -f1)
    cd /var/www/vhosts/$instance
    pwd
    echo "occ update:check"
    $sd occ update:check
    cd updater
    echo "updater.phar"
    $sd updater.phar -n
    cd ..
    echo "occ db:add-missing-indices"
    $sd occ db:add-missing-indices
    echo "occ app:update"
    $sd occ app:update --all -n
done
exit 0

Einfach die Variable $nc in Zeile 9-12 mit den passenden Verzeichnissen befüllen. Bei mir liegen alle vhosts immer unter /var/www/vhosts, deswegen fehlt dieser Teil in der Liste und steht beim cd Befehl in Zeile 21 mit dabei. Spart Tipparbeit und kann natürlich entsprechend angepasst werden sollte das bei Dir anders sein. Dann aber auf jeden Fall die Zeile 20 anpassen weil das mit dem cut so sicherlich nicht hinhaut. Im Zweifelsfalle einfach auf echo $instance bzw. ebenfalls anpassen falls kein figlet zur Hand und auch nicht gewünscht.

Voila, läuft. Ruckzuck fertig und ich kann mich den anderen Dingen widmen 🙂

~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~~ ~ ~ ~
          _    _                                        _   
 __ _ ___| |_ (_)_ _ _ _ ___ _ __  __ _ __ _   _ _  ___| |_ 
/ _` / -_) ' \| | '_| ' \___| '  \/ _` / _` |_| ' \/ -_)  _|
\__, \___|_||_|_|_| |_||_|  |_|_|_\__,_\__, (_)_||_\___|\__|
|___/                                  |___/                
/var/www/vhosts/gehirn-mag.net/htdocs
occ update:check
Update for files_rightclick to version 0.15.1 is available.
1 update available
updater.phar
Nextcloud Updater - version: v16.0.3-3-ga0c2b25 dirty

Current version is 16.0.4.

No update available.

Nothing to do.
occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Done.
occ app:update
files_rightclick new version available: 0.15.1
files_rightclick updated

*snip*

Im obigen Beispiel siehst Du die Ausgabe von einer Nextcloud Instanz. Es gab ein Update für ein Addon welches installiert wurde. Da es regelmäßig auftaucht und mir bisher immer nur beim gezielten Blick in die Doku bzw. ins Adminpanel von Nextcloud aufgefallen ist lasse ich vorsorglich immer die Datenbankindices prüfen.

Fazit

Wie so oft: Das Skript kann so übernommen werden, letztendlich dient es als Beispiel dafür wie man das bauen könnte. In dem produktiven Umfeld wo ich das Skript verwende hängt vorher noch eine Testplattform dran und ich habe mit den Kunden fest ausgemachte Wartungszeitpunkte zu denen ich ohne Rückfrage das Skript starten kann – nachdem die Backups durch gelaufen sind. Mit Logs die speziell für den entsprechenden Kunden geschrieben werden. Versteht sich 😉

PS: Woher ich weiß, dass es Updates gibt? Das meldet bei mir das Monitoring. Siehe hier: Nextcloud Update Check.