Hier ist eine Möglichkeit, ein Debian-Live-USB-Laufwerk mit Persistenz zu erstellen. Damit können die fehlenden Pakete installiert werden, die von da an bei jedem Live-Boot unter Verwendung der Persistenz verfügbar sind. Da wir den Inhalt des Live-ISO-Image-Dateisystems auf einem schreibgeschützten Dateisystem neu erstellen, können wir die Bootloader-Konfigurationen ändern, um die Persistenz zu aktivieren und das Tastaturlayout beim Booten festzulegen.
Die hier beschriebenen Schritte wurden getestet, um auf Debian-Stretch und Buster zu arbeiten und ein Debian-Stretch-Livebild zu erstellen.
Es sind viele Schritte erforderlich, aber es scheint, dass diese Methode immer noch sehr effizient ist.
Haftungsausschluss: Sie verlieren die Daten auf dem Ziel-USB-Laufwerk. Wenn Sie die folgenden Befehle verwechseln, kann es sein, dass Sie danach sehr traurig sind. Ich bin nicht verantwortlich für Ihre Handlungen.
Sich glücklich fühlen
Wenn Sie sich heute besonders glücklich schätzen, können Sie ein Bash-Skript ausprobieren, das den Vorgang für Sie automatisiert. Geben Sie als ersten Parameter Ihren ISO-Image-Pfad und als zweiten den Namen des USB-Stick-Block-Geräts an. Beachten Sie, dass dieses Skript wahnsinnig gefährlich ist und Sie es nicht ausführen sollten, ohne es vorher gelesen und verstanden zu haben.
TL; DR
Holen Sie sich ein Debian-Live-ISO-Image und gehen Sie dann wie folgt vor:
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Im Detail und mit einiger Erklärung
Sie müssen die meisten der folgenden Befehle mit erhöhten Rechten ausführen, dh sudo
auf den meisten GNU / Linux-Systemen.
Herunterladen
Laden Sie ein Debian-Live-ISO-Image mit dem Fenstermanager Ihrer Wahl herunter:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Das heruntergeladene ISO-Image wird einfach als "live.iso" bezeichnet.
Bestimmen Sie das Ziellaufwerk
Suchen Sie das Gerät, auf dem sich Ihr USB-Laufwerk befindet lsblk
. Wir werden das nennen /dev/sdX
.
Aushängen
Hängen Sie vorhandene Partitionen auf Ihrem Laufwerk mit aus umount /dev/sdX*
Erstellen Sie Partitionen
Wir benötigen eine EFI-Bootpartition, damit UEFI-PCs vom USB-Laufwerk booten können. Dann benötigen wir eine ausreichend große Partition, um den ursprünglichen Inhalt des ISO-Dateisystem-Images zu speichern. In dieser Partition muss das legacy_boot
Flag gesetzt sein. Dann fügen wir die Persistenzpartition hinzu und belegen den gesamten verbleibenden Speicherplatz des USB-Laufwerks. Sie können dies mit jedem GPT-fähigen Partitionierungstool tun (beachten Sie das legacy_boot
Flag). Hier ist ein Beispiel mit parted
:
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
Dadurch werden eine GPT-Partitionstabelle und eine MBR-Schutzpartitionstabelle erstellt.
Dateisysteme erstellen
Wir wollen FAT auf der EFI- und Live-Partition und wir wollen ext4
auf der Persistenz-Partition und wir benötigen das Label, persistence
damit die Persistenz-Funktion funktioniert.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Bereitstellen der Ressourcen
Wir müssen die Quell-ISO- und Zielpartitionen an temporären Einhängepunkten einhängen.
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
Installieren Sie das Live-System
Kopieren Sie den Inhalt des Live-ISO-Dateisystems auf die LIVE-Partition.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Bereiten Sie das Persistenz-Dateisystem mit der erforderlichen Konfigurationsdatei vor. Die Persistenzfunktion funktioniert ohne diese Datei nicht.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub für UEFI-Unterstützung
Installieren Sie grub2 für die UEFI-Boot-Unterstützung (dies erfordert das grub-efi-amd64-bin
Paket unter Debian). Wir erzwingen grub-install
, UEFI Secure Boot nicht zu verwenden, was anscheinend mit dieser --removable
Option nicht funktioniert .
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux für Legacy-BIOS-Unterstützung
Installieren Sie den Syslinux- gptmbr.bin
Bootloader auf dem Laufwerk (laden Sie Syslinux herunter oder installieren Sie das Paket syslinux-common
). Dann installieren Sie Syslinux auf der Live-Partition.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Isolinux-Fixup
Verwenden Sie die isolinux-Konfiguration der ursprünglichen Live-ISO erneut, um mit syslinux zu arbeiten.
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
Kernel-Parameter
Nachdem wir die Live-Systemdateien in ein tatsächliches Lese- / Schreib-Dateisystem kopiert haben, können wir die Konfiguration von grub und syslinux bearbeiten.
Fügen Sie den Persistenzkernparameter zu menu.cfg
und hinzu grub.cfg
. Fügen Sie in beiden Dateien das Schlüsselwort persistence
am Ende der jeweiligen ersten Zeile mit boot=live
ein.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Legen Sie den Kernel-Parameter für das Tastaturlayout fest. Fügen Sie in beiden Dateien die Schlüsselwörter am Ende der jeweiligen ersten Zeile mit boot=live
ein.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Grub Splash
Korrigieren Sie das Grub-Splash-Image (optional; wir haben es in ein anderes Verzeichnis verschoben).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Aushängen und Aufräumen
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Warum sollte dies für UEFI und BIOS funktionieren
Beim Start im UEFI-Modus scannt der PC die FAT-Partitionen, die wir in der GPT-Partitionstabelle definiert haben. Die erste FAT-Partition enthält den UEFI-Grub-Bootloader, der gefunden wird, weil er sich in dem von UEFI für Wechseldatenträger angegebenen Pfad befindet (der --removable
Switch grub-install
hat dies getan). Es ist kein UEFI-Starteintrag erforderlich, damit dies funktioniert. Der PC muss lediglich versuchen, vom USB-Laufwerk zu starten. Dieser Grub ist so konfiguriert, dass er ihn von dort nimmt (lade die grub.cfg, zeige das Menü usw.).
Wenn Sie im BIOS-Modus starten und das Booten vom USB-Laufwerk auswählen, führt der PC den gptmbr.bin
Bootloader-Code aus, den wir in den Schutz-MBR des USB-Laufwerks geschrieben haben. Dieser Bootloader sucht nach der GPT-Partition, die mit dem legacy_boot
Flag und chainload syslinux von dieser Partition markiert ist . Syslinux übernimmt dann (Menü.cfg laden, Menü anzeigen, etc.).
Verschlüsselte Persistenz
Anstatt ext4 für die Persistenzpartition zu verwenden, könnte man zuerst die Persistenzpartition mit LUKS verschlüsseln (using cryptsetup
) und diese dann mit ext4 formatieren (using the proper label). Wie in der Dokumentation angegeben , muss das Live-System jedoch das cryptsetup
Paket enthalten. Andernfalls kann die verschlüsselte Partition vom Live-System nicht entschlüsselt werden. Dies bedeutet, dass man zuerst eine benutzerdefinierte Live-ISO erstellen muss. Dies ist jedoch nicht Gegenstand dieser Antwort.
Geschichte
Die --no-uefi-secure-boot
Option war zuvor nicht Teil des Anrufs an grub-install
. Der Stick hat für mich gut funktioniert, aber das hat mit Debian Buster aufgehört, obwohl der sichere Start auf meinem Computer immer noch deaktiviert ist.