Tech Blog.

Thoughts, stories, ideas.

Rescue Disk und Multiboot System

2. April 2017

Wer viel mit diversen Linux Systemen arbeitet und diese noch manuell aufsetzt, kennt das Problem, dass immer das entsprechende Installationsmedium fehlt. Weiter wäre immer ein Rescue System zu haben auch hilfreich, viele nutzen dafür Live Systeme wie grml, Kali oder Damn Small Linux. Jedes dieser Systeme hat aber Einschränkungen, z.B. ist teilweise eine Ausgabe auf der seriellen Konsole zwingend, jedoch vom entsprechenden System nicht unterstützt.

In diesem Artikel wird kurz ein Systemimage präsentiert, welches im Frust von zu vielen USB Sticks für Installations- und Live-Systemen entstand. Die Anforderungen waren:

  • “Live”-System für Rescue
  • Installations-Medium für mehrere gängige Distributionen
  • Einfach die neusten Images einspielen
  • Keine eigenen Anpassungen an den diversen Systemen

Ansatz

Auf einem USB Stick wird ein Arch Linux installiert, welches mithilfe von Grub bootet. Grub bietet neben dem Arch Linux auch die Möglichkeit andere Systeme zu booten oder zu installieren.

Grub und das “Live” Arch Linux werden auf der seriellen und graphischen Konsole dargestellt. Wo möglich trifft dies auch auf die anderen Systeme zu (was nicht immer möglich ist, da z.B. ein Kali Linux nur graphisch startet). Das “Live” Arch Linux wird nicht als echtes Live-System aufgebaut, sondern ist weiterhin Read-Write, da somit auch zusätzliche Pakete und Updates installiert werden können.

Eine aktuelle Liste der Systeme, welche mit diesem Image gebootet werden können, ist folgende:

  • “Live” Arch Linux (Rescue System; Read-Write)
  • Arch Linux Installer
  • Debian Jessie Netinstall
  • Debian Jessie Preseed Install (mit lokalem Preseed-File und Netinstall für die Pakete)
  • CentOS 7 Installer
  • Kali Linux
  • Tails

Probleme

Die verschiedenen Systeme erwarten unterschiedliche Kernel-Parameter, dies bereitete des öfteren Probleme, da Systeme nicht korrekt oder gar nicht booteten. Eine grosse Hilfe war hierbei das Arch Linux Wiki, welches einen Artikel zu diesem Thema hat.

Die diversen “Live” Systeme werden in der /etc/grub.d/40_custom eingetragen. Dies passiert manuell, je nach System wird direkt der Kernel und das InitramFS gestartet oder es wird zuerst ein ISO Image Loopback gemounted. Zwei Beispiele, welche genau diese zwei Fälle abbilden, sind hier gezeigt:

  • CentOS 7 Installer Menuentry
menuentry 'CentOS 7 Installer' {
    set kernel='/centos-7-vmlinuz'
    set initrdfile='/centos-7-initrd.gz'
    set append='console=ttyS0,115200n8 devfs=nomount'
    set ip='ip=192.168.1.10::192.168.1.1:255.255.255.0:host.example.com:enp1s0:off nameserver=8.8.8.8'
    set repo='repo=http://pkg.adfinis.com/centos/7/os/x86_64'
    set vnc='vnc vncpassword=password'
    linux $kernel $append $ip $repo $vnc --
    initrd $initrdfile
}
  • Kali Linux Installer Menuentry
menuentry 'Kali Linux 2016.2 amd64' {
    set isofile='/kali-linux-2016.2-amd64.iso'
    loopback loop $isofile
    linux (loop)/live/vmlinuz boot=live findiso=$isofile noconfig=sudo username=root hostname=kali
    initrd (loop)/live/initrd.img
}

Die entsprechenden Config Optionen sind in der Grub Dokumentation beschrieben. Welche Parameter einem Kernel mitgegeben werden können, hängt zum einen von der Kernel-Version ab, zum anderen von der Distribution. Eine Liste von möglichen generischen Parametern ist auf kernel.org abrufbar.

Image

Das Image wird öffentlich zur Verfügung gestellt. Es wird keine Haftung zur Aktuallität oder allfälligen Problemen übernommen:

https://files.adfinis.com/rescue-multiboot/rescue-multiboot-latest.img.gz

Nach dem Herunterladen kann das Image auf einen USB Stick transferiert werden. Der USB Stick muss mindestens 8 GB Speicherplatz bieten. Dabei werden alle Daten auf dem USB Stick gelöscht. Ist das Image auf den USB Stick transferiert, wird die Partition noch auf das Maximum vergrössert. Der String /dev/sd<X> muss dabei unbedingt durch die Disk des USB Sticks ersetzt werden.

$ DISK="/dev/sd<X>"
$ gzip -cd rescue-multiboot-latest.img.gz | dd of="$DISK" bs=8M
$ printf "d\nn\np\n1\n2048\n\nw\n" | fdisk "$DISK"
$ e2fsck -f "${DISK}1"
$ resize2fs "${DISK}1"

Updates

Der USB Stick sollte gelegentlich aktualisiert werden. Vorbereitend sollte dafür das “Live” Arch Linux gestartet werden.

Nach dem Start wird jeweils eine Netzwerk Verbindung hergestellt. Die vorhandenen Interfaces können mit ip addr show dargestellt werden. Das Interface muss teilweise noch mit ip link set $INTERFACE up gestartet werden. Danach wird eine IP-Adresse am einfachsten über Ethernet per DHCP geholt, dafür einfach dhcpcd $INTERFACE starten. Anschliessend sollte das System eine IP-Adresse haben und kann mit pacman -Syu aktualisiert werden.

Komplexere Netzwerk Verbindungen können mithilfe von netctl hergestellt werden. Entsprechende Konfigurationsbeispiele sind im Verzeichnis /etc/netctl/examples zu finden und müssen nach /etc/netctl kopiert und danach angepasst werden. Starten kann man diese mit netctl start $CONFIGNAME. Die verschiedenen Images zum Installieren oder Live-Booten sind im Root Verzeichnis. Sie können simpel aktualisiert werden, indem die jeweils aktuellsten Versionen der ISOs, Kernel und initrd Images heruntergeladen werden. Es gibt keine Anpassungen an den Images oder initrd Images.