Logika systému postavenom na jadre linux. 3 časť

Dnes | 01:41 | redhawk1975 | redhawk1975
Seriál: linux

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ť 
Logika systému postavenom na jadre linux 2. časť 
Logika systému postavenom na jadre linux 3. časť
Logika systému postavenom na jadre linux 4. časť
Logika systému postavenom na jadre linux 5. časť
Logika systému postavenom na jadre linux 6. časť
Logika systému postavenom na jadre linux 7. časť