BusyBox, een klein maar druk baasje
- December 23, 2016
- 0
We kennen allemaal de kracht van de opdrachtregel. Op de command line tikken we onze favoriete commando’s. De kracht van Linux/UNIX is altijd al geweest dat het bestaat uit een grote verzameling commando’s die je aan elkaar kunt koppelen met een pipe of geavanceerder in bijvoorbeeld een script. Elk commando is vaak een aparte applicatie (executable). Op reguliere Linux systemen geen probleem, maar voor embedded Linux in devices waar schijfruimte (met name als Linux ingebed wordt in een ROM) en resources zeer beperkt zijn, kost elk commando capaciteit. BusyBox pakt deze uitdaging aan.
Krachtig
Het idee van BusyBox is simpel, maar krachtig. Neem de broncode van ruim 300 gebruikte Linux-commando’s. Kijk kritisch naar de vele – vaak tientallen – opties die elk commando kent en verwijder verouderde, onnodige en weinig gebruikte opties. Bestudeer de code van elk commando en verwijder onnodige code c.q. optimaliseer de code om resources te beperken. Bouw nu een nieuw commando waar al deze verzamelde code in verwerkt wordt en noem dit BusyBox. Elk commando is een argument van BusyBox (applet genoemd door BusyBox ), dus stel je wilt het commando ls uitvoeren, dan gebruik je busybox ls. De opties van ls die zijn overgenomen, kun je gewoon toevoegen, dus ls met de optie -l wordt busybox ls -l. Om niet elke keer BusyBox zelf te hoeven aanroepen, kun je voor elk ingebouwd commando ook een symbolic link leggen naar busybox met de naam van dat commando. Dus, stel je wilt ls als losstaand commando toevoegen, dan maak je de link ln -s busybox ls om daarna gewoon ls te gebruiken als commando. Deze tweede manier heeft vooral zin als je een mini-Linux bouwt (als ingebed besturingssysteem) waarop je geen commando’s wilt installeren. Wil je met BusyBox een complete mini-distro bouwen, dan vergt dit wel wat extra werk (je moet een kernel toevoegen, /dev enz.). En wat goed is, wordt nageaapt: zo is er een kloon Toybox voor BSD en heeft Android een (uitgeklede) kloon genaamd Toolbox.
Actueel
De laatste versie van BusyBox is van begin dit jaar, versie 1.23.2, en er wordt nog steeds aan doorontwikkeld. De exacte omvang van de executable van BusyBox is natuurlijk afhankelijk van de architectuur waar die op gecompileerd is en varieert van 800 kb tot uitschieters van 2Mb. Maar als je bedenkt dat hier meer dan 300 commando’s in verwerkt zitten, variërend van diverse shells (ash, sh), daemons (telnetd, ftpd, dnsd), beheertools (voor gebruikersbeheer), gebruikerstools (zippen en unzippen) en zelfs een editor (vi), dan is het resourcegebruik zeker minimaal te noemen.
BusyBox mag – volgens de GPLv2 code – naar believen worden aangepast. Verwacht dus niet dat BusyBox op elk systeem waar je het tegenkomt dezelfde ingebouwde commando’s heeft, de tool kan nog verder ontdaan zijn van commando’s en opties of er kunnen commando’s aan zijn toegevoegd.
In de distro
BusyBox voegt op een regulier volwaardig Linux-besturingssysteem niet zo veel toe, omdat je daar alle volwaardige commando’s op terug vindt. Toch zal je zien dat op jouw distro misschien BusyBox aanwezig is. Diverse distro’s zijn voorzien van BusyBox om gecombineerd met initramfs (een bestandssysteem in RAM) gebruikt te worden om een mini-Linux te draaien in RAM-geheugen ten behoeve van installeren, troubleshooting of diagnose.
Zelf zien?
BusyBox heeft dus een prima plek verworven in Linux-land, in embedded Linux-systemen en in reguliere distro’s. Om BusyBox zelf te ervaren, hoef je niet ver te zoeken: blader naar http://bellard.org/jslinux en er wordt een geëmuleerde pc geboot (dankzij de Javascript pc-emulator) voorzien van een versie van BusyBox.
Links
Busybox (GPL licentie) – http://www.busybox.net/
Toybox (BSD licentie) – http://www.landley.net/toybox/
Toolbox (Android) – http://elinux.org/Android_toolbox