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

08.10 | 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ť 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