antiX-26 — zase o niečo lepší #3

Dnes | 17:02 | Richard | Richard

Tak konečne si povieme viac o init systémoch antiX-u. Prečo ich má vlastne toľko?

Čo je to init

Pre väčšinu je to pravdepodobne známy pojem, no ak nie, tak init systém v linuxe je prvý proces, ktorý sa spustí po zavedení jadra. Jeho úlohou je inicializovať systém, spustiť služby a zabezpečiť ich správne fungovanie.

Je ich viacero, najznámejšie sú:

Zvlášť odklon od SysVinit smerom k systemd vzbudilo veľa povyku a obe strany majú svoje argumenty, ktorými zručne racionalizujú ich používanie. A neradno sa ani teraz do takejto dišputy pustiť.

antiX neprešiel na systemd z viacerých dôvodov, najmä však kvôli podpore starých strojov, filozofie nezávislosti (najväčším prispievateľom je RedHat, čo u niekomu môže dvíhať obočie — proste korporát), ďalej kvôli jeho monolitickej architektúre (systemd obsluhuje nielen init, ale aj cgroups, logovanie (journald), sieť, atď.), a i teda kvôli nesúladu s unixovou filozofiou.

Voľba init-u

antiX má na to šikovný nástroj: „Init Diversity Manager“. A to je fajn, je to grafický nástroj, pomocou ktorého to ide jednoducho a navyše — diverzita je vždy prínosom. Ono je to tak, že grub menu automaticky spustí program, na ktorý odkazuje súbor /sbin/init. Takže tento nástroj vyrába požadovaný symbolický odkaz.

Adresár /etc obsahuje konfiguračné súbory pre všetkých päť init systémov a adresár /sbin obsahuje spúšťacie súbory.

Aha — ešte sme nepovedali, o aké systémy sa jedná. Sú to tieto:

Obr. 0: Init Diversity Manager

Prečo ich je tak veľa? Presnú odpoveď nepoznám, ale hádam je to preto, že každý má svoje plusy a mínusy.

InitParalelný štartZávislostiUmiestnenieVýhodyNevýhody
SysVinitNie (väčšinou sekvenčne)Žiadne formálne, poradie cez prefix S/K/etc/init.d, /etc/rc?.dJednoduchý, široká podporaPomalší štart, manuálne závislosti
OpenRCÁno (možné)Deklarované v skriptoch/etc/init.d, /etc/conf.d, /var/service (distro-specific)Lepší paralelizmus a správa závislostí, stále sú to sh skriptyManuálne závislosti, bez vlastného logovania
runitÁno, rýchlySlužby sú nezávislé/etc/sv alebo /srv/run, jednotlivé run súboryVeľmi rýchly, jednoduchý model, dohľad nad procesmiManuálne závislosti, nemá cgroups
s6Áno, ešte rýchlejšíZložité explicitné závislosti cez s6-rc/etc/s6, /service alebo distro-spec. adresáreVeľká kontrola, robustný dohľad nad službamiStrmšia krivka učenia
dinitÁnoDeklarované závislosti/etc/dinit.d alebo /etc/dinitMalý, rýchly, explicitné závislostiMenej rozšírený, menej balíčkov so service-súbormi
systemdÁnoDeklarované závislosti v unit súboroch/lib/systemd/system, /etc/systemd/systemModerné, rýchly štart, jednotná konfiguráciaVeľký, integrovaný, all-in-one, kontroverzný

A čo sa deje na pozadí?

Ako sme hovorili, /sbin/init je symbolický odkaz na konkrétny init skript. (napr. /lib/runit/runit-init, /lib/sysvinit/init,…); antiX poskytuje pre niektoré inity samostatné „service“ balíčky a štruktúry (napr. runit-service-, dinit-service-, s6-rc-service-, 66-service-; dajú sa zistiť pomocou
apt-cache search '^runit-service-|^dinit-service-|^s6-rc-service-|^66-service-').

Tie inštalujú služby v tvare očakávanom daným initom (runit: /etc/sv alebo /srv/run, dinit: svoje konfigurácie). Zároveň antiX má klasické SysV skripty (/etc/init.d/) ktoré niektoré inity dokážu znovu použiť alebo volať cez kompatibilné wrappery.

Čo je ale dôležité: nie všetky služby sú „duplikované“ v plnom rozsahu pre každý init. Preto antiX buď dodá pre daný init vlastné service-balíčky, alebo inity používajú kompatibilné skripty/wrappery.

Pri zmene init systému sa zmení proces 1 (PID 1) spúšťaný kernelom; ten (konkrétny init) potom používa svoju vlastnú politiku spúšťania a adresáre pre služby (teda nejedná sa len o „prepínanie symlinkov“ v /etc, ale tie služby musia v tvare očakávanom novým initom). Preto antiX dodáva nástroje a balíčky, ktoré pripravujú potrebné „service“ súbory a upravujú boot menu.

Otázkou teda je, či každý init má svoje vlastné verzie skriptov so službami…? No nie. Často je jedna „primárna“ implementácia (najčastejšie SysV skript v /etc/init.d/) a ostatné inity buď používajú kompatibilné wrappery, alebo distribúcia poskytne špecifické „service“ balíčky.

 

Poznámka na okraj: čo je to ten „wrapper“?

Je to malý skript, ktorý umožní spustiť službu napísanú pre jeden init systém, ktorý premostí rozdiely v API, umiestnení (v adresárovej štruktúre) a spúšťacom modeli. Hľadal som hocikde po webe, ako to presne funguje, a zistil som len, že wrapper zavolá pôvodný init skript s potrebnými parametrami (start/stop/restart) a preloží ho do formy, ktorú nový (druhý) init očakáva (napr. runit očakáva súbor run, s6 očakáva run a finish, dinit moduly majú zase niečo iné). Výhodou môže byť prispôsobenie existujúcich služieb bez ich úplneho prepísania, takže možno používať služby napísaných len so SysV skriptami.

Zhrnuté — niektoré služby sú ošetrené tými „wrappermi“, a niektoré sú dodávané vo viacnásobných service‑balíčkoch. Medzi tie, povedzme „univerzálne“ patria udev, dbus-daemon, syslog, ssh, cron, /getty/…

Špecifické majú napríklad takéto mená:

Výber požadovaných služieb pri štarte systému, alebo ich ručné spustenie, zastavenie či reštart sa v minulosti pre SysVinit robilo pomocou TUI rozhrania. Teraz k tomu pribudol i grafický nástroj.

Obr. 1: Service manager

Ako ten-ktorý init funguje, ako sa ovláda z príkazového riadku možno dohľadať v oficiálnej dokumentácii:

Záver

Veľké množstvo rôznych init systémov v antiX-e je dôkazom, že jeho autori nestrácajú čas spormi, ktorý init je lepší (samozrejme, systemd je výnimkou) a implementujú rôzne riešenia, ktorými poskytujú používateľom skutočnú slobodu výberu.

Namiesto slepého nasledovania jednej platformy si antiX zachováva ľahkosť, rôznorodosť a adaptabilnosť pre rôzne hardvérové a filozofické potreby.

Toto prístup len potvrdzuje antiX ako moderný, štíhly systém s rešpektom k používateľom.

Aj preto ich pravidelne finančne podporujem. Vážim si ich nadšenie a prácu.