Viele von uns verwenden Nextcloud als freie und souveräne Alternative zu den grossen kommerziellen Cloud-Diensten. Das ist gut so und darf sich gerne weiter verbreiten. Damit einher geht auch eine grössere Verantwortung für selbst gehostete oder beim Provider des Vertrauens betriebene Dienste.
Wer eine Nextcloud-Installation betreibt, hatte vermutlich schon einmal Probleme mit dem Updater. Die Nextcloud informiert per E-Mail (falls man das eingerichtet hat) oder über eine Benachrichtigung auf der eigenen NC-Webseite, wenn neue Versionen für Apps oder die Nextcloud selbst zur Verfügung stehen. Dann kann man den Updater starten:
Im oben gezeigten Beispiel steht ein Update von Version 30.0.6 auf 30.0.7 bereit. Nach einem Klick auf Updater öffnen, sieht man die einzelnen Schritte, die der Updater durchläuft:
In der Regel funktioniert das reibungslos, doch manchmal bleibt der Updater hängen. Neulich hatte ein Freund an der Stelle Check for expected files ein Problem. Dies konnte gelöst werden, indem ich die fraglichen Dateien gelöscht und den Update-Prozess erneut angestossen habe. Im obigen Screenshot seht ihr ein Problem beim Herunterladen der ZIP-Datei für die neue Version. Der Prozess stoppt bei Punkt 4, dem Downloading. Die Fehlermeldung "Parsing response failed" ist wenig hilfreich. Tatsächlich handelt es sich um ein Timeout; das Herunterladen der Datei nextcloud-30.0.7.zip dauert zu lange, weshalb Nextcloud oder PHP (weiss ich nicht genau) den Vorgang abbricht.
Nun befindet sich der Updater in einem Zwischenstadium, das einem nicht weiterhilft. Startet man den Updater erneut, bekommt man diese Meldung angezeigt:
Step 4 is currently in process. Please reload this page later or remove the following file to start from scratch:
.../httpdocs/nextcloud/data/updater-oc2mc967xw5o/.step
Möchte man dieses Zwischenstadium beenden, muss die besagte Datei über den Dateimanager im Hosting-Backend gelöscht werden. Der Inhalt dieser .step-Datei sieht so aus:
{"state":"start","step":4}
Nach dem Löschen der Datei startet der Updater wieder mit Schritt 1. Leider nützt das nichts, weil er bei Schritt 4 wieder in den Timeout läuft.
Lösungsvorschläge
Am Zwischentitel könnt ihr erkennen, dass ich Zweifel daran habe, eine Lösung zu finden. Folgende Überlegungen habe ich angestellt: Die Datei nextcloud-30.0.7.zip ist knapp 230 MB gross. Der manuelle Download dauerte bei mir 30 Minuten. Das lässt auf eine Überlastung der Nextcloud-Server schliessen und wäre ein Grund für das Timeout bei Schritt 4. Im Download-Verzeichnis auf dem Server befindet sich eine halb fertige Datei:
Wenn die Million Nextcloud-Anwender:innen zeitnah eine Benachrichtigung über ein neues Update erhalten, wäre das ein Grund für die Überlastung des Downloads. Na gut, dann warte ich ein paar Tage ab und versuche es danach erneut. Dieser Gedanke ist naheliegend, aber unbefriedigend, weil man Dinge sofort erledigen möchte.
Meine zweite Idee war, den Updater zu überlisten. Deshalb habe ich die nextcloud-30.0.7.zip manuell heruntergeladen und in das Download-Verzeichnis geschoben. Ausserdem habe ich die Datei .step modifiziert, um dem Updater vorzugaukeln, dass Schritt 4 erfolgreich abgeschlossen wurde:
{"state":"start","step":5}
Leider hat das nicht funktioniert. Der Updater meldet:
Step 5 is currently in process. Please reload this page later or remove the following file to start from scratch:
.../httpdocs/nextcloud/data/updater-oc2mc967xw5o/.step
Dann habe ich die vollständige ZIP-Datei erneut hochgeladen und die Datei .step so geändert:
{"state":"end","step":4}
Damit wollte ich dem Update-Prozess vorgaukeln, dass Schritt 4 (Download) erfolgreich abgeschlossen wurde. Dann habe ich den Updater erneut gestartet. Und der meldete sich so:
Das sieht vielversprechend aus. Der Download wird als abgeschlossen angezeigt und es gibt die Möglichkeit "Continue update". Und siehe da, der Updater läuft problemlos bis zum Ende durch. Ich bin jetzt auf Version 30.0.7
Aber was ist das? Es steht bereits das nächste Update auf Version 31.0.1 an. Dafür habe ich jetzt keine Nerven mehr. Oder doch? Bei diesem Update ergibt sich dasselbe Problem und die Lösung ist auch dieselbe.
Titelbild: https://pixabay.com/vectors/cloud-reload-to-update-2044820/
Quelle: keine
Ja, die Nextcloud-Updates… Wenn man einen Root-Server hat, ist es von Vorteil, die Updates über eine Konsole zu machen. Ich gehe dazu in das updater-Unterverzeichnis und starte die Prozedur mit
sudo -u www-data php updater.phar
. Auf diesem Weg ist das Update etwas geduldiger und man läuft nicht so schnell in einen Timeout rein. Aber je nach Hostingvariante geht dieser Weg halt leider nicht immer.Ich mach das Update immer über die Konsole - dadurch können solche Timeouts verhindert werden
sudo -u www-data php --define apc.enable_cli=1 /pfad/zur/cloud/updater/updater.phar
Bislang immer ohne Probleme
Sehr schön, so ähnlich war das Problem bei mir letzte Woche auch. Nur dass ich nicht mit dem Nextcloud-internen Updater arbeite, sondern ein eigenes Tooling drumherum gebaut habe. Weil ich auch andere Apps selbst hoste und der NC-Updater es bei mir irgendwie eh noch nie getan hat.
Jedenfalls war mein Tooling auch nicht darauf vorbereitet, dass der Download des ZIPs nicht in normaler Zeit abgeschlossen werden kann.
Mein Workaround war derselbe: manuell herunterladen und an die richtige Stelle legen.
Generell scheint der Nextcloud-Server letzte Woche wohl extrem unter Strom gestanden zu haben, denn bisher habe ich in den letzten Jahren ein solches Problem nicht beobachten können. Die x-hundert MB waren immer recht schnell heruntergeladen.
Das Download Problem liest sich so, als könnte man es mit Torrenting anpacken. Das scheint mir doch ein bereits gelöstes Problem zu sein.
genau aus diesem grund sind wir von nextcloud zu cryptpad umgestiegen. das upgrade hat dort noch immer funktioniert und bei nextcloud gefühlt nie.