Installieren von Gentoo auf einem bootfähigen USB Stick
Das Booten von Gentoo auf einem USB Stick ist wirklich recht einfach. Die größte Herausforderung besteht im Anlegen einer ersten Ramdisk und dem Einbinden der Treiber für alle jene Rechner, die gebootet werden sollen. Dieser Artikel beschreibt, wie man Gentoo auf einem USB Stick installiert, der auf jedem Computer gebootet werden kann. Diese Installation wird wie eine normale Desktopinstallation sein und Änderungen werden bleiben.
Dieser Artikel behandelt die Installation eines kompletten, funktionsfähigen Gentoo-Systems auf einem USB-Laufwerk. Siehe den LiveUSB-Artikel für Anleitungen zur Erstellung eines einfachen bootfähigen Laufwerks, das z.B. für die Installation von Gentoo verwendet werden kann.
Vorbereitung
Diese Anleitung nimmt an, dass die verwendete Plattform Gentoo Linux ist. Die meisten Arbeitsschritte können allerdings bei jeder Distribution gemacht werden. Übersetze einfach die Art und Weise von Gentoo, bestimmte Dinge zu tuen, in die einer Anderen Distribution (wie z.B. das Installieren von Software)
Wir beginnen damit, einige notwendige Pakete zu installieren. Die wichtigsten von diesen sind der Kernel und das sys-kernel/genkernel Paket.
root #
emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel
Kompilierung des Kernels
Mache die notwendigen Änderungen am Kernel und compiliere ihn. Schaue bitte bei Configuring the Linux kernel und kernel configuration guide nach, um mehr Details zu erhalten. Denke daran, dass eine generelle Kernel hier angebrachter ist, weil Gentoo dann auf mehr Maschinen booten wird.
Während der Konfiguration ist es möglich, Module zu compilieren und diese dann zu der initramfs hinzuzufügen und sie dadurch beim booten zu laden.
root #
mkdir /tmp/boot
root #
genkernel --firmware --bootdir=/tmp/boot --no-symlink --all-ramdisk-modules --install all
Dieser Befehl wird einige Zeit in Anspruch nehmen, weil er den Ausgangskernel baut, eine Ramdisk erstellt und alle Dateien in /tmp/boot kopiert.
root #
ls /tmp/boot/
initramfs-genkernel-x86_64-3.5.2-gentoo kernel-genkernel-x86_64-3.5.2-gentoo System.map-genkernel-x86_64-3.5.2-gentoo
Vorbereiten des USB Sticks
Erstelle 2 Partitionen auf dem Stick (ausgehend davon, dass die Installation eine /boot und eine /(root) Partition hat). Wir nehmen an, dass das USB Stick /dev/sdb ist (führe dmesg nach dem einstecken des USB Sticks aus, um zu sehen, welches Gerät verwendet wird) .
root #
fdisk /dev/sdb
Command (m for help): d Selected partition 1 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-4001759, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-4001759, default 4001759): +100M Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (1-4, default 2): Using default value 2 First sector (206848-4001759, default 206848): Using default value 206848 Last sector, +sectors or +size{K,M,G} (206848-4001759, default 4001759): Using default value 4001759 Command (m for help): a Partition number (1-4): 1 Command (m for help): p Disk /dev/sdb: 2048 MB, 2048901120 bytes 255 heads, 63 sectors/track, 249 cylinders, total 4001760 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x001663df Device Boot Start End Blocks Id System /dev/sdb1 * 2048 206847 102400 83 Linux /dev/sdb2 206848 4001759 1897456 83 Linux Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.
Vergewissern Sie sich, dass die erste Partition bootfähig ist (der Befehl a
schaltet das Boot-Flag um).
Formatiere nun die neuen Partitionen. In diesem Beispiel nutzen wir das ext2 Dateisystem, aber für die / Partition kann auch ein anderes verwendet werden, sofern es vom Kernel unterstützt wird. Beachte, dass während der Formatierungsoperation, ein Label der Partition zugewiesen wurde. Das ist wichtig, weil es einstellt, wie das Rootdateisystem später ermittelt wird und das USB Stick auch auf Systemen booten kann, wo die Laufwerksbuchstabenzuweisung völlig anders ist.
root #
mkfs.ext2 -L GENTOO_USB_BOOT /dev/sdb1
root #
mkfs.ext2 -L GENTOO_USB_ROOT /dev/sdb2
Gentoo stage 3 Installation
Wenn nun der Kernel, die Ramdisk und das Dateisystem bereit sind, müssen wir die minimale Installation ausführen. Dazu gehört ein frisches stage3 als auch ein Portage-Baum-Snapshot.
Für dieses Beispiel wird stage3-amd64-20120621.tar.bz2 und portage-latest.tar.xz genutzt. Das nächste Stück ist das Selbe wie in dem Handbuch zur Gentooinstallation beschrieben.
root #
mount /dev/sdb2 /mnt/gentoo
root #
cd /mnt/gentoo
root #
tar -xpf ~/Download/stage3-amd64-20120621.tar.bz2
root #
cd usr
root #
tar -xpf ~/Download/portage-latest.tar.xz
root #
mount /dev/sdb1 /mnt/gentoo/boot
root #
cp /tmp/boot/* /mnt/gentoo/boot
Der nächste Teil beinhaltet die Stücke einer Gentooinstallation, welche speziell für die Installation auf einem USB Stick sind. Es wird geraten, das Gentoo handbook zugleich mit dem beachten dieser Informationen zu nutzen.
Bootloader
Um das neue System zu booten, muss der Bootloader auf dem USB Stick installiert werden.
Die folgenden Abschnitte enthalten Beispielkonfigurationen für die Verwendung von GRUB oder von lilo zusammen mit syslinux.
GRUB
Diese Methode gilt nur für UEFI-Booting!
Emerge GRUB (in der Chrootumgebung):
(chroot) #
emerge sys-boot/grub
Installieren Sie GRUB mit Ihren Plattforminformationen an den entsprechenden Ort. Angenommen Sie verwenden einen x86_64 Rechner mit einer EFI-Partition eingebunden unter /boot/efi, dann wird der folgende Befehl GRUB auf dem USB-Stick installieren:
(chroot) #
grub-install --efi-directory=/boot/efi --target=x86_64-efi --removable
Beachten Sie, dass die Option
--removable
sehr wichtig ist. Sie zeigt an, dass der Zielspeicherort ein Wechseldatenträger ist. Vergessen Sie das nicht, sonst könnten Sie Ihr eigenes System durcheinander bringen!Wenn nichts Schlimmes passiert, führen Sie grub-mkconfig aus, um die GRUB-Konfiguration zu erstellen:
(chroot) #
grub-mkconfig -o /boot/grub/grub.cfg
Ändern Sie das Zielverzeichnis entsprechend, wenn Sie ein anderes GRUB-Konfigurationsverzeichnis verwenden.
Lilo
Emerge lilo (in der Chrootumgebung)
(chroot) #
emerge sys-boot/lilo
Bearbeite etc/lilo.conf, sodass es die richtigen Informationen enthält.
Diese Einstellungen sind sehr wichtig und werden nun Zeile für Zeile betrachtet.
boot=/dev/sdb # The location of the USB Stick (currently)
lba32 # use lba32 addressing (ignore)
compact # boot quickly by loading lots of blocks
# remove when there are problems with booting
prompt # Prompt for user input
timeout=20 # Time to wait before default selection
default="Gentoo-352" # Default selection after timeout
image=/boot/vmlinuz-5.10.76-gentoo-r1-x86_64
label="Gentoo-352"
read-only
root=/dev/ram0
append="root=LABEL=GENTOO_USB_ROOT scandelay=5"
initrd=/boot/initramfs-5.10.76-gentoo-r1-x86_64.img
Die Zeilen nach image sind alle einfach, aber die angefügte Zeile enthält interessante Informationen.
root=LABEL=GENTOO_USB_ROOT
nutzt das Label der Partition
statt /dev/sdb2. Das ist wichtig, weil die Gerätenummer sich ändert, je nachdem wie viele Geräte an den Computer angeschlossen sind.
- Außerdem ist es wichtig, damit das USB bootet, dass die
scandelay
Option verwendet wird, weil das USB Stick etwas Zeit braucht, um von der Kernel erkannt zu werden.
Wenn viele Module verwendet werden, dauert es eine weile zum Booten, aber wenn es nur wenige sind, ist es wichtig, weil das System dann gebootet haben könnte, bevor die Kernel die das USB Stick erkennt. Außerdem ist es bei neueren Maschinen mit USB3 Controller nötig, dass der xhci_hcd
Treiber hinzugefügt wird (in den Kernel eingebaut oder als Modul).
Installiere nun LILO (mit der Konfiguration) auf dem USB Stick:
(chroot) #
lilo
Warning: /dev/sdb is not on the first disk Warning: The initial RAM disk is too big to fit between the kernel and the 15M-16M memory hole. It will be loaded in the highest memory as though the configuration file specified "large-memory" and it will be assumed that the BIOS supports memory moves above 16M. Added Gentoo-352 ? * 2 warnings were issued.
Die erste Warnung ist, weil wir den Bootloader nicht auf der Hautpartition des Computers installieren, sondern auf dem USB Stick. Die zweite ist nur ein Problem, wenn man alte Geräte verwendet; wenn das ein Problem ist, entferne Module von dem Kernel.
Syslinux
Syslinux funktioniert im Moment nur mit ext{2,3,4}, btrfs, ntfs und dem fat Dateisystem.
(chroot) #
emerge syslinux
Schiebe den Bootsektor auf das USB Stick.
(chroot) #
dd bs=440 count=1 conv=notrunc if=/usr/share/syslinux/mbr.bin of=/dev/sdb
Konfiguriere nun den Bootloader.
(chroot) #
mkdir /boot/syslinux
(chroot) #
nano -w /boot/syslinux/syslinux.cfg
PROMPT 1
TIMEOUT 50
DEFAULT gentoo
LABEL gentoo
LINUX ../vmlinuz-5.10.76-gentoo-r1-x86_64
APPEND root=LABEL=GENTOO_USB_ROOT scandelay=3 ro
INITRD ../initramfs-5.10.76-gentoo-r1-x86_64.img
Das
ro
in der APPEND
Zeile bestimmt, das die Partition nur zum lesen, nicht aber zum schreiben eingehangen wird (was auf einem USB Stick empfohlen wird). Ersetze ro
mit rw
um zu erlauben, dass das System nach dem Booten verändert wird (sodass der Nutzer nicht erst eine andere Partition
zum Speichern usw. einhängen muss).Installiere als nächstes Syslinux auf dem USB Stick. Die --device /dev/sdb1
Option ist nicht unbedingt notwendig.
(chroot) #
extlinux --device /dev/sdb1 --install /boot/syslinux
fstab
LABEL=GENTOO_USB_BOOT /boot ext2 noauto,noatime 1 2
LABEL=GENTOO_USB_ROOT / ext2 noatime 0 1
/dev/SWAP none swap sw 0 0
/dev/cdrom /mnt/cdrom auto noauto,ro 0 0
/dev/fd0 /mnt/floppy auto noauto 0 0
Tipps und Tricks
Trotzdem ist es auch möglich einfach ein Standard Gentoosystem zu nutzen, es ist erstrebenswert binäre Pakete auf einem Host zu compilieren und sie dann auf dem USB Stick zu installieren. Wenn die Maschine genug Speicher hat, kann man auch einfach /var/tmp in tmpfs einhängen und dadurch wird die Kompilierung auch wesentlich schneller.
Siehe auch
- Installation — an overview of the principles and practices of installing Gentoo on a running system.
- LiveUSB — explains how to create a Gentoo LiveUSB or, in other words, how to emulate a x86 or amd64 Gentoo LiveCD using a USB drive.