Installation
Bunkerbox läuft nativ auf Debian 13 (trixie), 64 Bit, als systemd-Dienst bunkerbox mit root-Rechten (nötig für ZFS, Samba, NFS, Benutzerverwaltung und Docker). Docker wird nur für Apps verwendet, nicht für Bunkerbox selbst.
Installation mit einem Befehl
Als root auf dem frisch installierten Debian:
curl -fsSL https://bunkerbox.znbw.de/install.sh | sudo bash
Das Skript lädt die aktuelle Version von der Homepage, prüft die SHA256-Prüfsumme und startet deploy/install.sh aus dem Paket. Das Paket ist fertig gebaut, auf dem Zielsystem wird nichts kompiliert.
Am Ende fragt das Skript nach dem Namen und Passwort des ersten Administrators (siehe unten).
Was das Skript einrichtet
- Debian-Komponente
contrib(für OpenZFS), falls noch nicht aktiv, als/etc/apt/sources.list.d/bunkerbox-contrib.sources - Pakete:
zfs-dkms,zfsutils-linux,linux-headers-<arch>,samba,nfs-kernel-server,nfs-common,cifs-utils,acl,smartmontools,lm-sensors,parted,gdisk,perl,curl - Docker Engine und das Compose-Plugin aus dem Debian-Repository von Docker (
/etc/apt/sources.list.d/docker.sources) - Node.js 24 (NodeSource), falls keine passende Version vorhanden ist
- Pakete der Zusatzfunktionen (auch bei jedem Update nachinstalliert):
incus,ovmf,rsync,rclone,openssh-client,nut-server,nut-client,hdparm,e2fsprogs,openssl - ein selbstsigniertes Zertifikat für HTTPS unter
/appdata/bunkerbox/data/tls/(HTTPS wird unter Sicherheit eingeschaltet) - die Dienste
smbd,nfs-serverunddocker(aktiviert und gestartet) - die Gruppe
bunkerbox-adminund den ersten Administrator - den Dienst
bunkerbox(Port 80)
Mit BUNKERBOX_SKIP_ZFS=1 bzw. BUNKERBOX_SKIP_DOCKER=1 lassen sich ZFS bzw. Docker überspringen.
Erster Administrator
Administratoren sind Linux-Benutzer in der Gruppe bunkerbox-admin. Das Installationsskript legt den ersten an, sobald noch keiner existiert:
- interaktiv: Abfrage von Name und Passwort am Terminal (funktioniert auch bei
curl … | sudo bash) - ohne Terminal:
BUNKERBOX_ADMIN=<name>undBUNKERBOX_ADMIN_PASSWORD=<passwort>setzen
Ein bereits vorhandener Linux-Benutzer wird nur zur Gruppe hinzugefügt und behält sein Passwort. Ein neuer Benutzer bekommt keine Login-Shell (/usr/sbin/nologin); das Passwort wird als Linux- und als Samba-Passwort gesetzt.
Weitere Administratoren:
sudo /appdata/bunkerbox/app/deploy/install.sh --add-admin <name>
Ablage
| Pfad | Inhalt |
|---|---|
/appdata/bunkerbox/releases/<version> | installierte Versionen (die letzten drei bleiben erhalten) |
/appdata/bunkerbox/app | Symlink auf die aktive Version |
/appdata/bunkerbox/data | Einstellungen, Sitzungen, Daten der Bereiche, Zugangsdaten für Netzlaufwerke (Rechte 700) |
/appdata/bunkerbox/bunkerbox.env | optionale Umgebungsvariablen, z. B. PORT (Rechte 600) |
Nach Änderungen an bunkerbox.env: systemctl restart bunkerbox.
Bunkerbox wird direkt angesprochen, ohne Reverse-Proxy. Der Dienst startet node --require ./preload.cjs server.js; das kleine Vorladeskript reicht die tatsächliche Gegenstelle jeder Verbindung an die Anwendung weiter, damit die Anmeldesperre nicht mit gefälschten X-Forwarded-For-Kopfzeilen umgangen werden kann. Steht doch ein Reverse-Proxy davor (z. B. für HTTPS), trägst du ihn in bunkerbox.env ein:
BUNKERBOX_TRUSTED_PROXIES=127.0.0.1, 10.0.0.0/8
Adressen und Netze (IPv4 und IPv6, CIDR) werden durch Komma oder Leerzeichen getrennt. Nur Anfragen von diesen Adressen dürfen X-Forwarded-For und X-Forwarded-Proto setzen; als Client-Adresse gilt der rechte Eintrag von X-Forwarded-For, der kein vertrauenswürdiger Proxy ist.
Bunkerbox und /appdata auf ZFS
Bunkerbox selbst liegt unter /appdata/bunkerbox – bei der Installation meist noch auf der Systemplatte. Soll /appdata später ein Dataset auf dem Apps-Pool werden, legst du es unter Speicher → Datasets mit Einhängepunkt /appdata und „Vorhandenen Inhalt übernehmen“ an: Bunkerbox kopiert dann zuerst alles aus /appdata (einschließlich der eigenen Installation) in das neue Dataset und hängt es erst danach dort ein (siehe Speicher). Die Dienst-Unit wartet mit RequiresMountsFor beim Systemstart, bis /appdata/bunkerbox eingehängt ist.
Installation aus dem Quellcode
Aus einer Kopie des Repos als root:
./deploy/install.sh
Das Skript baut dann zuerst ein Release-Paket (scripts/pack-release.sh, braucht Node.js) und installiert es wie oben.
Updates und Rollback: siehe Updates.