Keď štartuje systém, tak prvý kód, ktorý sa dostáva k slovu je boot loader - zavádzač. V angličtine sa mu za starých čias hovorilo aj bootstrap loader. To preto, že postupne sa dostávajú k slovu zložitejšie a zložitejšie moduly. Postupnosť je takáto.
init
(/sbin/init), nahrá ho do pamäte a spustí.
Každý program, ktorý bol nahraný do pamäti sa stáva procesom a dostane svoje
číslo. Pretože init je prvý, dostane číslo 1. Program init, sa pozrie do súboru
/etc/inittab
. Tento súbor definuje, ktoré ďalšie programy treba pospúšťať
a pospúšťa ich. Mnohé z nich sú skripty, napríklad tie, ktoré sú zodpovedné
za pripojenie ďalších súborových systémov, nahrávanie modulov, nakonfigurovanie
siete, odštartovanie sieťových služieb a podobne. Unix-u podobné systémy majú
viacero takzvaných úrovní behu (runlevel). Sú číslované a pre každú úroveň
súbor /etc/inittab definuje, ktoré skripty budú spustené.
Moje skúsenosti s inými distribúciami sú vlastne mizivé. To čo používam už asi od roku 1996 je Slackware. Vždy, keď sa v nejakom webovom fóre rozbehne debata o tom, akú distribúciu odporučiť nováčikovi, tak Slackware je vždy označovaný za distribúciu pre pokročilých či masochistov. Nesúhlasím s tým. Možno je to tým, že ju používam už tak dlho. Každopádne je to distribúcia jednoduchá a priamočiara. Má svoju logiku. Popis zavádzania systému uvedený vyššie je, podľa môjho presvedčenia, nezávislý od distribúcie. Vlastne myslím, že je platný aj pre iné Unixu-podobné systémy. Pridáme teraz ešte pár slov k tomu, čo sa deje na Slackware-i. (To ale neznamená, že tu nenájdete zopár informácií, ktoré sa vám zídu aj, pri iných distribúciách.)
Ako som už spomínal, program init spúšťa skripty, ktorých mená nájde v /etc/inittab.
V Slackware-i to sú skripty z adresára /etc/rc.d
. Význam jednotlivých
úrovní behu je závislý od distribúcie. Slackware definuje
# These are the default runlevels in Slackware: # 0 = halt # 1 = single user mode # 2 = unused (but configured the same as runlevel 3) # 3 = multiuser mode (default Slackware runlevel) # 4 = X11 with KDM/GDM/XDM (session managers) # 5 = unused (but configured the same as runlevel 3) # 6 = reboot
Ale napr. Redhat používa úroveň 5 pre X11.
Pre úroveň 3 sa spúšťa skript
/etc/rc.d/rc.M
. Písmeno M je od slova multiuser - mnohoužívateľský.
Tento skript spúšťa ďalšie skripty.
V starších verziách Slackware-u, sa napr. konfigurácia IP adries či smerovania robila priamo
v /etc/rc.d/rc.inet1. Vo verzii 9.1 sa už prejavuje snaha o napodobnenie systému používaného
v iných distribúciách, BSD či iných Unix-u podobných systémoch. Bol vytvorený súbor
/etc/rc.d/rc.inet1.conf, do ktorého boli vybraté časti rc.inet1, v ktorých sa nastavujú
premenné s IP adresou sieťových kariet či gateway. To znamená, že administrátor by mal
zasahovať len do /etc/rc.d/rc.inet1.conf. Podobne rc.inet2 prešiel zmenou. V
minulosti
priamo štartoval apache, NFS služby, mailový server či DNS. V posledných
verziách
spúšťa samostatné skripty. Napr. pre NFS
server bol vytvorený /etc/rc.d/rc.nfsd, pre web server súbor /etc/rc.d/rc.httpd,
pre ssh server súbor /etc/rc.d/rc.sshd a tak ďalej. Tieto skripty umožňujú spúšťať,
zastavovať či reštartovať jednotlivé služby podobne ako v iných systémoch: /etc/rc.d/rc.httpd restart
zastaví a opätovne naštartuje webový server.
Niektoré distribúcie používajú termín service
- služba. Slackware je distribúcia,
pri ktorej je vhodné vedieť, čo sa deje pod pokrievkou. Mnohé iné systémy ponúkajú
nadstavby, ktoré skrývajú fungovanie týchto štartovacích skriptov v snahe uľahčiť
užívateľom či menej zdatným administrátorom správu systému. Záver je taký, že
iné distribúcie prichádzajú so zložitejším systémom štartovania, väčším počtom
menej
zrozumiteľných skriptov, ale skrývajú ich pod nástrojmi ako je YaST či Drakconf.
Slackware má systém štartovania jednoduchý. Hoci sa štartovacie skripty štiepia a
ich počet v posledných verziách narastá, stále sú jednoduché a prehľadné a zaobídu
sa bez nadstavbových programov.
Vrátim sa ešte k tomu, čo sa spúšťa z /etc/inittab. Nájdete tam ešte položky
zodpovedajúce programom z rodiny getty (v Slackware-i je to agetty). Tento program
dostane medzi parametrami meno terminálu a prihlasovacieho programu. Meno terminálu
je často tty1, tty2, tty3 a podobne. Linux (ale napríklad aj SCO Unix) používa
takzvané virtuálne terminály. Prepínať sa dá medzi nimi stlačením kombinácie kláves
Alt+Fn
, kde n je poradové číslo. Teda Alt+F1 prepne na tty1,
Alt+F2 prepne na tty2. Keď sa pozriete do /etc/inittab. Zistíte, že pri štarte
sa spúšťa niekoľko procesov getty a tiež zistíte, na ktorých virtuálnych termináloch
sú spustené. Tiež môžete povedať, že ich chcete viac, alebo naopak, nejaké nechcete
pretože používate grafické prostredie.
Ako som už spomínal, ďalším parametrom programu getty je prihlasovací program - login. Je to program, ktorý vypisuje dobre známu výzvu:
ras login: rastos Password: Linux 2.6.4. Last login: Sat Mar 27 16:45:27 +0000 2004 on pts/3 from ras.rastos.org. You have mail. /home/rastos>
Po zadaní mena si program login vypýta heslo a tieto údaje porovná s údajmi v /etc/passwd
. (Ok, nie celkom, moderné distribúcie používajú
/etc/shadow
a prípadne PAM (Pluggable Authentication Modules), ale
to je mimo rozsah tohoto dokumentu.) Ak sú správne, spustí prihlasovací shell
daného užívateľa.
Shell je program, ktorému getty odovzdá vstup z terminálu,
aby mohol preberať príkazy od vás. Ale prv než vás začne shell počúvať, najprv
vykoná inicializačné skripty. Najprv tie, ktoré sa nachádzajú v /etc
.
Tam sa robia nastavenie, ktoré ovplyvňujú všetkých užívateľov. Potom sa vykonajú
nastavenia špecifické pre užívateľa - tie sa nachádzajú v jeho domovskom adresári.
Mená štartovacích skriptov sú rôzne pre pre rôzne shelly. Najčastejšie používané
shell-y sú asi bash
(Väčšina systémových
skriptov je písaná v bash-i, preto sa ho oplatí poznať.) a csh/tcsh
.
Pre csh inicializačné skripty majú mená /etc/csh.cshrc
,
/etc/csh.login
, ~/.cshrc
a ~/.login
.
Pre bash je to spravidla /etc/profile
, ~/.bash_profile
a ~/.bashrc
(ten posledný môže mať zmenené meno nastavením premennej
prostredia BASH_ENV
)
Keď už vieme, ako funguje proces prihlásenia, oplatí sa spomenúť ešte jednu vec. Okrem virtuálnych terminálov môže getty obsluhovať aj terminály pripájané cez sériové porty. Vlastne to bola pôvodná úloha programu getty. Preto môže dostať medzi parametrami napríklad aj prenosovú rýchlosť terminálu a iné parametre. V súčasnosti sa už s takýmito terminálmi často nestretnete, ale stretnúť sa môžete s modemom. Áno; stačí mať getty pustené na porte s pripojeným modemom a tento modem môže fungovať ako terminál. Ok. Možno ani to sa vám možno nezdá také časté. Ale keď namiesto programu login použijete pppd, dostanete PPP server. Celkom podobný tomu, na aký sa pripájate k svojmu ISP.
Posledný skript, ktorý spomeniem je ten, ktorý spúšťa grafické prostredie. V drvivej väčšine prípadov je to X Window System - implementovaný projektom XFree86. X Window Systém je založený na rozdelení grafickej funkcionality medzi X server a klientov. X server je to, čo spravuje grafickú kartu a dostáva požiadavky o vykreslenie okien a prvkov v nich (angl. widget) od klientov. Komunikácia medzi serverom a klientami funguje pomocou sieťových volaní, následkom čoho môže byť server na inom stroji ako klienti.
Grafické prostredie možno v princípe spustiť dvoma spôsobmi. Buď systém
naštartuje do znakového prostredia a po prihlásení spustíte program startx.
Startx je skript, ktorý v konečnom dôsledku spustí program xinit. Druhá
varianta, ako sa dostať do grafického prostredia je, keď init naštartuje
priamo do grafického prostredia a ako prvé spustí takzvaný
display manažér. Existuje viacero druhov takých manažérov. XFree86 prichádza
s X Display Manager (XDM), ak máte nainštalované prostredie KDE môžete používať
KDE Display Manager (kdm), ak máte nainštalované prostredie GNOME môžete používať
GNOME Display Manager (gdm). Display manažér plní funkciu prihlasovacieho
programu - login. Vypýta si meno a heslo a po ich overení spustí - xinit.
Xinit je skript, ktorý má svoj inicializačný súbor
/usr/X11R6/lib/X11/xinit/xinitrc
resp. ~/.xinitrc
. Tam sa rozhodne o spustení správcu okien - Window Manger.
Správca okien spravuje okná. Hovorí, ako
bude vyzerať okraj okna, ako budú okná reagovať na kombinácie kláves, je zodpovedný
za operácie ako je minimalizovanie, maximalizovanie, presun okien. Preto tieto
operácie
fungujú nezávisle od toho či funguje aplikácia (hoci, tá tiež môže dostávať o
týchto operáciách správy a reagovať na ne). Existuje mnoho druhov správcov okien. Výber
zvyčajne závisí na náročnosti daného manažéra na hardware a rôznych drobnostiach
v správaní.