Logika systému postavenom na jadre linux. 3 časť
Dnes to bude o init systémoch.
init systémy v Linuxe sa líšia predovšetkým rýchlosťou spúšťania, filozofiou dizajnu a komplexnosťou.
Zatiaľ čo dominantný systemd funguje ako robustná správa celého operačného systému s paralelným spúšťaním služieb, tradičný SysVinit vsádza na sekvenčné spúšťanie shell skriptov a minimalizmus podľa Unix filozofie.
Medzi nimi stoja alternatívy ako OpenRC, runit či s6, ktoré hľadajú kompromis medzi rýchlosťou a jednoduchosťou kódu.
RH: na porovnanie init systémov odporúčam antix 26. Obsahuje vacsinu init ov okrem systemd.
Detailný prehľad hlavných init systémov:
systemd
Moderný štandard, ktorý dnes poháňa drvivú väčšinu mainstreamových distribúcií. Mnohí zaň ďakujú Lennart Poetteringovi. Iný zase RedHatu
Výhody: Ponúka najrýchlejší štart systému vďaka agresívnemu paralelnému spúšťaniu a aktivácii cez sockety. Poskytuje jednotnú správu zariadení, logov (journald), procesných skupín (cgroups) a časovačov (nahrada za cron).
Nevýhody: Kritici mu vyčítajú porušenie Unix filozofie („rob jednu vec a rob ju dobre“). Ide o obrovský a komplexný balík binárnych súborov, čo sťažuje jeho analýzu pri kritickom zlyhaní.
SysVinit (System V init)
Klasický a historicky najstarší init systém v Linuxe, ktorý funguje na princípe tzv. runlevelov (úrovní spustenia). Jeho pôvod je v UNIX system V (5)
Výhody: Maximálna transparentnosť a jednoduchosť. Všetky služby sú spúšťané obyčajnými shell skriptmi, ktoré si vie skúsený správca jednoducho upraviť.
Nevýhody: Služby spúšťa striktne jednu po druhej (sekvenčne), čo na modernom hardvéri výrazne spomaľuje štart systému. Má slabú a komplikovanú správu závislostí medzi službami.
OpenRC
Moderné vylepšenie konceptu SysVinit, vyvíjané primárne komunitou okolo Gentoo Linuxu.
Výhody: Zachováva prehľadnosť shell skriptov, ale dopĺňa ich o inteligentné riešenie závislostí a možnosť paralelného štartu. Má minimálnu réžiu a spotrebu systémových prostriedkov.
Nevýhody: Nezabezpečuje komplexnú správu systému na úrovni systemd (napr. správu napájania, zložité sieťové nastavenia či centralizované logovanie), na čo vyžaduje dodatočné nástroje.
runit a s6
Predstavitelia extrémneho minimalizmu zameraní na nepretržitý dohľad nad procesmi (daemon supervision).
Výhody: Sú extrémne rýchle, malé a bezpečné. Ak nejaká služba spadne, okamžite ju dokážu reštartovať. Sú populárne v kontajneroch (Docker) a na staršom hardvéri.
Nevýhody: Majú strmú krivku učenia a vyžadujú pokročilé konfiguračné znalosti, keďže neponúkajú takmer žiadnu automatizáciu „po vybalení z krabice“.
Na ukážku si vezmime jednoduchý príklad: konfiguráciu vlastnej služby (daemona) s názvom myservice, ktorá spúšťa skript /usr/local/bin/myservice.sh.
Rozdiel v prístupe je okamžite viditeľný. systemd používa deklaratívny konfiguračný súbor, kde iba definujete parametre, zatiaľ čo SysVinit vyžaduje plnohodnotný procedurálny shell skript, ktorý musí sám ošetriť stavy ako štart, stop a reštart.
V systemd sa konfigurácia zapisuje do takzvaného unit súboru. Súbor sa zvyčajne umiestňuje do /etc/systemd/system/myservice.service
V SysVinit musíte vytvoriť spustiteľný shell skript v adresári /etc/init.d/myservice. Tento skript musí spracovávať argumenty z príkazového riadku pomocou konštrukcie case.
OpenRC, runit aj s6 pristupujú ku konfigurácii oveľa úspornejšie ako robustný systemd a oveľa elegantnejšie ako starý SysVinit.
Pri runit a s6 navyše prechádzame na takzvaný daemon supervision – namiesto zložitého štartovania procesu na pozadí napíšete skript, ktorý službu spustí priamo na popredí, a samotný init systém sa stará o to, aby bežala.
OpenRC (používaný napr. v Gentoo či Alpine Linuxe) používa shell skripty podobne ako SysVinit, ale kompletne odbúrava nutnosť programovať logiku pre start, stop či reštart. Využíva predpripravené funkcie.
Súbor sa umiestňuje do /etc/init.d/myservice a musí byť spustiteľný (chmod +x).
Pri Runit (známym najmä z Void Linuxu) vsádza na extrémnu jednoduchosť. Služba nie je definovaná jedným súborom, ale adresárom. Vytvoríte adresár /etc/sv/myservice/ a v ňom spustiteľný skript s názvom run.
V S6, často využívaný v minimalizovaných Docker kontajneroch a pokročilých distribúciách je filozoficky podobný runitu, ale ponúka oveľa vyššiu kontrolu nad závislosťami a štruktúrou. Podobne ako runit vyžaduje adresár služby, napríklad /etc/s6/services/myservice/. Ak chcete v s6 definovať, že služba vyžaduje sieť, vytvoríte v tom istom adresári podadresár dependencies/ a doň prázdny súbor s názvom network.
Keďže runit a s6 striktne dodržiavajú Unix filozofiu, neobsahujú žiadny obrovský monolitický nástroj na správu logov (ako je journald v systemd).
Namiesto toho používajú prístup, kde každá služba má svoj vlastný dedikovaný proces na logovanie.
Oba systémy využívajú mechanizmus pipe.
V ďaľšej časti sa pozrieme na priečinok /etc bez ktorého nie je možný beh OS.
Logika systému postavenom na jadre linux 1. časť súbory a logická štruktúra systému.
Logika systému postavenom na jadre linux 2. časť pomenovanie zariadení a oprávnenia.
Logika systému postavenom na jadre linux 3. časť init systémy.
Logika systému postavenom na jadre linux 4. časť adresár /etc.
Logika systému postavenom na jadre linux 5. časť ovládače hardvéru.
Logika systému postavenom na jadre linux 6. časť manuál a informácie v systéme.
Logika systému postavenom na jadre linux 7. časť odreagovanie a zaujímavosti


Pre pridávanie komentárov sa musíte prihlásiť.