Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Sissejuhatus

Selles artiklisarjas soovin kĂ€sitleda buildrooti distributsiooni koostamise sĂŒsteemi ja jagada oma kohandamise kogemusi. Siin rÀÀgin vĂ€ikese operatsioonisĂŒsteemi loomise praktilisest kogemusest koos graafilise liidese ja minimaalsete funktsioonidega.

Esiteks, Ă€rge segage koostamisse sĂŒsteemi ja distributsiooni. Buildroot suudab koostada sĂŒsteemi pakettide kogumist, mida talle pakutakse. Buildroot on ĂŒles ehitatud make-failidele, mistĂ”ttu on sellel tohutud kohandamisvĂ”imalused. Kas soovite asendada paketi teise versiooniga, lisada oma paketi, muuta paketi koostamise reegleid, kohandada failisĂŒsteemi pĂ€rast kĂ”igi pakettide installimist? Buildroot oskab teha kĂ”ike seda.

Venemaal kasutatakse buildrooti, kuid minu arvates on venekeelset teavet algajatele vÀhe.

Töö eesmÀrk on koostada distributsioon live-laadimisega, icewm kasutajaliidesega ja brauseriga. Sihtplatvorm on virtualbox.

Miks koostada oma distributsioon? Sageli on vajalik piiratud funktsionaalsus piiratud ressursside korral. Veelgi sagedamini on automatiseerimisel vajalik luua pĂŒsivusi. Üldotstarbelise distributsiooni kohandamine, eemaldades ĂŒleliigsed paketid ja muutes selle pĂŒsivuseks, on palju töömahukam kui uue distributsiooni koostamine. Gentoo kasutamisel on samuti oma piirangud.

Buildroot on vĂ€ga vĂ”imas sĂŒsteem, kuid ta ei tee teie eest midagi. Ta saab anda vaid vĂ”imalusi ja automatiseerida koostamisprotsessi.

Alternatiivseid koostamissĂŒsteeme (yocto, open build system ja teised) ei kĂ€sitleta ega vĂ”rrelda.

Kust leida ja kuidas alustada

Projekti sait — buildroot.org. Siit saate alla laadida uusima versiooni ja lugeda juhendit. Seal on ka vĂ”imalus pöörduda kogukonna poole, olemas on veaparandus sĂŒsteem, meililood ja IRC-kanal.

Buildroot kasutab sihtplatvormi koostamise jaoks defconfig'e. Defconfig on konfigureerimisfail, mis sisaldab ainult mittevaikimisi valikuid. Just see mÀÀrab, mida ja kuidas koostatakse. Samuti saab eraldi seadistada busyboxi, linux-kernelit, uglibc-d, u-boot ja bareboxi konfigureerimisfailid, kuid kÔik need on seotud sihtplatvormiga.
PÀrast allalaadimise arhiivi vÔi git'ist kloneerimist saame töötamiseks valmis buildrooti. Kataloogistruktuuri kohta saab lugeda juhendist, kuid rÀÀgin kÔige olulisematest:

board — kataloog failide jaoks, mis on spetsiifilised igale plaadile. Need vĂ”ivad olla sĂŒsteemi piltide loomise skriptid (iso, sdcart, cpio jne), overlay kataloog, tuumade konfiguratsioon ja muud.
configs — plaadi defconfig. Defconfig on plaadi mittetĂ€ielik konfiguratsioon. See sisaldab ainult parameetreid, mis erinevad vaikeseadetest.
dl — kataloog alla laaditud lĂ€htekoodide/failide jaoks, et koostada.
output/target — loodud failisĂŒsteem saadud operatsioonisĂŒsteemist. Edasi luuakse sellest pildid kĂ€ivitamiseks/installimiseks.
output/host — host-utiliidid koostamiseks.
output/build — loodud paketid.

Koostamise konfigureerimine toimub KConfig'i kaudu. Seda sama sĂŒsteemi kasutatakse Linuxi tuuma koostamiseks. KĂ”ige sagedamini kasutatavate kĂ€skude loetelu (tĂ€ita kataloogis buildroot):

  • make menuconfig — kĂ€ivitada koostamise seadistus. Samuti saab kasutada graafilist liides (make nconfig, make xconfig, make gconfig).
  • make linux-menuconfig — kĂ€ivitada tuuma konfiguratsioon.
  • make clean — puhastada koostamise tulemused (kĂ”ik, mis asub output kataloogis).
  • make — koostada sĂŒsteem. Sel juhul ei toimu juba loodud protsesside uuesti koostamist.
  • make defconfig_name — vahetada konfiguratsioon kindlaks mÀÀratud defconfig'iks.
  • make list-defconfigs — kuvada defconfig'ide loetelu.
  • make source — lihtsalt alla laadida installifailid, ilma koostamata.
  • make help — kuvada vĂ”imalike kĂ€skude loetelu.

Olulised mÀrkused ja kasulikud nÀpunÀited.

Buildroot ei koosta juba loodud pakette uuesti! SeetÔttu vÔib tekkida olukord, kus on vajalik tÀielik uuesti koostamine.

Üksiku paketi uuesti koostamiseks saab kasutada kĂ€sku. make packagename-rebuild. NĂ€iteks saab uuesti koostada Linuxi tuuma:

make linux-rebuild.

Buildroot sÀilitab iga paketi oleku, luues .stamp-failid kataloogis output/build/$packagename:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

SeetÔttu saab uuesti koostada root-fs ja pildid ilma pakettide uuesti koostamiseta:

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

Kasulikud muutujaid.

Buildroot'is on kvaliteetsete konfigureerimise mugavuse jaoks muutujate komplekt.

  • $TOPDIR — buildroot'i juurkataloog.
  • $BASEDIR — OUTPUT kataloog.
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs kataloogid.
  • $BUILD_DIR — kataloog, kus on lahti pakitud ja koostatud paketid.

Visualiseerimine

Buildroot'is on visualiseerimise vĂ”imalus. VĂ”imalik on koostada sĂ”ltuvuste skeem, koostamisaja graafik, pakettide suuruse graafik lĂ”ppkĂ€itusesĂŒsteemis. Tulemused pdf-failidena (valikuline svn, png) kataloogis output/graph.

Visualiseerimise kÀskude nÀited:

  • make graph-depends. ehitame sĂ”ltuvuste puu
  • make -graph-depends ehitame konkreetse paketi sĂ”ltuvuste puu
  • BR2_GRAPH_OUT=png make graph-build ehitame ehitamise ajagraafiku vĂ€lja PNG-s
  • make graph-size ehitame pakettide suuruse graafiku

Kasulikud skriptid

Buildroot kataloogis on alamkataloog utils kasulike skriptidega. NÀiteks on seal skript, mis kontrollib pakettide kirjelduste Ôigsust. See vÔib olla kasulik, kui lisate oma paketid (ma teen seda hiljem). Failis utils/readme.txt on nende skriptide kirjeldus.

Kogume allika distributsiooni

Oluline on meeles pidada, et kÔik operatsioonid toimuvad tavakasutaja, mitte root'ina.
KÔik kÀsud tÀidetakse buildroot'i juures. Buildroot-seotud paketis on juba hulk konfigureeringuid paljude levinud plaadide ja virtualiseerimise jaoks.

Vaadake konfigureeringute nimekirja:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

LĂ€heme qemu_x86_64_defconfig konfi peale

make qemu_x86_64_defconfig

Ja alustame kogumist

tee

Kogumine lÔppes edukalt, vaatame tulemusi:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Buildroot on kogunud pilte, mida saab Qemus kÀitada ja veenduda, et need töötavad.

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

Tulemus — Qemu-sĂŒsteemi kĂ€ivitamine:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Oma plaadi konfigureerimise loomine

Plaadi failide lisamine

Vaadake konfigureeringute nimekirja:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Nimekirjas nÀeme pc_x86_64_efi_defconfig. Loome oma plaadi, kopeerides selle konfigureeringust:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Koheselt loome plaadi katalooge oma skriptide, rootfs-overlay ja teiste vajalikud failide jaoks:

mkdir board/my_x86_board

LĂ€heme sellele defconfig'ile:

make my_x86_board_defconfig

Nii et nĂŒĂŒd on kogumise konfigureering (salvestatud .config failis buildroot'i juures) vastav sihtmasin x86-64 legacy (bios) laadimisega.

Kopeerime linux-kernel'i konfigureeringu (kasuks tuleb hiljem):

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

Buildimise parameetrite mÀÀramine KConfig kaudu

KÀivitame mÀÀramise:

make menuconfig 

Avatakse KConfig aken. On vÔimalus konfigureerida graafilise liidese kaudu (make nconfig, make xconfig, make gconfig):

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Siseneme esimesse jaotisse Target Options. Siin saab valida sihtarhitektuuri, millele ehitus keskendub.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Build options — siin on erinevad ehitamise seadistused. Saame mÀÀrata allikakoodide kataloogid, ehitamise niitide arvu, allika allalaadimise peeglid ja muid seadeid. JĂ€tame seaded vaikimisi.

Toolchain – siin seadistatakse ehitusriistade komplekt. RÀÀkime sellest rohkem.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Toolchain type – kasutatava tööriistakomplekti tĂŒĂŒp. See vĂ”ib olla sisseehitatud buildroot vĂ”i vĂ€line tööriistakomplekt (saab nĂ€idata katalooge juba kogutud versioonide vĂ”i allalaadimise URL-iga). Erinevate arhitektuuride jaoks on tĂ€iendavad valikud. NĂ€iteks arm jaoks saab lihtsalt valida Linaro vĂ€list tööriistakomplekti versiooni.

C library – C teeki valik. See mĂ”jutab kogu sĂŒsteemi tööd. Tavaliselt kasutatakse glibc-d, mis toetab kogu vĂ”imalikku funktsionaalsust. Kuid see vĂ”ib osutuda liiga suureks sisseehitatud sĂŒsteemi jaoks, seega valitakse sageli uglibc vĂ”i musl. Me valime glibc (hiljem on see vajalik systemd kasutamiseks).

Kernel Headers ja Custom Kernel Headers series – peab vastama tuumaversioonile, mis on loodavas sĂŒsteemis. Kernel headers jaoks saab samuti nĂ€idata teed tarballile vĂ”i git-repositooriumile.

GCC COMPILER VERSIONS – valik kompilaatori versioonist, mida kasutatakse kokkupanekuks.
Enable C++ support – valime kokkupaneku jaoks C++ raamatukogude toetuse. See tuleb hiljem meile kasuks.

Additional gcc options – saab mÀÀrata tĂ€iendavaid kompilaatori valikuid. Meie jaoks ei ole see hetkel vajalik.

System configuration vĂ”imaldab mÀÀrata loodava sĂŒsteemi tulevasi parameetreid:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Enamik punkte on mÔistetavad pealkirjadest. Pöörame tÀhelepanu jÀrgmistele punktidele:
Path to the users tables — tabel loodavatest kasutajatest (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

NĂ€idisdokument. Loodud kasutaja on user koos parooliga admin, automaatselt gid/uid, /bin/sh shellega, vaikimisi grupiga user, grupi liikmeks root, kommentaariga 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

Root filesystem overlay directories — kataloog, mis katab kokku pandud target-fsi. Lisab uusi faile ja asendab olemasolevaid.

Custom scripts to run before creating filesystem images — skriptid, mis tĂ€idetakse otse enne failisĂŒsteemi piltide loomist. Hoidke skript praegu tĂŒhjana.

Liigume osakonda Kernel

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Siin on mÀÀratud tuuma seaded. Ise tuum konfigureeritakse lÀbi make linux-menuconfig.
Tuumaversiooni saab mÀÀrata mitut moodi: valida ettepanekutest, sisestada versioon kÀsitsi, nÀidata repositooriumi vÔi valmis tarballi.

Kernel configuration — tee tuuma konfigureerimise faili. Siit saab valida vaikimisi konfiguratsiooni valitud arhitektuurile vĂ”i defconfig Linuxist. Linuxi lĂ€htekoodis on olemas defconfig'i kogum erinevate sihtsĂŒsteemide jaoks. Otsitavat saab leida, vaatates otse lĂ€htekoodidesse siit. NĂ€iteks Beagle Bone Black plaadi jaoks saab valige konfiguratsioon.

Sihtpakettide jaotis vĂ”imaldab valida, millised paketid installitakse koostatavasse sĂŒsteemi. JĂ€tame selle praegu muutmata. Hiljem lisame oma paketid sellesse loendisse.
FailisĂŒsteemi pildid — nimekiri failisĂŒsteemi piltidest, mis koostatakse. Lisame iso-pildi.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

KĂ€ivitaja — valik koostatavatest kĂ€ivitajatest. Valime isolinix.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Systemdi konfigureerimine

Systemd muutub ĂŒha olulisemaks osaks linuxist, olles samal tasemel kernel'i ja glibc-ga. SeetĂ”ttu tĂ”in selle seadistuse eraldi punkti.

Seadistamine toimub lĂ€bi make menuconfig, seejĂ€rel Sihtpaketid → SĂŒsteemitööriistad → systemd. Siin saab mÀÀrata, millised systemd teenused installitakse ja kĂ€ivitatakse sĂŒsteemi kĂ€ivitamisel.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

SĂŒsteemi konfiguratsiooni salvestamine

Salvestame selle konfiguratsiooni lÀbi KConfig.

SeejÀrel salvestame oma defconfig:

make savedefconfig

Linuxi tuuma konfigureerimine

Linuxi tuuma konfigureerimine kutsutakse esile jÀrgmise kÀsuga:

make linux-menuconfig

Lisame Virtualboxi graafikakaardi toe

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Lisame Virtualboxi kĂŒlastaja integreerimise toe.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Salvestame ja vÀljumine. OLULINE: konfiguratsioon salvestatakse kausta output/build/linux-$version/config, aga mitte kausta board/my_x86_board/linux.config.

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

SeetÔttu tuleb konfiguratsioon kÀsitsi salvestada:

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

SeejĂ€rel teeme kogu sĂŒsteemi tĂ€ieliku uuesti koostamise. Kuna buildroot ei koosta juba koostatud, tuleb kĂ€sitsi mÀÀrata pakette, mida uuesti kokku panna. Aja ja nĂ€rvide sÀÀstmiseks on vĂ€iksem sĂŒsteem lihtsam kogu mahuna uuesti kokku panna):

make clean; make

Kogumise lĂ”petamisel kĂ€ivitame VirtualBoxi (katsetatud versioonidega 5.2 ja 6.0) kĂ€ivitades CD-diskilt. SĂŒsteemi parameetrid:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

KĂ€ivitamine koos koostatud iso-ga:

Buildroot — osa 1. Ülevaade, minimaalse sĂŒsteemi koostamine, seadistamine menĂŒĂŒ kaudu

Kasutatud materjalide nimekiri

  1. Buildrooti kÀsiraamat

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster