Init rendszerek és szolgáltatás menedzsment

Amikor unix és linux alapú rendszerekről beszélünk, szinte minden esetben a disztrókra, programokra, driverekre és játékokra gondolunk, pedig az init és a rendszerfolyamatok kezelése a rendszerek alapvető építőkövei.

Ehhez viszont nem árt kicsit átnézni a linuxos rendszerindulás folyamatát egy hagyományos – BIOS -os gépen:

A Linux rendszerindítási folyamata

  1. BIOS.  A számítógép bekapcsolása után a BIOS inicializálja a képernyőt és billentyűzetet, majd teszteli a fő memóriát. Eddig a pontig a gép még semmilyen tömegtároló eszközhöz nem fért hozzá. Ezután az aktuális dátum és idő, illetve a legfontosabb perifériákra vonatkozó adatok betöltődnek a CMOS-ból. Az első merevlemez és annak geometriájának felismerése után a BIOS átadja a rendszervezérlést a rendszertöltőnek.
  2. Rendszertöltő.  Az első merevlemez első 512 bájtos fizikai adatszektora betöltésre kerül a fő memóriába és a szektor elején található rendszertöltő átveszi az irányítást. A rendszertöltő által végrehajtott parancsok határozzák meg az indítási folyamat további részét. Az első merevlemez első 512  bájtját éppen ezért Master Boot Record-nak (fő rendszertöltő rekord, MBR) hívjuk. A rendszertöltő ezután átadja az irányítást az aktuális operációs rendszernek, ebben az esetben a Linux-kernelnek.
  3. Kernel és initrd.  A rendszervezérlés átadásához a rendszertöltő betölti a memóriába a kernelt és egy kezdeti, RAM alapú fájlrendszert (initramfs). Az initramfs tartalmát a kernel közvetlenül képes használni. Az initramfs része egy kisméretű, init nevű végrehajtható fájlt, amelyik a valódi root fájlrendszer felcsatolását végzi. Ha speciális hardverillesztő programokra van szükség még a fő tárolóeszköz elérése előtt, akkor annak szerepelnie kell az initramfs -ben.
  4. init az initramfs -ben.  Ez a program végzi el a megfelelő root fájlrendszer felcsatolásához szükséges összes műveletet: pl. megfelelő kernelfunkciók biztosítása a használni kívánt fájlrendszerhez, illetve eszközillesztőprogramok biztosítása a tárolóvezérlőkhöz az eszközvezérlő segítségével, ez lehet edev, mdev, udev, eudev, bármelyik általunk választott device manager. Ha sikerült megtalálni, a root fájlrendszeren hibaellenőrzés történik, majd felcsatolja a rendszer. Ha ez is sikerült, akkor az initramfs törlődik és elindul a root fájlrendszeren lévő init program.
  5. init.  Az init kezeli a rendszer tényleges indítását és lehetővé teszi különböző funkcionalitást biztosító szintek használatát.

A démonok

Mindenkinek megvannak a maga démonai, ahogy a mondás tartja, jelen esetben viszont a szó  egy háttérben futó programot jelent, egy szolgáltatást végző alkalmazást, amit a rendszer újraindítása nélkül is le tudunk állítani, elindítani, konfigurálni. Ilyen démonok feladata a nyomtatás, a naplózás vagy akár a hálózati kapcsolat.

Az init folyamat

Amikor a kernel elindítja az init programot és az egyes számmal látja el a folyamatot ( PID:1 ) lényegében ezt hívjuk a rendszerünk valódi inicializációjának (initialization), innen a folyamat neve, egy rövidítés: init. Ez a folyamat a számítógép kikapcsolásáig jelen van és meghatározza a különféle  alkalmazások és szolgáltatások betöltési módját,  szokás szuperdémonnak is hívni, ami igen csak furcsa és mókás lehet kezdő linuxosok számára, de a fentiek ismeretében immáron teljesen érthető, hiszen minden folyamat, processz felett áll, így a démonok felett is.

Fontos, amennyiben a kernel nem találja az initet, akkor kernel pánikkal elszáll, mint a győzelmi zászló !

"Kernel panic - not syncing - attempted to kill init!"

Ezzel el is érkeztünk írásunk lényegi részéhez, hogy milyen init rendszerek és folyamatvezérlők vannak.

Init rendszerek és folyamatvezérlők, szolgáltatás menedzserek

  • SysV-init: Talán érdemes az egyik legősibb inittel kezdeni, ez pedig az AT&T System V operációs rendszerének inicializációs megoldása, ahol különböző futási szinteket lehetett definiálni, tehát nem egyesével indítgattunk a terminálból dolgokat, hanem a telinit parancsot használva meg lehetett adni, hogy milyen módon működjön a rendszer és mi induljon el.
    A rendszer futása közben a futási szint a telinit vagy az init paranccsal módosítható, a kívánt szint számát paraméterként megadva:
    telinit 1 vagy shutdown now A rendszer egyfelhasználós módba vált. Ez a mód rendszerkarbantartásra és -adminisztrációra használható.
    telinit 3 Elindul az összes lényeges program (a hálózat is), a normál felhasználók bejelentkezhetnek és X grafikus környezet nélkül használhatják a rendszert.
    telinit 5 A grafikus környezet is bekapcsolódik. Általában elindul egy képernyőkezelő, mint az XDM, GDM vagy KDM. Az automatikus bejelentkezés engedélyezése esetén a helyi felhasználó automatikusan bejelentkezik az előre kiválasztott ablakkezelőbe (GNOME, KDE, vagy bármely másik ablakkezelő).
    telinit 0 vagy shutdown -h now A rendszer leáll.
    telinit 6 vagy shutdown -r now A rendszer leáll, majd újraindul.
    A default értékek az alapértelmezett konfig fájlban találhatók meg: /etc/inittab
    A SYSTEM V a wikipédián:https://en.wikipedia.org/wiki/UNIX_System_V
  • BootScripts – A GoboLinux saját scriptekkel vezérli a rendszerindítást, példák a hivatalos dokumentációban: https://wiki.gobolinux.org/Documentation/Boot-script-tasks/
  • busybox-init – főként beágyazott rendszerekhez használják előszeretettel, kicsi, gyors és viszonylag egyszerű is
  • procd – az OpenWrt által használt megoldás, Wikipédia oldal: OpenWrt, hivatalos init scriptek: https://openwrt.org/docs/techref/initscripts
  • Dinit – szolgáltatás kezelő és init system. A Chimera Linux initje és  Artix Linux -ban boot opció.
  • Epoch – egy kicsi és gyors init és folyamatkezelő, GitHub: https://github.com/Subsentient/epoch
  • Initng – a következő generációs initként definiálják, aszinkron folyamatindítást tesz lehetővé többek között, GitHub: https://github.com/initng/initng
  • launchd – a meglévő Darwin/macOS/iOS/tvOS rendszerindítás cseréjének szánták a Mac OS X v10.4 -től kezdve, a hagyományos stílusú ‘rc.local’ scripteket futtat és a SystemStarter folyatmatot
  • OpenRC – Az Alpine Linux, Gentoo linuxokban használt folyamatvezérlő és init rendszer, a Devuan és Artix Linux -ban pedig boot opció, ami izolált folyamatokat és párhuzamos futtatást is lehetővé tesz, nekem személy szerint is nagy kedvencem
  • runit– egy olyan keresztplatformos, teljesértékű init rendszer, ami párhuzamos folyamatok kezelését is lehetővé teszi, a Void Linux alapértelmezett initje
  • Sun Service Management Facility (SMF) egy teljesen újraírt és újratervezett rendszer illumos/Solaris -hoz a Solaris 10 -től kezdődően, ugyanakkor a régi System V-init mintájára egyedüli service -ként fut
  • Shepherd – A GNU egy szolgáltatás- és démonkezelő, amely aszinkron, függőség-alapú inicializálást biztosít. Guile Scheme nyelven íródott, a projekt weboldala: https://www.gnu.org/software/shepherd/
  • s6 – Egy komplett szoftver csomag, amely init szolgáltatást is nyújt többek között, a projekt weboldala: https://skarnet.org/software/s6/
  • SystemStarter – A Mac OS X korábbi init rendszere a Mac OS X v10.4 verzióig
  • Upstart – A korábbi init rendszer teljesértékű cseréjének szánták az Ubuntu kezdeményezésére és használták is egészen 2014 -ig. A Fedora 9, Red Hat Enterprise Linux 6 és a Google’s Chrome OS is szintén használta.
  • finit – Az init a SysV init és a systemd alternatívája, eredetileg Claudio Matsuoka által az EeePC fastinitből visszafejtve: weboldal
  • Hummingbird -A hummingbird egy sebességre tervezett init rendszer. Alapértelmezés szerint nem csinál mást, mint elindítja a rendszert és leállítja a rendszert: repo
  • 31init  – 31 sorból álló, C nyelven írt init program: repo
  • uselessd – egy olyan projekt, amely a systemd-t egy alap initd-re és process supervisorra redukálja, miközben minimalizálja a tolakodást és az izolációt. Alapvetően ez a systemd a felesleges dolgok kivágásával, repo
  • cinit – A cinit egy gyors init rendszer függőségi funkciókkal és profil támogatással. weboldal
  • minit – egy nagyon minimális, de teljesértékű init weboldal

Na és hol marad a systemd – a sokak által gyűlölt és szeretett megoldás?

Nos az a helyzet, hogy a systemd egy Red Hat alkalmazott Lennart Poettering és Kay Sievers munkássága nyomán jött létre és a projekt eredeti célja egy init rendszer lett volna.
A gond az, hogy mára már gyakorlatilag teljesen átvette a home könyvtárak kezelésétől, a rendszerloggolástól a felhasználók kezelésén át a hálózatkezelésig és a folyamatkezelésig szinte mindent. A dolgok jelenlegi állása szerint a projekt annyi mindent integrál magába, hogy gyakorlatilag a teljes alaprendszert átveszi, így egy kész systemd-core-os -t hozva létre, mint egy konténer image, ami mindenkinek ugyanaz lesz, ami szerintem nagyon rossz irány és ezek a fejlesztések nagyon károsan hatnak a linux rendszerekre.

Tehát már messze nem csupán egy init vagy egy szolgáltatás kezelő rendszer, ami már csak azért is problémás, mert végig a legmagasabb azonosítóval, a PID:1  -el fut, így bármilyen hiba vagy törés esetén a legmagasabb szintű jogosultsággal fut le az adott folyamat.
A másik probléma, hogy a systemd nem tartja magát a POSIX szabványhoz, ami számomra teljesen elfogadhatatlan 22 év linuxozás után, tehát számomra a systemd nem init rendszer és nem helyes a szemléletmód az ami mögötte van, így én ezt a projektet semmilyen formában nem vagyok hajlandó támogatni sem videók, sem cikkek formájában.

Köszönöm a figyelmet és remélem, hogy lesz majd aki hasznosnak találja, a végére pedig szeretnék ajánlani egy magyar cikket és egy külföldi oldalt, egy kis szakmai olvasnivaló.
Akár egyetértünk vele, akár nem, szerintem nagyon hasznos írások és mindenképpen szélesíti a látókörünket.

Kéretik elolvasni – egy igen alapos és körültekintő leírás:
https://lacyc3.eu/systemd

Végül egy olyan link, amivel én személy szerint tökéletesen egyetértek és csak támogatni tudom,
legyetek szívesek figyelmesen átolvasni az itt leírtakat:
https://nosystemd.org/


Továbbra is várunk mindenkit nagy szeretettel csevegő oldalunkon élőben:
https://skamilinux.hu/chat/

Aktív fórum témák:
https://skamilinux.hu/phpBB3/search.php?search_id=active_topics

Legutóbbi PuppySzoftverek:
https://sourceforge.net/p/puppyszoftver/activity

Vélemény, hozzászólás?

Translate »