init rendszer(ek)

Fórumok

Sziasztok!

Épp játszom egy pici (minden téren, Lenovo ThinkCentre: i5, 8G RAM, integrált intel videó meg a szokásos körítés) gépen.

Kapott egy friss telepítést és ki szeretnék próbálni valami init rendszert ami nem systemd, kényelmes, aránylag egyszerűen tanulható. Most az alap openrc van rajta, de érdekelne bármi más is. A cél csak a tanulás, bár ha valamelyik bejön, még át is állítok rá minden gépet itthon :D

Tapasztalatokat szeretnék gyűjteni, itt elsősorban a másokét, azután meg sajátot ezekre is alapozva. Nem szeretnék szokásos systemd gyűlölködő topikot, ha lehet e nélkül várnék véleményeket, esetleg összehasonlítást pont a systemd-vel, mert (ha jó, ha nem) mára azért a legelterjedtebb init.

Hozzászólások

Nálam már egy jóideje az S6 játszik. Először az Obarun, majd az Artix képében. Működik, fejlesztik, worksforme ;)

Igazából mindegy, hogy melyiket használod. Szinte az összes használható, és tudja kb. ugyanazokat. OpenRC (Gentoo-n), runit (Void-on), s6 (Artix-on használtam), sysvinit (régi Ubuntuk, BSD-k), mindegyiket használtam, mindegyik működött alapvetően. Még a systemd-vel sem lenne sok bajom, ha sok soydev nem dependelné rá a szutykát, és csak opcionális lenne.

Az OpenRC és a systemd előnye, hogy tud párhuzamos service-indítást, és függőségkezelést. De ezek hiánya sem gond, csak akkor kicsit rugalmatlanabb a beállítás (pl. figyelni kell a szolgáltatások betöltési sorrendjére), meg a bootidő lesz egy kicsit lassabb. Kinek mi fontos.

Igazából vannak ultraminimalista init-ek is, pl. suckless-féle sinit (mindössze 96 sor C-ben), meg pl. ha akarod, kézzel a Bash-t vagy más shellt is befoghatsz, amiben futtatsz saját scriptet, és az gondoskodik az init-feladatokról, hogy milyen folyamatok induljanak, meg loopban figyelje, hogy mi hal le, és indítsa újra (meg leálláskor lője le őket biztonságosan). Nem egy nagy szám megcsinálni, akár egy iskolai gyakorlaton, házi feladatként is megcsinálható, nem kell hozzá programozó zseninek lenni, nem kell a kereket újra feltalálni.

Azt is vedd figyelembe, hogy a systemd nem csak egy init-rendszer, hanem amellett eseménykezelő (udevd), userkezelő (konkrétan (e)logind, homed), naplózó (journalctl és társai), ütemezős (cron-t kiváltandó), hálózatkezelő (netctl, networkmanager, stb.) rendszert is tartalmaz, kicsit olyan mindenes, a modern MacOS-ből lett koppintva. Míg a hagyományos init-rendszerek csak szűk értelemben vett init-et tudnak (elindítani azokat a dolgokat, amiket szeretnél, hogy induljanak a rendszerrel), a többi funkcióhoz neked kell feltenni dolgokat, pl. logolásra (rsyslog, syslog-ng, sysklogd, stb.), ütemezésre (cronie, fcron, stb.).

A kicsi initeknek az előnye az egyszerűség, átláthatóság (könnyebb megérteni, hogy mit csinálnak, hogy működnek), és kis erőforrásigény. Pl. régi, elavult, 1-2 magos, fél-1-2 giga RAM-os gépeknek nagyon vaskos a systemd (mára már közel 2 millió kódsorból áll!), nyögnek alatta, egy soványabb initrendszertől meglódulhatnak. Modern hardveren, kellő memóriával (az általad írt i5, 8 giga RAM ilyen) már nem számít.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Akkor zárjuk ki az ultraminimalista initeket. Marad az s6 és az OpenRC vagy van még rajtuk kívül más? Mi az s6 előnye az OpenRC-vel szemben?

A systemd sok szolgáltatásával összeismerkedtünk már, hosszabb-rövidebb időre. Csináltam BananaPI R2-vel és gentooval routert, de egy idő után valamiért a switch leáll és újra kell indítanom a systemd-networkd-t. Frank (aki a kernelt babusgatja a Banana routerlapokhoz) hasonlót tapasztalt debiánon, meg is maradt az rc vonalon, én sem erőltetem már, de akkor sokat tanultam belőle (amúgy is oktatási projekt volt). A logind érdekes, van helyette elogind, a homed-t sosem akartam még eddig így ez utóbbi kimaradt. Ezekre van valami alternatíva? A journalt rögtön olvasható formátumban is tárolom (már amikor rájövök, hogy még nem tettem meg :D ) és a binárist 128M-ra korlátozom. A cront is használtam már, nem vagyok tőle „hanyatt esve”, de nem is vagyok ellene. A legnagyobb bajom pont az a systemd-vel ami az előnye másoknak, hogy mindent egybe, ehhez jön, hogy előbb vagy utóbb minden is a /usr alá lesz linkelve. Valaki egyszer itt azt írta nekem, hogy jó is a mindet a c: alá begyúrni és ezt rám értette (anélkül, hogy látta volna a rendszerem belülről), pedig pont ez a mindent egybe és a /usr alá begyűrés ami miatt szeretnék előbb kicsit játszani a lehetőségekkel és kihátrálni a systemd-ből. Kicsit középen vagyok ezen a téren, nem kap minden könyvtár saját partíciót, de azért ez a /bin /lib /sbin linkelés az /usr alá nem jön be. bár az i5 bírja/bírná, én szeretnék most mást.

„Niemand ist unnütz! Man kann immer noch als schlechtes Beispiel dienen!”

dzsolt

Az s6 minimalistább, meg párhuzamos indítást nem tud. De én azt választanám, annak ellenére, hogy az OpenRC se rossz. Sőt, tovább megyek, szerintem a te gondod nem a systemd okozza, hanem hogy a hálózati service nincs jól bekonfigurálva, és nem indul újra. Rá kéne nézni, hogy mi az oka, netctl.service-t megnézni, hogy mi van benne (ehhez elég a text editor), dmesg-ben vagy journalctl-lel a logban, vagy néha a systemctl-lel, és megfejteni, hogy miért áll le, miért nem indul újra. Ez az initrendszert váltunk című kapkodás csak az elfedése lenne az eredeti problémának. systemd-ről váltást csak akkor ajánlom, ha zavar a bloat, vagy minimalista rendszerekkel kísérletezel, vagy csak simán a tanulás a cél, hogy megismerd az initrendszerek belső működését, szakmai kihívásalapon.

Annak egyébként én sem vagyok híve, hogy minden gyökérben lévő mappa külön partícióról legyen csatolva. Ez régen egy védekezési fegyver volt, mikor kicsit voltak a háttértárak, meg partíciók, és pl. néhány ember félt, ha hülyeséggel telik meg a /var vagy a /home, akkor nehogy hely híján a rendszer működésképtelenné váljon. De azt se jó, hogy ha minden kis mappa külön van csatolva, ez a BSD-knek is mániája alapesetben. Az én rendszereimen csak a /boot van külön (ez az UEFI boot miatt kell, külön EFI partíció), meg a /home (ez azért van külön, hogy esetleges újratelepítéskor megmaradjanak az adataim), a többi egyben megy a / partíciójára, általában swapem sincs, mióta minden gépben van 16 giga RAM.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)

Épp települ az s6 és 66, kíváncsi leszek :) Ez csak játék és tanulás, annó ugyan így voltam a systemd-vel, azóta az a default nálam (amúgy zavar a bloat és a fejlesztő hozzáállása is. Ez mondjuk igaz a gtk csd-re is :D). Lehet, hogy most ez változik, ki tudja.

Amúgy az a hálózati probléma nem disztró specifikus, egyszerűen ráhagytuk. Openrc-vel működik és mivel oktatási projekt volt a bemutató ideje alatt működött, csak megjegyzésként hozzá lett téve, hogy nincsen kész és az, hogy mi a baja. Arra több időt nem vesztegetek, nem fontos, hogy a cirokseprőn is systemd legyen.

A fájlrendszerem hasonló a tiédhez, a /mnt alatt vannak még innen-onnan állandóan becsatolt rendszerek jellemzően fájltárolásra. Egyszer ha gazdag leszek veszek egy olyan nas-t amibe ez mind elfér és csak egy marad :) Swap nálam azért van, pedig 64 giga az asztali, de üres szokott lenn. Arra hagytam, hogy majd hibernálok vagy valamire jó lesz, de évek óta nem léptem ebbe az irányba, nem volt rá szükség mégsem.

„Niemand ist unnütz! Man kann immer noch als schlechtes Beispiel dienen!”

dzsolt

Bocs, hogy beleszólok, de úgy tudom a 66 -t már nem fejlesztik. Kiszállt belőle a fejlesztője. Az Artixban már nincs belőle iso, s mindenkinek javasolják a váltást. De mondjuk ez kb. fél éve volt, azóta lehet változott a helyzet. Ez a baj a kicsikkel, ha kiszáll belőle valaki, akkor annyi.

Észleltem, a stabil ágnál régebbi s6 függőségei vannak és eddig nem igazán sikeredett feloldanom :(. A kérdés az, hogy akkor mi létezik az OpenRC-n és a systemd-n kívül. Az s6 magában azért nem annyira egyértelmű és könnyen kezelhető (nekem), mint az OpenRC.

„Niemand ist unnütz! Man kann immer noch als schlechtes Beispiel dienen!”

dzsolt

Jó választás, ha tanulás a cél, akkor minél egyszerűbb az initrendszer, annál inkább megérted hogy működik. Minél inkább komplexebb, minél inkább a felhasználó helyett gondolkodik, annál inkább nem lesz tanulságos. A 66-os interface-t nem ismerem, arról nem tudok nyilatkozni.

Igazából még egy olyan primitív megoldás is van, hogy ha csak egy folyamatnak kell futni a kernelen kívül, akkor nem kell initrendszer se, meg lehet adni a kernelnek (init=/bla/bla paraméterrel), hogy initként azt az egyetlen egy folyamatot (ez mindenképp bináris kell legyen, script nem lehet, mert nem fut hozzá az értelmező) indítsa el PID 1-ként, ilyenkor természetesen más service, folyamat nem indul, mert nincs, ami elindítsa őket. Igaz ilyen a gyakorlatban nincs, sokat nem nyernének rajta, csak kockázat lenne, hogy a rendszer működésképtelenné válik, ha lehal a PID 1 folyamat, de beágyazott rendszernél, meg tanulásnál el tudok képzelni ilyen szélsőséges esetet is. Gyakorlatilag azért egy busybox vagy Bash vagy valami minimum futtat egy scriptet initrendszer gyanánt (még ha nem is igazi init, csak egy áthidaló megoldás), ennél jobban nem soványítanak le dolgokat, nem éri meg, annyi erőforrást nem spórolnak, mint amennyit buknak a komplexitási fokon, használhatóságon.

A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)