Hlavní navigace

Sestavujeme nástroje pro tvorbu LFS

28. 4. 2009
Doba čtení: 7 minut

Sdílet

Tvorba Linux From Scratch se dá nejjednodušeji rozdělit do dvou částí. V té první se nejprve vytvoří sada nástrojů, pomocí níž se posléze ve druhé části vybuduje vlastní operační systém. Pojďme se tedy dnes podívat na tu první část - na to, jak si vytvořit nástroje potřebné k tvorbě systému.

Stručně o kompilaci ze zdrojových kódů

Protože při tvorbě LFS vše stojí a padá na kompilaci programů ze zdrojových kódů, nebude na škodu si o té kompilaci říct stručně něco bližšího. Navzdory obecnému přesvědčení nejde o nic složitého, člověk samozřejmě ani nepotřebuje umět programovat. Každý pořádný open source software totiž většinou obsahuje i instrukce jak onen konkrétní program jednoduše zkompilovat a nainstalovat. Po rozbalení stažených zdrojáků tedy stačí prozkoumat soubory s názvy INSTALL, BUILDING či README, kde by měly být všechny potřebné informace jak na to.

Většinou se postupuje následující trojicí příkazů: ./configure, což je vlastně spuštění konfiguračního skriptu, který je součástí kompilovaných zdrojových kódů. Tento skript, má za úkol připravit zdrojové kódy na samotný překlad. Zjistí si hromadu informací ze systému, které budou při kompilaci potřeba a zkontroluje, zda jsou přítomny všechny nezbytné knihovny a programy. Pokud zjistí nějakou nesrovnalost, vypíše o tom chybovou zprávu a skončí. Je pak na uživateli, aby zjednal nápravu a opětovně configure spustil. Teprve až se provede skript configure bez chyby, je možné přistoupit ke druhé části, a tou je vlastní kompilace. Ta se spustí prostým příkazem make. Opět platí, že pokud nastane nějaká chyba, make vypíše chybovou zprávu a skončí. Potom je třeba chybu opravit a opět spustit make. Teprve až makeproběhne bez vypsání chyby, je program správně zkompilován. Zbývá jej už pouze nainstalovat, k tomu slouží třetí příkaz: make install. Ten způsobí nakopírování zkompilovaných binárek na správná místa. Pro tuto trojici příkazů se ujal výraz „svatá trojice“. Samozřejmě se lze setkat i s jinými způsoby, založených na jiných postupech a příkazech, proto je třeba se vždy podívat do souborů uvedených výše, jak je tomu u toho kterého konkrétního případu.

Skriptu configureje možno zadat velké množství parametrů, jež ovlivní celý proces kompilace a instalace. Kompletní přehled všech těchto parametrů je možno získat spuštěním configure s parametrem takto: ./configure –help. Prozkoumáním výpisu se dají zjistit parametry, jimiž lze ovlivnit jaké volitelné vlastnosti programu vypnout nebo zapnout, jaké dodatečné balíčky je možno použít a kde je hledat, a kam se budou výsledné zkompilované binárky instalovat.

Příprava na tvorbu systému

Pro nový systém potřebujeme především místo na disku. Nejlepší je vytvořit si samostatný prázdný oddíl. Velikost tohoto prázdného oddílu závisí na tom jaké aplikace hodláte používat, a jejich množství. Samotný výsledný systém sice může být poměrně malý, ale je třeba počítat s dočasným místem, potřebným při kompilacích balíčků. Toto dočasné úložiště bude uvolněno po dokončení kompilování. Kniha mluví o minimu 1,3 GB pro vytvoření LFS, což je ale pouze nejzákladnější výbava nutná k nabootování počítače a kompilaci dalších balíčků. Pravděpodobně se budou doinstalovávat další a další balíčky jako Xorg, Firefox, GNOME/Kde atd. takže bude třeba místa více. Je také možné provádět kompilaci na jiné části disku, a na oddíl LFS pouze instalovat zkompilované binárky.

Linuxové systémy již tradičně požadují ještě tzv. swap oddíl – prostor pro odkládání dat, když je RAM paměti nedostatek. Pokud je již na disku vytvořen, je možno jej bez ostychu použít. Taktéž pokud je třeba adresář /home na zvláštním oddílu, což je jistě moudré, může být tento oddíl do nového systému v budoucnu připojen.

Prázdný diskový oddíl je možné vytvořit například programem Gparted spuštěným z nějakého LiveCD. Dokáže šachovat s místem na disku, aniž by poškodil data, takže je možné jednoduše si oněch pár GB bezbolestně ukrojit z jiného oddílu. Podmínkou je, aby na onom zmenšovaném oddíle bylo dostatek volného prostoru. Jedno varování, možná zbytečné ale pro jistotu – nikdy neprovádějte takovéto změny diskových oddílů na disku ze kterého je spuštěn systém. Proto píšu o použití LiveCD, kdy systém běží z CD a můžete tak klidně a bezpečně měnit oddíly na pevném disku. Existuje LiveCD přímo pro tyto účely, je možno stáhnout. Po jeho nabootování je k dispozici jenom program Gparted, kterým se provedou potřebné změny a následně se restartuje zpět do normálního systému.

Na prázdném oddíle je nutné vytvořit souborový systém. V současné době se asi nejvíce používá ext3 a i kniha LFS buduje na něm, ačkoli už se začíná prosazovat novější ext4. Volba je čistě na tvůrci systému. Tento nový oddíl, pro přehlednost jej budu nazývat LFS oddíl, se přimountuje například do adresáře /mnt/lfs.

Dalším krokem je obstarání jednotlivých balíčků a jejich případných patchů. Kniha obsahuje seznam všeho potřebného včetně odkazů na místa kde se dají stáhnout. Většina tohoto základního softwareového vybavení pochází z ftp serveru GNU.org. Doporučovaná lokace pro umístění stažených souborů je adresář/sources na LFS oddíle.

Tvorba dočasného systému

Mohlo by se zdát, že první věcí, kterou bude třeba udělat při tvorbě nového systému, je vytvořit si kernel. Paradoxně je kompilace a instalace kernelu téměř to poslední. Ze všeho nejdříve je nutné si vytvořit dočasný systém, jakousi nezávislou sadu nástrojů, pomocí které se bude systém tvořit. Kniha LFS toto nazývá toolchain a doporučuje jej vytvářet v adresáři /tools na LFS části disku.

Před započetím práce je nutné si ověřit, zda je v hostitelském systému, ve kterém se bude LFS vytvářet, vše potřebné. Jde o nástroje, nutné k instalaci ze zdrojových kódů, jako jsou například gcc, make, grep a další. Kompletní seznam je na nalezení webu LFS, kde se nachází i skript, který to ověří rychle a jednoduše. Nic z toho co je potřeba, by neměl být problém v jakékoliv aktuální distribuci.

Po této kontrole následuje vytvoření zvláštního uživatele, pod nímž se bude toolchain vytvářet. Tomuto uživateli (v knize LFS je použito jméno lfs, jak jinak) je vytvořeno jakési základní pracovní prostředí nastavením systémových proměnných uzpůsobených pro tvorbu toolchainu. Tento uživatel bude mít se svých přihlašovacích skriptech všechna potřebná nastavení, takže stačí se jako tento uživatel přihlásit a tím se nastaví i ono speciální pracovní LFS prostředí.

Po přihlášení jako uživatel LFS začíná vlastní dobrodružství. Nebudu se zde samozřejmě zabývat každým jednotlivým balíčkem zvlášť. Ale pojďme se aspoň podívat na první balíček, kterým jsou binutils. Podívejte se, jak vypadá návod na jejich kompilaci. Ono pass 1 v nadpisu znamená, že jde o první kompilaci. Binutils se budou kompilovat v dohledné době ještě jednou, stejně tak druhý balík – kompilátor gcc. Proč tomu tak je, proberu později. Pojďme si nyní krok za krokem probrat návod, jak zkompilovat binutils dle dokumentace LFS. Po stručném popisu k čemu daný balíček slouží a co obsahuje následuje odhadovaná doba kompilace. Jak už jsem psal v minulém díle, je kompilace zdrojových kódů časově náročná záležitost. Pro aspoň přibližný předběžný odhad doby kompilace balíčku přicházíLFS s jednotkou Standard Build Unit (SBU), která se rovná době kompilace právě balíčku binutils. Tento časový údaj bude na každém stroji jiný, v závislosti na výkonu procesoru a dalších faktorech. Pokud tedy překlad binutils trvá u vás 10 minut, pak glibc jehož předpokládaná doba kompilace je 7,6 SBU bude trvat přibližně 76 minut. Všechny takto uvedené časy v LFS je však nutno brát velmi orientačně.

Dále následují samotné instrukce pro přeložení a nainstalování. Nejprve jsou zdrojové kódy binutils ošetřeny patchem, který řeší potíže s rozeznáváním novějších verzí Texinfa. Potom je vytvořen zvláštní adresář binutils-build v němž bude probíhat samotná kompilace, tak jak to doporučuje dokumentace. Následně je provedena svatá trojice – nejprve ./configure s hrstkou parametrů. Je třeba upozornit na parametr –prefix=/tools, tento právě určuje, že se budou výsledné binárky ukládat při posledním kroku svaté trojice do adresáře /tools. Tento parametr se bude opakovat i u všech zbývajících balíčků toolchainu. Pak pomocí make binutils přeložíme a konečně pomocí make install nainstalujeme do adresáře /tools. Celý proces uzavírá pár přípravných akcí pro pozdější fázi. Pokud všechno proběhlo v pořádku, je možno postoupit k dalšímu balíku – kompilátoru gcc. Tímto způsobem se postupuje balíček po balíčku, dokud není toolchain hotov.

GCC, binutils a glibc jsou pro správné fungování systému, kde se vše kompiluje ze zdrojových kódů, naprosto klíčové. Dokumentace LFS klade velký důraz na odizolování těchto základních nástrojů od hostitelského systému v co největší míře a co nejdříve. Proto se binutils a gcc kompilují nadvakrát. Nejprve se zkompilují a nainstalují

binutils, protože jak gcc, tak glibc provádějí ve svých konfiguračních skriptech testy na asembler a linker, jež jsou součástí binutils. Hned nato se zkompiluje a nainstaluje gcc. V této chvíli jsou ale jak binutils, tak gcc slinkované s knihovnami z hostitelského systému. Proto v dalším kroku přeložíme a nainstalujeme nové vlastní knihovny glibc, oproti nimž vzápětí zkompilujeme binutils gcc

CS24_early

znovu. Takto se docílí toho, že nové binutils a gcc budou už slinkované s novými glibc a může se tedy pokračovat v tvorbě toolchainu. Ten bude po dokončení tudíž zcela nezávislý (samozřejmě až na běžící jádro) na hostitelském systému a přitom plně schopen kompilace.

V okamžiku kdy je toolchain hotov je velmi vhodné si jej zazálohovat pro pozdější opětovné využití. V případě, že by bylo třeba začít s tvorbou systému od začátku, stačí na prázdný diskový oddíl nakopírovat tento dočasný systém, jeho tvorbu tím přeskočit a rovnou pokračovat dalším krokem. A tím je tvorba vlastního, výsledného, systému.

Ale o tom zase až příště.

Byl pro vás článek přínosný?

Autor článku