Rootfile-System¶
Für den RaspberryPi soll ein Debianoides-Rootfile-System erstellt werden um die Vorteile einer auf Binärpaketen basierenden Distribution nutzen zu können. Außerdem soll ein leichtes Aktualisieren der Pakete mit dem Paketmanager apt ermöglicht werden.
Diese Anleitung nutzt Ubuntu 15.04 als Grundlage, jedoch sind ältere Versionen (14.04, 12.04) sowie andere auf Debian basierende Distributionen ebenfalls kompatibel.
Generierung mit multistrap¶
Da Debian wie angesprochen auf Binärpaketen basiert, wird keine Cross-Toolchain benötigt.
Für den Build-Prozess wird multistrap
verwendet. Multistrap ist ein
Werkzeug um Debian Root Filesysteme zu erstellen. Dabei
setzt es, anders als debootstrap, APT und DPKG voraus. Eine Debian oder
auf Debian basierende Distribution ist also Voraussetzung. Es stellt eine
Weiterentwicklung gegenüber debootstrap dar, da damit auch Filesysteme
für fremde Architekturen erstellt werden können. Es kann aus den
Debian Paketquellen installiert werden:
# Installation von Multistrap über die Ubuntu-Paketquellen
$ sudo apt-get install multistrap dpkg-dev dpkg-cross
Die offizielle Dokumentation von multistrap finden Sie im Debian-Wiki unter: https://wiki.debian.org/Multistrap
Vor dem Start muss eine entsprechende Konfigurationsdatei
multistrap.conf
angelegt werden. In ihr werden die Basiseinstellungen
für das zu erstellende System spezifiziert. Für eine genaue Beschreibung
aller Optionen sollte die Manual Page zu multistrap konsultiert werden.
Ergänzt werden sollte in der packages-Sektion in jedem Fall udev, apt, dialog,
net-tools und iputils-ping. Ohne diese fünf Pakete ist das System kaum praktisch
nutzbar. Udev kümmert sich um die Geräteverwaltung, APT und dialog wird zur
Paketverwaltung installiert und die net-tools / iputils-ping werden für die
Netzwerkkonfiguration benötigt. Optional, aber sinnvoll, sind die Pakete
dhcp3-client um die Netzwerkkonfiguration vom DHCP-Server zu beziehen,
SSH für Remote-Verbindungen und vi(m) als Editor.
$ cat multistrap.conf
[General]
noauth=true
unpack=true
debootstrap=Jessie
aptsources=Jessie
arch=armel
[Jessie]
packages=udev apt dialog net-tools iputils-ping vim module-init-tools
source=http://ftp.de.debian.org/debian
keyring=debian-archive-keyring
components=main non-free
suite=jessie
Erstellt wird das Root-Filesystem mit dem Kommando:
$ sudo multistrap -a armel -d jessie -f multistrap.conf
Multistrap lädt die benötigten binären Pakete von den angegebenen Quellen herunter und stellt das System im Unterverzeichnis jessie/ zusammen. Bei der minimalen Konfiguration, wie oben, erhält man ein 240 MB großes Root-Filesystem. Abschließend müssen die Post-Install Scripts aufgerufen und einige vom Target abhängige Anpassungen durchgeführt werden. Dazu müsste in das Root-Verzeichnis mit chroot gewechselt werden. Dies ist auf Grund der unterschiedlichen Architekturen von Host und Target nicht möglich. Abhilfe schafft hier QEMU.
Emulation mittels QEMU¶
QEMU ist eine freie virtuelle Maschine, die die komplette Hardware einer Rechenmaschine emuliert. Die Installation erfolgt ebenfalls aus den Debian Paketquellen.
$ apt-get install binfmt-support qemu qemu-user-static
$ cp /usr/bin/qemu-arm-static jessie/usr/bin
Nun kann mit chroot in das Verzeichnis jessie/ gewechselt werden und die ausstehende Konfiguration durchgeführt werden.
$ sudo chroot jessie
$ dpkg --configure -a
Vor dem ersten Start muss nun noch die Konsolenausgabe von getty auf das
richtige Gerät geleitet werden. Dazu muss /etc/inittab
des neuen Root
Filesystems entsprechend angepasst werden. Zusätzlich muss mindestens
das Device /dev/console
erstellt werden. Es sollte darüber hinaus ein
Passwort für den root-Account mit passwd und ein Hostname gesetzt
werden. Um Fehlermeldungen beim Booten bzw. bei der DHCP Abfrage zu
verhindern, werden die Dateien /etc/fstab
und /etc/resolv.conf
erstellt.
$ chroot jessie
$ mknod -m 622 /dev/console c 5 1
$ passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
$ echo "T0:2345:respawn:/sbin/getty -L console 115200 vt100" >> /etc/inittab
$ echo "tqma28" > /etc/hostname
$ touch /etc/fstab
$ touch /etc/resolv.conf
Das neue Debian Jessie Root-Filesystem kann nun in die vierte Partition der SD-Karte kopiert und gestartet werden.
Weitere Rootfile-System Baukästen¶
- ELBE (Embedded Linux Build Environment)
mit Elbe können einfach Rootfile Systeme zusammengesetzt werden. Es basiert auf Python unter der Obhut von Linutronix.