Skip to main content

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.

werden.

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 mit mindestens 8 GBInternetzugang
  • Debian-Netzwerkverbindung oderüber anderer Linux-PC zur VorbereitungEthernet
  • LAN-VerbindungStatische zumIPv4-Adresse, Raspberry Pi
  • MonitorNetzmaske und TastaturGateway
  • SSH-Schlüssel für die ErsteinrichtungAdministration
  • SSH-ClientUSB-Boot-fähige mit Ed25519-Unterstützung
  • Bekannte 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

DateisystemFormat

Verwendung

/dev/sda1Partition 1

FAT32

/boot/firmware, unverschlüsseltfirmware

/dev/sda2Partition 2

LUKS2

Verschlüsselter Root-Datenträger

/dev/mapper/cryptroot

ext4

DebianDebian, Proxmox, Container und ProxmoxVMs

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:

installieren:
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-pve

Image herunterladen:

curl -fL --retry 3 -O https://cloud.debian.org/images/cloud/trixie/daily/latest/debian-13-raspi-arm64-daily.tar.xz

Prüfsummen herunterladen:

curl -fL --retry 3 -O https://cloud.debian.org/images/cloud/trixie/daily/latest/SHA512SUMS

Prüfsumme kontrollieren:

sha512sum --ignore-missing -c SHA512SUMS

Die 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,MOUNTPOINTS

Im 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/sdb

Achtung: 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=fsync

Sollte der Archivinhalt anders heißen, den Dateinamen vorher mit tar -tJf prüfen.

Schreibvorgang abschließen:

sync

Anschließ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:

passwd

SystemPaketlisten 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
die

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/sda2

UUID der Boot-Partition anzeigen:

blkid /dev/sda1

Diese 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 cryptsetupverschlüsselten luksUUIDPartition ersetzen.

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 blkid /dev/sda1FAT32-Partition ersetzen.

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/run

In das neue System wechseln:

chroot /mnt/pve-root /bin/bash

Die 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 busybox

10. 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-firmware

Die 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.conf

Folgenden Wert setzen:

MODULES=most

Die 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:

Interface

eth0

IP-Adresse

10.100.0.2

Netzmaske

255.255.0.0

Gateway

10.100.0.1

HostnameInterface

pve-pi4eth0

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 default

Initramfs-Konfiguration öffnen:

nano /etc/initramfs-tools/initramfs.conf

Folgende Werte eintragen:

DEVICE=eth0
IP=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:none

Die statische IP-Adresse zusätzlich dauerhaft über die Raspberry-Pi-Kernelparameter setzen.

Datei öffnen oder erstellen:

nano /etc/default/raspi-extra-cmdline

Inhalt:

ip=10.100.0.2::10.100.0.1:255.255.0.0:pve-pi4:eth0:none

Der 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.pub

Der 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/initramfs

Authorized-Keys-Datei bearbeiten:

nano /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-KEY

Die 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_keys

Dropbear-Konfiguration bearbeiten:

nano /etc/dropbear/initramfs/dropbear.conf

Folgenden 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_key

Falls dieser fehlt, erzeugen:

dropbearkey -t ed25519 -f /etc/dropbear/initramfs/dropbear_ed25519_host_key

Den Fingerprint für den späteren Vergleich mit dem SSH-Client anzeigen und sicher notieren:

dropbearkey -y -f /etc/dropbear/initramfs/dropbear_ed25519_host_key

14. Initramfs erzeugen und überprüfen

Nach Abschluss der Konfiguration das Initramfs neu erstellen:

update-initramfs -u -k all

Anschließ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/modules

Beispiel für die Inhaltsprüfung mit dem tatsächlich vorhandenen Kernel-Namen:

lsinitramfs /boot/initrd.img-KERNELVERSION

Im 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.txt

config.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:

exit

Alle eingebundenen Dateisysteme aushängen:

umount -R /mnt/pve-root

LUKS-Partition schließen:

cryptsetup close cryptroot

Schreibvorgänge abschließen:

sync

Raspberry Pi herunterfahren:

poweroff

Die 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.2

Beim 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/config

Folgenden 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_initramfs

Die 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_pi4

Den Hostkey einmal kontrolliert mit dem zuvor notierten Fingerprint bestätigen.

Anschließend genügt beim nächsten Boot:

ssh pve-pi4-unlock

Nun 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 -f

findmnt sollte /dev/mapper/cryptroot als Root-Dateisystem anzeigen.

Netzwerkkonfiguration prüfen:

ip -br address
ip route show default

Vor 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.

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-control

Verwendeten Commit dokumentieren:

git rev-parse HEAD

Die gewünschten Skripte vor der Ausführung kontrollieren:

less scripts/06_add_proxmox_repo.sh
less scripts/07_install_proxmox_ve.sh

Insbesondere 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.sh

Verfügbare Pakete prüfen:

apt update
apt-cache policy proxmox-ve

Vor der Installation die geplanten Paketänderungen simulieren:

apt-get -s install proxmox-ve

Dabei 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-ve

Nach der Installation kontrollieren:

pveversion -v
uname -r

Der 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 ifupdown2

Vorher 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.

Pimox ARM64 RPI Control

PXVIRT

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 -f

Anschließ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.img

Der 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 imaus vertrauenswürdigendem LAN oder Verwaltungs-VLANVerwaltungsnetz erreichbar machen.
  • Kein Portforwarding auf Port 22228006 nicht öffentlich ins Internet einrichten.
  • SSH-Private-Key nicht auf den Raspberry Pi übertragen.
  • LUKS-Passphrase nicht in Skripten oder SSH-Konfigurationsdateien speichern.weiterleiten.
  • Den unverschlüsseltenLUKS-Header Bootbereichextern gegenund Manipulationgeschützt schützen.sichern.
  • DieUpdates temporärevon microSDKernel enthältund eineInitramfs 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 LUKS verwenden.erstellen.
  • Kernel-Boot-Partition undgegen Initramfs-Updatesunbefugte vorManipulation dem produktiven Einsatz durch einen Neustart testen.
  • Recovery-Zugriff über Monitor und Tastatur ermöglichen.schützen.

25.27. Weiterführende 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.