Jadro FreeBSD a jeho konfigurácia

Základom dobre fungujúceho operačného systému je jeho jadro (angl. kernel). Niekedy sa za operačný systém v pravom slova zmysle považuje iba samotné jadro. Jadro je rozhraním medzi hardvérom počítača a aplikáciami. Prideľuje procesom pamäť a procesorový čas, zabezpečuje im prístup k pevným diskom, sieťovej karte či periférnym zariadeniam. Od kvality jadra operačného systému závisí stabilita počítača, efektívnosť využitia jeho prostriedkov či zaistenie bezpečnosti systému. I keď všetko toto závisí od kvality jadra, treba si uvedomiť, že jadro neposunie hardvérové obmedzenia systému. V elektronických konferenciách sa možno stretnúť aj s takými absurdnými tvrdeniami, že "operačný systém A využije lepšie hardvér ako operačný systém B, a preto je potrebné v prípade používania A viac dbať o dobré chladenie procesora". To by znamenalo, že pri použití operačného systému A bude ten istý procesor schopný vykonávať viac operácií, ako by bol schopný vykonať za ten istý čas pri použití operačného systému B. Ľudia, ktorí podobné informácie šíria, ich zvyčajne nevedia podoprieť konkrétnymi faktami ani ich nijako inak zdôvodniť – spravidla ich tiež iba niekde čítali či počuli a bez zamyslenia sa nad nimi ich reprodukujú ďalej; v lepšom prípade iba nesprávne interpretujú tvrdenie (tentoraz už pravdepodobne opodstatnené), že "operačný systém A dokáže dostupné hardvérové zdroje výpočtového systému spravovať efektívnejšie ako operačný systém B". Títo ľudia sa potom niekedy dostávajú do akejsi "binárnej schizofrénie" tvrdiac, ten "ich" operačný systém na jednej strane viac zaťažuje hardvér, ale na druhej strane ho chváliac, že dokáže rýchlo bežať aj na starších počítačoch či vnorených systémoch so skromným hardvérom. Kto sa už s podobnými argumentmi stretol, určite vie, o ktorých operačných systémoch sa takéto tvrdenia šíria. Kto sa s nimi zatiaľ nestretol, nech verí, že sa s času na čas vyskytujú a s obľubou sa používajú najmä pri osobných rozhovoroch obhajujúcich ten-ktorý operačný systém. Žiadny operačný systém, nech by bol akokoľvek kvalitný, však neurobí z procesora AMD k-5 procesor Pentium 4, nezdvojnásobí množstvo operačnej pamäte, ani neurobí diskové pole RAID-0 z dvoch ATA diskov pripojených na ten istý IDE radič. Teda vlastne to posledne menované operačný systém FreeBSD hravo dokáže, ale že to nie je práve najšťastnejšie riešenie, nech si každý nedôverčivý používateľ vyskúša sám (viď vinum(8)).

Jadrá komerčných operačných systémov sú pre ich používateľov neprístupné; sú tak transparentnou súčasťou zvyčajne monolitického systému, že používatelia o ich existencii nevedia a ani nepotrebujú vedieť. FreeBSD svoje jadro pred používateľmi nezatajuje, naopak, dáva im ho plne k dispozícii, ako je u kódovo otvorených systémov dobrým zvykom. Používatelia majú možnosť určovať, ktoré komponenty bude jadro toho ich operačného systému FreeBSD obsahovať, akým spôsobom bude prideľovať procesom procesorový čas, alebo ktorý hardvér bude podporovať. Podobne možno ladiť množstvo pamäte používanej na sieťové operácie a prispôsobiť bežné nastavenie jadra tak stolovému počítaču, ako aj silne zaťaženému webovému serveru. Konfigurácia jadra umožňuje každému používateľovi prispôsobiť správanie sa operačného systému jeho požiadavkám.

FreeBSD poskytuje hneď dve možnosti na konfiguráciu svojho jadra. Prvá možnosť je jeho statická konfigurácia, tak ako je známa napríklad z operačného systému GNU/Linux. Buduje sa pri nej akási kostra jadra operačného systému, jadro sa skompiluje a nainštaluje. Druhou – ale vôbec nie druhoradou – možnosťou konfigurácie jadra systému je dynamická konfigurácia, ktorá umožňuje meniť niektoré parametre jadra systému buď pri jeho zavádzaní (t.j. pri štarte operačného systému), alebo dokonca počas jeho behu.

Statická konfigurácia jadra

Zdrojové kódy jadra sú nainštalované v adresári /usr/src/sys/, samotná konfigurácia sa vykonáva editáciou konfiguračného súboru umiestneného v podadresári arch/conf/, kde arch je názov adresára zhodný s architektúrou počítača, pre ktorý sa konfigurácia vykonáva. Pre počítače rady PC sa teda príslušné konfiguračné súbory nachádzajú v adresári /usr/src/sys/i386/conf/. Tento adresár obsahuje dva súbory, GENERIC a LINT. Súbor GENERIC je konfiguračný súbor, pri použití ktorého je možné získať jadro operačného systému totožné s tým, ktoré používa operačný systém FreeBSD po inštalácii. Toto jadro je veľmi všeobecné, zahŕňa podporu množstva hardvérových zariadení potrebných pre chod systému na čo najväčšej množine počítačov. Naopak, neobsahuje podporu pre zariadenia, ktoré nie sú pre chod systému nevyhnutne potrebné, ako sú napríklad zvukové karty. Súbor LINT je okomentovaným zoznamom všetkých volieb, ktoré sa v konfiguračnom súbore jadra môžu vyskytovať. Tento súbor sa nepoužíva na kompiláciu, ale iba ako akýsi manuál; niektoré voľby v ňom sa totiž vzájomne vylučujú a nemá zmysel ich používať súčasne.

V prípade, že adresár /usr/src/sys/ neexistuje, znamená to, že zdrojové kódy jadra nie sú nainštalované. Vtedy ich treba doinštalovať, najjednoduchšie pomocou inštalačného programu sysinstall(8) s použitím nasledujúcich volieb:

Configure — Do post-install configuration of FreeBSD
|
+ —>	Distributions — Install aditional distribution sets
	|
	+ —>	[X] src — Sources for everything
		|
		+ —>	[X] sys — /usr/src/sys (FreeBSD kernel)
	  

spolu s voľbou vhodného inštalačného média (CD, ftp, ...). Všetky ostatné nástroje potrebné pre zostavenie a inštaláciu jadra operačného systému sú k dispozícii v základnej inštalácii operačného systému FreeBSD.

Pred inštaláciou nového jadra operačného systému je veľmi vhodné zálohovať fungujúce jadro.   nie vždy sa totiž môže konfigurácia nového jadra podariť na prvýkrát. Pri inštalácii nového jadra sa toto inštaluje do súboru /kernel a staré jadro sa zálohuje do súboru /kernel.old. Nie je však vhodné sa na toto spoliehať, pretože po dvoch neúspešných pokusoch nakonfigurovať a nainštalovať si vlastné jadro za sebou bude aj v súbore /kernel.old zálohované prvé nefunkčné jadro. Zvyčajne je postačujúce mať zálohované jedno spoľahlivo fungujúce jadro. FreeBSD pri svojej inštalácii inštaluje jadro do súboru /kernel a zároveň urobí jeho záložnú kópiu do súboru /kernel.GENERIC. Odporúča sa zálohovať si aj posledné spoľahlivo fungujúce a dlhodobo odskúšané jadro, napríklad takto:

# cd /
# cp kernel kernel.OK
# mkdir modules.OK
# cp modules/* modules.OK/ 

Potom v prípade, že nové jadro nebude z akýchkoľvek dôvodov fungovať, je možné pri zavádzaní operačného systému prerušiť bootovanie počítača a v príkazovom riadku, ktorý sa ponúkne, zadať (reťazec "ok" na začiatku každého riadku je výzva príkazového riadku – prompt):

ok unload
ok load kernel.OK
ok boot

čím dôjde k zavedeniu zálohovaného jadra.

Najdôležitejšou a najzdĺhavejšou časťou budovania vlastného jadra je jeho samotná konfigurácia. Deje sa editáciou konfiguračného súboru. Nie je odporúčané editovať priamo súbor GENERIC, ale vytvoriť si jeho kópiu mimo stromu /usr/src/ a do patričného adresára ho iba nalinkovať:

cp /usr/src/sys/i386/conf/GENERIC /root/NOVEJADRO
ln -s /root/NOVEJADRO /usr/src/sys/i386/conf/

To pre prípad, že neskôr je možné zdrojové kódy vymazať, ale konfiguračný súbor je vhodné si zachovať. V tomto momente je potrebné otvoriť novovytvorený konfiguračný súbor (ktorý je zatiaľ vernou kópiou súboru GENERIC), a upraviť ho "na svoj obraz". Odporúčaný postup je taký, že sa postupne budú odoberať tie voľby, ktoré nie sú pre daný konkrétny počítač potrebné. Dobrou radou pre začiatočníkov môže byť, že ak niektorej voľbe v konfiguračnom súbore dobre nerozumejú a v pôvodnom súbore GENERIC bola táto voľba použitá, je lepšie ju tam nechať. Vhodný postup je postupne odoberať voľby a zariadenia z konfiguračného súboru jadra, jadro zostaviť, inštalovať a testovať až po dosiahnutie minimálneho funkčného jadra, až potom začať do jadra pridávať nové voľby a nové zariadenia. Prípadným neúspechom sa netreba dať odradiť, málokomu sa podarí na prvýkrát zostaviť jadro fungujúce podľa predstáv; po troch alebo štyroch pokusoch však aj začiatočník začne celkom určite konvergovať k správnym nastaveniam.

Na prvý pohľad sa môže zdať konfiguračný súbor jadra operačného systému FreeBSD zložitý, ale v skutočnosti to tak nie je. Väčšinu jeho obsahu totiž tvoria komentáre, ktoré majú iba informačný obsah a skúsenejší používatelia ich z konfiguračných súborov svojich jadier vymažú alebo nahradia vlastnými, riadky pre ovládače najrozličnejších typov sieťových kariet, ktoré je spravidla možné po odstránení nepotrebných ovládačov zredukovať na dva riadky a nakoniec sú to ovládače SCSI a RAID zariadení, ktoré sa v bežných osobných počítačoch tiež nevyskytujú, takže ich tiež možno odstrániť. Výsledný konfiguračný súbor po používateľských úpravách zvykne mať okolo 50 konfiguračných záznamov, čo na taký zložitý systém ako je jadro operačného systému skutočne nie je veľa. Najdôležitejšie voľby sa nachádzajú hneď na začiatku konfiguračného súboru:

machine i386

    – voľba architektúry, pre ktorú bude jadro použité. Táto voľba je v konfiguračnom súbore nutná. Pre počítače triedy PC nie je iná možnosť, len použiť hodnotu i386.

cpu I686_CPU

    – voľba typu procesora, na ktorom bude jadro použité. Týchto volieb môže byť v konfiguračnom súbore viacero, ale spravidla nie je dôvod udávať tu iný typ procesora okrem toho, na ktorom bude jadro použité. Kto by mal pochybnosti o type svojho procesora, jednoznačnú odpoveď dostane nasledujúcim spôsobom:

    % cat /var/run/dmesg.boot | grep CPU
    CPU: AMD Duron(tm) Processor (700.03-MHz 686-class CPU)
    %		    
    

    Možné hodnoty pre voľbu cpu na architektúre i386 sú I386_CPU, I486_CPU, I586_CPU a I686_CPU.

maxusers 0

    – Názov tejto položky je trochu zavádzajúci. Neudáva totiž maximálny počet používateľov počítača, ale je len ich odhadom na účely dimenzovania určitých vnútorných údajových štruktúr v jadre, napr. rozmeru tabuľky procesov a pod. Nastavenie hodnoty na nulu umožní jadru zvoliť nastavenie daných rozmerov podľa veľkosti inštalovanej operačnej pamäte.

device npx0 at nexus? port IO_NPX irq 13

    – ovládač jednotky pohyblivej rádovej čiarky procesora. Bez neho sa nepodarí jadro skompilovať. V prípade, že procesor, na ktorom má bežať jadro, nemá jednotku FPU, je potrené v konfiguračnom súbore jadra jednu z nasledujúcich volieb na jej emuláciu:

    options MATH_EMULATE
    options GPL_MATH_EMULATE
    

Popis ďalších volieb je možné nájsť priamo v komentároch konfiguračného súboru. Zoznam všetkých použiteľných volieb sa nachádza okomentovaný v súbore LINT. Tento súbor je síce rozsiahly (má viac ako 2800 riadkov), ale je dobré si ho aspoň informačne prezrieť pre získanie prehľadu o voľbách, ktoré sa pri konfigurácii jadra operačného systému FreeBSD dajú použiť. Môže to byť užitočné najmä pre majiteľov procesorov Cyrix a Celeron. Ku konfigurácii jadra už len zoznam tých volieb, ktoré z konfiguračného súboru pravdepodobne nebudete chcieť odstraňovať, aspoň nie pri prvých pokusoch s jeho ladením:

options         FFS
options         FFS_ROOT
options         PROCFS
options         COMPAT_43
device          ata
device          atadisk
device          atkbdc0 at isa? port IO_KBD
device          atkbd0  at atkbdc? irq 1 flags 0x1

A naopak niektoré voľby, ktoré budete pravdepodobne odstraňovať ako prvé:

options         UFS_DIRHASH
options         MFS
options         MD_ROOT
options         NFS
options         NFS_ROOT
options         MSDOSFS
options         CD9660
options         CD9660_ROOT
options         SCSI_DELAY=15000
options         KTRACE
device          eisa

Po uložení zmien v súbore /usr/src/sys/i386/conf/NOVEJADRO možno ešte upraviť súbor /etc/make.conf a nastaviť niektoré voľby týkajúce sa prekladu jadra:

CPUTYPE=k7
COPTFLAGS= -O -pipe

Preklad jadra sa začne v adresári /usr/src/sys/i386/conf/ a pokračuje podľa naznačených inštrukcií:

# cd /usr/src/sys/i386/conf/
# ls -l
total 114
-rw-r--r--  1 root  wheel    9679 Jan 14 10:53 GENERIC
lrwxr-xr-x  1 root  wheel      13 Jan 13 13:14 NOVEJADRO -> /root/NOVEJADRO
-rw-r--r--  1 root  wheel  105614 Jan 20 11:12 LINT
# config -r NOVEJADRO
Removing old directory ../../compile/NOVEJADRO:  Done.
Don't forget to do a ``make depend''
Kernel build directory is ../../compile/NOVEJADRO
# cd ../../compile/NOVEJADRO
# make depend && make all install

Kompilácia aj inštalácia sú sprevádzané množstvom informačných výpisov. Po úspešnom skončení tohto procesu je nainštalované jadro aj jeho moduly a na jeho zavedenie stačí reštartovať počítač. Po reštarte je potrebné skontrolovať výpisy príkazu dmesg(8), funkčnosť hardvérových zariadení a správnu činnosť bežiacich služieb. V prípade problémov s konfiguráciou jadra operačného systému treba prvú pomoc hľadať v často kladených otázkach na adrese www.freebsd.org/doc/en_US.ISO8859-1/books/faq/kernelconfig.html, v príslušnej časti príručky operačného systému FreeBSD na adrese www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig.html a v súbore /usr/src/sys/i386/conf/LINT. Druhú pomoc treba hľadať pomocou vyhľadávača Google špecializujúceho sa na BSD systémy na adrese www.google.com/bsd (bez lomky na konci adresy!). A nakoniec v prípade zlyhania oboch predchádzajúcich zdrojov pomoci (čo je extrémne málo pravdepodobné) sa treba obrátiť na niektorú z elektronických konferencií venujúcich sa operačnému systému FreeBSD, ktorú si treba vybrať podľa jeho používanej verzie.

FreeBSD Project Home