Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Úvod

V tejto sérii článkov chcem preskúmať systém zostavovania distribúcie buildroot a zdieľať skúsenosti s jeho prispôsobením. Tu bude praktická skúsenosť s vytvorením malej OS s grafickým rozhraním a minimalizovanou funkčnosťou.

Predovšetkým by sa nemal zamieňať systém zostavovania a distribúcia. Buildroot môže zostaviť systém z množiny balíkov, ktoré mu boli navrhnuté. Buildroot je postavený na make súboroch, a preto má obrovské možnosti prispôsobenia. Nahradiť balík inou verziou, pridať svoj balík, zmeniť pravidlá zostavenia balíka, prispôsobiť súborový systém po inštalácii všetkých balíkov? To všetko zvládne buildroot.

V Rusku sa buildroot používa, ale podľa môjho názoru je málo ruských informácií pre začiatočníkov.

Cieľom práce je zostaviť distribúciu s live bootovaním, rozhraním icewm a webovým prehliadačom. Cieľová platforma je virtualbox.

Prečo zostavovať svoju distribúciu? Často je potrebná obmedzená funkčnosť pri obmedzených zdrojoch. Ešte častejšie je v automatizácii potrebné vytvárať firmware. Prispôsobovať všeobecnú distribúciu tým, že sa vymažú zbytočné balíky a premení sa na firmware, je oveľa náročnejšie ako zostaviť novú distribúciu. Používanie Gentoo má tiež svoje obmedzenia.

Buildroot je veľmi mocný systém, ale neurobí nič za vás. Môže len poskytnúť možnosti a automatizovať proces zostavenia.

Alternatívne systémy zostavovania (yocto, open build system a ďalšie) sa neberú do úvahy a nesrovnávajú.

Kde získať a ako začať

Webová stránka projektu — buildroot.org. Tu si môžete stiahnuť aktuálnu verziu a prečítať si príručku. Tam môžete tiež osloviť komunitu, je tam bug tracker, mail-lists a IRC kanál.

Buildroot operuje s defconfig pre cieľovú dosku zostavenia. Defconfig je konfiguračný súbor, ktorý obsahuje iba možnosti, ktoré nemajú predvolené hodnoty. Práve on určuje, čo a ako bude zostavené. Môžete samostatne nastaviť konfigurácie busybox, linux-kernel, uglibc, bootloaderov u-boot a barebox, ale všetky budú viazané na cieľovú dosku.
Po rozbalení stiahnutého archívu alebo klonovaní z gitu získate buildroot pripravený na prácu. O štruktúre adresárov sa môžete podrobne dočítať v príručke, poviem o najdôležitejších:

board — adresár s súbormi špecifickými pre každý substrát. Môžu to byť skripty na generovanie systémových obrazov (iso, sdcart, cpio a ďalšie), adresár overlay, konfiguračné súbory jadier a ďalšie.
configs — vlastne defconfig substrátu. Defconfig je neúplná konfigurácia substrátu. Ukladá sa v ňom len parametre, ktoré sa líšia od predvolených nastavení.
dl — adresár so stiahnutými zdrojovými kódmi/súbormi na zostavenie.
output/target — zostavený súborový systém získanej OS. Následne sa z neho vytvárajú obrazy na bootovanie/inštaláciu.
output/host — host-nástroje na zostavenie.
output/build — zostavené balíky.

Konfigurácia zostavenia sa realizuje cez KConfig. Táto systém sa používa aj na zostavenie linux jadra. Zoznam najčastejšie používaných príkazov (vykonávajte v adresári buildroot):

  • make menuconfig — vyvolať nastavenie zostavenia. Možno tiež použiť grafické rozhranie (make nconfig, make xconfig, make gconfig).
  • make linux-menuconfig — vyvolať konfiguráciu jadra.
  • make clean — vyčistiť výsledky zostavenia (všetko, čo sa nachádza v output).
  • make — zostaviť systém. Predpokladá sa, že už zostavené procesy sa nebudú znovu zostavovať.
  • make defconfig_name — prepínanie konfigurácie na konkrétny defconfig.
  • make list-defconfigs — zobraziť zoznam defconfigov.
  • make source — iba stiahnuť inštalačné súbory, bez zostavenia.
  • make help — zobraziť zoznam dostupných príkazov.

Dôležité poznámky a užitočné rady.

Buildroot nezostavuje už zostavené balíky! Preto môže vzniknúť situácia, keď bude potrebná kompletná nová zostava.

Môžete znovu zostaviť konkrétny balík príkazom. make packagename-rebuild. Napríklad, môžete znovu zostaviť linux jadro:

make linux-rebuild.

Buildroot uchováva stav každého balíka vytvorením .stamp-súborov v adresári output/build/$packagename:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Tým pádom je možné znovu zostaviť root-fs a obrazy bez nového zostavenia balíkov:

rm output/build/host-gcc-final-*/.stamp_host_installed; rm -rf output/target; find output/ -name ".stamp_target_installed" | xargs rm -rf; make.

Užitočné premenné.

V buildroot existuje súbor premenných pre pohodlnú konfiguráciu.

  • $TOPDIR — koreňový adresár buildroot.
  • $BASEDIR — adresár OUTPUT.
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — adresáre na zostavenie host fs, staging fs, target fs.
  • $BUILD_DIR — adresár s rozbalenými a zostavenými balíkmi.

Vizualizácia

V buildroot je možnosť vizualizácie. Môže sa vytvoriť schéma závislostí, graf času zostavenia, graf veľkosti balíkov v konečnom systéme. Výsledky vo forme pdf súborov (na výber sú svn, png) v adresári output/graph.

Príklady príkazov na vizualizáciu:

  • vyrobiť graph-depends vytvoriť strom závislostí
  • vyrobiť -graph-depends vytvoriť strom závislostí konkrétneho balíka
  • BR2_GRAPH_OUT=png vyrobiť graph-build vytvoriť graf času zostavenia s výstupom do PNG
  • vyrobiť graph-size vytvoriť graf veľkosti balíkov

Užitočné skripty

V katalógu buildroot je podadresár utils s užitočnými skriptami. Napríklad, tam je skript, ktorý kontroluje správnosť popisu balíkov. Môže to byť užitočné pri pridávaní vlastných balíkov (to urobím neskôr). V súbore utils/readme.txt je popis týchto skriptov.

Zostavíme základný distribúciu

Je dôležité pripomenúť, že všetky operácie sa vykonávajú v mene obyčajného používateľa, nie root.
Všetky príkazy sa vykonávajú v koreňovom adresári buildroot. V dodávke buildroot už je sada konfigurácií pre mnohé rozšírené dosky a virtualizáciu.

Pozrieme sa na zoznam konfigurácií:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Prepneme sa na konfiguráciu qemu_x86_64_defconfig

vyrobiť qemu_x86_64_defconfig

A spustíme zostavenie

make

Zostavenie sa úspešne dokončilo, pozrime sa na výsledky:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Buildroot zostavil obrazy, ktoré je možné spustiť v Qemu a overiť, že fungujú.

qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Výsledok — spustený v qemu systém:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Vytvorenie konfigurácie vlastnej dosky

Pridanie súborov dosky

Pozrieme sa na zoznam konfigurácií:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

V zozname vidíme pc_x86_64_efi_defconfig. Vytvoríme si svoju dosku tak, že ju skopírujeme z konfigurácie:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Ihneď vytvoríme adresár dosky na uloženie svojich skriptov, rootfs-overlay a ďalších potrebných súborov:

mkdir board/my_x86_board

Prepneme sa na tento defconfig:

vyrobiť my_x86_board_defconfig

Týmto spôsobom, konfigurácia zostavenia (uložená v .config v koreňovom adresári buildrootu) zodpovedá cieľovému stroju x86-64 legacy(bios) zavádzaniu.

Skopírujeme konfiguráciu linux-kernel (bude sa hodiť neskôr):

cp board/pc/linux.config board/my_x86_board/

Nastavenie parametrov zostavenia prostredníctvom KConfig

Spustíme nastavenie:

vyrobiť menuconfig 

Otvorí sa okno KConfig. Je tu možnosť konfigurovať s grafickým rozhraním (vyrobiť nconfig, vyrobiť xconfig, vyrobiť gconfig):

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Vstupujeme do prvej sekcie Target Options. Tu si môžete vybrať cieľovú architektúru, pre ktorú sa bude zostavovať.

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Možnosti zostavenia — tu sú rôzne nastavenia zostavenia. Môžete uviesť adresáre s pôvodným kódom, počet vláken zostavenia, zrkadlá na sťahovanie pôvodných kódov a ďalšie nastavenia. Necháme nastavenia ako predvolené.

Nástrojový reťazec – tu sa nastavuje samotný nástrojový systém zostavenia. O ňom viac podrobností.

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Typ nástroja - typ používaného toolchainu. Môže to byť zabudovaný do buildroot alebo externý toolchain (môžete zadať adresár s už zostaveným alebo url na stiahnutie). Pre rôzne architektúry sú k dispozícii ďalšie možnosti. Napríklad pre arm stačí vybrať verziu externého toolchainu Linaro.

C knižnica - výber C knižnice. Od toho závisí fungovanie celého systému. Zvyčajne sa používa glibc, ktorá podporuje všetku možnú funkcionalitu. Avšak môže byť príliš veľká pre zabudovaný systém, takže sa často vyberajú uglibc alebo musl. Vyberieme glibc (toto bude potrebné na použitie systemd).

Kernel Headers a Custom Kernel Headers series - musia zodpovedať verzii jadra, ktoré bude v zostavovanom systéme. Pre kernel headers môžete tiež zadať cestu k tarballu alebo git-repozitáru.

VERZIE GCC KOMPILÁTORA - výber verzie kompilátora, ktorá sa použije na zostavenie.
Povoliť podporu pre C++ - vyberieme pre zostavenie s podporou knižníc C++ v systéme. Neskôr nám to bude užitočné.

Dodatočné gcc možnosti - môžete zadať ďalšie možnosti kompilátora. Zatiaľ nám to nie je potrebné.

Konfigurácia systému umožňuje zadať budúce parametre vytvoreného systému:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Väčšina položiek je z názvu zrozumiteľná. Zamerajme sa na nasledujúce položky:
Cesta k tabuľkám používateľov - tabuľka s vytváranými používateľmi (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Príklad súboru. Bude vytvorený používateľ user s heslom admin, automaticky gid/uid, /bin/sh ako shell, predvolená skupina user, člen skupiny root, komentár Foo user

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Prekryvné adresáre koreňového súborového systému - adresár, ktorý sa aplikuje na zostavený target-fs. Pridáva nové súbory a nahrádza existujúce.

Vlastné skripty na spustenie pred vytvorením obrazov súborového systému - Skripty, ktoré sa vykonávajú priamo pred zbalením súborového systému do obrazov. Tento skript zatiaľ necháme prázdny.

Prejdeme do časti Jadro

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Tu sa nastavujú nastavenia jadra. Samotné jadro sa konfiguruje pomocou make linux-menuconfig.
Verziu jadra môžete zadať rôznymi spôsobmi: vybrať z ponúknutých, zadať verziu ručne, uviesť repozitár alebo hotový tarball.

Konfigurácia jadra - cesta k konfigurácii jadra. Môžete si vybrať predvolenú konfiguráciu pre vybranú architektúru alebo defconfig z Linuxu. V zdrojových kódoch Linuxu je sada defconfigov pre rôzne cieľové systémy. Potrebné nájdete, ak sa pozriete priamo do zdrojov tu. Napríklad pre dosku beagle bone black môžete vybrať konfiguráciu.

Sekcia Target packages umožňuje vybrať, ktoré balíky budú nainštalované do zostavovaného systému. Zatiaľ necháme bez zmien. Neskôr pridáme svoje balíky do tohto zoznamu.
Obrazy súborového systému — zoznam obrazov súborových systémov, ktoré budú zostavené. Pridáme iso-obraz

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Bootloaders — výber zostavovaných zavádzačov. Vyberieme isolinux

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Konfigurácia Systemd

Systemd sa stáva jedným z pilierov linuxu, spolu s kernelom a glibc. Preto som jeho nastavenie presunul do samostatnej sekcie.

Nastavuje sa prostredníctvom make menuconfig, ďalej Target packages → System tools → systemd. Tu je možné určiť, ktoré služby systemd budú nainštalované a spustené pri štarte systému.

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Uloženie konfigurácie systému

Uložujeme túto konfiguráciu cez KConfig.

Potom uložíme náš defconfig:

make savedefconfig

Konfigurácia jadra Linux

Konfigurácia jadra linux sa vyžaduje nasledujúcou príkazom:

make linux-menuconfig

Pridáme podporu grafickej karty Virtualbox

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Pridáme podporu integrácie Virtualbox Guest

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Uložíme a vyjdeme. DÔLEŽITÉ: konfigurácia sa uloží do output/build/linux-$version/config, ale nie do board/my_x86_board/linux.config

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Preto je potrebné ručne skopírovať konfiguráciu na miesto uloženia:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Potom vykonáme úplnú znovu zostavenie celého systému. Keďže buildroot nezostavuje už zostavené, je potrebné ručne určiť balíky na znovu zostavenie. Aby sme nestrácali čas a nervy, je menej náročné zostaviť menší systém kompletne):

make clean; make

Po dokončení zostavenia spustíme VirtualBox (testované na verziách 5.2 a 6.0) s bootovaním z cd-disku. Parametre systému:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Spustenie zo zostaveného iso:

Buildroot — časť 1. Základné informácie, zostavenie minimálneho systému, nastavenie cez menu

Zoznam použitých materiálov

  1. Príručka Buildroot

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster