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
_images/configuring_dash.jpg

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.