Koen Vervloesem
27 February 2012

FreeBSD heeft het met het NanoBSD-script makkelijk gemaakt om een besturingssysteem te genereren geoptimaliseerd voor embedded toepassingen. Op de Fosdem-conferentie betoogde Rudi van Drunen dat dit een volwaardig alternatief is voor Linux.

Voor de softwarekant van embedded systemen wordt vaak uit automatisme gegrepen naar Linux. Toch is dat niet het enige mogelijke embedded besturingssysteem. Een interessant alternatief is NanoBSD, een gestripte vorm van FreeBSD geoptimaliseerd voor gebruik op flash-storage.

NanoBSD is een script ontwikkeld door Poul-Henning Kamp dat bij de standaard FreeBSD-distributie wordt geleverd (in /usr/src/tools/tools/nanobsd). Het genereert een image dat op een Compactflash-schijf kan worden geflasht en is bedoeld om FreeBSD-appliances te creëren. Rudi van Drunen, CTO van IT-dienstverlener Competa IT uit Rijswijk, gebruikte NanoBSD voor een project (zie kader) en deed zijn ervaringen uit de doeken tijdens de Fosdem-conferentie (Free and Open Source Software Developers European Meeting) in Brussel.

NanoBSD koppelt alle bestandssystemen standaard read-only aan, zodat het geen kwaad kan als de stroom van het apparaat plots wordt uitgeschakeld. Bovendien beperkt dit de slijtage van de flash-storage. De /etc– (voor configuratiebestanden) en /var-directory‘s (voor bestanden van voorbijgaande aard zoals logs) worden in het geheugen geplaatst als ramdisk, een virtueel bestandssysteem waarnaar geschreven kan worden.

Voor wijzigingen aan de configuratie die een reboot moeten overleven, heeft NanoBSD een eenvoudig maar doeltreffend systeem geïmplementeerd. De configuratiebestanden staan in de partitie /cfg, die alleen vlak na het booten even (read-only) wordt aangekoppeld om de inhoud te kopiëren naar /etc in de ramdisk. Om wijzigingen in /etc te behouden, koppel je /cfg even kort in schrijfmodus aan en kopieer je het gewijzigde bestand ernaartoe. ’NanoBSD levert gelukkig ook enkele handige scripts mee die de juiste bestanden van /etc naar /cfg kopiëren, bijvoorbeeld als je je rootwachtwoord verandert of SSH-hostsleutels opslaat‘, merkt Van Drunen op.

In het configuratiebestand van NanoBSD specificeer je de karakteristieken van je embedded systeem, zoals de kernelconfiguratie voor je processor en de grootte en geometrie van je Compactflash-kaartje. Je kunt ook de inhoud van configuratiebestanden in /etc opgeven, devicelinks voor apparaten zoals een GPS-ontvanger definiëren, de grootte van de directory‘s /etc en /var wijzigen en extra pakketten aan het image toevoegen.

Het resultaat van NanoBSD‘s buildscript is een imagebestand, dat je eenvoudig met het dd-commando naar de Compactflash-kaart kunt schrijven. Daarnaast maakt het script standaard twee rootpartities aan met het besturingssysteem. Het systeem updaten gaat daardoor heel veilig: creëer het vernieuwde image, schrijf dit naar de tweede partitie en probeer hiervan te booten. Lukt dit niet, boot dan gewoon terug van de eerste partitie met het originele systeem. NanoBSD bevat scripts om een image naar de eerste respectievelijk tweede partitie te schrijven.

Al met al vindt Van Drunen NanoBSD een prima alternatief voor embedded Linux. ’Ik had van tevoren al wat ervaring met Voyage Linux en ik heb wat geëxperimenteerd met Arch Linux in een embedded omgeving, maar dat ging toch niet zo vlot. Het leuke aan NanoBSD vind ik dat het gewoon een en dezelfde distributie is als FreeBSD en de mogelijkheden dus niet ingeperkt zijn. Tegelijk is het creëren van een NanoBSD-systeem heel eenvoudig: de build van de kernel en het volledige userland gebeurt met één commando en op basis van één configuratiebestand. Bovendien heeft NanoBSD de ramdisk-functionaliteit en de configuratie- en updatemechanismes al helemaal voorgekookt.‘