Busybox
Existence Busybox je pro svět embedded zařízení velmi důležitým milníkem a pro vývojáře, kteří si sestavují vlastní linuxovou ”embedded” distribuci pravým požehnáním. Nahrazuje totiž většinu unixových a shellových utilit (příkazů) a tím pádem i množství spustitelných souborů jedním jediným spustitelným souborem.
Protože byl Busybox od základu vyvíjen s důrazem na nízké nároky, je schopen poskytnout kompletní prostředí pro většinu embedded zařízení při skutečně minimálních požadavcích na systémové prostředky.
Daní za tuto minimalizaci linuxového prostředí (rozuměj sadu standardních příkazů a utilit) je to, že verze příkazů implementovaných v Busyboxu nepodporují všechny volby a parametry svých protějšků z běžných linuxových distribucí. Což je ovšem s ohledem na poměr výkon/nároky Busyboxu nízká daň.
Říkáte si jak může jeden spustitelný soubor nahradit několik spustitelných souborů s implementací jednotlivých příkazů? Snadno. Spustitelné soubory jednotlivých příkazů jsou v případě Busyboxu nahrazeny tzv. aplety. Což jsou vlastně jen symbolické odkazy na onen jeden jediný spustitelný soubor Busyboxu pojmenované stejně jako podporované příkazy. Aplety zajistí, že je spustitelný soubor Busyboxu je volán s názvem příkazu jako parametr. Busybox tak pozná, jakou funkcionalitu má pro dané konkrétní volání poskytnout, tedy jaký příkaz má realizovat.
Sestavení
Busybox se sestavuje ze zdrojových kódů a podobně jako linuxové jádro se jeho vlastnosti, tj. sada podporovaných příkazů a funkcí, konfiguruje přes menu. Samotná instalace spustitelného souboru Busyboxu a všech apletů je jednoduchá, Busybox provede nakopírování potřebných souborů a symbolických odkazů pomocí instalačního skriptu.
Postup:
- Ze stránek Busyboxuhttp://www.busybox.net/ si stáhneme balíček s poslední stabilní verzí zdrojových kódů. V dalším textu předpokládáme verzi 1.18.5.
- Balíček rozbalíme v nějakém pomocném adresáři:
$ tar -xjf busybox-1.18.5.tar.bz2
čímž vznikne adresář se zdrojovými kódy Busyboxu, např. busybox-1.18.5/. - Nainstalujeme si knihovnu libncurses5-dev, která slouží pro generování menu a kterou vyžaduje konfigurátor Busyboxu:
# apt-get update # apt-get install libncurses5-dev
- V adresáři se zdrojovými kódy pak spustíme konfigurátor Busyboxu:
$ make menuconfig
Měli bychom vidět obrazovku s menu konfigurátoru podobně jako na obrázku 1.3.$ make distclean
který všechny vygenerované soubory včetně konfiguračního souboru .config smaže. - Provedeme konfiguraci Busyboxu - projdeme všechny menu a pomocí mezerníku zapneme nebo naopak vypneme danou volbu oproti výchozímu nastavení. O úroveň výš se vrátíme stisknutím klávesy Esc. Konfiguraci ukončíme dvojstiskem klávesy Esc v nejvyšší úrovni menu (výchozí obrazovka po spuštění konfigurátoru). Naši konfiguraci uložíme - konfigurátor ji zapíše do souboru .config, který následně použijeme při sestavení Busyboxu.Protože popis doporučené konfigurace by byl velmi zdlouhavý, nabízíme ke stažení konfigurační soubor, který je kompatibilní s Busyboxem verze 1.18.5Lze jej samozřejmě použít i pro novější verzi Busyboxu, ale pak je nutné v menu konfigurátoru provést upravení nových voleb a uložit konfigurační soubor znovu, aby odpovídal potřebám novější verze Busyboxu. Konfigurační soubor můžeme importovat do novější verze Busyboxu také příkazem $make oldconfig. Jen budete muset zodpovědět všechny otázky ohledně nových voleb, které mezitím přibyly do konfigurace Busyboxu. Nepříjemné je, že otázky jsou pokládány v textové formě, což je mírně nepřehledné. .Zmiňme ve zkratce hlavní změny oproti výchozí konfiguraci:
- Jsou vypnuty volby vhodné pro plnohodnotnou linuxovou distribuci.
- Jsou vypnuty mailové služby.
- Jsou vypnuty tiskové služby.
- Je vypnuta podpora zjednodušených utilit pro práci s moduly jádra.
- Je zapnuta podpora všech utilit pro práci s moduly jádra (insmod, modprobe, atd.)
- Je vypnuta podpora různých méně významných de/komprimačních nástrojů
- Z dostupných shellů je ponechána podpora pouze ash shellu.
- Je vypnuta podpora textového editoru ed.
- Jestliže máme v adresáři s Busyboxem konfigurační soubor .config můžeme spustit sestavení Busyboxu:
$ make
Instalace
- Instalaci spustitelného Busyboxu a všech potřebných apletů do RFS naší distribuce provedeme příkazem:
$ make CONFIG_PREFIX=/home/emlin/mylindist-root install
- Posledním krokem je nastavení setuid bit na spustitelném souboru Busyboxu - bin/busybox, aby aplety které pro svoji činnost vyžadují práva superuživatele, mohli být spuštěny i ostatními uživateli. Nastavení setuid bitu provedeme příkazem:
$ chmod +s bin/busybox
Přístupová práva pak musí být na souboru bin/busybox (kontrola příkazem $ ls -l bin/busybox) nastavena takto: -rwsr-sr-x.
Poznámka: Konfiguraci Busyboxu by šlo samozřejmě dále upravovat přesně na míru daného cílového zařízení a dosáhnout tak ještě menší velikosti spustitelného souboru Busyboxu. Pro naše účely však nemá cenu trávit na konfigurací příliš mnoho času.