Eigenes Raspbian Image für den Raspberry Pi erstellen

In den letzten Tagen habe ich euch einige Tutorials zum aufsetzen eines OSCam Servers auf dem Raspberry Pi zur Verfügung gestellt. Zu meinem Bedauern gibt es leider recht wenige fertige Raspberry Pi Images welche bereits alle wichtigen Tools enthalten. Das möchte ich ändern und zeige euch daher wie ihr euer eigenes Raspbian Image von Grund auf erstellt und notwendige Konfigurationen und Einstellungen anpasst. Dieses HowTo ist ehr etwas für erfahrene Raspberry Pi und Linux Anwender.

Inhaltsverzeichnis

Wie funktioniert das überhaupt?

Wir verwenden hier ein Verfahren das sich debootstrapping nennt, damit wir erstellen ein Linux System in einem Verzeichnis auf einem bereits laufenden Linux System mit dem Tool debootstrap und erstellen uns dann ein eigenes Image File.

debootstrap ermöglicht die Installation eines Debian Betriebssystems aus einem laufendem System heraus. Insbesondere kann dabei das Installationsziel eine physikalische Partitionen oder aber eine chroot-Umgebung sein. Debootstrap selber installiert nur ein minimales Grundsystem, was zunächst noch einigen Anpassungen bedarf. Ist dies geschafft, kann man sehr leicht mittels apt ein vollwertiges System erstellen. Zusätzlich zu dem via debootstrap erstellten File System benötigen wir noch die Raspberry Pi Firmware, den Kernel und die Kernel Module welche wahlweise fertig aus dem git Repository geladen oder selbst erstellt werden können.

Vorbereitungen

Für das Erstellen unserer Umgebung verwende ich eine Ubuntu Installation als virtuelle Maschine, wie ihr die Genau aufsetzt habe ich euch in meinem Cross Compiling Artikel beschrieben. Zusätzlich habe ich einen SD-Karten Leser den ich an meine Virtuelle Maschine durchschleife, dieser ist aber optional da das erstellte Image später auch via Windows geschrieben werden kann.

raspbian

Eigenes Raspbian Image – debootstrap

Wenn ihr euer Ubuntu System soweit vorbereitet habt benötigen wir als erstes die entsprechende Software und eine Passende Umgebung.

Wir öffnen über das Startmenu ein Terminal und legen uns als erstes ein Arbeitsverzeichnis im Home unseres Benutzers an

Dann installieren wir zwei Pakete welche wir für die Erstellung einer debootstrap Umgebung benötigen. Das ist der QEMU zum Emulieren der ARM Umgebung und das Tool debootstrap welches uns die Umgebung anlegt.

Als nächstes führen wir das Debootstrap Tool aus, dieses läd uns alle notwendigen Sourcen aus dem Raspbian Repository.  Der Vorgang dauert eine Weile. Wer sich ein Minimal Image erstellen möchte fügt den Parameter „–variant=minbase“ hinzu.

Nun benötigen wir noch einige Mounts sodass später uns chroot funktioniert, solltet ihr eure Arbeit unterbrechen und das System neu starten müssen diese erneut erstellt werden (Ihr müsst auch wieder via chroot ins raspbian wechseln).

Eigenes Raspbian Image – Firmware und Kernel

Da Raspbian später auf dem Raspberry Pi laufen soll benötigen wir noch aktuelle Firmware welche wir uns schon mal herunterladen, auch das wird eine weile dauern (3,1GB). Wir kopieren die Firmware in unser Raspbian nach /opt. Die Firmware enthält ebenfalls den speziell für den Raspberry Pi erstellten Kernel und die Kernel Module, wir kopieren diese in die richtigen Verzeichnisse unserer Raspbian-Umgebung. Zusätzlich erstellen wir das Boot File System und räumen dann etwas auf. (Alternativ könnt ihr natürlich auch einen eigenen Kernel bauen, hierzu hatte ich bereits eine Anleitung erstellt.)

Eigenes Raspbian Image – chroot

Als nächstes kommt der spannende Teil, wir machen ein „chroot“ in das eben heruntergeladenen System und können dort alle notwendigen Einstellungen und Installationen vornehmen.

In der chroot Umgebung fügen wir als erstes das Raspbian Software Repository hinzu sodass wir weitere Pakete in unser Image installieren können und führen ein Update der Paket Liste durch.

Image Customizing

In der chroot Umgebung können wir mit dem Customizing des Image beginnen. Mein System benötigt später natürlich einen Hostnamen, da ich nicht jede Datei immer mit dem Editor öffnen möchte erledigt das folgende Code-Zeile in der Shell für uns.

Das gleiche machen wir mit der lokalen Hosts Datei unter /etc/hosts das“t“ ist ein Tabulator und sollte nicht entfernt werden.

Dann editieren wir noch die Standardeinstellungen für die Netzwerkkarten

Da wir später beim booten unseres Images natürlich auch das File System Mounten wollen editieren wir noch die /etc/fstab

Dann setzen wir noch einige Umgebungsvariablen um später Fehler zu vermeiden.

Jetzt installieren wir noch einige oft benötigte Software ins Image und erstellen den Standard Benutzer „pi“ mit dem Passwort „raspberry“.

Da wir später einen USB Geräte verwenden konfigurieren wir noch die Einstellungen in usbmount.conf

Wer noch eigene Einstellungen und Software in das Image integrieren will kann dies jetzt tun, als letztes säubern wir noch den Cache und verlassen die chroot Umgebung.

Eigenes Raspbian Image – Image für  SD Karte erstellen

Wieder zurück im Ubuntu System müssen wir vor dem Erstellen eines Images noch die QEMU-Umgebung aufräumen, Achtung danach könnt ihr nicht wieder via chroot in das System wechseln.

ACHTUNG! Erhaltet ihr beim umount von /dev einen Fehler „Device is busy“ müsst ihr euer System einmal rebooten.

Als erstes erstellen wir eine leere Image Datei in unserem Arbeitsverzeichnis (5GB = Blocksize 1MB x 5120)

Dann Mounten wir das Image (bei mir als /dev/loop0)

Jetzt bearbeiten wir die Partitionen des erstellten Images über den Mountpoint (bei mir wurde der Loop Device auf dev/loop0 gemountet). Einfach den Inhalt des folgenden Listings via copy & past in euer Terminal kopieren. Die Schritte können auch manuell ausgeführt werden. „sudo fdisk /dev/loop0“ und dann die Kommandos eingeben, immer den Buchstaben pro Zeile und dann Enter. Eine Leerzeile ist der Standardwert (mit Enter bestätigen).

Dann entfernen wir die Loop Device wieder

Wir passen noch das Partition Mapping via kpartx an, auch hier erhalte ich als Rückgabewert wieder meinen loop0 unter welchem die Partitions gemountet wurden.

Wir formatieren noch das File System der beiden erstellten Partitionen (loop0 durch eure Rückgabe ersetzen). Unsere Boot Partition als FAT32 und unser Root File System als EXT4.

Root File System schreiben

Jetzt können wir unser vorher erstelltes debootstrap Verzeichnis  „chroot-raspbian-armhf“ in das Image schreiben. Das erledigt rsync für uns.

Boot File System schreiben

Jetzt können wir unser vorher erstelltes „bootfs“ in das Image schreiben. Zusätzlich erstellen wir noch eine config.txt die angibt welcher Kernel verwendet wird und wie unser Raspberry Pi takten soll. Auch hier wieder loop0 mit eurem Loop Device ersetzen.

Als letztes entfernen wir noch die erstellten Partition Mappings

Voilat, das wars auch schon. Ihr könnt nun euer eigenes Image wie gewohnt auf die SD-Karte eures Raspberry Pi schreiben. Ich erledige das, da ich meinen Leser durchgeschleift habe, direkt im Ubuntu (sudo dd bs=4M if=raspberry.tips.img of=/dev/sdc).

Viel Erfolg!