Mittlerweile hat es sich fast eingebürgert, für “kleine” Linux-Anforderungen ein Ubuntu oder Debian zu nehmen und dieses abzuspecken. Je nach Vehemenz landet man dabei meistens so bei 200MB, mit ein wenig Herumgetrickse auch mal bei 80 bis 100MB. Ich bin der Ansicht, dass nicht die Benutzung einer “klassischen” Distribution und deren Abspecken der beste Weg ist, sondern der Aufbau auf Null. Doch ganz auf den Morast einer unerschlossenen Sumpflandschaft möchte man nicht bauen – ich habe daher ein minimales Fundament erstellt, nicht viel mehr als eine Bodenplatte. Continue reading
Category Archives: Mini-Linux
Cross compiling uClibc and busybox
There are a few articles from this blog that are old, but still known an read – even outside the small area of people speaking German. Thus this article written in English. My intention is to show how to cross compile uClibc and a BusyBox that is statically linked with this uClibc. The resulting BusyBox can be used to build some minimal Linux system. Around three or four Megabytes if you keep it really small. Nearly five years ago I wrote a tutorial on this topic (in German) on which I still receive feedback quite often. Since this tutorial is very outdated (module loading, initrd vs. initramfs, multiple initramfs), I plan to update it. This tutorial will show a quick alternative to get a working cross compiled BusyBox.
The content of this blog entry is partially based on the “semi official tutorial” how to cross compile BusyBox and partially on my experience with Linux from Scratch, especially Chapter 5 – Constructing a temporary system. At the time of this being written, I tried to make sure that very few patches are necessary – this will not always be the way, maybe GCC 4.7 will need more patches or BusyBox 1.19 does. uClibc 0.9.32 does not yet build cleanly on x86, thus I stay with uClibc 0.9.31.1 for this time: Continue reading
Randnotizen, 26. Juni 2009: LessLinux, Android, SkyOS
Nach langer Abstinenz wieder einmal ein paar Randnotizen zu Dingen, die in den letzten Tagen so aufgefallen sind:
-
LessLinux: Auch mit “meiner” eigenen, lose auf Linux From Scratch aufbauenden Live-Distribution LessLinux ging es in den letzten Wochen in vielen kleinen Schritten weiter. Mittlerweile wird viel Standard-Netzwerk-Hardware automatisch erkannt, WLAN kann mit WICD angesprochen werden, einige eigene Ruby-Gtk-Scripte sorgen für eine komfortable Installation auf USB-Stick oder die Erstellung von Containern mittels Cryptsetup.
Jetzt kommt die Stelle, an der Ihr helfen könnt: Bitte ladet Euch den aktuellsten Build herunter und erstellt ein Hardware-Protokoll. Mit diesem Hardware-Protokoll (es enthält die Ausgaben von lspci, lsusb und lshw), habe ich es leichter, die Hardwareerkennung zu verbessern.
-
Android: Das Handy-Linux kommt nun auch mit einem Native Development Kit, mit dem sich native Linux-Anwendungen erstellen lassen, die direkt auf dem Linux des Android und nicht auf der aufgesetzten Dalvik VM laufen. Insbesondere die Portierung von Emulatoren und einigen Spielen, die SDL verwenden, dürfte vom NDK profitieren.
Unterdessen zeigt Android bereits erste Fragmentierungserscheinungen: HTC stellte auf dem eigenen Telefon eine erweiterte Oberfläche “Sense UI” vor, die leider nicht auf die Telefone mit Google Branding kommen soll. Mal gespannt, ob das Resultat bald drei verschiedene Adressbuch-APIs sind.
-
SkyOS: Bei SkyOS handelte es sich bislang um proprietäres ein Ein-Mann-Betriebssystem. Ein C++-lastig implementiertes OS für 32-Bit-x86, das mit einer gut durchdachten Architektur glänzen kann. Als Problem stellte sich in den letzten Jahren jedoch die Treiber-Unterstützung heraus, zuletzt kam die Entwicklung fast zum Erliegen. Nun hat der Entwickler Robert Szeleney einen radikalen Schritt gewagt und SkyOS auf einen Linux-Kernel und ein minimales Linux-Userland gestellt. Die Vorgehensweise erinnert etwas an NeXTstep bzw. MacOS X. Auf jeden lohnt es sich, ein Auge auf die weitere Entwicklung zu werfen. Mehr im Blog von Robert Szeleney
-
Netbooks: In den letzten Monaten hat sich hier wenig getan. Netbooks sind beinahe eine Commodity und unterscheiden sich nur noch im Preis. Die letzten Juli für 399 Euro verkauften Medion Akoya E1210 gibt es nun als B-Ware für 219 Euro. Da fällt es umso positiver auf, dass HP mit dem hübschen, wenn auch nicht ganz billigen HP 5101 zeigt, dass Alu und Magnesium im Understatement-Gehäuse noch ihre Berechtigung haben. Nachtrag, 30. Juni: Golem hat Details und Bilder der hierzulande verkauften Version mit UMTS.
LessLinux: Erste Alpha zum Download
So, hier steht nun die erste Alpha zum Download bereit:
http://cdprojekte.mattiasschlenker.de/Public/LessLinux/
Das Live-System macht noch nicht viel mehr, als einen Xvesa-Server mit simplem XFCE 4.6-Desktop und Firefox 3.0.8 zu starten. Die meisten gängigen Ethernet-Treiber werden geladen und Karten per DHCP konfiguriert.
Zum gegenwärtigen Zeitpunkt dürfte das System vor allem für Nutzer interessant sein, die Ideen für eigene Live-Distributionen (das Konzept der “narrow purpose” oder “single purpose distribution” für eingeschränkten oder auf eine Applikation spezialisierten Anwendungszweck) erwähnte ich ja schon. Die Distribution erstellt Hardware-Protokolle, mit denen auch technisch weniger versierte Nutzer einen Beitrag zur Weiterentwicklung leisten können.
Cheatcodes in der Alpha (mit Tab im Bootmenü erreichbar)
- toram=… Schwellwert in kB für das Kopieren ins RAM, wer es ganz vermeiden möchte, gibt einen unsäglich hohen Wert, bspw. 999999999999 an.
- skipcheck=1 Überspringt die SHA1-Prüfung von Bootdateien und Container
- skipservices=|service1|service2|…| Überspringt den Start einzelner Dienste, hier kann bspw. dropbear entfernt werden, damit der SSH-Daemon auf Port 22222 startet.
- xmode=BREITExHOEHE[xFARBTIEFE] Bevorzugte Bildschirmauflösung für den Xvesa-Server, hier kann bspw. 1680×105 oder 1280×800 übergeben werden, um die native Auflösung eines Breitbild-Displays zu verwenden.
- rootpwhash=… MD5-Hash des Root- und Userpasswortes, bspw. mit openssl passwd -1 erzeugt. Standardhash entspricht dem Passwort test
Hardwareprotokoll
Beim Start wird in /tmp/ eine Protokolldatei hwinfo.unkown.zeitstempel.tgz angelegt. Wenn beim Start ein USB-Stick anwesend ist, der einen Ordner hwinfo enthält, wird die Datei automatisch dorthin kopiert. Ich wäre dankbar, diese Hardwareprotokolle von möglichst vielen Rechnern zu erhalten. Außer der MAC-Adresse von Netzwerkkarten und dem Partitionierungsschema (Ausgabe von fdisk -l) enthalten diese Dateien keine eindeutig einem bestimmten PC zuordnenbare Informationen — ich behandle die Hardware-Protokolle natürlich vertraulich.
Bitte schickt mir Eure Hardware-Protokolle per Mail an ms@mattiasschlenker.de. Falls Ihr mit CD und Stick von Rechner zu Rechner zieht, könnt Ihr auch mit dem Cheatcode hwid=modell (bspw. hwid=akoya_e1210) eindeutigere Dateinamen ereugen lassen. Falls Ihr einen Webmailer nutzt, könnt Ihr natürlich auch die Datei in /tmp ohne Umwege versenden.
Boot von USB-Stick
Wenn ein Stick mit Syslinux bootfähig vorbereitet wurde, genügt es den Inhalt der CD auf den Stick zu kopieren.
Und weiter?
Im Laufe des Wochenendes folgen die vollständigen Quellcodes und nächste Woche dann eine erste Version der Build-Umgebung.
Linux-Distribution oder Auto — der Aufwand, es zusammenzubauen ist etwa der gleiche
Ich hatte vor gut zehn Jahren das Vergnügen hin und wieder am Aufbau von Autos mitwirken zu dürfen. Das waren entweder Oldtimer oder wüste Rekombinationen vorhandener Teile, also der Bodenplatte eines Schräglenker-Käfers mit Subaru- oder Alfa-Romeo-Wasserboxern, Porsche-Schräglenkern und was sonst noch so herumliegt. Darauf kommt eine Karrosserie, die vom Radstand her eben passt, gerne auch mal aus Fiberglas. Heute würde man wahrscheinlich noch eine Megasquirt in den Ring werfen, und erstmal einen gepatchten GCC dazu verwenden, Firmware zu kompilieren.
Damit sind wir schon ziemlich nahe am Thema: Auch eine Linux-Distribution besteht aus “am Markt erhältlichen Komponenten”, die einfach zusammengefügt werden müssen — in der Theorie. Primär aus Neugier, aber auch weil das eine oder andere Projekt, an dem ich arbeite, eine simple “single purpose live distribution” erfordert, habe ich vor etwa zwei Jahren damit angefangen, eine Distribution auf Basis von BusyBox und einer minimalen Ramdisk aufzubauen.
In den letzten Wochen hatte ich etwas Zeit, daran weiterzuarbeiten und habe ein rudimentäres Paket- und Abhängigkeitsmanagement und eine Buildumgebung für ein glibc basiertes Rootdateisystem drumherum gebaut. Daraus ist bislang ein kleines Desktopsystem mit Xvesa und XFCE 4.6 entstanden, das derzeit 50 bis 70MB Squash-Container belegt und in einer bekannten Umgebung (nur wenige Kernelmodule werden geladen) etwa 12 Sekunden bis zum Desktop braucht. Kompiliert wird in einer Chroot-Umgebung, was die Integration neuer Pakete recht einfach macht: man kann jederzeit eine Kopie der Chroot-Umgebung erstellen, reinwechseln, basteln und das resultierende Buildscript sichern. Continue reading
Busybox-Merkwürdigkeiten
Kann sich jemand dieses verhalten der Shell ash der Busybox erklären?

Zweimal wird mit Backticks die Ausgabe eines Befehls in eine Variable eingelesen. Einmal ein simples echo, einmal ein ganzes Script, das ein paar verschachtelte if und case hat. Beim einfachen echo evaluiert grep korrekt zu true, beim Script nicht.
Ich habe jetzt einen Workaround, bei dem ich nicht per Übergabe eines Parameters die Startup-Scripte sagen lasse, was sie tun, sondern verwende speziell formatierte Kommentare, die ich direkt greppe. Das ganze ist Teil eines etwas umfangreicheren, modularen Mini-Linux, an dem ich gerade arbeite — mehr dazu in den nächsten Tagen.
Wer mit meinem Build der Busybox spielen möchte: busybox-1.13.2-static-ulibc-i686.tar.gz
Neue uClibc-Chroot-Umgebung und Artikeldownload
Etwa neun Monate ist es her, dass ich die letzte Chroot-Umgebung bereitgestellt habe. Zwar ist uClibc noch immer auf dem Stand 0.9.29, doch Busybox hat gewaltige Fortschritte gemacht und ist in Version 1.9.1 erhältlich. Viele Applets verhalten sich nun kompatibler zu den GNU-Tools, es sind neue dazugekommen und problematische aussortiert worden. Insgesamt ist der Bau des “4MB-Mini-Linux” mit der neuen Busybox jetzt deutlich einfacher.
Downloads
uClibc-Chroot-Umgebung
Wer das 4MB Mini-Linux bauen möchte oder einfach ein kompaktes statisches Binary beispielsweise der BusyBox oder des Dropbear-SSH-Servers benötigt, sollte das in einer uClibc-Chroot-Umgebung tun. Denn uClibc führt nicht nur zu kompakteren Binaries, sondern vermeidet jegliche dynamisch gelinkten Bibliotheken — beim Bauen einiger Tools gegen glibc, die Login-Funktionen nutzten, werden einige glibc-Komponenten immer dynamisch verwendet. Continue reading
Das 4MB-Mini-Linux
Wie aufwendig muss ein minimales Linux-Rettungssystem sein? Die Multicall-Binaries Dropbear und Busybox zeigen, dass ein vollwertiges Linux auf weniger als vier Megabyte Platz hat. Das System kann auf Rootservern benutzt werden, um Backups zu erstellen und zurückzuspielen oder eine Firewall zu realisieren. Im Beispiel boote ich mit einem auf Platte installierten GRUB. Da nur eine Initrd und kein Root-Dateisystem benötigt wird, ist der Boot via PXELINUX aber genauso gut möglich.
Das hier vorgestellte System basiert auf den Komponenten:
- BusyBox 1.2.1
- uClibc 0.9.29 (beta) uClibc-Xen-Image als Chroot-Umgebung
- Dropbear 0.48.1 SSH-Server
- Rsync 2.6.8 für den Dateitransfer
Update: Auf cdprojekte.mattiasschlenker.de steht ein fertiges ISO-Image mit vielen IDE- und SATA-Treibern zur Verfügung. Dieses sollte nicht in Produktivumgebungen eingesetzt werden, da es seine IP-Adresse per DHCP bezieht und ein schwaches Rootpasswort (“test”) verwendet!