Sie befinden sich hier: start » de » Interne Dokumentation » DokuWiki-Erweiterungen (WvdS) » Lebenszyklus der Komponenten » Eine Komponente aktualisieren

Eine Komponente aktualisieren

Wie Sie eine neue Fassung einspielen, ohne Daten zu verlieren — und wie Sie auf den Stand von vorher zurückkommen, wenn die neue nicht taugt.

Es gibt keine gemeinsame Fassung der Suite. Jede Komponente ist ein eigenes Paket mit eigenem Datum in plugin.info.txt und wird für sich aktualisiert. Sie müssen nicht alle auf einmal anfassen.

Voraussetzungen

  • Ein Administratorkonto und Schreibzugriff auf das Verzeichnis der Komponente. Der Erweiterungsmanager bricht eine Aktualisierung ab, wenn lib/plugins/<kennung>/ nicht schreibbar ist.
  • Der aktuelle Stand ist bekannt. Notieren Sie das Datum, das Administration → Erweiterungsverwaltung für die Komponente anzeigt. Es kommt aus plugin.info.txt und ist die einzige Fassungsangabe, die es gibt.
  • Ein Zeitfenster ohne Schreibzugriffe. Migrationen laufen beim ersten Seitenaufruf nach der Aktualisierung. Ein zweiter Aufruf, der zeitgleich in dieselbe Datenbank schreibt, trifft sie mitten in der Arbeit.
  • Platz für die Sicherung in der Größe von data/ und conf/.
Die Erweiterungsverwaltung meldet für die Pakete dieses Hauses keine verfügbaren Aktualisierungen. Diese Meldung entsteht aus einem Abgleich mit dokuwiki.org; dort sind die Pakete nicht verzeichnet. Das Ausbleiben der Meldung ist deshalb kein Beleg dafür, dass Sie aktuell sind. Die Bezugsquelle ist das Repository der Komponente, siehe Das Paket beziehen.

Schritt 1: Die Sicherung

DokuWiki bringt keine Sicherungsfunktion mit. Sichern Sie auf Dateiebene, bei angehaltenem Webserver oder wenigstens in einem Moment ohne Schreibzugriffe:

Sichern Warum
lib/plugins/<kennung>/ (bzw. lib/tpl/<kennung>/) Der Stand, auf den Sie zurückgehen. Ohne ihn ist eine Rücknahme ein erneuter Bezug einer alten Fassung, die es womöglich nicht mehr gibt.
conf/ Einstellungen, Ein/Aus-Zustand, Zugriffsrechte und die eigenen Konfigurationsdateien einzelner Komponenten.
data/ Seiten, Medien, Metadaten und die Datenbanken unter data/dwdo/.
tar czf sicherung-vor-update.tar.gz conf data lib/plugins/wkrequest
Sichern Sie conf/ und data/ gemeinsam. Bei wkvault in der Voreinstellung keysource = salt liegt das Schlüsselmaterial unter data/meta/ und der Geheimtext unter data/dwdo/ — eine Sicherung nur eines der beiden Zweige ergibt einen Tresor, den niemand mehr öffnen kann. Umgekehrt gilt: Wer diese Sicherung besitzt, besitzt beides. Wie Sie Schlüssel und Geheimtext trennen, steht unter Sichere Datenbereinigung.

Schritt 2: Die neue Fassung einspielen

Beziehen Sie das Paket wie bei der Installation (Das Paket beziehen) und spielen Sie es über denselben Weg ein, den Sie zur Installation benutzt haben.

Eine Aktualisierung ersetzt das Verzeichnis nicht, sie legt darüber. DokuWiki kopiert die neuen Dateien in das bestehende Verzeichnis; Dateien, die es in der neuen Fassung nicht mehr gibt, bleiben liegen. Zum Aufräumen kennt DokuWiki eine Datei deleted.files im Paket — keine Komponente dieses Hauses liefert sie mit. Bei einer Umbenennung oder Aufteilung von Dateien führt das dazu, dass eine alte Datei weiterhin gefunden und geladen wird.

Der sichere Weg, und der einzige, der das ausschließt:

  1. Die Komponente deaktivieren.
  2. Das Verzeichnis lib/plugins/<kennung>/ umbenennen — nicht löschen, es ist Ihre Rücknahme.
  3. Die neue Fassung frisch in lib/plugins/<kennung>/ auspacken.
  4. Die Komponente wieder aktivieren.

Ihre Daten und Einstellungen sind davon nicht betroffen: Sie liegen unter conf/ und data/, nicht im Verzeichnis der Komponente.

Schritt 3: Die Migrationen laufen lassen

Rufen Sie eine gewöhnliche Wiki-Seite auf, danach die Oberfläche der aktualisierten Komponente. Damit sind die Migrationen erledigt — sie brauchen keinen Befehl und keine Wartungsseite.

Wie das abläuft. Speichernde Komponenten prüfen ihr Schema beim ersten Zugriff einer Anfrage auf ihre Datenbank. Eine Tabelle schema_migrations in der Datenbank selbst hält fest, welche Fassungen bereits angewandt wurden; offene Fassungen laufen in aufsteigender Reihenfolge, jede in einer eigenen Transaktion samt ihrem Vermerk. Steht nichts an, geschieht nichts — der Aufruf ist dann folgenlos.

Was dabei gesichert wird. Vor der ersten anstehenden Änderung kopiert der Migrationsläufer die Datenbankdatei nach data/dwdo/backup/<name>.sqlite.<JJJJMMTT-HHMMSS>.bak. Steht nichts an, wird auch nichts kopiert. Diese Kopie ist die einzige Rücknahme, die es für ein Schema gibt: Migrationen laufen ausschließlich vorwärts, weil sich SQLite-DDL — eine entfernte oder umbenannte Spalte — nicht allgemein durch eine Gegenanweisung zurücknehmen lässt.

Wenn eine Migration scheitert. Die betroffene Fassung wird vollständig zurückgerollt, ihr Vermerk ebenso; es bleibt weder ein halbes Schema noch ein falscher „erledigt„-Eintrag. Frühere Fassungen desselben Laufs bleiben jedoch angewandt — Fassung 002 kann scheitern, nachdem 001 bereits festgeschrieben wurde.

Welche Komponente ein Schema führt und wo dessen Datei liegt, steht in der Tabelle zu Datenbestand und Migrationen.

Schritt 4: Auf brechende Änderungen prüfen

Zwei Dinge können sich ändern, ohne dass eine Fehlermeldung darauf hinweist:

  • Konfigurationsschlüssel. Ein umbenannter oder entfallener Schlüssel steht weiterhin in conf/local.php und wird schlicht nicht mehr gelesen. Die Komponente arbeitet dann mit ihrer Voreinstellung, während die Konfiguration etwas anderes zu sagen scheint. Vergleichen Sie nach der Aktualisierung den Abschnitt der Komponente in Administration → Konfiguration mit dem, was in conf/local.php steht.
  • Dienste und Verträge. Die Plattformereignisse und Dienstverträge sind als stabil oder experimentell gekennzeichnet; ein stabiler Vertrag bricht nicht ohne vorherige Abkündigung. Den aktuellen Stand zeigt ?do=wkcore_diag mit $conf['allowdebug'] = 1.

Wo die Änderungen einer Fassung stehen. Von den Komponenten dieses Hauses führt allein wkblog eine CHANGELOG.md im Paket. Für alle anderen ist die Historie des Repositorys die Quelle. Prüfen Sie zusätzlich README.md der neuen Fassung: Der Abschnitt Requirements ist der Ort, an dem eine neu hinzugekommene harte Abhängigkeit steht.

Die Pakete dieses Hauses tragen kein Feld phpmin in plugin.info.txt — das ist der Eintrag, aus dem DokuWiki die geforderte PHP-Mindestfassung liest. Die eingebaute Prüfung greift deshalb bei ihnen nicht und wird eine zu alte PHP-Fassung nicht melden. Die Suite setzt PHP 8.2 oder neuer voraus; prüfen Sie das selbst mit php -v, bevor Sie eine Aktualisierung einspielen.

Schritt 5: Wenn es schiefgeht

Die Rücknahme in der Reihenfolge, in der sie funktioniert:

  1. Die Komponente deaktivieren.
  2. Das Verzeichnis der neuen Fassung entfernen und das gesicherte Verzeichnis der alten Fassung an dieselbe Stelle zurücklegen.
  3. Nur wenn Migrationen gelaufen sind: Die betroffene Datenbank durch die Kopie aus data/dwdo/backup/ mit dem passenden Zeitstempel ersetzen. Alles, was seit der Aktualisierung geschrieben wurde, geht dabei verloren — deshalb das Zeitfenster aus den Voraussetzungen.
  4. conf/local.php anfassen (Änderungsdatum aktualisieren), um Seiten-, CSS- und JavaScript-Zwischenspeicher zu verwerfen.
  5. Die Komponente wieder aktivieren und die Funktionsprüfung wiederholen.

Eine alte Programmfassung auf einem neueren Schema arbeiten zu lassen, ist nicht vorgesehen. Wenn Migrationen gelaufen sind, gehört Schritt 3 zur Rücknahme dazu.

Ergebnis prüfen

1. Die neue Fassung ist geladen. Administration → Erweiterungsverwaltung zeigt für die Komponente das Datum der neuen Fassung. Zeigt es das alte, hat DokuWiki das alte plugin.info.txt gelesen — die Dateien liegen am falschen Ort oder ein Bytecode-Zwischenspeicher hält die alte Fassung fest.

2. Das Schema ist auf Stand. Die Datenbank enthält für jede Fassung eine Zeile in schema_migrations. Wenn Sie das Werkzeug zur Hand haben:

sqlite3 data/dwdo/request.sqlite "SELECT version, applied_at FROM schema_migrations ORDER BY version;"

Ein Lauf, der etwas zu tun hatte, hinterlässt zusätzlich eine frische Datei in data/dwdo/backup/. Findet sich dort keine und stand auch nichts an, ist das der erwartete Fall und kein Fehler.

3. Die Komponente arbeitet. Wiederholen Sie den Nachweis aus der Tabelle zur Funktionsprüfung — denselben, mit dem Sie die Installation abgeschlossen haben. Erst dieser Nachweis beendet die Aktualisierung.

Zeigt die Oberfläche nach der Aktualisierung den alten Stand, ist fast immer ein Zwischenspeicher die Ursache und nicht die Aktualisierung. DokuWiki verwirft Seiten-, CSS- und JavaScript-Zwischenspeicher, wenn sich conf/local.php ändert — nicht, wenn sich Dateien einer Komponente ändern. Der Erweiterungsmanager fasst die Datei nach einer Installation selbst an; nach einem Austausch von Hand müssen Sie das nachholen. Siehe Fehlerdiagnose.

Nächste Schritte

de/wiki/dwe/lifecycle/update.txt · Zuletzt geändert: von 0.0.0.0