Eine Komponente entfernen
Wie Sie eine Komponente vollständig loswerden — und was danach noch da ist, obwohl DokuWiki „deinstalliert„ meldet.
Der wichtigste Satz vorweg: Eine Deinstallation löscht das Verzeichnis der Komponente und sonst nichts. Einstellungen, Datenbanken, Dateien und Seiteninhalte bleiben unangetastet liegen. Das ist so gewollt — eine versehentliche Deinstallation soll keine Daten kosten —, aber es heißt, dass die Aufräumarbeit Ihre ist.
Voraussetzungen
- Ein Administratorkonto und Schreibzugriff auf
lib/plugins/<kennung>/. - Eine Sicherung, siehe Die Sicherung. Sie ist hier wichtiger als bei einer Aktualisierung: Schritt 3 und 4 dieser Anleitung sind nicht rücknehmbar.
- Die Gewissheit, dass nichts anderes darauf aufsetzt. Prüfen Sie die Abhängigkeitstabelle in der Spalte „Wird vorausgesetzt von“. Eine Komponente zu entfernen, auf die andere hart aufsetzen, nimmt diesen ihre Arbeitsgrundlage.
depends aus plugin.info.txt. Keine Komponente dieses Hauses trägt dieses Feld, weil die Abhängigkeiten hier über die Dienstvermittlung laufen und nicht über das Manifest. Die Schranke greift also nicht; die Abhängigkeitstabelle ist Ihre einzige.
Schritt 1: Deaktivieren und beobachten
Entfernen Sie nicht sofort. Schalten Sie die Komponente zuerst ab und lassen Sie das Wiki einige Tage so laufen — siehe Eine Komponente aktivieren oder deaktivieren.
Das Abschalten ist wirkungsgleich mit dem Entfernen, aber in einem Handgriff rücknehmbar. Was in dieser Zeit an Ihnen vorbeigeht, hätte Sie nach der Entfernung mit erheblich mehr Aufwand eingeholt: eine Auszeichnung auf einer selten aufgerufenen Seite, ein Ablauf, der die Komponente einmal im Monat braucht, eine andere Komponente, die stiller degradiert als erwartet.
Schritt 2: Entfernen
Am Bildschirm
- Administration → Erweiterungsverwaltung → Installierte Erweiterungen (
?do=admin&page=extension). - Die Komponente aufklappen und Deinstallieren wählen.
Auf der Kommandozeile
php bin/plugin.php extension uninstall wkblog
Ein Template
Ein Template lässt sich nicht deinstallieren, solange es ausgewählt ist. Setzen Sie in Administration → Konfiguration die Einstellung template zuerst auf ein anderes — dokuwiki ist immer vorhanden —, dann entfernen Sie das nicht mehr benutzte.
acl, authplain, extension, config und usermanager sowie das Template dokuwiki sind gegen Entfernung geschützt. Der Erweiterungsmanager bietet die Aktion für sie nicht an.
Schritt 3: Verbleibende Daten sichten
Gehen Sie diese fünf Orte durch. Was Sie davon aufräumen, entscheiden Sie — wichtig ist, dass Sie wissen, dass es da ist.
| Ort | Was dort steht | Empfehlung |
|---|---|---|
conf/plugins.local.php | Der Ein/Aus-Eintrag, falls Sie in Schritt 1 abgeschaltet haben: $plugins['<kennung>'] = 0; | Zeile entfernen. Sie bezieht sich auf etwas, das es nicht mehr gibt, und schaltet eine spätere Neuinstallation stillschweigend ab. |
conf/local.php | Die Einstellungen als $conf['plugin']['<kennung>'][…], bei einem Template als $conf['tpl']['<kennung>'][…] | Entfernen, wenn Sie sicher sind, dass die Komponente nicht zurückkommt. Sonst stehen lassen — sie wirken bei einer Neuinstallation sofort wieder. Enthalten diese Zeilen Zugangsdaten, gehört das zu Schritt 4. |
conf/ | Eigene Konfigurationsdateien einzelner Komponenten, etwa wkidentity-policy.json oder wksqliteds.connections.json | Prüfen und entfernen. Die Aufstellung steht in der Tabelle zu Datenbestand und Migrationen. |
data/dwdo/ und data/dwdo/backup/ | Die SQLite-Datenbank der Komponente und jede Migrationssicherung davon | Die Sicherungen werden gerne übersehen. Eine gelöschte vault.sqlite neben einer verbliebenen vault.sqlite.20260823-175924.bak ist keine gelöschte Datenbank. |
data/meta/, data/<kennung>/ | Seitenmetadaten und schreibbare Inhalte — Textbausteine, Themes, Anmeldegeheimnisse | Je nach Komponente, siehe Matrix. Seitenmetadaten sind gefahrlos: DokuWiki baut sie beim nächsten Rendern neu auf. |
Der Seiteninhalt bleibt in jedem Fall. Auszeichnungen einer entfernten Komponente stehen weiter im Quelltext der Seiten und erscheinen ab dem nächsten Rendern als Rohtext. Sie finden alle betroffenen Seiten über die Volltextsuche nach dem Auszeichnungspräfix — bei wksnippet etwa nach {{wk:snippet. Das ist Redaktionsarbeit und lässt sich nicht automatisieren, ohne Inhalte zu verändern.
Schritt 4: Sichere Datenbereinigung
Dieser Schritt gilt nur für die Komponenten, die Geheimnisse führen. Für alle anderen ist Schritt 3 vollständig.
Der Grund für einen eigenen Schritt: Ein gelöschter Datensatz ist kein vernichteter Datensatz. Er kann in einer Migrationssicherung, in einer Bandsicherung oder in nicht wiederbenutzten Datenbankseiten fortbestehen. „Sicher„ heißt hier: unbrauchbar für jemanden, der später an eine Kopie kommt.
wkvault
Der Tresor verschlüsselt seine Einträge; die Stärke der Bereinigung hängt daran, wo der Hauptschlüssel liegt (Einstellung keysource).
data/dwdo/vault.sqliteentfernen.- Jede zugehörige Datei in
data/dwdo/backup/entfernen. - Das Schlüsselmaterial unbrauchbar machen — je nach Herkunft:
keysource | Wo der Schlüssel herkommt | Was zu tun ist |
|---|---|---|
salt (Voreinstellung) | Abgeleitet aus DokuWikis Cookie-Salz in data/meta/_htcookiesalt bzw. _htcookiesalt2 | Diese Dateien liegen im selben Zweig wie der Geheimtext: Wer die Sicherung von data/ hat, hat beides. Ein Löschen macht den Geheimtext dauerhaft unlesbar — und meldet zugleich alle angemeldeten Benutzer ab, weil DokuWiki dasselbe Salz für Anmeldecookies benutzt und die Datei beim nächsten Zugriff neu erzeugt. Nur bewusst tun. |
env | Eine Umgebungsvariable, benannt in keysource_ref | Die Variable aus der Konfiguration des Webservers entfernen und den Dienst neu starten. |
file | Eine Schlüsseldatei, deren absoluter Pfad in keysource_ref steht | Die Datei löschen — und daran denken, dass sie außerhalb von data/ liegt und deshalb möglicherweise in einer anderen Sicherungsroutine steckt. |
keysourceundkeysource_refausconf/local.phpentfernen.
wkidentity
data/meta/wkidentity/vollständig entfernen. Dort liegen die Geheimnisse der Authentifizierungs-Apps (<konto>.secret), die Wiederholungssperren (.totpreplay), die ausstehenden E-Mail-Codes (.emailcode) und die offenen Vorgänge als JSON-Dateien.conf/wkidentity-policy.jsonentfernen — die Regelung, welche Namensräume einen zweiten Faktor verlangen.$conf['plugin']['wkidentity']['enforce_login']ausconf/local.phpentfernen.
php bin/plugin.php wkidentity factors <konto> zeigt die Faktoren eines Kontos, php bin/plugin.php wkidentity reset-factor <konto> nimmt sie weg. Nach der Deinstallation steht dieser Weg nicht mehr zur Verfügung.
wksqliteds
conf/wksqliteds.connections.jsonentfernen. Die Datei beschreibt die benannten Verbindungen und kann Zugangsdaten zu fremden Datenbankservern enthalten.conf/wksqliteds.policy.jsonentfernen.- Die Datenbanken selbst liegen dort, wohin die Verbindungen zeigen — nicht zwingend unter
data/. Gehen Sie die Verbindungsliste durch, bevor Sie die Datei löschen.
wkmail, wkdoado, wkresource
wkmail: Der Schlüsselpasswordinconf/local.phphält entweder das Kennwort im Klartext oder einen Verweis aufwkvault. Im ersten Fall gehört die Zeile entfernt und das Kennwort beim Anbieter gewechselt — es hat in einer Konfigurationsdatei und damit in jeder Sicherung davon gestanden.wkdoado:ado_secret_rootnennt das Verzeichnis mit den Zugriffstoken. Token widerrufen, dann Verzeichnis entfernen. Ein gelöschtes Token bleibt gültig, bis es widerrufen wird.wkresource:data/dwdo/resource.sqliteenthält Verbindungsangaben — Host, Port, Pfad —, aber keine Geheimnisse; ein Eintrag verweist auf sein Geheimnis nur über eine Referenz. Die Datei ist trotzdem eine Aufstellung Ihrer Infrastruktur.
Wenn das Dateisystem mitspielen soll
Auf herkömmlichen Datenträgern hinterlässt ein gewöhnliches Löschen den Inhalt bis zum Überschreiben. Wo das eine Rolle spielt, überschreiben Sie die Datei vor dem Löschen (shred unter Linux, ein gleichwertiges Werkzeug unter Windows). Auf SSDs und in virtualisierten oder gehosteten Umgebungen ist das kein verlässlicher Nachweis der Vernichtung — dort ist die Verschlüsselung der Ablage der belastbare Weg, nicht das Überschreiben. Vergessen Sie über der aktiven Datei nicht die Sicherungen; sie sind der Ort, an dem Geheimnisse am längsten überleben.
Ergebnis prüfen
1. Die Komponente ist fort. Administration → Erweiterungsverwaltung führt sie nicht mehr auf; php bin/plugin.php extension list -f i ebenso wenig. Das Verzeichnis lib/plugins/<kennung>/ existiert nicht mehr.
2. Nichts vermisst sie. Rufen Sie die Seiten und Oberflächen auf, die sie benutzt haben. Erwartet ist: Der Menüeintrag ist weg, die Auszeichnung erscheint als Rohtext, abhängige Komponenten zeigen ihre schlichtere Oberfläche. Nicht erwartet ist eine PHP-Fehlermeldung. Tritt eine auf, hat eine andere Komponente eine harte statt einer weichen Abhängigkeit — siehe Fehlerdiagnose.
3. Der Dienst ist abgemeldet. Mit $conf['allowdebug'] = 1 zeigt ?do=wkcore_diag die angemeldeten Dienste. Der Dienst der entfernten Komponente darf dort nicht mehr stehen. Steht er noch, liegt ihr Programmcode noch irgendwo — geprüft wird der Verzeichnisname, nicht der Anzeigename.
4. Die Reste sind gesichtet. Gehen Sie die fünf Orte aus Schritt 3 ein zweites Mal durch. Bei einer Komponente mit Geheimnissen gehört dazu die Frage, ob die alten Sicherungen weiterhin aufbewahrt werden — und ob das nach Schritt 4 noch die richtige Entscheidung ist.
Nächste Schritte
- Komponentenmatrix — welche Orte für Ihre Komponente belegt sind.
- How to: Eine Komponente aktivieren oder deaktivieren — der rücknehmbare Zwischenschritt.
- Eine Komponente installieren — wenn die Komponente doch zurückkommt. Die verbliebenen Einstellungen wirken dann sofort wieder.
- Fehlerdiagnose — Symptome nach dem Entfernen.