Paketbau
wkbundle ist die Komponente hinter dem Paket-Baukasten. Sie beantwortet eine Frage, die dieses Haus bisher in einer Tabelle beantwortet hat, die jemand von Hand lesen musste: Was muss ich installieren, damit das, was ich benutzen will, läuft?
Der Grundsatz ist einfacher als die Maschinerie: eine technische Quelle der Wahrheit. Jede Komponente beschreibt sich selbst in einer wkcomponent.json neben ihrem Code. Aus derselben Datei entstehen die Auflösung, die Tabellen in der Komponentenmatrix, das README im Archiv und der Bauauftrag. Es gibt keine zweite Stelle, an der dieselbe Angabe noch einmal gepflegt wird — und damit keine zweite Stelle, die veralten kann.
Erste Schritte
Paket-Baukasten — auswählen, auflösen lassen, herunterladen. Das ist die Seite für alle, die ein Paket wollen; diese hier ist die Seite für alle, die wissen wollen, was dabei geschieht.
Die Installation des Archivs beschreibt Eine Komponente installieren, Weg C.
Häufige Aufgaben
| Aufgabe | Für wen | Wo Sie das tun |
|---|---|---|
| Ein Paket zusammenstellen und herunterladen | alle | Paket-Baukasten, auch ?do=wkbundle |
| Nachschlagen, was eine einzelne Komponente zieht | alle | Komponentenmatrix |
| Laufende und abgelaufene Pakete ansehen, Bauanlage prüfen | Administration | Administration → Pakete (Bundle) |
| Prüfen, ob ein Manifest noch beschreibt, was daneben liegt | Betrieb | php bin/plugin.php wkbundle verify |
| Eine Fassung als stabil festschreiben | Freigabe | php bin/plugin.php wkbundle release <komponente> <revision> |
| Aufräumen anstoßen | Betrieb | php bin/plugin.php wkbundle cleanup |
Wesentliche Funktionen
- Vollständige transitive Auflösung. Nicht nur die Abhängigkeiten der gewählten Komponenten, sondern auch deren Abhängigkeiten, bis nichts Neues mehr dazukommt. Ringschlüsse werden erkannt und benannt, statt in eine Endlosschleife zu laufen.
- Jede ergänzte Komponente nennt ihren Grund — angefragt, zwingend erforderlich oder für eine gewählte Funktion. Der Grund gehört dem Weg, nicht der einzelnen Kante: Was auf einem Weg zwingend gebraucht wird, bleibt zwingend, auch wenn ein zweiter Weg es nur für eine Funktion zieht.
- Feste Installationsreihenfolge. Topologisch sortiert, bei Gleichrang alphabetisch — dieselbe Auswahl ergibt dieselbe Reihenfolge, heute und in einem Monat.
- Der Server prüft, der Browser wählt nur aus. Aus dem Browser kommen Komponenten, Funktionen und Kanal. Kein Repository, keine Revision, kein Pfad. Alles Übrige leitet der Server aus dem Katalog ab.
- Gleiche Anfragen ergeben ein Paket, nicht zwei Bauten. Der Bündelschlüssel ist der Primärschlüssel der Zeile; wer als Zweiter kommt, hängt sich an den laufenden Bau, statt ihn ein zweites Mal anzustoßen.
- Pakete sind flüchtig und räumen sich selbst weg. Fünfzehn Minuten Gültigkeit, alle fünf Minuten ein Durchlauf; gelöscht wird anhand der Zeilen in der Datenbank und ausschließlich innerhalb des dafür vorgesehenen Bereichs.
Kernbegriffe
Der Bündelschlüssel ist keine Zugangsberechtigung. Er ist die SHA-256-Summe über die Anfrage einschließlich der aufgelösten Revisionen und dient dem Wiedererkennen. Herunterladen darf man mit einer eigens ausgestellten Freigabe, deren Kennung und Token undurchsichtig sind und deren Token nur als Hashwert gespeichert wird. Wer den Schlüssel kennt, hat damit nichts in der Hand.
Ein Paket ist eine Momentaufnahme. Es enthält die Fassungen, die zum Zeitpunkt der Anfrage festgeschrieben waren. Deshalb läuft der Link ab: Ein Archiv, das wochenlang irgendwo liegt, wird irgendwann installiert und ist dann etwas anderes, als die Seite daneben beschreibt.
Stabil heißt festgeschrieben, nicht neu. Eine Komponente ohne festgeschriebene Fassung wird auf diesem Kanal abgelehnt und namentlich genannt — statt stillschweigend den aktuellen Stand einzupacken und ihn stabil zu nennen.
Optionale Komponenten werden nie eingepackt. Sie erscheinen als Empfehlung mit der Angabe, was sie bringen. Eine Empfehlung, die sich selbst annimmt, ist keine.
Was es ausdrücklich nicht ist
Keine Paketverwaltung. wkbundle installiert nichts, aktualisiert nichts, entfernt nichts und weiß nicht, was auf der Zielinstanz liegt. Es stellt ein Archiv her und beschreibt, was damit zu tun ist; das Entpacken bleibt ein bewusster Schritt eines Menschen an einem Ort, den nur dieser Mensch kennt.
Auch kein Ersatz für die Freigabe. Dass eine Revision festgeschrieben ist, sagt, welche Fassung ausgeliefert wird — nicht, dass jemand sie geprüft hat.
Administration
Administration → Pakete (Bundle). Die Seite nennt die aktive Bauanlage, und wenn diese nicht benutzbar ist, den Grund dafür in demselben Satz, den auch die Ablehnung auf der Bedienseite zeigt.
Die Einstellungen stehen im Konfigurationsmanager, Abschnitt wkbundle:
| Einstellung | Vorgabe | Wirkung |
|---|---|---|
default_channel | stable | Der Kanal ohne ausdrückliche Wahl. |
anonymous_requests | 1 | Ob ohne Anmeldung ein Bau angestoßen werden darf. Katalog und Auflösung sind unabhängig davon öffentlich — sie sind Dokumentation. |
backend | auto | local packt, was auf diesem Server liegt; ado baut über eine Pipeline; auto nimmt ado, sobald es vollständig eingerichtet ist. Das Manifest im Archiv nennt immer, welche Anlage tatsächlich gelaufen ist. |
download_ttl | 900 | Gültigkeit einer Freigabe in Sekunden. Muss unter cleanup_settled bleiben, sonst zeigt ein gültiger Link auf eine bereits entfernte Datei. |
rate_max / rate_window | 12 / 3600 | Anfragen je Aufrufer und Zeitfenster. 0 hebt die Grenze auf. |
ado_host, ado_org, ado_project, ado_pipeline | leer | Die Azure-DevOps-Bauanlage. ado_host ist ein Host, kein Verweis: ohne Schema, ohne Pfad. |
ado_pat_ref | leer | Verweis auf das Zugriffstoken — vault:<id> oder file:<name>. Ein Wert an dieser Stelle löst sich absichtlich zu nichts auf. |
ado_ca_bundle, ado_allow_private | leer / 0 | Für eine hauseigene Zertifizierungsstelle und für einen Azure DevOps Server im Haus. Die TLS-Prüfung bleibt in jedem Fall an. |
cleanup_settled | 900 | Wie lange ein fertiges Paket liegen bleibt. |
cleanup_stale | 3600 | Ab wann ein Bau ohne Rückmeldung als abgebrochen gilt. |
Das Aufräumen hängt am Indexer und damit an Seitenaufrufen. Auf einem stillen Wiki braucht es eine echte Zeitsteuerung; pipelines/register-cleanup-task.ps1 im Paket richtet sie unter Windows ein.
Grenzen und offene Punkte
Diese vier stehen hier, weil sie beim Lesen der Oberfläche nicht sichtbar sind:
- Kein Repositorium trägt eine Marke (Tag).
release.stablezeigt deshalb auf einen Commit. Der Kanal Stabil liefert damit „was an einem Tag grün war und ausgerollt ist„, nicht „was freigegeben wurde“. Siehe Regelwerk-Status, Zeile Versionierung. - Die Manifeste liegen bisher nur auf dieser Instanz, nicht in den Repositorien. Die lokale Bauanlage arbeitet damit; eine Pipeline, die die festgeschriebenen Commits auscheckt, fände dort noch keine
wkcomponent.jsonund bricht ab, statt still etwas Falsches zu bauen. - Die PHP-Erweiterung
zipbraucht die Maschine, die packt — nicht die, die installiert. Fehlt sie, wird die Anfrage abgelehnt, bevor etwas gebaut wird, und die Ablehnung sagt genau das. Zu beachten: Webserver und Kommandozeile benutzen häufig verschiedenephp.ini. - Ein Manifest kann veralten. Es liegt neben dem Code, wird aber nicht von ihm erzeugt.
wkbundle verifymeldet genau diesen Fall als Fassung, dieplugin.info.txtwiderspricht.
Für Entwicklerinnen und Entwickler
Eine Komponente nimmt teil, indem sie eine Datei bekommt. lib/plugins/<name>/wkcomponent.json, kein Code, keine Anmeldung an einem Ereignis:
{
"manifestVersion": 1,
"name": "wkbeispiel",
"kind": "plugin",
"artifact": { "target": "lib/plugins" },
"requires": ["wkcore"],
"features": {
"azure-devops": { "label": "Azure-DevOps-Repositories verwenden", "requires": ["wkdoado"] }
},
"optional": [{ "name": "wkvault", "benefit": "Der PAT liegt verschlüsselt statt im Klartext." }],
"release": { "stable": { "ref": "<40-stellige Revision>", "version": "2026-08-24" } }
}
name muss dem Verzeichnisnamen entsprechen. Ein Manifest, das etwas anderes behauptet, beschreibt eine Komponente, die es hier nicht gibt, und wird abgelehnt — das ist derselbe Fehler, den DokuWiki bei einem falschen base-Feld macht, nur diesmal mit einer Meldung.
Auf einer Seite stehen drei Konstrukte zur Verfügung:
| Konstrukt | Ergebnis |
|---|---|
{{wk:bundle}} | der vollständige Baukasten |
{{wk:bundle>install:<komponente>}} | der Installationskasten einer Komponente, wie oben auf dieser Seite |
{{wk:bundle>matrix:<tabelle>}} | eine Tabelle aus den Manifesten: dependencies, platform, order, configuration, verification, notes |
Wo wkcore vorhanden ist, gilt zusätzlich die Schreibweise <wk:bundle install="wkcore"/>. Seiten mit diesen Konstrukten werden nicht zwischengespeichert, weil ihre Eingabe die Manifeste sind und nicht der Seitentext.
Auf der Kommandozeile liegen list, verify, catalog, resolve, build, pack, cleanup, doc und release. Optionen gehören vor die Argumente:
php bin/plugin.php wkbundle resolve -f azure-devops,workbench-ui wkdoadogit
pack ist der Aufruf der Bauanlage, cleanup der einer Zeitsteuerung, verify der einer Überwachung. Die vollständige Beschreibung von Manifest, Auflösung und Bauvertrag liegt als docs/api-reference.md im Repositorium des Pakets.
Störungen
Für dieses Paket ist keine Störungsseite im Wiki geschrieben; die Diagnosefassung liegt als docs/troubleshooting.md im Repositorium des Pakets, nach Symptom geordnet.
Verwandte Themen
- Paket-Baukasten — die Bedienseite.
- Eine Komponente installieren und Komponentenmatrix — beide werden aus denselben Manifesten gespeist.
- wkdoado — die Verbindung, über die die Pipeline-Bauanlage spricht.
- DokuWiki-Erweiterungen — das Verzeichnis der Pakete.
Autor
- Name: Wolfgang van der Stille (The White Knight Labs)
- Lizenz: GPL 2