Gentoo

www.gentoo.org

1. Filozofia

Gentoo je jedna z linuxových distribúcií založených na kompilovaní aplikácií zo zdrojových súborov. Jej hlavným mottom je modulárnosť a prispôsobivosť. Užívateľovi je umožnené veľmi silno pozmeniť, nakonfigurovať celý systém. Gentoo by sa dalo nazvať metadistribúciou, pretože každý si konfiguráciou systému vlastne vytvorí vlastnú distribúciu. Je to umožnené práve tým že software pri kompilovaní je omnoho viac nakonfigurovateľný ako hotové binárky.

Niekedy panuje názor že hlavným mottom je rýchlosť. To však podľa mňa nie je pravda, hlavným mottom je konfigurovateľnosť. Až z nej vyplýva možnosť vysokej rýchlosti celého systému,pretože užívateľ môže nastaviť aby sa používalo len to čo treba a takým spôsobom aby to bolo čo najrýchlejšie. Taktiež môžu pri kompilácii byť využité špecifické hardwarové optimalizácie.

Konfigurácia prebieha zvyčajne v konzoli, bud' editáciou textových konfiguračných súborov alebo pomocou shellových nástrojov. Napriek tomu to nie je komplikované, pretože Gentoo má vynikajúcu dokumentáciu a online komunitu.

Kompilovanie softwaru prináša samozrejme aj nevýhody. Je to samozrejme vyššia časová náročnosť inštalácie. Na to aby kompilovanie netrvalo neúnosne dlho je treba výkonný počítač. Balíčkovací systém Portage ktorý je používaný v Gentoo umožňuje neustály postupný upgrade systému, takže nikdy nemusíte preinštalovať celý systém z dôvodu jeho zastaranosti. Na druhú stranu je na to vhodné mať rýchle pripojenie na internet, pretože predpokladaným hlavným zdrojom balíkov je internet.

2. Inštalácia

Inštaláciu nebudem popisovať do prílišných detailov, pretože je to nepotrebné a hlavne je veľmi dobre popísaná v inštalačnej príručke. Vysvetlím však jej ideu. Na inštaláciu Gentoo môžete použiť hocijaký základný systém v ktorom vám funguje pripojenie na internet z ktorého potom počas inštalácie budú sťahované potrebné balíky. Na toto môžete použiť napr. niektorú z disketových distribúcií alebo nejaké live CD. Iná možnosť je použiť inštalačné Gentoo Live CD, na ktorom sú umiestnené mnohé balíky. Toto CD je možné použiť aj ako klasické Live CD a všetky balíky sťahovať z internetu.

Dôležité je vybrať si "stage" z ktorej budete inštalovať. Výber stage určuje čo všetko si skompilujete sami a čo použijete už predkompilované (predkompilovaný software sa inštaluje z tzv. binárnych balíkov). Stage sú 3:

Ak viete že budete inštalovať zo stage 1, tak nepotrebujete binárne balíky, ale iba zbalený obsah stage 1 (je to zbalený základný systém). Potom môžete použiť minimal live CD, ktoré má približne 50 MB.

Po výbere stage môžeme prejsť k samotnej inštalácii. Popíšem inštaláciu z live CD, ktorá je asi najpoužívanejšia. Po napálení príslušného live CD (určeného pre našu stage) z neho nabootujeme a inštalujeme z funkčného minimálneho systému. Počas inštalácie sa nepoužíva žiaden "wizard" alebo menu, všetko prebieha pomocou normálnych systémových nástrojov. Ale znovu pripomínam, že vd'aka vynikajúcej inštalačnej príručke je inštalácia veľmi jednoduchá. Najprv v bežiacom systéme z live CD nastavíme sieť aby sme sa mohli pripojiť na internet. Potom pripravíme disky, rozdelíme partície apod. Potom nasleduje rozbalenie stage do pripraveného disku. Tým nám tam vznikne základ systému (adresárová štruktúra, utility, ...). Po nainštalovaní Portage a nastavení vlastností kompilovania (optimalizácie atp.) spravíme chroot do miesta kde sme rozbalili stage. Teraz už je tam funkčný základný systém aj s Portage, a všetky zmeny a inštaláciu odteraz robíme v bežiacom našom budúcom systéme. Potom nainštalujeme kernel, nakonfugurujeme systém, nainštalujeme systémové programy, pridáme užívateľov a môžeme reštartovať počítač. Po reštarte máme funkčný základ systému, kde môžeme pomocou Portage inštalovať ostatný software ktorý potrebujeme.

3. USE flagy

USE flagy sú mechanizmus na určenie toho čo sa ma inštalovať a aké featury sa majú zapnúť/vypnúť pri kompilácii balíkov. Napríklad ked je vypnutý USE flag kde, tak sa nezapne nepovinná podpora KDE v niektorých programoch (v tých ktoré to podporujú) ani sa nebudú inštalovať tie nepovinné závislosti balíkov, ktoré patria do KDE.

Nastavenia USE flagov obsahuje premenna prostredia USE. Jej obsah vyzerá napr. takto "+kde -java". Jednotlivé položky sú USE flagy, predpona + znamená zapnutie USE flagu a - znamená jeho vypnutie. Implicitné nastavenia sú uložené v /etc/make.profile/make.defaults, tento súbor by ste nemali meniť. V /etc/make.conf sú vaše nastavenia USE, okrem toho sú tam aj nastavenia kompilácie (napr. optimalizácie). Pre dočasné nastavenie USE flagov pre inštaláciu jedného balíku môžete použiť shellový príkaz:
export USE="$USE -java"; emerge mozilla
Nainštalovaný balík môže poskytnúť USE flag (t.j. môže ho zapnúť), napr. nainštalovanie balíku kde-base/kdebase poskytne USE flag kde. Poskytované USE flagy sú definované v /etc/make.profile/use.defaults. Nastavenia USE flagov sa prehľadávajú postupne v tomto poradí: make.defaults, use.defaults, make.conf a nakoniec premenna USE so zvyšujúcou sa prioritou (t.j. nastavenie nejakého USE flagu v make.defaults môže byť zmenené v use.defaults atd.).

4. Portage

Portage je názov balíčkovacieho systému používaného v Gentoo. Je inšpirovaný systémom ports z BSD. Užívatelia s ním zvyčajne pracujú pomocou príkazu emerge. Emerge používame na inštalovanie, odinštalovanie a správu balíčkov. V skutopčnosti je to frontend pre program ebuild. Je schopný riešiť závislosti medzi balíkmi.

Balík nainštalujeme pomocou príkazu emerge meno_balíku. Prepínač -p spôsobí že sa balík v skutočnosti nenainštaluje, ale len sa vypíše čo by sa inštalovalo a aké USE flagy na to pôsobia a ich aktuálne hodnoty. Pomocou -k bude inštalácia prebiehať z binárneho balíka, ak je k dispozícii. Ak chceme upgradovať balíček, tak použijeme -u. Niekedy pri upgradovaní balíku by portage chcelo inštalovať staršiu verziu než je tá ktorú máme práve nainštalovanú. Môže to nastať napríklad pretože máme nainštalovanú najnovšiu, ale nestabilnú verziu (k nestabilným balíkom sa dostanem neskôr) ale chceme inštalovať najnovšie stabilné verzie balíkov. Potom použijeme prepínač -U, ktorý povolí iba upgrade na vyššiu verziu. Normálne správanie portage je že pri upgrade balíku automaticky neupgraduje jeho závislosti. Ak chceme aby upgradoval aj závislosti, tak použijeme prepínač -D.

Pri inštalácii portage ku každému balíku píše nejaké informácie, napr.:

root@t800 ripper # emerge -pv quanta

These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild  N    ] app-doc/quanta-docs-20030405   2,731 kB
[ebuild     U ] app-editors/quanta-3.2.2 [3.1.4] +doc  3,444 kB

Total size of downloads: 6,175 kB

Každý riadok zodpovedá jednému balíku. Úplne vpravo na každom riadku je veľkosť zdrojového súboru. Pred ňou sú USE flagy platné pre ten balík spolu s ich aktuálnou hodnotou (všimnite si +doc na riadku pre quantu). Vľavo od názvu balíku sú indikátory toho čo sa bude robiť. N znamená nový balík, U znamená upgrade nainštalovaného balíka, UD downgrade, R znovunainštalovanie a B znamená že je blokovaný balíkom na predchádzajúcom riadku (t.j. tieto 2 balíky nemôžu byť naraz nainštalované). F znamená že balík nemôže byť distribuovaný na gentoo mirroroch (jeho autor to nepovolil, napr. Java) a preto musíte zdrojáky stiahnuť sami. Portage vám napíše okdiaľ ho môžete stiahnuť. Potom ho uložte do adresára /usr/portage/distfiles

V portage existujú 2 virtuálne balíky. Jeden je system, jeho nainštalovaním sa nainštalujú všetky veci nutné pre funkciu gentoo. Balík world obsahuje všetky balíky ktoré ste inštalovali (ale nie automaticky inštalované závislosti balíkov). Preto príkazom emerge -U world upgradujete všetky balíky ktoré ste explicitne inštalovali, a po pridaní prepínača -D to upgraduje aj ich závislosti.

Odinštalovanie prebieha pomocou príkazu emerge unmerge meno_balíku. Portage však nekontroluje či práve odinštalovaný balík nie je závislosťou pre nejaký nainštalovaný balík, ani vás na to neupozorní. Preto musíte byť pri odinštalovaní opatrní aby ste neznefunkčnili časť systému.

Skripty v ktorých sú informácie potrebné na inštaláciu sa nazývajú ebuildy. Všetky ebuildy sa nachádzajú na disku, aj s potrebnými sprievodnými informáciami (ale samozrejme bez zdrojových súborov, tie sa sťahujú z internetu). V adresári /usr/portage sa nachádzajú adresáre s kategóriami ebuildov, napr. app-office, games-arcade apod. V každom adresári s kategóriou sú adresáre pomenované rovnako ako balík, teda napr. mozilla (celá cesta je /usr/portage/net-www/mozilla). V týchto adresároch sú uložené samotné ebuildy (napr. mozilla-1.7_beta-r1.ebuild) a iné súbory obsahujúce napr. checksumy zdrojákov.

Balíky môžete vyhľadávať pomocou emerge search meno, s prepínačom --searchdesc to nevyhľadáva len v názve ale aj v popise balíku. Celú lokálnu databázu balíkov musíte updatovať aby ste mohli inštalovať najnovšie verzie. Je to pretože každý ebuild ktorý máte na disku je len pre konkrétnu verziu balíku, takže musíte stiahnuť novšie ebuildy. Na to slúži príkaz emerge sync. Na výber mirroru odkiaľ budete sťahovať zdrojáky sa používa mirrorselect.

Portage pozná pojem nestabilných balíkov (častejšie nestabilných verzií balíkov). To že sú označené ako nestabilné znamená že majú známu závažnejšiu chybu alebo jednoducho ešte nie sú dostatočne otestované na to aby boli bez strachu označené ako stabilné. Gentoo má v tomto takú filozofiu že balíky sa snaží čo najrýchlejšie označiť ako stabilné (ak tam nie sú známe závažné chyby), takže inštalujete veľmi nové verzie softwaru (avšak už dosť stabilné). Ak chcete aby sa inštalovali aj nestabilné verzie balíkov, tak nastavte premennú prostredia ACCEPT_KEYWORDS="~x86" (ak používate architektúru x86) a exportujte ju (pomocou export ACCEPT_KEYWORDS).

Nový prípadne updatnutý balík by mohol vyžadovať úpravu nejakého konfiguračného súboru. To samozrejme niekedy nie je žiadúce, pretože by nám to mohlo prepísať naše nastavenia. Preto sa portage stará aj o ochranu konfiguračných súborov. V premennej prostredia CONFIG_PROTECT je zoznam adresárov v ktorých portage chráni konfiguračné súbory. Potom počas inštalácie pri pokuse o zmenu niektorého konfiguračného súboru nebude tento súbor zmenený. V jeho adresári vnikne súbor s menom ._cfgxxxx_name, kde name je meno konfiguračného súboru a xxxx je poradové číslo zmeny (najprv je 0000, potom pri nasledujúcom update ak tento súbor existuje tak vznikne nový s číslom 0001 atd.). Tento nový súbor obsahuje nový obsah konfiguračného súboru tak ako to požaduje update. Potom môžeme porovnať jeho obsah so starým konfiguračným súborom a ručne ich spojiť. Toto nám zjednodušuje nástroj etc-update. Po jeho spustení sa nám zobrazí zoznam súborov ktoré je potreba updatovať. Pre každý z nich si môžeme dať vypísať zmeny, ručne ho spojiť so starým alebo starý nahradiť novým.

5. Runlevely

Gentoo má runlevely spracované mierne odlišne než je bežné. Nie sú číslované, ale pomenované. Sú sledované závislosti služieb, takže napr. ftp server vyžaduje spustenie siete, ak sa ju nepodarí spustiť tak sa nespustí ani ftp server.

Každému runlevelu zodpovedá jeden adresár v /etc/runlevels. Tento adresár obsahuje symbolické linky na skripty v /etc/init.d. Skripty pre jeden runlevel sa spúšťajú v poradí podľa abecedy a podľa závislostí. Ich spúšťanie zabezpečuje skript /sbin/rc ktorý prijíma názov runlevelu ako parameter.

Pri štarte počítača sa najprv spustia služby v runleveli boot, potom v default. Dokopy je v Gentoo 7 preddefinovaných runlevelov. Sú to 3 interné: sysinit, shutdown a reboot a 4 užívateľské: boot, default, nonetwork a single (jednoužívateľský režim).

Init skripty sa nachádzajú v /etc/init.d. Každý z nich prijíma parametre start, stop, restart, pause a status. V týchto skriptoch sú nadefinované ich závislosti, na ktoré sa môžem spýtať pomocou parametrov iuse (ktoré init skripty používam, ale nie sú nutné), ineed (ktoré initskripty nutne potrebujem), needsme (kto ma nutne potrebuje) a usesme (kto ma používa). Init skripty (a hlavne nimi spúšťané programy) by sa dali konfigurovať ich priamou úpravou (napr. priamo v skripte zmeníme parametre spúšťaného programu), ale v Gentoo je ich konfigurácia oddelená. V adresári /etc/conf.d sú konfiguračné súbory (každý má ten istý názov ako príslušný init skript) v ktorých upravujeme obsah shellových premenných ktoré sú potom programom predané ako parametre (napr. APACHE2_OPTS="-D PHP4")

Runlevely môžeme upravovať ručne, ale vhodnejšie je použiť nástroj rc-update. Pomocou neho môžeme pridávať služby do runlevelov, odstraňovať ich a vypísať obsah runlevelov. Taktiež sa stará o závislosti služieb, takže do runlevelu automaticky pridá závislosti jeho služieb. Používa sa nasledujúcim spôsobom: rc-update cmd init-skript runlevel, kde cmd je add (pridanie do runlevelu), del (odstránenie) alebo show (výpis obsahu runlevelov, ostatné parametre sa potom nezadávajú), init-skript je názov init-skriptu ktorý chceme pridať/odstrániť a runlevel je názov runlevelu v ktorom chceme spraviť požadované zmeny.

Ak chceme mať iný runlevel ktorý bude slúžiť tak isto ako default, tak mu vytvoríme adresár v /etc/runlevels, pomocou rc-update ho naplníme službami a v boot manageri predáme jadru parameter softlevel=nazov_runlevelu. Obdobne môžeme použiť iný runlevel v úlohe boot runlevelu pomocou parametru jadra bootlevel.

6. Ostatná konfigurácia

Niektoré balíky potrebujú zadefinovať alebo upraviť niektoré premenné prostredia. V Gentoo ich zadefinujú vo vlastnom súbore v adresári /etc/env.d . Potom nástrojom env-update spojíte rôzne definície nejakej premennej do jednej, napr. rôzne ebuildy potrebujú niečo pridať do PATH, každý napíše svoju definíciu PATH do svojho súboru v /etc/env.d a pomocou env-update sa spoja do výslednej hodnoty PATH a to sa uloží do /etc/profile.env (tento súbor je využívaný v súbore /etc/profile).

Aj konfigurácia modulov jadra je tu trochu rozdielna. Klasicky všetka prebiehala v /etc/modules.conf. V Gentoo je rozdelená do viacerých súborov v /etc/modules.d podľa logických skupín (napr. zvukovka, grafická karta atd.). Obsah týchto konfigurákov sa spája do modules.conf pomocou nástroja modules-update, takže klasické nástroje nemusia vedieť pracovať s Gentoo konfiguáciou modulov.

7. Záver

Týmto článkom som dúfam ukázal základ filozofie distribúcie Gentoo. Hlavne by som chcel poukázať na to že to nie je tak komplikované ako sa niekedy tvrdí, hlavne zásluhou vynikajúcej dokumentácie a komunity na fórach.