Dies ist eine alte Version des Dokuments!


Root-Filesystem

Auf einem Linux-System wird zuerst der Kernel booten. Dabei werden alle seine Subsysteme initialisiert. Anschliessend wird versucht das Root-Filesystem zu mounten. Dieses befindet sich im Wurzelverzeichnis »/«. Das Root-Filesystem beinhaltet Login- und Shellprogramme, die Systemkonfiguration und ladbare Kernel-Module. Fix installierte Module befinden sich im Kernel selber.
Der Speicherort des Root-Filesystems ist im Kernel fix einprogrammiert und lässt sich ändern mit rdev. Zum Root-Filesystem gehören einige wenige Toplevel-Verzeichnisse und die darin enthaltenen Unterverzeichnisse.

Wichtig

Ein Root-Filesystem kann mit Multistrap sehr einfach und elegant erstellt werden. Allerdings sind die Speicheranforderungen relativ hoch. Mit Buildroot reduziert sich die Grösse stark, allerdings bedingt das einen grösseren Aufwand (siehe weiter unten). Die Unterschiede werden in diesem Artikel gut gezeigt.

Multistrap

Wir benutzen Multistrap für die Erstellung eines Root-Filesystems. Dort befinden sich auch Beispiele für die notwendigen Konfigurationsdateien. Ein weiteres Beispiel findet sich unter Projekt Beo-IT

Vorbereitung: Tools installieren

  1. Debian Multistrap installieren:
    apt-get install multistrap
  2. Emdebian-Archiv-Schlüssel installieren:
    apt-get install emdebian-archive-keyring
  3. Qemu installieren, es wird Version 1.5 oder neuer benötigt.
    1. Für Debian 7: Da in den Paketquellen von Debian Wheezy nur Version 1.2 verfügbar ist, muss das Paket aus dem Backports-Repository verwendet werden. Dazu sind folgende Schritte notwendig:
      1. Backport Quellen eintragen (am Ende der Datei hinzufügen):
        nano -w /etc/apt/sources.list
        wheezy backports
        deb http://mirror.switch.ch/ftp/mirror/debian/ wheezy-backports main
      2. Paket-Liste aktualisieren:
        apt-get update
      3. Qemu aus den Backports installieren:
        apt-get -t wheezy-backports install qemu qemu-user-static
    2. Für Ubuntu und Linux Mint: In den Paketarchiven von Ubuntu 14.04 und Linux Mint 17 liegt QEmu 2.0 bereit, welches direkt verwendet werden kann:
      apt-get install qemu qemu-user-static
  4. Unterstützung für zusätliche Binärformate installieren:
    apt-get install binfmt-support
  5. schroot installieren:
    apt-get install schroot
  6. mtd-utils installieren:
    apt-get install mtd-utils

Erstellen

FIXME Achtung: Problem mit Ubuntu: siehe https://bugs.launchpad.net/ubuntu/+source/multistrap/+bug/1313787

  1. Multistrap-Konfiguration im aktuellen Arbeitsverzeichnis erstellen:
    nano myBoard.multistrap
    myBoard.multistrap
     [General]
    ...
    
    [Grip]
    ...
    
    [Debian]
    ...
  2. Root File System bootstrappen. Dies erstellt ein Grundsystem im Verzeichnis /opt/multistrap/:
    multistrap -f myBoard.multistrap 
  3. Skript für automatische Konfiguration erstellen:
    nano /opt/multistrap/autoconfig.sh
    autoconfig.sh
    #!/bin/sh
    export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true
    export LC_ALL=C LANGUAGE=C LANG=C
    /var/lib/dpkg/info/dash.preinst install
    dpkg --configure -a
    mount proc -t proc /proc
    dpkg --configure -a
  4. Konfigurationsskript ausführbar machen:
    chmod 755 /opt/multistrap/autoconfig.sh
  5. schroot Konfiguration erstellen:
    nano /etc/schroot/chroot.d/my-emdebian-grip.conf
    my-emdebian-grip.conf
    [my-emdebian-grip]
    description=My schroot Configuration for Emdebian Grip Wheezy
    aliases=my-emdebian
    type=directory
    directory=/opt/multistrap
    root-groups=root
    users=$USER
    groups=sbuild
  6. Untere Adresslimitierung für Qemu deaktivieren:
    echo 0 > /proc/sys/vm/mmap_min_addr
  7. Qemu-Binary in das eben erstellte Root-Filesystem kopieren: FIXME
    cp /usr/bin/qemu-ppc-static /opt/multistrap/usr/bin/
  8. chroot Umgebung betreten (in Arbeitsverzeichnis ausführen):
    schroot -c my-emdebian-grip
  9. Konfigurationsskipt ausführen: FIXME
    (my-emdebian-grip)$ /autoconfig.sh
  10. Root Passwort festlegen:
    (my-emdebian-grip)$ passwd
  11. APT Cache löschen:
    (my-emdebian-grip)$ apt-get clean
  12. chroot Umgebung wieder verlassen:
    (my-emdebian-grip)$ exit
  13. Mount-Punkte festlegen:
    nano /opt/multistrap/etc/fstab
    fstab
    #/etc/fstab
    /dev/root  /               jffs2    defaults                        0  0
    proc       /proc           proc     defaults                        0  0
    ...
  14. Serielles Terminal konfigurieren (board-spezifisch).
    • Editieren von /opt/multistrap/etc/inittab</code>
    • Sicherstellen, dass der Benutzer root sich am seriellen Terminal anmelden kann. Dazu muss in der Datei /opt/multistrap/etc/securetty die aktive tty Verbindung eingetragen sein.
  15. Netzwerkkonfiguration (passend für NTB-Netz):
    nano /opt/multistrap/etc/network/interfaces
    interfaces
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet static
               address 146.136.36.x
               netmask 255.255.252.0
               gateway 146.136.36.1
  16. Hostname konfigurieren:
    echo myBoard > /opt/multistrap/etc/hostname
  17. Bash primary promt string (PS1-String) anpassen:
    nano /opt/multistrap/etc/bash.bashrc
    1. Die Zeile:
      PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    2. Ersetzen durch:
      PS1='[MY_TARGET] \u@\h:\w\$ '
  18. Qemu-Binary im erstellten Root FS wieder löschen:
    rm /opt/multistrap/usr/bin/qemu-ppc-static
  19. Device Node Tabelle im aktuellen Arbeitsverzeichnis erstellen (board-spezifisch):
    # nano device_table
    device_table
    # name		type	mode	uid	gid	major	minor	start	inc	count
    /dev/console	c	600	0	0	5	1	0	0	-
    ...
  20. Dateisystemabbild erzeugen:
    # mkfs.jffs2 -n -e 0x40000 -p 0x40000 -b -d /opt/multistrap -D device_table -o my-rfs.jffs2

Automatisches Build Skript

Ein Root-Filesystem kann auch mit einem automatischen Build-Script erstellt werden. Das folgende Skript zeigt ein Beispiel.

Buildroot

Wir benutzen Buildroot für die Erstellung eines Root-Filesystems. TODO