<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Das Rootserver-Experiment &#187; Mini-Linux</title>
	<atom:link href="http://blog.rootserverexperiment.de/category/mini-linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rootserverexperiment.de</link>
	<description>Erlebnisse eines Rootserver (Beinahe-) Neulings</description>
	<lastBuildDate>Sat, 04 Sep 2010 13:18:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Randnotizen, 26. Juni 2009: LessLinux, Android, SkyOS</title>
		<link>http://blog.rootserverexperiment.de/2009/06/26/randnotizen-26-juni-2009-lesslinux-android-skyos/</link>
		<comments>http://blog.rootserverexperiment.de/2009/06/26/randnotizen-26-juni-2009-lesslinux-android-skyos/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 11:53:27 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[EeePC]]></category>
		<category><![CDATA[Gadgets]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MSI Wind]]></category>
		<category><![CDATA[Mini-Linux]]></category>
		<category><![CDATA[Netbook]]></category>
		<category><![CDATA[Randnotizen]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=402</guid>
		<description><![CDATA[Nach langer Abstinenz wieder einmal ein paar Randnotizen zu Dingen, die in den letzten Tagen so aufgefallen sind:


LessLinux: Auch mit &#8220;meiner&#8221; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Nach langer Abstinenz wieder einmal ein paar Randnotizen zu Dingen, die in den letzten Tagen so aufgefallen sind:</p>
<ul>
<li>
<p><b>LessLinux:</b> Auch mit &#8220;meiner&#8221; eigenen, lose auf <a href="http://www.linuxfromscratch.org/">Linux From Scratch</a> aufbauenden Live-Distribution <a href="http://blog.lesslinux.org/">LessLinux</a> 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.</p>
<p><b>Jetzt kommt die Stelle, an der Ihr helfen könnt:</b> Bitte <a href="http://download.lesslinux.org/testing/">ladet Euch den aktuellsten Build herunter</a> und <a href=http://blog.lesslinux.org/howto-boot-faster-create-hardware-protocols/">erstellt ein Hardware-Protokoll</a>. Mit diesem Hardware-Protokoll (es enthält die Ausgaben von <tt>lspci</tt>, <tt>lsusb</tt> und <tt>lshw</tt>), habe ich es leichter, die Hardwareerkennung zu verbessern.</p>
</li>
<li>
<p><b>Android:</b> Das Handy-Linux kommt nun auch mit einem <a href="http://www.golem.de/0906/68014.html">Native Development Kit</a>, 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.</p>
<p>Unterdessen zeigt Android bereits erste Fragmentierungserscheinungen: HTC stellte auf dem eigenen Telefon eine erweiterte Oberfläche &#8220;<a href="http://www.golem.de/0906/67965.html">Sense UI</a>&#8221; vor, die leider <a href="http://www.engadgetmobile.com/2009/06/25/htcs-sense-ui-not-coming-to-any-google-branded-phones/">nicht auf die Telefone mit Google Branding kommen</a> soll. Mal gespannt, ob das Resultat bald drei verschiedene Adressbuch-APIs sind.</p>
</li>
<li>
<p><b>SkyOS:</b> 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 <a href="http://www.osnews.com/story/20880/SkyOS_Chasing_Butterflies_UPDATED_">Entwicklung fast zum Erliegen</a>. Nun hat der Entwickler Robert Szeleney <a href="http://www.osnews.com/story/21726/SkyOS_Linux_Progress_Report">einen radikalen Schritt gewagt</a> 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 <a href="http://skyos.org/?q=node/650">Blog von Robert Szeleney</a></p>
</li>
<li>
<p><b>Netbooks:</b> 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 <a href="http://www.medion.com/de/electronics/cat/10/notebooks_mini">als B-Ware für 219 Euro.</a> Da fällt es umso positiver auf, dass HP mit dem <a href="http://www.engadget.com/2009/06/24/hp-mini-5101-cleans-up-nice-shows-the-serious-side-of-netbooks/">hübschen, wenn auch nicht ganz billigen HP 5101</a> zeigt, dass Alu und Magnesium im Understatement-Gehäuse noch ihre Berechtigung haben. <b>Nachtrag, 30. Juni:</b> Golem hat <a href="http://www.golem.de/0906/68066.html">Details und Bilder</a> der hierzulande verkauften Version mit UMTS.</p>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/06/26/randnotizen-26-juni-2009-lesslinux-android-skyos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LessLinux: Erste Alpha zum Download</title>
		<link>http://blog.rootserverexperiment.de/2009/04/04/lesslinux-erste-alpha-zum-download/</link>
		<comments>http://blog.rootserverexperiment.de/2009/04/04/lesslinux-erste-alpha-zum-download/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 08:58:46 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=372</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>So, hier steht nun die erste Alpha zum Download bereit:</p>
<p><a href="http://cdprojekte.mattiasschlenker.de/Public/LessLinux/" target="_blank">http://cdprojekte.mattiasschlenker.de/Public/LessLinux/</a></p>
<p>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.</p>
<p>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 &#8220;narrow purpose&#8221; oder &#8220;single purpose distribution&#8221; 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.</p>
<h3>Cheatcodes in der Alpha (mit Tab im Bootmenü erreichbar)</h3>
<ul>
<li><b>toram=&#8230;</b> Schwellwert in kB für das Kopieren ins RAM, wer es ganz vermeiden möchte, gibt einen unsäglich hohen Wert, bspw. 999999999999 an.</li>
<li><b>skipcheck=1</b> Überspringt die SHA1-Prüfung von Bootdateien und Container</li>
<li><b>skipservices=|service1|service2|&#8230;|</b> Überspringt den Start einzelner Dienste, hier kann bspw. dropbear entfernt werden, damit der SSH-Daemon auf Port 22222 startet.</li>
<li><b>xmode=BREITExHOEHE[xFARBTIEFE]</b> Bevorzugte Bildschirmauflösung für den Xvesa-Server, hier kann bspw. 1680&#215;105 oder 1280&#215;800 übergeben werden, um die native Auflösung eines Breitbild-Displays zu verwenden.</li>
<li><b>rootpwhash=&#8230;</b> MD5-Hash des Root- und Userpasswortes, bspw. mit <tt>openssl passwd -1</tt> erzeugt. Standardhash entspricht dem Passwort <tt>test</tt></li>
</ul>
<h3>Hardwareprotokoll</h3>
<p>Beim Start wird in /tmp/ eine Protokolldatei <tt>hwinfo.unkown.zeitstempel.tgz</tt> angelegt. Wenn beim Start ein USB-Stick anwesend ist, der einen Ordner <tt>hwinfo</tt> 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 <tt>fdisk -l</tt>) enthalten diese Dateien keine eindeutig einem bestimmten PC zuordnenbare Informationen &#8212; ich behandle die Hardware-Protokolle natürlich vertraulich.</p>
<p><b>Bitte schickt mir Eure Hardware-Protokolle</b> per Mail an <a href="mailto:ms@mattiasschlenker.de">ms@mattiasschlenker.de</a>. Falls Ihr mit CD und Stick von Rechner zu Rechner zieht, könnt Ihr auch mit dem Cheatcode <tt>hwid=modell</tt> (bspw. <tt>hwid=akoya_e1210</tt>) eindeutigere Dateinamen ereugen lassen. Falls Ihr einen Webmailer nutzt, könnt Ihr natürlich auch die Datei in <tt>/tmp</tt> ohne Umwege versenden.</p>
<h3>Boot von USB-Stick</h3>
<p>Wenn ein Stick mit Syslinux bootfähig vorbereitet wurde, genügt es den Inhalt der CD auf den Stick zu kopieren.</p>
<h3>Und weiter?</h3>
<p>Im Laufe des Wochenendes folgen die vollständigen Quellcodes und nächste Woche dann eine erste Version der Build-Umgebung.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/04/04/lesslinux-erste-alpha-zum-download/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux-Distribution oder Auto &#8212; der Aufwand, es zusammenzubauen ist etwa der gleiche</title>
		<link>http://blog.rootserverexperiment.de/2009/04/02/linux-distribution-oder-auto-der-aufwand-es-zusammenzubauen-ist-etwa-der-gleiche/</link>
		<comments>http://blog.rootserverexperiment.de/2009/04/02/linux-distribution-oder-auto-der-aufwand-es-zusammenzubauen-ist-etwa-der-gleiche/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 17:06:29 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=355</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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 <a href="http://sourceforge.net/project/showfiles.php?group_id=71778" target="_blank">eine Megasquirt</a> in den Ring werfen, und erstmal einen gepatchten GCC dazu verwenden, Firmware zu kompilieren.</p>
<p>Damit sind wir schon ziemlich nahe am Thema: Auch eine Linux-Distribution besteht aus &#8220;am Markt erhältlichen Komponenten&#8221;, die einfach zusammengefügt werden müssen &#8212; in der Theorie. Primär aus Neugier, aber auch weil das eine oder andere Projekt, an dem ich arbeite, eine simple &#8220;single purpose live distribution&#8221; erfordert, habe ich vor etwa zwei Jahren damit angefangen, eine Distribution auf Basis von BusyBox und einer minimalen Ramdisk aufzubauen.</p>
<p>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.<span id="more-355"></span></p>
<h3>Und was ist daran besonders?</h3>
<ul>
<li><b>Initramfs modular</b>: Die Tatsache, dass einem modernen Kernel beim Start mehrere Initramfs übergeben werden können, mache ich mir für die Modularisierung zunutze: Ein Initramfs für Kernelmodule, eines mit Scripten und Binaries, eines mit Einstellungen. Das erleichtert beispielsweise Tests mit verschiedenen Kerneln oder Updates der für das <tt>/home</tt>-Verzeichnis vorgesehenen Einstellungen.</li>
<li><b>Bootprozess einheitlich</b>: Als Init kommt das &#8220;Simple Init&#8221; der Busybox (mit einfacher inittab) zum Einsatz, dieses triggert einige BSD-artige Scripte, jedes dieser Scripte kann über einen Cheatcode <tt>skipservices=|network|dropbear|...|</tt> deaktiviert werden. Die bei anderen Live-Distributionen übliche Trennung zwischen Startcode für Hardware-Erkennung und Startcode nach Mounten der Container ist damit aufgehoben.</li>
<li><b>Modulare Container:</b> <tt>/bin</tt>, <tt>/usr</tt> etc. befinden sich jeweils auf eigenen Containern, zusätzliche Container können einfach als SquashFS gepackt und im Containerverzeichnis abgelegt werden. Ein Eintrag in der Datei &#8220;mount.txt&#8221; definiert dann den Einhängepunkt. Das erleichtert unabhängige Erweiterungen, ohne dass Container oder Initramfs geöffnet und neu gepackt werden müssen.</li>
<li><b>Drei Startmodi</b>: Das gesamte System kann als Initramfs geladen werden, es wird dann beim Start in den Arbeitsspeicher entpackt, sinnvoll bei sehr kleinen Systemen wie einem Thinclient oder einem Backup- und Restoretool, das ohne NFS-Server so komplett per TFTP gestartet werden kann. Bei etwas größeren Dateisystemen wie einem Kiosksystem mit Desktop, Browser und Zugriff auf einzelne lokale Geräte, wo die Container gepackt etwa 60MB einnehmen (entpackt 200MB), können die SquashFS-Dateien als Initramfs geladen werden. Und drittens der klassische Startmodus beim Start von USB-Stick oder CD, bei dem die Container read-only vom Startmedium gemountet (oder ggf. vorher ins RAM kopiert) werden.</li>
<li><b>Kein Pivoting</b>: Das Root-Dateisystem bleibt auf dem Initramfs. Wozu sollte man das Wurzelverzeichnis pivotieren, wenn sowieso ein temporäres Verzeichnis Root-Verzeichnis ist?</li>
<li><b>Busybox für Brot- und Butter-Aufgaben</b>: Die statisch gegen uClibc gelinkte BusyBox stellt auf nur 800kB eine Menge typischer Unix-Tools bereit. Es müssen so nicht dutzende GNU-Pakete kompiliert und integriert werden. Wird während dem Build festgestellt, dass ein GNU-Werkzeug nicht integriert ist, wird auf die entsprechende BusyBox-Funktion verlinkt.</li>
</ul>
<h3>Was es nicht wird!</h3>
<ul>
<li><b>Keine Desktop-Distribution:</b> Das können Ubuntu, Fedora, openSUSE und Co besser. Schon der schiere Aufwand, 10.000 Pakete zu pflegen erfordert hunderte Maintainer. Eine Zahl von 500 bis 1000 Paketen dürften ausreichen, ob die oben angesprochenen Einsatzzwecke gut abzudecken (derzeit sind es etwa 200 einzelne Pakete). Wer mehr will, muss obendrauf selbst kompilieren. Zehn bis zwanzig eigene Buildscripte für zusätzliche Pakete sind zumutbar</li>
<li><b>Keine Server-Distribution:</b> Auch dutzende Serverpakete zeitnah mit Sicherheitspaketen zu versehen, ist schwierig. Denkbar ist in ferner Zukunft eine Möglichkeit, auch kompakte Xen-Images als Kombination aus ro-Dateisystemen für Anwendungen und rw-Dateisystemen für Daten zu erzeugen. Xen mit Linux-Instanzen, die mit 128MB RAM performant laufen und durch Austausch der ro-Container upzudaten sind, stellt eine interessante Alternative zum Shared Hosting dar&#8230; Aber das ist weit entfernt.</li>
<li><b>Keine Vielzweck-Live-Distri:</b> Das können <a href="http://knopper.net/knoppix/">Knoppix</a>, <a href="http://www.sidux.com/">Sidux</a> und auch <a href="http://www.slax.org/">Slax</a> besser. Die Modularität von Slax kommt den Nutzern entgegen, die im Rahmen der vorgesehenen Container kombinieren möchte. Wer es etwas stärker angepasst haben möchte, dürfte dagegen bei &#8220;meiner&#8221; Distribution fündig werden.</li>
<li><b>Keine Cross-Compile-Distri für den Embedded-Bereich:</b> Mittelfristig soll 32 Bit x86, 64 Bit x86/AMD64 und PowerPC 32 unterstützt werden. Aber bis auf die uClibc-Busybox alles in einer Chroot-Umgebung kompiliert. Wer für eingebettete Systeme crosscompilieren möchte, sollte das <a href="http://buildroot.uclibc.org/">uClibc Buildroot</a>, <a href="http://www.pokylinux.org/">Poky</a>, <a href="http://www.rocklinux.org/wiki/Main_Page">Rock Linux</a> oder <a href="http://www.t2-project.org/">T2</a> ausprobieren.</li>
</ul>
<h3>Alles nur heisse Luft?</h3>
<p>Mitnichten, das ISO welches ich im Moment vorliegen habe, hat 372MB &#8212; noch integriert es neben 80MB Squash-Containern (nicht optimiert und mit Firefox und Flash) zwei Kernel mit jeweils über 140MB Modulen. Wenn das aufgeräumt ist, gibt es eine erste &#8220;Technologiedemo&#8221;, die wenigstens auf den gängigsten Ethernet-Chips mit brauchbarer Vesa-Grafik booten sollte. Bereits enthalten ist ein Script welches mittels <i>lshw</i>, <i>lspci</i> und anderen Tools die Hardware-Infos ausliest und &#8212; falls vorhanden auf ein FAT32-Medium speichert, das den Ordner <tt>hwinfo</tt> im Wurzelverzeichnis enthält. Wer möchte, darf mir das dort abgelegte Hardwareprotokoll zu Analyse- und Statistikzwecken zukommen lassen. Mehr in den nächsten Tagen, Nutzer die nicht regelmäßig mitlesen, können mir eine Mail zukommen oder einen Kommentar hinterlassen. Ich informiere dann, wenn es etwas herunterzuladen gibt.</p>
<h3>Und wie heisst das Kind?</h3>
<p>Angedacht ist <b>lesslinux</b> &#8212; <i>light, embeddable, small, scalable linux</i> oder <i>lacking elegance, stupid, scary</i>. <img src='http://blog.rootserverexperiment.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div align="center" style="margin:20px;"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090402_lesslinux00.png"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090402_lesslinux00_sml.png" /></a></div>
<div align="center" style="margin:20px;"><a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090402_lesslinux01.png"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090402_lesslinux01_sml.png" /></a></div>
<p>Let the Flamewar begin, kommentiert schön fleissig.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/04/02/linux-distribution-oder-auto-der-aufwand-es-zusammenzubauen-ist-etwa-der-gleiche/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Busybox-Merkwürdigkeiten</title>
		<link>http://blog.rootserverexperiment.de/2009/03/07/busybox-merkwurdigkeiten/</link>
		<comments>http://blog.rootserverexperiment.de/2009/03/07/busybox-merkwurdigkeiten/#comments</comments>
		<pubDate>Sat, 07 Mar 2009 18:53:16 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/?p=307</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Kann sich jemand dieses verhalten der Shell <i>ash</i> der Busybox erklären?</p>
<div align="center"><img src="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090307_busybox_ash.png" alt="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/20090307_busybox_ash.png" /></div>
<p>Zweimal wird mit Backticks die Ausgabe eines Befehls in eine Variable eingelesen. Einmal ein simples <i>echo</i>, einmal ein ganzes Script, das ein paar verschachtelte <i>if</i> und <i>case</i> hat. Beim einfachen <i>echo</i> evaluiert <i>grep</i> korrekt zu true, beim Script nicht.</p>
<p>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 <a href="http://blog.rootserverexperiment.de/category/mini-linux/">Mini-Linux</a>, an dem ich gerade arbeite &#8212; mehr dazu in den nächsten Tagen.</p>
<p>Wer mit meinem Build der Busybox spielen möchte: <a href="http://images.mattiasschlenker.de/blog.rootserverexperiment.de/busybox-1.13.2-static-ulibc-i686.tar.gz">busybox-1.13.2-static-ulibc-i686.tar.gz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2009/03/07/busybox-merkwurdigkeiten/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Neue uClibc-Chroot-Umgebung und Artikeldownload</title>
		<link>http://blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/</link>
		<comments>http://blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/#comments</comments>
		<pubDate>Mon, 17 Mar 2008 08:17:00 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Etwa neun Monate ist es her, dass ich die letzte <a href="http://cdprojekte.mattiasschlenker.de/Public/Chroot-Umgebungen/" target="_blank">Chroot-Umgebung</a> bereitgestellt habe. Zwar ist <a href="http://www.uclibc.org/" target="_blank">uClibc</a> noch immer auf dem Stand 0.9.29, doch <a href="http://www.busybox.net/" target="_blank">Busybox</a> 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 &#8220;<a href="/2006/09/15/das-4mb-mini-linux/" target="_blank">4MB-Mini-Linux</a>&#8221; mit der neuen Busybox jetzt deutlich einfacher.</p>
<h3>Downloads</h3>
<ul>
<li><a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/Chroot-Umgebungen/uclibc-chroot-20080316.tar.bz2">uclibc-chroot-20080316.tar.bz2</a></li>
<li><a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/Artikel/PC-Magazin_Linux_2007_05_-_Dich_krieg_ich_klein.pdf">Artikel PC-Magazin Linux 2007/05 &#8220;Dich krieg ich klein!&#8221;</a></li>
</ul>
<p><span id="more-51"></span><br />
<h3>Kurz und bündig zum Einsatz</h3>
<p>Das RootFS ist als Chroot-Umgebung für i686 oder AMD64 gedacht. Wenn Sie einen Kernel vorbereiten oder einen Xen-Kernel zur Hand haben, können Sie auch direkt vom RootFS booten &#8212; your mileage may vary.</p>
<ul>
<li>
<p>Zuerst wird entpackt:</p>
<p><tt>tar xvjf uclibc-chroot-20080316.tar.bz2</tt></p>
</li>
<li>
<p>Mounten Sie jetzt ein paar typische Verzeichnisse im Chroot:</p>
<p><tt>mount -o bind /tmp uclibc-chroot/tmp<br />mount -o bind /dev uclibc-chroot/dev<br />mount -t proc none uclibc-chroot/proc</tt></p>
<p>Sollten Sie im Chroot Netzwerkzugriff benötigen, kopieren Sie die <tt>/etc/resolv.conf</tt> des Hosts in die Chroot-Umgebung.</p>
</li>
<li>
<p>Jetzt wechseln Sie in den Chroot-Käfig:</p>
<p><tt>chroot uclibc-chroot /bin/bash</tt></p>
<p>Unter AMD64 kann es nützlich sein, mit <tt>setarch</tt> den im Chroot gestarteten Programmen eine andere Architektur vorzugaukeln</p>
<p><tt>setarch i386 chroot uclibc-chroot /bin/bash</tt></p>
</li>
</ul>
<p>Gehen Sie wie folgt vor, um im Chroot eine Busybox 1.9.1 zu bauen. Zunächst außerhalb des Chroots:</p>
<ul>
<li>
<p>Entpacken und konfigurieren im gemeinsamen <tt>/tmp</tt>:</p>
<p><tt>cd /tmp<br />wget http://busybox.net/downloads/busybox-1.9.1.tar.bz2<br />tar xvjf busybox-1.9.1.tar.bz2<br />cd busybox-1.9.1.tar.bz2<br />wget -O .config http://cdprojekte.mattiasschlenker.de/Public/Chroot-Umgebungen/uclibc-chroot-20080316.src/.config-busybox-static<br />make oldconfig</tt></p>
</li>
<li>
<p>Sie können die Konfiguration nun anpassen:</p>
<p><tt>make menuconfig</tt></p>
</li>
<li>
<p>Vergessen Sie nicht, möglicherweise vorhandene Binaries, die gegen glibc gelinkt sind, aufzuräumen</p>
<p><tt>make clean</tt></p>
</li>
</ul>
<p>Im Chroot findet das eigentliche Bauen statt:</p>
<ul>
<li>
<p>Zuerst kompilieren:</p>
<p><tt>make</tt></p>
</li>
<li>
<p>Dann Installation in <tt>_install</tt>:</p>
<p><tt>make install</tt></p>
</li>
</ul>
<p>Bei unveränderter Verwendung meiner <tt>.config-busybox-static</tt> sollte ein etwa 800k großes, statisch gelinktes Binary die Folge sein, das auch unter einem glibc-Linux (normales Server- oder Desktoplinux) läuft. Sie können mit diesem Binary und einem Kernel bereits ohne zusätzliche Bibliotheken ein Minilinux auf Initrd erstellen.</p>
<h3>Hinweise zum Selbstbau der Chroot-Umgebung</h3>
<p>Prinzipiell ist der Selbstbau mit den Buildroot-Scripten von <a target="_blank"  href="http://buildroot.uclibc.org">uClibc.org</a> recht einfach zu bewerkstelligen. Man konfiguriert mit <tt>make menuconfig</tt> die gewünschte Toolchain und die im Ziel enthaltenen Pakete und baut schließlich mit <tt>make</tt>. Das uClibc-Root-Filesystem lässt sich auf die unterschiedlichsten Architekturen anpassen, mit Bootloader und Kernel ausstatten. Sogar viele X11-Pakete sind mittlerweile an Bord, so dass Embedded-Entwickler recht flott zu einem RootFS für Entwicklungsboards kommen. Dazu gibt es ein kleines <a target="_blank"  href="http://buildroot.uclibc.org/README">README</a>, in dem Detaileinstellungen der verwendeten Busybox etc. erklärt sind &#8212; unbedingt lesen. Dennoch wird nicht alles auf Anhieb klappen. Mir sind folgende Probleme aufgefallen:</p>
<ul>
<li>Im RootFS fehlen trotz angewählter Toolchain im Target die uClibc-Header. Die manuell in der <tt>.config</tt> gesetzte Variable <tt>BR2_CROSS_TOOLCHAIN_TARGET_UTILS=y</tt> schuf Abhilfe.</li>
<li>Das <tt>ar</tt> im RootFS war dennoch ein Softlink auf die Busybox. Das fehlende <tt>ar</tt> (es war gebaut worden) fand <tt>find . -name ar -type f </tt> &#8212; <tt>ldd</tt> entlarvte dann unter den gefundenen Binaries das für uClibc crosscompilierte.</li>
<li>Gcc 4.2.1 war ein Griff ins Klo, er produzierte nur Binaries, die abschmierten. Zum Debuggen hatte ich keine Lust, probierte also zunächst mal Gcc 4.1.2. Mit dem klappte alles und der im RootFS installierte Gcc 4.1.2 produziert auch lauffähige Binaries.</li>
<li>Hin und wieder können Quellcodes nicht heruntergeladen werden. Auf diese Tools verzichtete ich. Schlimmstenfalls müssen die fehlenden Programme im Chroot mit den dort enthaltenen Tools nachinstalliert werden.</li>
</ul>
<h3>Quellcodes und Konfigurationen</h3>
<p>Sie können <a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/Chroot-Umgebungen/uclibc-chroot-20080316.src/">meine Konfigurationsdateien</a> verwenden, um selbst ein RootFS zu erstellen. Bitte vergessen Sie nicht, ein <tt>make oldconfig</tt> durchzuführen, wenn Sie mit einem anderen Snapshot als vom 16. März 2008 arbeiten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>uClibc-Chroot-Umgebung</title>
		<link>http://blog.rootserverexperiment.de/2007/06/21/uclibc-chroot-umgebung/</link>
		<comments>http://blog.rootserverexperiment.de/2007/06/21/uclibc-chroot-umgebung/#comments</comments>
		<pubDate>Thu, 21 Jun 2007 18:24:16 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>
		<category><![CDATA[Tips und Tricks]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2007/06/21/uclibc-chroot-umgebung/</guid>
		<description><![CDATA[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 &#8212; beim Bauen einiger Tools gegen glibc, die Login-Funktionen nutzten, werden einige glibc-Komponenten immer dynamisch verwendet.
Die [...]]]></description>
			<content:encoded><![CDATA[<p>Wer das <a target="_blank" href="http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/">4MB Mini-Linux</a> 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 &#8212; beim Bauen einiger Tools gegen glibc, die Login-Funktionen nutzten, werden einige glibc-Komponenten immer dynamisch verwendet.<span id="more-26"></span></p>
<p>Die Verwendung ist einfach:</p>
<ul>
<li>Zuerst werden einige spezielle Dateisysteme ins Chroot gemountet:<br />
<tt>mount -t proc none uclibc-chroot/proc<br />
mount -t devpts none uclibc-chroot/dev/pts<br />
mount -o bind /tmp uclibc-chroot/tmp</tt></li>
<li>Dann kann per Chroot ins uClibc-System gewechselt werden<br />
<tt>LC_ALL=C chroot uclibc-chroot /bin/bash<br />
</tt></li>
</ul>
<p>Im Chroot können Sie beispielsweise im nun gemeinsam mit dem Hostsystem genutzten /tmp die gewünschten Programme statisch bauen, herausfischen und auch auf älteren Linux-Systemen oder Systemen mit C-Bibliotheksproblemen laufen lassen.</p>
<p>Ich nutzte derartige Binaries beispielsweise um auf ganz alten Systemen &#8220;rsync&#8221; nachzurüsten. Die uClibc-Umgebung ist gegen uClibc 0.9.29 gebaut und verwendet die Header von Linux 2.6.20. Beim Einsatz der erzeugten Binaries auf einem ganz alten Linux kann es unter Umständen erforderlich sein, eine Chroot-Umgebung mit Headern von 2.4 zu erstellen. Dabei helfen die <a target="_blank" href="http://buildroot.uclibc.org/">Buildrootscripte von uClibc.org</a>. Nach Fertigstellung ist allerdings zu beachten, dass unter Umständen &#8220;ar&#8221; und einige der von BusyBox bereitgestellten Tools nicht ausreichend funktionieren. In der zum Download angebotenen Umgebung ist dies korrigiert.</p>
<ul>
<li><a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/Chroot-Umgebungen/uclibc-chroot-20070601.tar.bz2">uclibc-chroot-20070601.tar.bz2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2007/06/21/uclibc-chroot-umgebung/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Das 4MB-Mini-Linux</title>
		<link>http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/</link>
		<comments>http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/#comments</comments>
		<pubDate>Fri, 15 Sep 2006 10:17:37 +0000</pubDate>
		<dc:creator>Administrator</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mini-Linux]]></category>

		<guid isPermaLink="false">http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>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.</p>
<p>Das hier vorgestellte System basiert auf den Komponenten:</p>
<ul>
<li><a href="http://www.busybox.net/">BusyBox 1.2.1</a></li>
<li><a href="http://www.uclibc.org/">uClibc 0.9.29 (beta)</a>  	<a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Images/"> 	  uClibc-Xen-Image als Chroot-Umgebung</a></li>
<li><a href="http://matt.ucc.asn.au/dropbear/dropbear.html">Dropbear 0.48.1 SSH-Server</a></li>
<li><a href="http://samba.anu.edu.au/rsync/">Rsync 2.6.8 für den Dateitransfer</a></li>
</ul>
<p><strong>Update:</strong> Auf <a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/misc/BusyBox-1.2.1/">cdprojekte.mattiasschlenker.de</a> 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 (&#8220;test&#8221;) verwendet!</p>
<p><span id="more-21"></span></p>
<h2>Die Arbeitsumgebung</h2>
<p>Ich bevorzuge die kompakte C-Bibliothek uClibc, wenn        ich BusyBox basierte Systeme baue. Nicht nur, weil        uClibc kompakter als die Glibc ist, sondern selbst bei einer       statisch gelinkten Glibc oft einzelne Bibliotheken dynamisch        benötigt werden, was die Arbeit erschwert.        Mein Beispiel zeigt deshalb eine dynamisch gelinkte BusyBox,       bei der ich die Bibliotheksabhängigkeiten von Hand        mit <tt>ldd</tt> auflöse.</p>
<p>Als Arbeitsumgebung dient dabei ein uClibc-Rootdateisystem.        Sie können eines als komprimiertes Image von        <a href="http://www.uclib.org/">www.uclibc.org</a>        herunterladen oder das        <a href="http://cdprojekte.mattiasschlenker.de/Public/Xen-Images/">von 	mir eigentlich für Xen erstellte</a> zu nutzen.        Letzteres verwendet die Header von Kernel 2.6.12 und kommt mit GCC 4.0.</p>
<p>Erstellen Sie ein Arbeitsverzeichnis und einen Mountpoint        für die später anzulegende Initrd:</p>
<p class="listing"><tt>mkdir busybox-build<br />
mkdir busybox-initrd       </tt></p>
<p>Das uClibc-Rootdateisystem benötigt einen        temporären Mountpoint:</p>
<p class="listing"><tt> 	mkdir /tmp/uclibc<br />
mount /tmp/uclibcroot.img /tmp/uclibc       </tt></p>
<p>Der Inhalt des uClibc-Dateisystems wird ins Arbeitsverzeichnis        synchronisiert:</p>
<p class="listing"><tt>rsync -avHP /tmp/uclibc/ busybox-build/</tt></p>
<p>Das <tt>busybox-build</tt> soll mit chroot genutzt werden. Hierfür        muss <tt>/proc</tt> verfügbar sein:</p>
<p class="listing"><tt> 	mount -t proc none busybox-build/proc/       </tt></p>
<p>Die weitere Arbeit findet im <tt>chroot</tt> statt:</p>
<p class="listing"><tt>chroot busybox-build /bin/sh</tt></p>
<p>Passen Sie im <tt>chroot</tt> die <tt>/etc/resolv.conf</tt> an.       Sie hilft, wenn Sie aus dem Chroot heraus etwas herunterladen wollen.</p>
<h2>Bauen der Busybox</h2>
<p>Sie können die aktuelle Version der BusyBox        unter <a href="http://www.busybox.net/">www.busybox.net</a>        herunterladen.        Entpacken Sie die Busybox (ich gehe im weiteren Verlauf der Anleitung       von der Arbeit in        <tt>/tmp</tt> aus) und konfigurieren Sie diese mit</p>
<p class="listing"><tt>make menuconfig</tt></p>
<p>In meiner uClibc-Umgebung funktionierte übrigens        <tt>make menuconfig</tt> bei BusyBox 1.2.1        nicht, weshalb ich mit zuerst mit <tt>make clean</tt>       aufräumte und vom Hostsystem aus die Konfiguration der       BusyBox vornahm. Anschließend war ein erneutes <tt>make clean</tt>       notwendig, um das BusyBox-Buildverzeichnis von Überresten        gegen Glibc       gelinkter Binaries zu befreien. Sie können abkürzen und <a target="_blank" href="http://cdprojekte.mattiasschlenker.de/Public/misc/BusyBox-1.2.1/busybox-config">meine BusyBox-Konfiguration</a> verwenden (nach .config kopieren) Wählen Sie die enthaltenen Tools nicht zu sparsam und        achten Sie darauf, dass auch <tt>init</tt> mit Unsterstützung        für eine <tt>/etc/inittab</tt> enthalten ist.       Es wird benötigt, um einen fast normalen Start eines        Linux-Systems zu simulieren.</p>
<p>Gebaut und installiert wird die BusyBox ganz gewöhnlich mit       <tt>make &#038;&#038; make install</tt>.       Im Verzeichnis <tt>_install</tt> im Arbeitsverzeichnis finden Sie        dann das Ergebnis. Beim Bauen auf meinem uClibc-Root-Filesystem       beschwerte sich BusyBox dann        über den fehlenden Befehl <tt>od</tt>, woraufhin ich die        <a href="http://www.gnu.org/software/coreutils/">Coreutils</a> im Chroot       übersetzte und <tt>od</tt> von Hand nach       <tt>/usr/bin</tt>       kopierte. Der nächste Versuch klappte dann problemlos.</p>
<h2>Bauen von <tt>dropbear</tt> (SSH-Server und -Client) und <tt>rsync</tt></h2>
<p>Dropbear ist ein kompakter SSH-Server, -Client und ein       Schlüsseltool. Er ist nicht gerade der flotteste und        vielseitigste SSH-Server und arbeitet nicht richtig mit SCP        und SFTP zusammen. Da unser Mini-Linux aber Rsync zum Kopieren        von Dateien nutzen soll, fällt dies nicht ins Gewicht.</p>
<p>Den von        <a href="http://matt.ucc.asn.au/dropbear/dropbear.html"> 	matt.ucc.asn.au/dropbear/</a> heruntergeladenen       Dropbear habe ich mit einem simplen</p>
<p class="listing"><tt>./configure --prefix=/usr/</tt></p>
<p>konfiguriert. Anschließend habe ich in der Datei        <tt>options.h</tt> die Quelle für Zufallszahlen angepasst:</p>
<p class="listing"><tt>#define DROPBEAR_RANDOM_DEV "/dev/urandom"</tt></p>
<p>Beim <tt>make</tt>-Lauf sind die gewünschten Programme anzugeben:</p>
<p class="listing"><tt> 	make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"<br />
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install<br />
</tt></p>
<p>Die Installation resultiert in fünf Dateien:</p>
<p class="listing"><tt> 	/usr/sbin/dropbear<br />
/usr/bin/dbclient<br />
/usr/bin/dropbearkey<br />
/usr/bin/dropbearconvert<br />
/usr/bin/scp       </tt></p>
<p>Wie bei BusyBox handelt es sich bei Dropbear um ein Multicall-Binary,        die letzten vier Dateien sind demnach nur Softlinks.</p>
<p>Rsync erhalten Sie unter        <a href="http://samba.anu.edu.au/ftp/rsync/">samba.anu.edu.au/ftp/rsync/</a>. Wir konfigurierten und bauten        auf dem üblichen Weg mit:</p>
<p class="listing"><tt> 	./configure --prefix=/usr<br />
make<br />
make install<br />
</tt></p>
<p>Sowohl <tt>rsync</tt> als auch <tt>dropbear</tt> sollten Sie mit       <tt>strip</tt> von Debug-Symbolen befreien — das       bringt ein paar hundert KByte Platzersparnis:</p>
<p class="listing"><tt>strip /usr/sbin/dropbear<br />
strip /usr/bin/rsync</tt></p>
<h2>Die eigene Initrd</h2>
<p>Wir haben nun alle benötigten Tools vorbereitet        und können damit beginnen, eine Initrd zu erstellen.       Die <tt>chroot</tt>-Shell sollte zunächst geöffnet        bleiben während die folgenden Befehle in einer Shell im       Hostsystem ausgeführt werden.       Ich nutze meist klassische 4096 KByte und Ext3 als Dateisystem:</p>
<p class="listing"><tt> 	dd if=/dev/zero of=busybox-initrd.img bs=1024 count=4096<br />
mkfs.ext3 busybox-initrd.img       </tt></p>
<p>Dieses Image kann nun gemountet werden:</p>
<p class="listing"><tt>mount -o loop busybox-initrd.img busybox-initrd</tt></p>
<p>Die Initrd wird nun mit einigen grundlegenden       Verzeichnissen versehen, die später benötigt werden:</p>
<p class="listing"><tt> 	mkdir -p busybox-initrd/etc/dropbear<br />
mkdir busybox-initrd/etc/init.d<br />
mkdir busybox-initrd/lib<br />
mkdir busybox-initrd/bin<br />
mkdir busybox-initrd/proc<br />
mkdir busybox-initrd/sbin<br />
mkdir -p busybox-initrd/usr/lib<br />
mkdir busybox-initrd/usr/bin<br />
mkdir busybox-initrd/usr/sbin<br />
mkdir -p busybox-initrd/var/log<br />
mkdir busybox-initrd/root<br />
mkdir busybox-initrd/tmp<br />
touch busybox-initrd/var/log/wtmp<br />
touch busybox-initrd/var/log/lastlog<br />
</tt></p>
<h3>Kopieren von von <tt>busybox</tt> und <tt>rsync</tt></h3>
<p>Es folgt das Kopieren von <tt>busybox</tt> und Co.:</p>
<p class="listing"><tt> 	rsync -avP busybox-build/tmp/busybox-1.2.1/_install/ \<br />
busybox-initrd/       </tt></p>
<p>&#8230;gefolgt vom <tt>dropbear</tt>..</p>
<p class="listing"><tt> 	rsync -avP busybox-build/usr/sbin/dropbear \<br />
busybox-initrd/usr/sbin/<br />
rsync -avP busybox-build/usr/bin/{dbclient,dropbearkey,dropbearconvert} \<br />
busybox-initrd/usr/bin/       </tt></p>
<p>&#8230;und <tt>rsync</tt>&#8230;</p>
<p class="listing"><tt>rsync -avP busybox-build/usr/bin/rsync \<br />
busybox-initrd/usr/bin/       </tt></p>
<h3>Auflösen der Bibliotheksabhängigkeiten</h3>
<p>Alle drei verwendeten Binaries haben Bibliotheksabhängigkeiten, die        wir noch nicht berücksichtigt haben. Ermitteln Sie zunächst im        <tt>chroot</tt> diese mit <tt>ldd</tt>:</p>
<p class="listing"><tt> 	ldd /tmp/busybox-1.2.1/_install/bin/busybox<br />
ldd /usr/sbin/dropbear<br />
ldd /usr/bin/rsync       </tt></p>
<p>Die gefundenen Dateien und die auf Sie zeigenden Softlinks  müssen ebenfalls       auf die Initrd. Bei insgesamt zehn Dateien ist dieser Vorgang überschaubar:</p>
<p class="listing"><tt> 	rsync -avP busybox-build/lib/libutil* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libz* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libcrypt* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libc.* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libuClibc* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libgcc* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/ld-uClibc* \<br />
busybox-initrd/lib/<br />
rsync -avP busybox-build/lib/libm* \<br />
busybox-initrd/lib/<br />
</tt></p>
<p>Auch das <tt>/dev</tt> muss gefüllt werden. Am einfachsten ist es, das <tt>/dev</tt>       des uClibc-Root-Images zu kopieren:</p>
<p class="listing"><tt>rsync -avHP busybox-build/dev/ busybox-initrd/dev/</tt></p>
<p>Ein kleiner Check zwischendurch ergibt, dass von 4MB Ramdisk erst zweieinhalb belegt sind!</p>
<h2>Konfiguration in <tt>/etc</tt></h2>
<h3>Schlüssel für Dropbear</h3>
<p>Noch fehlen die Schlüssel für den SSH-Server und die Startscripte.        Ich habe sie mit <tt>dropbearkey</tt> im Chroot-System erzeugt:</p>
<p class="listing"><tt> 	dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key<br />
dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key       </tt></p>
<p>Alternativ können Sie mit <tt>ssh-keygen</tt> den Schlüssel erzeugen,        in die Chroot-Umgebung kopieren und dort mit <tt>dropbearconvert</tt>       umwandeln.       Die Schlüssel werden von außerhalb der Chroot-Umgebung auf die        Initrd kopiert.</p>
<p class="listing"><tt> 	rsync -av busybox-build/etc/dropbear/ \<br />
busybox-initrd/etc/dropbear/       </tt></p>
<h3>Die Startscripte</h3>
<p>Das Init der BusyBox orientiert sich am klassischen Init unter Linux und benutzt        ebenfalls eine <tt>/etc/inittab</tt>. Deren Syntax ist jedoch deutlich einfacher        als beim SysVinit von Linux. So steht im ersten Feld nicht die ID, sondern das        Terminal auf dem der Befehl ausgeführt wird. In der ersten Zeile starte        ich ein BSD-ähnliches Startscript:</p>
<p class="listing"><tt> 	::sysinit:/etc/init.d/rcS<br />
tty1::respawn:/sbin/getty 38400 tty1<br />
tty2::respawn:/sbin/getty 38400 tty2<br />
tty3::respawn:/sbin/getty 38400 tty3<br />
::ctrlaltdel:/sbin/reboot       </tt></p>
<p>Das Script <tt>/etc/init.d/rcS</tt> ist äußerst        simpel:</p>
<p class="listing"><tt> 	#!/bin/sh<br />
/bin/mount -t proc none /proc<br />
/bin/mount -t devpts none /dev/pts<br />
/sbin/ifconfig lo inet 127.0.0.1<br />
/sbin/ifconfig eth0 inet 192.168.1.82<br />
/bin/sleep 5<br />
/usr/sbin/dropbear -E       </tt></p>
<h3>Passwort- und Gruppendateien</h3>
<p>Neben einer <tt>/etc/group</tt>&#8230;</p>
<p class="listing"><tt>root:x:0:</tt></p>
<p>&#8230;muss eine <tt>/etc/passwd</tt> existieren&#8230;</p>
<p class="listing"><tt>root:x:0:0:root:/root:/bin/sh</tt></p>
<p>&#8230;und eine <tt>/etc/shadow</tt>:</p>
<p class="listing"><tt>root:$1$zqm.tew8$To0AViNUqhJvlP13zIBKt.:10933:0:99999:7:::</tt></p>
<p>Achtung: die <tt>/etc/shadow</tt> darf nur für <tt>root</tt>       lesbar sein! Den Passwort-Hash habe ich mit <tt>openssl</tt> erzeugt:</p>
<p class="listing"><tt>openssl passwd -1</tt></p>
<h2>Kernel und Bootvorgang</h2>
<p>Als Kernel verwende ich in der Regel einen sparsam konfigurierten       Vanilla-Kernel. Dieser muss Unterstützung für        eine Initrd und wenigstens die Dateisysteme Ext2 und Ext3 enthalten.        Ratsam ist es zudem, Treiber für Netzwerkkarte und IDE-Chipsätze        sowie die Dateisysteme, auf die zugegriffen werden soll, zu integrieren.       Alternativ können Sie diese Treiber als Module auf die Inird       packen und in der Datei <tt>/etc/init.d/rcS</tt> mit <tt>insmod</tt>       laden.</p>
<p>Die <tt>initrd</tt> wird anschließend ausgehängt und komprimiert:</p>
<p class="listing"><tt>umount busybox-initrd<br />
gzip -c busybox-initrd.img > busybox-initrd.gz</tt></p>
<p>Unsere war komprimiert etwa 2,2 Megabyte groß. Zusammen mit dem Kernel        ergaben sich ca. 4MB für ein komplettes Linux-Rettungssystem.</p>
<p>In die <tt>/boot/grub/menu.lst</tt> von Grub trugen wir die        folgenden Zeilen ein:</p>
<p class="listing"><tt> 	title BusyBox Minisystem<br />
root    (hd0,0)<br />
kernel /boot/vmlinuz-2.6.16.27 rw splash<br />
initrd /boot/busybox-initrd.gz<br />
boot       </tt></p>
<p>Bingo! Das Minisystem bootete auf Anhieb und ich konnte mich per SSH einloggen.        Natürlich ist meine Konfiguration nur als Anregung zu verstehen. Um mit dem        Minisystem automatisierte Restores durchzuführen, muss beispielsweise        <tt>parted</tt> und ein Bootloader wie Grub oder Extlinux an Bord.<br />
<h3>Update: 17. März 2008</h3>
<p>Einen Artikel, der aus diesem Blog-Eintrag entstanden ist, sowie eine neue Chroot-Umgebung zum Bauen biete ich unter <a href="http://blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/">blog.rootserverexperiment.de/2008/03/17/neue-uclibc-chroot-umgebung-artikeldownload/</a> an. Bitte künftig auch die <a href="http://blog.rootserverexperiment.de/category/mini-linux/">Kategorie Mini-Linux</a> beachten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.rootserverexperiment.de/2006/09/15/das-4mb-mini-linux/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
