Mini-UNIX

 

freebsd_logoDa habe ich doch vor kurzem einen iX-Artikel wieder entdeckt: NanoBSD: FreeBSD für Embedded-Systeme erstellen Als embedded Entwickler und UNIX-Fan interessiert mich dieses Thema natürlich besonders.

Also, was ist NanoBSD ? Laut Beschreibung ermöglicht es dem Nutzer, ein FreeBSD-System in ein Image zu packen, welches man auf eine Flash-Karte spielen und von dort benutzen kann. Klingt interessant. Daher, Linux starten und ran an die Tastatur !

Als erstes benötigt man ein FreeBSD-System. Der Download ist je nach Internet-Geschwindigkeit recht schnell erledigt. Auf der Download-Seite nimmt man die ISO des aktuellen Release (zum Zeitpunkt des Schreibens war es das 9.1-RELEASE) in der i386er CD-Version. Jetzt schnell eine virtuelle Maschine aufgesetzt und mit der CD gebootet. Für einen ersten Test am besten die Vorgaben übernehmen, aber gleich die Ports-Kollektion auswählen und einspielen lassen.

Laut Anweisung (Punkt 2.2) wechselt man in das nanobsd-Verzeichnis und stösst dort den Build an:

freebsd> cd /usr/src/tools/tools/nanobsd
freebsd> sh nanobsd.sh
00:00:00 # NanoBSD image full build starting
00:00:00 ## Clean and create object directory (/usr/obj/nanobsd.full/)
00:00:02 ## Construct build make.conf (/usr/obj/nanobsd.full//make.conf.build)
00:00:02 ## run buildworld
00:00:02 ### log: /usr/obj/nanobsd.full//_.bw
00:00:00 # NanoBSD image full build starting
00:00:00 ## Clean and create object directory (/usr/obj/nanobsd.full/)
00:00:00 ## Construct build make.conf (/usr/obj/nanobsd.full//make.conf.build)
00:00:00 ## run buildworld
00:00:00 ### log: /usr/obj/nanobsd.full//_.bw
01:10:44 ## build kernel (GENERIC)
01:10:44 ### log: /usr/obj/nanobsd.full//_.bk
01:25:07 ## Clean and create world directory (/usr/obj/nanobsd.full//_.w)
01:25:07 ## Construct install make.conf (/usr/obj/nanobsd.full//make.conf.install)
01:25:07 ## installworld
01:25:07 ### log: /usr/obj/nanobsd.full//_.iw
01:25:53 ## install /etc
01:25:53 ### log: /usr/obj/nanobsd.full//_.etc
01:25:54 ## configure nanobsd /etc
01:25:54 ## install kernel (GENERIC)
01:25:54 ### log: /usr/obj/nanobsd.full//_.ik
01:25:57 ## run customize scripts
01:25:57 ## configure nanobsd setup
01:25:57 ### log: /usr/obj/nanobsd.full//_.dl
01:25:58 ## run late customize scripts
01:25:58 ## build diskimage
01:25:58 ### log: /usr/obj/nanobsd.full//_.di
01:27:00 # NanoBSD image full completed

Nach einer Weile (bei mir ca. 1,5 h) ist das Image erstellt. Es ist ca. 730 MByte groß, passt also noch auf eine 1 GByte Flash-Karte.

freebsd> cd /usr/obj/nanobsd.full
freebsd> ls -lha _.disk,full
-rw-r--r-- 1 root wheel 732M Sep 10 10:53 _.disk.full

Was macht man nun damit ? Am besten erst einmal aus der virtuellen Maschine holen (am besten via Netzwerk und ssh bzw. scp) und dann damit einen Rechner booten. Nun hat nicht jeder gleich einen bereit stehen, um das Image zu testen. Da hilft die Virtualisierung. Zum Testen muss nicht gleich eine komplette neue virtuelle Maschine angelegt werden. Das geht auf der Kommandozeile viel schneller:

$> qemu -m 512 -hda _.disk.full -boot c

startet eine virtuelle Maschine mit 512 MB RAM (Parameter: -m), dem erstellten Image als Festplatte (-hda) und bootet von dieser (-boot; c bezeichnet hier die erste Platte). Es bootet ein FreeBSD-System, an dem man sich als root anmelden kann (ohne Passwort). Das root-Dateisystem ist Flash-freundlich read-only gemountet, /etc und /var für die dynamischen Dateien liegen in einer RAM-Disk.

screenshot_nanobsd-20130910-001

screenshot_nanobsd-20130910-002

Allerdings fällt auf, dass der Bootvorgang doch recht lange dauert. Ähm, kurz überlegen: Die meisten UNIX-Systeme geben ihre Boot-Meldungen (auch) über die serielle Schnittstelle heraus. Um die zu sehen kann man die Ausgaben des seriellen Ports mittels des serial-Parameters z. B. auf die Standard Ein-Ausgabe umleiten:

$> qemu -m 512 -hda _.disk.full -boot c -serial stdio

1 FreeBSD
2 FreeBSD

F6 PXE
Boot: 1

Ah, da erscheint ein kleines Bootmenu ! Es gibt bei NanoBSD 2 Partitionen, die ein Abbild des Systems enthalten (Siehe Kap. 2.1 des HowTo). So kann man eine Partition updaten und die andere bleibt als Backup bestehen.

Definitiv ein interessantes Projekt, das eine weitere Beschäftigung damit rechtfertigt. Man kann nämlich das System mit Shellfunktionen an die eigenen Wünsche anpassen. Es lassen sich Pakete hinzufügen bzw. entfernen und die Konfiguration anpassen. Mal sehen, wenn wieder etwas Zeit übrig ist…

Schreibe einen Kommentar

Name *
E-Mail-Adresse *
Website