Raspberry Pi 4 (8 GB) als Proxmox VE Test-Node
Raspberry Pi 4 – Debian 13, LUKS2, Dropbear und Proxmox VE
Diese Anleitung beschreibt die Installation von Debian 13 (Trixie) ARM64 mit verschlüsselter Root-Partition auf einem Raspberry Pi 4 mit 8 GB RAM.
DieDas Root-PartitionDateisystem wird mit LUKS2 verschlüsselt.verschlüsselt Über Dropbear im Initramfs kann die Verschlüsselungund beim StartSystemstart perüber Dropbear-SSH entsperrtentsperrt.
Die Einrichtung erfolgt über debootstrap und eine ARM64-chroot-Umgebung auf einem Linux-PC. Anschließend werden die angepassten Proxmox-Pakete des Community-Projekts PXVIRT installiert.
1. Voraussetzungen
- Raspberry Pi 4 mit 8 GB RAM
- USB-SSD
mit mindestensab 32 GB, empfohlen 64 GB oder mehr Temporäre microSD-KarteDebian-13-Linux-PC mitmindestens 8 GBInternetzugangDebian-Netzwerkverbindungoderüberanderer Linux-PC zur VorbereitungEthernetLAN-VerbindungStatischezumIPv4-Adresse,Raspberry PiMonitorNetzmaske undTastaturGateway- SSH-Schlüssel für die
ErsteinrichtungAdministration SSH-ClientUSB-Boot-fähigemit Ed25519-UnterstützungBekannte Netzwerkadresse und GatewayRaspberry-Pi-Firmware
AlleFür alle administrativen Befehle werdenauf alsdem rootLinux-PC ausgeführt.wird Untereine Linux erfolgt der WechselRoot-Shell mit su -. verwendet.
Aufbau des DatenträgersDatenträgeraufbau
Partition |
| Verwendung |
|---|---|---|
| FAT32 | /boot/ |
| LUKS2 | Verschlüsselter Root-Datenträger |
| ext4 |
|
Die FirmwareBoot-Partition benötigtbleibt eineunverschlüsselt. unverschlüsselteAlle Boot-Partition.Daten Das Betriebssystem, Containerdaten und VM-Dateien aufinnerhalb der Root-Partition liegenwerden innerhalbdurch derLUKS2 LUKS-Verschlüsselung.
Diese Konfiguration schützt ruhende Daten, aber nicht vor Manipulationen an der unverschlüsselten Boot-Partition. Eine vollständige Boot-Integritäts- prüfung wird hier nicht eingerichtet.geschützt.
2. Debian-ImageSSH-Schlüssel herunterladenvorbereiten
Das Raspberry-Pi-Image ist unter folgender Adresse verfügbar:
Debian 13 ARM64 – Raspberry Pi
Auf dem Linux-PCClient zwei getrennte Ed25519-Schlüssel erzeugen.
Schlüssel zur LUKS-Entsperrung:
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_initramfs_unlock_pi4 \
-C "Pi4 LUKS Unlock"
Schlüssel für die benötigtennormale WerkzeugeAdministration:
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_pi4_admin \
-C "Pi4 Administration"
Beide privaten Schlüssel mit jeweils einer Passphrase schützen.
Die öffentlichen Schlüssel werden später in das neue Debian-System übernommen.
3. Linux-PC vorbereiten
Zur Root-Shell wechseln:
su -
apt update
apt install curl ca-certificates tar xz-utils coreutils
Arbeitsverzeichnis erstellen:
mkdir -p /root/raspi-pve
cd /root/raspi-pveImage herunterladen:
curl -fL --retry 3 -O https://cloud.debian.org/images/cloud/trixie/daily/latest/debian-13-raspi-arm64-daily.tar.xzPrüfsummen herunterladen:
curl -fL --retry 3 -O https://cloud.debian.org/images/cloud/trixie/daily/latest/SHA512SUMSPrüfsumme kontrollieren:
sha512sum --ignore-missing -c SHA512SUMSDie Prüfung muss erfolgreich sein. Bei unterschiedlichen oder fehlenden Prüfsummen nicht fortfahren.
Da das Downloadverzeichnis täglich aktualisiert wird, sollten Image und Prüfsummendatei vom selben Build stammen.
3. Temporäre microSD-Karte erstellen
Für die Einrichtung der verschlüsselten USB-SSD wird Debian zunächst von einer microSD-Karte gestartet.
microSD-Karte anschließen und Laufwerke anzeigen:
lsblk -o NAME,SIZE,MODEL,TYPE,MOUNTPOINTSIm folgenden Beispiel ist /dev/sdb die microSD-Karte. Die tatsächliche Bezeichnung muss anhand der Ausgabe bestimmt werden.
Alle eingehängten Partitionen der Zielkarte vor dem Schreiben aushängen.
Datenträger nochmals kontrollieren:
lsblk /dev/sdbAchtung: Der nächste Befehl löscht sämtliche vorhandenen Daten auf /dev/sdb.
Image direkt auf die Karte schreiben:
tar -xOf debian-13-raspi-arm64-daily.tar.xz disk.raw | dd of=/dev/sdb bs=4M status=progress conv=fsyncSollte der Archivinhalt anders heißen, den Dateinamen vorher mit tar -tJf prüfen.
Schreibvorgang abschließen:
syncAnschließend die microSD-Karte in den Raspberry Pi einsetzen und Debian starten.
Falls das Debian-Image nicht bootet, zuerst den Fehler untersuchen. Zu den Debian-13- Raspberry-Pi-Images existieren Berichte über Bootprobleme.
4. Debian auf der microSD vorbereiten
Nach dem Start lokal als root anmelden. Bei den Debian-Raspberry-Pi-Images kann die erste lokale Anmeldung ohne Passwort erfolgen.
Direkt ein root-Passwort setzen:
passwdSystemPaketlisten aktualisieren:
apt update
apt full-upgrade
Benötigte WerkzeugePakete installieren:
apt install -y \
cryptsetupdebootstrap \
cryptsetup-initramfsqemu-user \
qemu-user-binfmt \
binfmt-support \
cryptsetup \
parted \
dosfstools \
e2fsprogs \
rsyncca-certificates \
curl \
git \
curl \
openssh-server \
nano \
lessclient
SysteminformationenQEMU ermöglicht das Ausführen von ARM64-Programmen auf einem Linux-System mit anderer CPU-Architektur.
Binfmt-Unterstützung kontrollieren:
dpkgcat --print-architecture
uname -r
ip -br address
ip route show default/proc/sys/fs/binfmt_misc/qemu-aarch64
DieBei Architektureinem x86-64-Host muss arm64der sein.Eintrag Füraktiviert allesein, folgendenbevor SchritteARM64-Programme mussinnerhalb der chroot-Umgebung ausgeführt werden können.
Bei einem ARM64-Host wird QEMU für die NetzwerkverbindungAusführung funktionieren.der Zielprogramme nicht benötigt.
5.4. USB-SSD partitionieren
Jetzt die endgültige USB-SSD mitanschließen demund Raspberry Pi verbinden.
Alle LaufwerkeDatenträger anzeigen:
lsblk -o NAME,SIZE,MODEL,TYPE,MOUNTPOINTS
Das folgende Beispiel verwendet /dev/sdasdb als Ziel-SSD. Die microSDkorrekte mitGerätebezeichnung demmuss laufendenvor Debianjeder darfÄnderung keinesfalls überschriebengeprüft werden.
Prüfen,Zieldatenträger dassfestlegen:
DISK=/dev/sdasdb
Datenträger richtigeerneut SSD ist und keine ihrer Partitionen eingehängt ist:kontrollieren:
lsblk /dev/sda"$DISK"
Die SSD darf keine eingehängten Partitionen enthalten.
Achtung: Die nächstenfolgenden Befehle löschen die Partitionstabelle undentfernen sämtliche Daten aufvom derausgewählten gewählten SSD.Datenträger.
Partitionstabelle erstellen:
parted -s /dev/sda"$DISK" mklabel msdos
Boot-Partition mit 1 GiB erstellen:
parted -s /dev/sda"$DISK" mkpart primary fat32 1MiB 1025MiB
Root-Partition mit dem restlichen Platz erstellen:Speicher:
parted -s /dev/sda"$DISK" mkpart primary 1025MiB 100%
Boot-PartitionFlag markieren:setzen:
parted -s /dev/sda"$DISK" set 1 boot on
partprobe /dev/sda"$DISK"
udevadm settle
PartitionierungBei überprüfen:USB-SATA-Laufwerken heißen die Partitionen beispielsweise /dev/sdb1 und /dev/sdb2. Bei NVMe-Laufwerken heißen sie beispielsweise /dev/nvme0n1p1 und /dev/nvme0n1p2.
Die folgenden Variablen automatisch anhand der Gerätebezeichnung bilden:
case "$DISK" in
*[0-9])
BOOT="${DISK}p1"
ROOT="${DISK}p2"
;;
*)
BOOT="${DISK}1"
ROOT="${DISK}2"
;;
esac
lsblk /dev/sda"$DISK"
6.5. LUKS2-VerschlüsselungLUKS2 erstelleneinrichten
Die Boot-Partition erhält FAT32:formatieren:
mkfs.vfat -F32 -n PVEBOOT /dev/sda1"$BOOT"
Die zweite Partition wird mit LUKS2 verschlüsselt:und Argon2id verschlüsseln:
cryptsetup luksFormat \
--type luks2 /dev/sda2\
--pbkdf argon2id \
--pbkdf-memory 262144 \
"$ROOT"
Den Löschvorgang bestätigen und eineEine lange, einzigartige Passphrase festlegen. Die PassphraseDiese wird beimspäter späterenfür SSH-Unlockcryptroot-unlock benötigt.
Verschlüsselte LUKS-Partition öffnen:
cryptsetup open /dev/sda2"$ROOT" cryptroot
Ext4-Dateisystem erstellen:
mkfs.ext4 -L pve-root /dev/mapper/cryptroot
Verschlüsselung prüfen:
cryptsetup status cryptroot
lsblk -f /dev/sda"$DISK"
LUKS2
6. verwendetDateisysteme den Passwortschutz zur Ableitung des Entschlüsselungsschlüssels. Die Passphrase wird nicht in einer Datei auf der Boot-Partition gespeichert.
7. Debian auf die verschlüsselte SSD übertrageneinhängen
Die verschlüsselte Root-PartitionDateisystem einhängen:
mkdir -p /mnt/pve-rootpi4
mount /dev/mapper/cryptroot /mnt/pve-rootpi4
Das laufende Debian von der microSD auf die verschlüsselte Root-Partition kopieren:
rsync -aHAXx --numeric-ids \
--exclude='/dev/***' \
--exclude='/proc/***' \
--exclude='/sys/***' \
--exclude='/run/***' \
--exclude='/tmp/***' \
--exclude='/mnt/***' \
--exclude='/media/***' \
/ /mnt/pve-root/Dadurch wird das installierte Debian mit Dateirechten, Eigentümern und erweiterten Attributen auf die SSD übertragen. Temporäre Dateisysteme werden ausgelassen.
Benötigte VerzeichnisseFirmware-Verzeichnis erstellen:
mkdir -p /mnt/pve-root/{dev,proc,sys,run,tmp,mnt,media,pi4/boot/firmware}
chmod 1777 /mnt/pve-root/tmpfirmware
Boot-Partition einhängen:
mount /dev/sda1"$BOOT" /mnt/pve-root/pi4/boot/firmware
FirmwareMountpoints und Bootdateien kopieren:kontrollieren:
rsync -aH /boot/firmware/findmnt /mnt/pve-root/pi4
findmnt /mnt/pi4/boot/firmware/firmware
8.7. Debian 13 direkt installieren
Debian wird mit debootstrap direkt auf das verschlüsselte Root-Dateisystem installiert.
debootstrap \
--arch=arm64 \
trixie \
/mnt/pi4 \
https://deb.debian.org/debian
Die Installation erstellt ein minimales Debian-13-ARM64-System.
Die ARM64-Systemprogramme werden bei Bedarf über QEMU ausgeführt. Die Geschwindigkeit hängt vom Linux-Host, dessen CPU und der SSD ab.
8. ARM64-chroot vorbereiten
Die notwendigen Systemdateisysteme in das neue Debian einbinden:
for DIR in dev proc sys run; do
mount --rbind "/$DIR" "/mnt/pi4/$DIR"
mount --make-rslave "/mnt/pi4/$DIR"
done
DNS-Konfiguration übernehmen:
cp -L /etc/resolv.conf /mnt/pi4/etc/resolv.conf
ARM64-chroot starten:
chroot /mnt/pi4 /bin/bash
Architektur überprüfen:
dpkg --print-architecture
Erwartete Ausgabe:
arm64
Alle folgenden Installationsbefehle werden innerhalb dieser chroot-Umgebung ausgeführt.
Debian und QEMU können mehrere Prozessoren für parallele Aufgaben verwenden. Ein separater CPU-Parameter für chroot ist nicht erforderlich.
9. Debian-Paketquellen konfigurieren
Die UUID der LUKS-Partition ermitteln:
cryptsetup luksUUID /dev/sda2UUID der Boot-Partition anzeigen:
blkid /dev/sda1Diese beiden UUIDs werden für die Systemkonfiguration benötigt.
Crypttab der SSDAPT-Quellen bearbeiten:
nano /mnt/etc/apt/sources.list
Die vorhandenen Einträge kontrollieren. Für Debian 13 können folgende Quellen verwendet werden:
deb https://deb.debian.org/debian trixie main non-free-firmware
deb https://deb.debian.org/debian trixie-updates main non-free-firmware
deb https://security.debian.org/debian-security trixie-security main non-free-firmware
Gleichwertige bereits vorhandene Einträge unter /etc/apt/sources.list.d dürfen nicht doppelt eingerichtet werden.
Paketlisten aktualisieren:
apt update
10. Kernel und Basispakete installieren
Den ARM64-Kernel, Raspberry-Pi-Firmware, Initramfs und Netzwerkdienste installieren:
apt install -y \
linux-image-arm64 \
raspi-firmware \
initramfs-tools \
cryptsetup-initramfs \
dropbear-initramfs \
openssh-server \
ifupdown2 \
systemd-sysv \
ca-certificates \
curl \
git \
nano \
less \
locales \
busybox \
e2fsprogs
Hostname festlegen:
echo pve-pi4 > /etc/hostname
Hostdatei bearbeiten:
nano /etc/hosts
Beispiel:
127.0.0.1 localhost
10.100.0.2 pve-pi4.home.arpa pve-pi4
Root-Passwort setzen:
passwd
SSH-Dienst für den Systemstart aktivieren:
systemctl enable ssh
11. SSH-Administration einrichten
Den zuvor erzeugten öffentlichen Administrationsschlüssel hinterlegen:
install -d -m 0700 /root/.ssh
nano /root/.ssh/authorized_keys
Den vollständigen Inhalt von id_pi4_admin.pub einfügen.
Dateirechte setzen:
chmod 0600 /root/.ssh/authorized_keys
SSH-Konfiguration ergänzen:
nano /etc/ssh/sshd_config.d/10-pi4-security.conf
Folgenden Inhalt verwenden:
PermitRootLogin prohibit-password
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
Dadurch ist die Root-Anmeldung über SSH nur mit einem passenden Schlüssel möglich.
12. Boot-Konfiguration vorbereiten
Debian verwendet raspi-firmware zur Bereitstellung der Bootdateien.
Datei bearbeiten:
nano /etc/default/raspi-firmware
Folgende Werte setzen:
ROOTPART="/dev/mapper/cryptroot"
KERNEL="auto"
INITRAMFS="auto"
CMA=0
Der Parameter ROOTPART sorgt dafür, dass die generierte Kernel-Kommandozeile auf das entschlüsselte Root-Dateisystem zeigt.
Die Bootdateien werden später durch die Kernel- und Initramfs-Hooks in die Firmware-Partition übernommen.
13. Crypttab und Fstab konfigurieren
LUKS-UUID anzeigen:
cryptsetup luksUUID "$ROOT"
Falls die Variable ROOT nicht mehr verfügbar ist, auf dem Linux-Host die UUID der LUKS-Partition mit cryptsetup luksUUID ermitteln.
Crypttab bearbeiten:
nano /etc/crypttab
Folgenden Eintrag hinzufügen:
cryptroot UUID=HIER-LUKS-UUID-EINTRAGENUUID none luks,initramfs
Den PlatzhalterLUKS-UUID durch die tatsächliche UUID ausder Partition ersetzen.cryptsetupverschlüsselten luksUUID
Die UUID der FAT32-Boot-Partition wird auf dem Linux-Host mit blkid ermittelt.
Fstab bearbeiten:
nano /mnt/pve-root/etc/fstab
Die altenFolgende Einträge für / und /boot/firmware ersetzen:verwenden:
/dev/mapper/cryptroot / ext4 defaults,noatime 0 1
UUID=BOOT-UUID /boot/firmware vfat defaults,umask=0077 0 2
BOOT-UUID durch die tatsächliche Dateisystem-UUID ausder FAT32-Partition ersetzen.blkid /dev/sda1
Andere
14. alte Root- oder Boot-Einträge dürfen nicht parallel aktiv bleiben.
9. Chroot-Umgebung betreten
Damit Pakete und Initramfs für das neue System vorbereitet werden können, werden die benötigten Systemverzeichnisse eingebunden.
mount --rbind /dev /mnt/pve-root/dev
mount --make-rslave /mnt/pve-root/dev
mount --rbind /proc /mnt/pve-root/proc
mount --make-rslave /mnt/pve-root/proc
mount --rbind /sys /mnt/pve-root/sys
mount --make-rslave /mnt/pve-root/sys
mount --rbind /run /mnt/pve-root/run
mount --make-rslave /mnt/pve-root/runIn das neue System wechseln:
chroot /mnt/pve-root /bin/bashDie folgenden Befehle werden nun innerhalb der verschlüsselten Debian-Installation ausgeführt.
Benötigte Initramfs-Pakete installieren:
apt update
apt install -y cryptsetup-initramfs dropbear-initramfs initramfs-tools busybox10. Raspberry-Pi-BootNetzwerk konfigurieren
DebianDas Initramfs verwendet aufeth0 unmittelbar für die SSH-Entsperrung. Nach dem RaspberryEntsperren Piverwendet dasDebian Paketdie raspi-firmwareLinux-Bridge zur Erstellung der Bootdateien.vmbr0.
Konfiguration öffnen:
nano /etc/default/raspi-firmwareDie Variable ROOTPART ergänzen beziehungsweise aktivieren:
ROOTPART="/dev/mapper/cryptroot"Die Option INITRAMFS muss auf auto stehen beziehungsweise darf nicht deaktiviert sein:
INITRAMFS="auto"In der Initramfs-Konfiguration sollten die erforderlichen Treiber für USB und die Root-Partition enthalten sein.
Datei bearbeiten:
nano /etc/initramfs-tools/initramfs.confFolgenden Wert setzen:
MODULES=mostDie USB-SSD muss bereits im Initramfs erkannt werden. Deshalb dürfen benötigte USB- und Storage-Treiber nicht fehlen.
11. Initramfs-Netzwerk einrichten
Dropbear benötigt bereits vor dem Mounten der Root-Partition eine Netzwerkverbindung.
Beispielkonfiguration:Beispielwerte:
|
|
IP-Adresse | 10.100.0.2 |
Netzmaske | 255.255.0.0 |
Gateway | 10.100.0.1 |
|
|
Bridge | vmbr0 |
Die Beispielwerte müssen an das eigene Netzwerk angepasst werden. eth0 ist der kabelgebundene Netzwerkanschluss des Raspberry Pi in dieser Konfiguration.anpassen.
Netzwerkinformationen anzeigen:
ip -br address
ip route show defaultInitramfs-Konfiguration öffnen:
nano /etc/initramfs-tools/initramfs.confFolgende Werte eintragen:
DEVICE=eth0
IP=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:noneDie statische IP-Adresse zusätzlich dauerhaft über die Raspberry-Pi-Kernelparameter setzen.
Datei öffnen oder erstellen:
nano /etc/default/raspi-extra-cmdlineInhalt:
ip=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:noneDer gesamte Kernelparameter muss in einer einzigen Zeile stehen.
Die Initramfs-IP wird später unabhängig von der regulären Netzwerkkonfiguration des Proxmox-Systems verwendet.
12. SSH-Schlüssel für Dropbear erstellen
Auf dem Linux-Client, von dem die SSD später entsperrt werden soll, einen separaten SSH-Schlüssel erzeugen:
ssh-keygen -t ed25519 -a 100 \
-f ~/.ssh/id_initramfs_unlock_pi4 \
-C "Pi4 LUKS Unlock"Für den privaten Schlüssel sollte eine eigene Passphrase verwendet werden.
Öffentlichen Schlüssel anzeigen:
cat ~/.ssh/id_initramfs_unlock_pi4.pubDer private Schlüssel bleibt ausschließlich auf dem Client. Nur der öffentliche Schlüssel wird in Dropbear hinterlegt.
13. Dropbear absichern
Auf dem Raspberry Pi, weiterhin in der Chroot-Umgebung, das Schlüsselverzeichnis vorbereiten:
install -d -m 0700 /etc/dropbear/initramfsnano /etc/dropbear/initramfs/authorized_keysnetwork/interfaces
Folgenden Aufbau verwenden und SSH-PUBLIC-KEY durch den vollständigen öffentlichen Ed25519-Schlüssel ersetzen:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 SSH-PUBLIC-KEYDie gesamte Zeile muss ohne Zeilenumbruch in der Datei stehen.
Durch den festgelegten Befehl kann der SSH-Schlüssel nur die Entsperrfunktion starten. Er soll keine beliebige Root-Shell im Initramfs eröffnen.
Dateirechte setzen:
chmod 0600 /etc/dropbear/initramfs/authorized_keysDropbear-Konfiguration bearbeiten:
nano /etc/dropbear/initramfs/dropbear.confFolgenden Eintrag setzen:
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 120"Der SSH-Dienst verwendet Port 2222. Passwortanmeldung und SSH-Portweiterleitungen sind deaktiviert.
Für Dropbear sollten eigene SSH-Hostkeys verwendet werden. Diese werden normalerweise bei der Paketinstallation erzeugt.
Vorhandenen Ed25519-Hostkey prüfen:
ls -l /etc/dropbear/initramfs/dropbear_ed25519_host_keyFalls dieser fehlt, erzeugen:
dropbearkey -t ed25519 -f /etc/dropbear/initramfs/dropbear_ed25519_host_keyDen Fingerprint für den späteren Vergleich mit dem SSH-Client anzeigen und sicher notieren:
dropbearkey -y -f /etc/dropbear/initramfs/dropbear_ed25519_host_key14. Initramfs erzeugen und überprüfen
Nach Abschluss der Konfiguration das Initramfs neu erstellen:
update-initramfs -u -k allAnschließend die erzeugten Bootdateien kontrollieren:
ls -lh /boot/initrd.img-*
ls -lh /boot/firmware/Die gewünschte Initramfs-Datei auswählen, beispielsweise anhand des installierten Kernel-Namens:
ls /lib/modulesBeispiel für die Inhaltsprüfung mit dem tatsächlich vorhandenen Kernel-Namen:
lsinitramfs /boot/initrd.img-KERNELVERSIONIm Archiv müssen unter anderem Dropbear, die Schlüsselkonfiguration und cryptroot-unlock enthalten sein.
Die Raspberry-Pi-Bootkonfiguration prüfen:
cat /boot/firmware/config.txt
cat /boot/firmware/cmdline.txtconfig.txt muss den Kernel und das Initramfs laden. cmdline.txt muss die verschlüsselte Root-Partition über root=/dev/mapper/cryptroot referenzieren.
Außerdem muss die konfigurierte statische Netzwerkadresse als ip-Parameter enthalten sein.
Falls die generierten Dateien nicht stimmen, die Konfiguration korrigieren und update-initramfs erneut ausführen. cmdline.txt wird vom Firmwarepaket bei Updates neu erstellt, weshalb dauerhafte Parameter in den dafür vorgesehenen Quelldateien hinterlegt werden.
15. Verschlüsselte Installation starten
Chroot-Umgebung verlassen:
exitAlle eingebundenen Dateisysteme aushängen:
umount -R /mnt/pve-rootLUKS-Partition schließen:
cryptsetup close cryptrootSchreibvorgänge abschließen:
syncRaspberry Pi herunterfahren:
poweroffDie temporäre microSD-Karte entfernen. Die USB-SSD bleibt am Raspberry Pi angeschlossen.
Für das Booten über USB muss die Firmware des Raspberry Pi 4 USB-Boot unterstützen und entsprechend konfiguriert sein.
Raspberry Pi einschalten. Der Bootvorgang wartet nun auf das Entsperren der LUKS-Root-Partition.
16. Verschlüsselung über SSH entsperren
Sobald Dropbear gestartet ist, sollte der Raspberry Pi unter seiner Initramfs-IP-Adresse über Port 2222 erreichbar sein.
Vom Linux-Client aus verbinden:
ssh -t \
-p 2222 \
-i ~/.ssh/id_initramfs_unlock_pi4 \
root@10.100.0.2Beim ersten Kontakt den angezeigten SSH-Hostkey-Fingerprint mit dem zuvor notierten Fingerprint vergleichen. Einen unbekannten oder falschen Hostkey nicht bestätigen.
Nach der Anmeldung startet automatisch cryptroot-unlock.
Die LUKS-Passphrase eingeben. Bei erfolgreicher Entsperrung wird der normale Debian-Bootvorgang fortgesetzt.
17. Komfortablen SSH-Zugriff konfigurieren
Auf dem Linux-Client die SSH-Konfiguration öffnen:
nano ~/.ssh/configFolgenden Host ergänzen:
Host pve-pi4-unlock
HostName 10.100.0.2
User root
Port 2222
IdentityFile ~/.ssh/id_initramfs_unlock_pi4
IdentitiesOnly yes
RequestTTY force
StrictHostKeyChecking yes
UserKnownHostsFile ~/.ssh/known_hosts_initramfsDie separate Known-Hosts-Datei verhindert Verwechslungen zwischen dem Initramfs-SSH- Server und dem normalen SSH-Dienst von Debian.
SSH-Konfiguration absichern:
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_initramfs_unlock_pi4Den Hostkey einmal kontrolliert mit dem zuvor notierten Fingerprint bestätigen.
Anschließend genügt beim nächsten Boot:
ssh pve-pi4-unlockNun die LUKS-Passphrase eingeben. Danach fährt Debian regulär hoch.
18. Debian nach der Entsperrung prüfen
Am Raspberry Pi lokal als root anmelden.
Prüfen, ob Root verschlüsselt ist:
findmnt /
cryptsetup status cryptroot
lsblk -ffindmnt sollte /dev/mapper/cryptroot als Root-Dateisystem anzeigen.
Netzwerkkonfiguration prüfen:
ip -br address
ip route show defaultVor der Installation von Proxmox einen vollständigen Neustart einschließlich SSH-Entsperrung erfolgreich durchführen.
19. Proxmox-Pakete installieren
Die folgenden Schritte verwenden das Community-Projekt Pimox ARM64 RPI Control.
Das Projekt installiert angepasste Proxmox-Pakete aus dem PXVIRT-Repository.
Wichtig: Der vollständige Installer build.sh darf hier nicht unverändert ausgeführt werden.
Er enthält einen Schritt zur automatischen Vergrößerung der Root-Partition, der nicht für diese LUKS-Installation vorgesehen ist.
Git-Repository herunterladen:
cd /root
git clone https://github.com/topa-LE/pve-arm64-rpi-control.git
cd pve-arm64-rpi-controlVerwendeten Commit dokumentieren:
git rev-parse HEADDie gewünschten Skripte vor der Ausführung kontrollieren:
less scripts/06_add_proxmox_repo.sh
less scripts/07_install_proxmox_ve.shInsbesondere den externen APT-Signaturschlüssel und die Paketquelle prüfen. Falls der Schlüssel nicht unabhängig verifiziert werden kann, die Paketquelle nicht als vertrauenswürdig einrichten.
Nach entsprechender Prüfung kann das PXVIRT-Repository eingerichtet werden:
bash scripts/06_add_proxmox_repo.shVerfügbare Pakete prüfen:
apt update
apt-cache policy proxmox-veVor der Installation die geplanten Paketänderungen simulieren:
apt-get -s install proxmox-veDabei darauf achten, dass weder cryptsetup-initramfs noch dropbear-initramfs, raspi-firmware oder der funktionierende Debian-Bootkernel entfernt werden.
Wenn die Paketauflösung kompatibel ist:
apt install proxmox-veNach der Installation kontrollieren:
pveversion -v
uname -rDer Raspberry-Pi-kompatible Kernel muss weiterhin für den Bootvorgang verwendet werden können.
20. Netzwerk-Bridge für Proxmox einrichten
Proxmox verwendet üblicherweise eine Linux-Bridge namens vmbr0.
Diese wird erst nach erfolgreicher LUKS-Entsperrung verwendet. Dropbear benötigt im Initramfs weiterhin die physische Schnittstelle eth0.
Die folgenden Änderungen lokal mit Monitor und Tastatur durchführen.
Benötigtes Paket installieren:
apt install ifupdown2Vorher die bestehende Netzwerkkonfiguration sichern und ermitteln, welcher Dienst aktuell eth0 verwaltet.
Für eine reine ifupdown2-Konfiguration kann /etc/network/interfaces beispielsweise folgendermaßen aussehen:Inhalt:
auto lo
iface lo inet loopback
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address 10.100.0.2/16
gateway 10.100.0.1
bridge-ports eth0
bridge-stp off
bridge-fd 0
DieDen WerteNetzwerkdienst müssen zum eigenen Netzwerk passen. Die Konfiguration gehört in:aktivieren:
/etc/network/interfacessystemctl enable networking
KonkurrierendeFür Netzwerkmanagerdie dürfenDNS-Auflösung eth0einen nichterreichbaren gleichzeitigDNS-Server konfigurieren.in Den/etc/resolv.conf Wechseleintragen, deshalbbeispielsweise erstden nacheigenen PrüfungRouter, dessofern vorhandenendieser NetzwerkdienstesDNS durchführen.bereitstellt.
15. Initramfs-Netzwerk konfigurieren
Die Initramfs-Konfiguration bleibt unverändert auf eth0. Nach dem Unlock übernimmt das normale Betriebssystem mit vmbr0.
21. Initramfs nach Änderungen aktualisieren
Nach Kernel-, Cryptsetup- oder Dropbear-Updates sollte die Bootkonfiguration erneut kontrolliert werden.
Initramfs regenerieren:öffnen:
nano /etc/initramfs-tools/initramfs.conf
Folgende Werte setzen:
MODULES=most
DEVICE=eth0
IP=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:none
Für die Kernel-Kommandozeile wird zusätzlich dieselbe IP-Konfiguration hinterlegt.
Datei bearbeiten:
nano /etc/default/raspi-extra-cmdline
Inhalt als einzelne Zeile:
ip=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:none
Das Initramfs verwendet eth0 für den Netzwerkzugriff, bevor cryptroot geöffnet wird.
16. Dropbear konfigurieren
Konfigurationsverzeichnis vorbereiten:
install -d -m 0700 /etc/dropbear/initramfs
Authorized-Keys-Datei bearbeiten:
nano /etc/dropbear/initramfs/authorized_keys
Den vollständigen öffentlichen Schlüssel aus id_initramfs_unlock_pi4.pub einfügen und folgende Optionen voranstellen:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/cryptroot-unlock" ssh-ed25519 SSH-PUBLIC-KEY
SSH-PUBLIC-KEY durch den echten Schlüssel ersetzen. Der gesamte Eintrag muss in einer einzelnen Zeile stehen.
Dateirechte setzen:
chmod 0600 /etc/dropbear/initramfs/authorized_keys
Dropbear-Konfiguration bearbeiten:
nano /etc/dropbear/initramfs/dropbear.conf
Folgende Einstellung verwenden:
DROPBEAR_OPTIONS="-p 2222 -s -j -k -I 120"
Der SSH-Zugriff ist damit auf Schlüsselanmeldung und den Entsperrbefehl beschränkt.
Der Dienst lauscht während der Initramfs-Phase auf Port 2222.
17. Dropbear-Hostkey prüfen
Der SSH-Hostkey für Dropbear wird normalerweise während der Paketinstallation erstellt.
Vorhandenen Schlüssel prüfen:
ls -l /etc/dropbear/initramfs/dropbear_ed25519_host_key
Falls kein Schlüssel existiert:
dropbearkey -t ed25519 \
-f /etc/dropbear/initramfs/dropbear_ed25519_host_key
Öffentlichen Hostkey und Fingerprint anzeigen:
dropbearkey -y \
-f /etc/dropbear/initramfs/dropbear_ed25519_host_key
Den Fingerprint für die spätere SSH-Verbindung dokumentieren.
18. Initramfs erzeugen
Installierte Kernel-Versionen anzeigen:
ls /lib/modules
Neueste installierte Kernel-Version ermitteln:
KVER=$(ls /lib/modules | sort -V | tail -n 1)
echo "$KVER"
Das Initramfs für diese Kernel-Version neu erstellen oder aktualisieren:
if [ -f "/boot/initrd.img-$KVER" ]; then
update-initramfs -u -k all"$KVER"
else
update-initramfs -c -k "$KVER"
fi
Die Konfiguration des Firmwarepakets sollte dabei die Bootdateien nach /boot/firmware übernehmen.
Firmware-Verzeichnis kontrollieren:
ls -lh /boot/firmware
Die folgenden Dateien prüfen:
cat /boot/firmware/config.txt
cat /boot/firmware/cmdline.txt
Dieconfig.txt Root-Referenz,muss Initramfs-Einträgeden ARM64-Kernel und statischedas IP-Konfigurationpassende Initramfs laden.
cmdline.txt muss Folgendes enthalten:
root=/dev/mapper/cryptroot
Außerdem muss die konfigurierte Initramfs-IP vorhanden sein.
Initramfs-Inhalt prüfen:
lsinitramfs "/boot/initrd.img-$KVER" | less
Im Initramfs müssen erhaltendie bleiben.benötigten Cryptsetup-Komponenten, Dropbear, authorized_keys und cryptroot-unlock enthalten sein.
Auch Treiber für Ethernet, USB, Datenträger, Device Mapper und ext4 müssen enthalten sein.
Wenn die Dateien oder Treiber fehlen, nicht mit dem ersten Boot fortfahren.
19. Installation abschließen
chroot verlassen:
exit
Die Variablen für die Partitionen bei Bedarf auf dem Linux-Host erneut festlegen.
UUIDs kontrollieren:
blkid "$BOOT"
cryptsetup luksUUID "$ROOT"
Prüfen, ob die hinterlegten Werte in crypttab und fstab korrekt sind.
Mountpoints anzeigen:
findmnt -R /mnt/pi4
Anschließend alle eingebundenen Dateisysteme sauber aushängen:
umount -R /mnt/pi4
LUKS-Mapping schließen:
cryptsetup close cryptroot
Schreibvorgänge abschließen:
sync
Die SSD kann nun mit dem Raspberry Pi verbunden werden.
20. LUKS über SSH entsperren
Nach dem Einschalten lädt der Raspberry Pi den Kernel und das Initramfs.
Dropbear verwendet die konfigurierte statische Adresse und wartet auf die SSH-Verbindung zur Entsperrung.
Vom Linux-Client verbinden:
ssh -t \
-p 2222 \
-i ~/.ssh/id_initramfs_unlock_pi4 \
root@10.100.0.2
Beim ersten Kontakt den Hostkey-Fingerprint mit dem zuvor dokumentierten Wert vergleichen.
Nach erfolgreicher SSH-Authentifizierung wird cryptroot-unlock gestartet.
Die LUKS-Passphrase eingeben. Anschließend wird die Root-Partition geöffnet und Debian startet.
21. SSH-Client konfigurieren
SSH-Konfiguration öffnen:
nano ~/.ssh/config
Folgende Hosts ergänzen:
Host pi4-unlock
HostName 10.100.0.2
User root
Port 2222
IdentityFile ~/.ssh/id_initramfs_unlock_pi4
IdentitiesOnly yes
RequestTTY force
StrictHostKeyChecking yes
Host pi4
HostName 10.100.0.2
User root
Port 22
IdentityFile ~/.ssh/id_pi4_admin
IdentitiesOnly yes
StrictHostKeyChecking yes
Die beiden SSH-Dienste verwenden unterschiedliche Hostkeys. Deshalb sollten ihre Fingerprints getrennt überprüft werden.
Die SSH-Verbindung zur Entsperrung kann nach der erstmaligen Hostkey-Prüfung folgendermaßen geöffnet werden:
ssh pi4-unlock
Normale Administration nach dem Boot:
ssh pi4
22. Debian überprüfen
Nach dem erfolgreichen Entsperren über SSH am Debian-System anmelden.
Root-Dateisystem prüfen:
findmnt /
Verschlüsselung prüfen:
cryptsetup status cryptroot
Netzwerk überprüfen:
ip -br address
ip route show default
Die reguläre Management-IP sollte auf vmbr0 liegen.
Systempakete aktualisieren:
apt update
apt full-upgrade
Vor einemder unbeaufsichtigtenProxmox-Installation Betrieb mindestenszunächst einen vollständigen Neustart einschließlichmit erfolgreichererneuter SSH-LUKS-Entsperrung durchführen.
22.23. Proxmox-Pakete vorbereiten
Für den Raspberry Pi werden angepasste Proxmox-ARM64-Pakete aus dem Community-Projekt PXVIRT verwendet.
Das vollständige build.sh-Skript wird nicht verwendet, da es Schritte zur automatischen Root-Partitionserweiterung und Netzwerkkonfiguration enthält, die für dieses LUKS-System ungeeignet sind.
Repository herunterladen:
cd /root
git clone https://github.com/topa-LE/pve-arm64-rpi-control.git
cd pve-arm64-rpi-control
Aktuellen Commit anzeigen:
git rev-parse HEAD
Das Skript zur Einrichtung der Paketquelle untersuchen:
less scripts/06_add_proxmox_repo.sh
Die Paketquelle benötigt einen externen Signaturschlüssel. Dessen Fingerprint muss vor dem Hinterlegen unabhängig überprüft werden.
Erst nach entsprechender Prüfung die Paketquelle einrichten:
bash scripts/06_add_proxmox_repo.sh
Verfügbare Pakete prüfen:
apt update
apt-cache policy proxmox-ve
24. Proxmox installieren
Vor der Installation die geplanten Paketänderungen simulieren:
apt-get -s install proxmox-ve
Dabei dürfen der funktionierende Raspberry-Pi-Kernel, raspi-firmware, cryptsetup-initramfs und dropbear-initramfs nicht unkontrolliert entfernt oder ersetzt werden.
Wenn die Paketauflösung kompatibel ist, die Installation starten:
apt install proxmox-ve
Proxmox-Version anzeigen:
pveversion -v
Webdienst kontrollieren:
systemctl status pveproxy --no-pager
Nach der Installation das Initramfs und die Firmware-Konfiguration erneut prüfen, bevor das System neu gestartet wird.
25. Proxmox-Weboberfläche
Nach erfolgreichemerfolgreicher Debian-Start und funktionierender Proxmox-Installation kannist dieProxmox Weboberflächeüber geöffnetHTTPS werden:erreichbar:
https://10.100.0.2:8006
Anmeldedaten:
- Benutzer: root
- Passwort:
root-Root-Passwort des Debian-Systems - Realm: Linux PAM
BeimDas ersten Aufruf kann der Browser vor einem selbstsigniertenanfängliche TLS-Zertifikat warnen.kann selbstsigniert sein. Den ZertifikatsfingerprintFingerprint vor derdem Freigabeersten überprüfen.Verbindungsaufbau kontrollieren.
23.26. LUKS-Header sichern
Der LUKS-Header enthält wichtige Informationen für die Entschlüsselung. Bei einer Beschädigung können sämtliche Daten verloren gehen.
Zur Sicherung die LUKS-Partition identifizieren:
lsblk -fAnschließend den Header auf einem geeigneten externen Backup-Datenträger sichern. Beispiel:
cryptsetup luksHeaderBackup /dev/sda2 \
--header-backup-file /PFAD/ZUM/SICHEREN-BACKUP/pi4-luks-header.imgDer Zielpfad muss auf einen tatsächlich eingehängten, geschützten Backup-Datenträger zeigen. Nicht auf der verschlüsselten SSD selbst speichern.
Den Header zusammen mit der Passphrase beziehungsweise einem geeigneten Wiederherstellungsschlüssel sicher aufbewahren. Header-Backups können Offline-Angriffe auf Passphrasen ermöglichen.
24. Sicherheits-Sicherheit und BetriebshinweiseBackups
Initramfs-DropbearSSH-Private-Keys ausschließlich auf dem Client speichern.- LUKS-Passphrase niemals in Skripten hinterlegen.
- Dropbear-Port 2222 nur
imausvertrauenswürdigendemLAN oder Verwaltungs-VLANVerwaltungsnetz erreichbar machen. Kein Portforwarding aufPort22228006 nicht öffentlich ins Interneteinrichten.SSH-Private-Key nicht auf den Raspberry Pi übertragen.LUKS-Passphrase nicht in Skripten oder SSH-Konfigurationsdateien speichern.weiterleiten.- Den
unverschlüsseltenLUKS-HeaderBootbereichexterngegenundManipulationgeschütztschützen.sichern. DieUpdatestemporärevonmicroSDKernelenthältundeineInitramfs durch einen Neustart überprüfen.- Alle VM- und Containerdatenträger innerhalb des verschlüsselten Speichers ablegen.
- Keine unverschlüsselte
Debian-Kopie und muss sicher verwahrt oder ausgemustert werden. Für VM-Datenträger ausschließlich verschlüsselten Speicher verwenden.Keinen unverschlüsselten SwapSwap-Partition außerhalb von LUKSverwenden.erstellen.Kernel-Boot-PartitionundgegenInitramfs-UpdatesunbefugtevorManipulationdem produktiven Einsatz durch einen Neustart testen.Recovery-Zugriff über Monitor und Tastatur ermöglichen.schützen.
25.27. Weiterführende Dokumentation
- Debian –
RaspberryInstallationPiaufImagesARM-SBCs - Debian – Raspberry Pi 4
- Debian –
DropbearARM64 mit QEMU - Debian – Cryptsetup und Remote-Unlock
- Pimox ARM64 RPI Control
PXVIRT- Proxmox VE Dokumentation
Stand: Oktober 2026. Installationskonzept für einen Raspberry Pi 4 mit Debian 13,13 LUKS2ARM64, LUKS2, Dropbear und Dropbear.Community-Proxmox. DieDer gesamtevollständige Kombination einschließlich Community-ProxmoxInstallationsablauf wurde nicht auf der Zielhardware getestet.validiert.