Live-USB-Sticks erstellen für Debian-/Ubuntu-basierende Distributionen



Nachdem man ein System in einer virtuellen Maschine installiert hat, alle notwendige Software installiert und das System nach den eigenen Wünschen vorkonfiguriert hat (Nutzer anlegen, Autologin anlegen etc. pp.), sind noch kleine Nacharbeiten im Gastsystem fällig.

Achtung: Als Dateisystem des Gastsystems ist btrfs in diesem Fall nicht geeiginet!

Zuerst einmal müssen die Pakete installiert werden, die zur Nutzung als Livesystem notwendig sind.

# apt-get install live-boot-initramfs-tools live-tools live-boot

Das initramfs baut man dann mittels

# update-initramfs -u

neu.

Außerdem solle aus Platzgründen der Paketcache geleert werden.

# apt-get clean

Im Hostsystem müssen noch die notwendigen Pakete zum Zugriff auf die virtuelle Maschine und die Nutzung des Bootloaders sowie zur Erstellung eines SquashFS installiert
werden. Für Ubuntu-Versionen ab 14.04 und Debian ab Version 8 ist das

# apt-get install squashfs-tools libguestfs-tools syslinux syslinux-common extlinux

Die Abfrage, ob eine "supermin-appliance" erstellt werden soll muss hierbei bejaht werden.

Danach kann die virtuelle Maschine eingebunden werden.

Hierfür wird ein neuer Einhängepunkt unterhalb von /media erstellt
.
# mkdir -p /media/virtual

und danach wird die VM dank libguestfs wie ein normales Dateisystem eingebunden.

# guestmount -a /PFAD_ZUR_DATEI -i /media/virtual

Davon ausgehend, dass als Virtualiserungslösung mit VirtualBox gearbeitet wird, das Standardformat VDI gewählt wurde, der Standardordner für die virtuellen Maschinen genutzt wird und die VM den Namen "Debian" bekommen hat, wäre das im Beispiel also

# guestmount -a ~/VirtualBox\ VMs/Debian/Debian.vdi -i /media/virtual

Die Dateien sind jetzt unter /media/virtual zugreifbar.


Als nächstes wird ein Arbeitsordner für die Daten erstellt, in den die Daten aus der VM kopiert werden.

# mkdir tmplive

Anschließend werden die Datei dorthin kopiert.

# cp -a /media/virtual/* tmplive/

Danach kann das Dateisystem der VM wieder ausgehangen werden.

# guestunmount /media/virtual

Die fstab dort muss noch angepasst werden, damit das Livesystem booten kann.

# echo -e "overlayfs / overlayfs rw 0 0\ntmpfs /tmp tmpfs nosuid,nodev 0 0" > tmplive/etc/fstab
Und dann wird das SquashFS aus den Daten gebaut
.
# mksquashfs tmplive/. filesystem.squashfs -comp xz

Jetzt muss der USB-Stick vorbereitet werden. Zuerst einmal sollte dort eine Partition erstellt werden, die mindestens 100MB größer ist als das erstelle SquashFS.

Als Dateisystem möglich sind FAT32, ext2, ext3 und ext4. Im Beispiel wird allerdings ein ext-Dateisystem vorausgesetzt, da dieses nicht den Beschränkungen von FAT32 unterliegt.

Im Folgenden wird davon ausgegangen, dass der Stick als /dev/sdb erkannt wird und die Zielpartition für das Livesystem die erste primäre Partition, hier also /dev/sdb1 ist. Dies muss natürlich an die tatsächlichen Gegebenheiten angepasst werden.

Achtung: Der Stick darf nicht eingebunden sein! Dies kann per

# mount

überprüft werden.


Jetzt wird der Bootloader in den MBR des USB-Sticks geschrieben.

# dd bs=440 count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sdb

Anschließend muss die Zielpartition noch als bootbar markiert werden.

# parted /dev/sdb set 1 boot on

Jetzt die Zielpartition manuell unter /mnt einbinden

# mount /dev/sdb1 /mnt

und dort die notwendige Verzeichnisstruktur erzeugen.

# mkdir -p /mnt/{boot/syslinux,live}

sodass hierher das SqaushFS kopiert

# cp filesystem.squashfs /mnt/live/

Zur Sicherheit noch ein

# sync

hinterher - um sicherzustellen, dass die Datei auch vollständig auf den Stick geschrieben wurde.

Jetzt kann die Konfiguration für den Bootloader erstellt werden kann.

# extlinux --install /mnt/boot/syslinux

Anschließend noch die von Syslinux zum Starten benötigten Dateien in dessen Konfigurationsverzeichnis kopieren.

Hier wieder die Unterscheidung nach Syslinux 4.x und 6.x, also für Debian bis 7 und Ubuntu bis 14.04

# cp /usr/lib/syslinux/*.c32 /mnt/boot/syslinux/

und für Debian ab Version 8 und Ubuntu ab 14.10

# cp /usr/lib/syslinux/modules/bios/*.c32 /mnt/boot/syslinux/

Außerdem muss dort eine Konfigurationsdatei erstellt werden, hier ist wiederum kein Unterschied zwischen Syslinux 4.x und 6.x vorhanden.

# nano /mnt/boot/syslinux/

(Statt nano kann natürlich auch jeder andere Editor verwendet werden.)

Der Inhalt:

default menu.c32
prompt 0
menu title SYSLINUX
timeout 100

label default
menu label DEBIAN-LIVE
kernel /vmlinuz
append initrd=/initrd boot=live

Die Punkte menu title und menu label können nach eigenen Wünschen beschriftet werden.

Es fehlen doch der Kernel und das initramfs. Beides aus dem Arbeitsordner auf den Stick kopieren.

# cp tmplive/boot/KERNEL /mnt/vmlinuz
# cp tmplive/boot/INITRD /mnt/initrd

im hier genannten Debian-Beispiel also

# cp tmplive/boot/vmlinuz-3.16.0-4-amd64 /mnt/vmlinuz
# cp tmplive/
boot/initrd.img-3.16.0-4-amd64 /mnt/initrd

Der Stick ist jetzt fertig. Um das Ganze auszuprobieren, muss der Rechner neu gestartet werden. Der USB-Stick muss als erstes Bootmedium ausgewählt sein.