Fórum Root.cz
Hlavní témata => Software => Téma založeno: ??? 13. 02. 2018, 11:10:32
-
Ahoj,
na https://www.root.cz/clanky/nebojte-se-systemd-co-to-je-a-co-umi/ (https://www.root.cz/clanky/nebojte-se-systemd-co-to-je-a-co-umi/) -clanok o systemd, nechapem vetu
Proto je systemd init systém: obsahuje init, který spustí init skript, který se již stará o chod systém včetně dohledu nad démony.
Ono vo finale, sa po zavedení jadra spusta init, ci systemd? Stale nejako postradam rozdiel, co sa spusta, co nie...
Pouzivam Debian 9, po vylistovani procesov, je spusten /sbin/init s pidom 1, tak ako pise autor v clanku. Na co je tam potom ten systemd, ked stale je tam /sbin/init.... Stale nechapem rozdiel.... Prosim o nejake ludske a laicke vysvetlenie ^^
Dakujem
-
Při instalaci systemd je /sbin/init systemd init, ne sysvinit. Příkaz se jmenuje stejně, protože tam jej jádro hledá, ale chová se jinak.
-
Prosim o nejake ludske a laicke vysvetlenie ^^
Init je název pro jakýkoliv program spuštěný jako první (zjednodušeně PID=1, ale ani to nemusí platit, to je jen historicky).
Init pak může být z některého z balíků. Může to být sysvinit, nebo systemd, nebo jsou i jiné init mechanismy. Víceméně všechny pak dodržují konvenci, že binárka se jmenuje "init", ačkoliv to není nutná podmínka.
Asi Vás mate to, že v prosté řeči se běžně zkracuje sysvinit = init. Systemd = systemd. Ve zkutečnosti oba balíky poskytují init a ten pak pracuje úplně odlišně.
-
Rozdil je i v tom, ze tradicni inity jako SysV init delaji prave jen init, zatimco systemd se sere do dalsi pulky systemu a chybi v nem uz snad jen Tetris.
-
Pokail teda spravne chapem, tak v Debian9 je /sbin/init systemd.
Binarka sa vola init, lebo ju tam jadro system hlada, ale v skutocnosti ide o systemd, ktory sa sa sprava uplne inak. :D :D
Snad chapem spravne, co ste sa snazili pvedat. :}
-
Rozdil je i v tom, ze tradicni inity jako SysV init delaji prave jen init, zatimco systemd se sere do dalsi pulky systemu a chybi v nem uz snad jen Tetris.
Co tim myslis, ze se sere do dalsi pulky system?
-
Rozdil je i v tom, ze tradicni inity jako SysV init delaji prave jen init, zatimco systemd se sere do dalsi pulky systemu a chybi v nem uz snad jen Tetris.
Co tim myslis, ze se sere do dalsi pulky system?
Mě například nemile překvapilo PrivateTmp.
-
Co tim myslis, ze se sere do dalsi pulky system?
Systemd neni jen init. Sere se do logovani, dela cron, hraje Tetris.... a kazdy prvni den mesice zobrazuje oslavnou basen o Poetteringovi.
-
JarduP si nevsimej, ten je proste systemd hater. Navic jej v zivote nepouzil takze ani nevi na co pinda.
-
Co tim myslis, ze se sere do dalsi pulky system?
Systemd neni jen init. Sere se do logovani, dela cron, hraje Tetris.... a kazdy prvni den mesice zobrazuje oslavnou basen o Poetteringovi.
Neblabol.
-
Tak prominte, ze jsem se vas dotknul. Uznavam, ze systemd je precizne promysleny init, vsak to take vyviji tym geniu. https://github.com/systemd/systemd/issues/6237
-
Tak prominte, ze jsem se vas dotknul. Uznavam, ze systemd je precizne promysleny init, vsak to take vyviji tym geniu. https://github.com/systemd/systemd/issues/6237
"Systemd smrdi."
"Neblabol."
"Podivejte, ma hnusnou kravatu - odkaz na github."
-
Kdyz myslis.
-
Zkusím to moc nezamotat
V debianu teď plní roli initu (PID1) systemd. Systemd mimo jiné obsahuje i soubor /sbin/init - protože jádro počítá s tím, že má spustit /sbin/init.
Zamknout vlákno, než si začnou trhat občanky :)
-
Binarka sa vola init, lebo ju tam jadro system hlada, ale v skutocnosti ide o systemd, ktory sa sa sprava uplne inak. :D :D
Snad chapem spravne, co ste sa snazili pvedat. :}
Ne. Systemd je jeden z typů initů. Sysvinit také není jediný init, z těch nejznámějších je tu ještě BSD init, který také některé linuxové distribuce (snad) používají.
Kernel hledá to, co je mu předáno v parametru init=. To může být klidně init=/bin/sh.
-
Binarka sa vola init, lebo ju tam jadro system hlada, ale v skutocnosti ide o systemd, ktory sa sa sprava uplne inak. :D :D
Snad chapem spravne, co ste sa snazili pvedat. :}
Ne. Systemd je jeden z typů initů. Sysvinit také není jediný init, z těch nejznámějších je tu ještě BSD init, který také některé linuxové distribuce (snad) používají.
Kernel hledá to, co je mu předáno v parametru init=. To může být klidně init=/bin/sh.
Okey, mozno teraz znovu trepnem blbost. Ale, ulohou sysvint-u (myslim toho "stareho" initu) je spustat init script, napr. /etc/init.d/networking. Systemd by potom podla vsetkeho mal pre zmenu spustat tie tzv. Unit file napr. networking.service.
Ak by kernel hladal, to co je mu predano v boot parametru init, init=/bin/sh, tak by init=/bin/sh musel byt spraveny tak, aby spustal jednolive init scpriti ci unit file...? Ci si pletiem dojmi a pojmi...?
-
Ak by kernel hladal, to co je mu predano v boot parametru init, init=/bin/sh, tak by init=/bin/sh musel byt spraveny tak, aby spustal jednolive init scpriti ci unit file...? Ci si pletiem dojmi a pojmi...?
Ano, to byl jen příklad. Pokud dáte init=/bin/sh, spustí se jako PID 1 shell s právy UID:GID 0:0 (root:root) a nic dalšího se neprovede. Ten příklad byl jen pro to, že není potřeba aby se binárka jmenovala "init", to je jen jakási štábní kultura, že všechny init systémy takto tu binárku pojmenovávají.
-
Systemd by potom podla vsetkeho mal pre zmenu spustat tie tzv. Unit file napr. networking.service.
Ano, je-li prizniva vyska rosneho bodu, vitr fouka spravnym smerem a neni-li zrovna patek 13. ....
-
Rozdil je i v tom, ze tradicni inity jako SysV init delaji prave jen init, zatimco systemd se sere do dalsi pulky systemu a chybi v nem uz snad jen Tetris.
Tak se nám k systemd vyjádřil i jarda už není potřeba diskutovat už je odpovězeno vyčerpájavíce.
-
Tak se nám k systemd vyjádřil i jarda už není potřeba diskutovat už je odpovězeno vyčerpájavíce.
Vzhledem k tomu, ze systemd nespousti procesy deterministicky, neni zaruceno, ze vzdy spusti vse, co ma spustit. Pri trose stesti take nespusti nic, protoze se zasekne na jedne unite a bude cekat na timeout radove v nekonecnu.
-
Vzhledem k tomu, ze systemd nespousti procesy deterministicky, neni zaruceno, ze vzdy spusti vse, co ma spustit. Pri trose stesti take nespusti nic, protoze se zasekne na jedne unite a bude cekat na timeout radove v nekonecnu.
Tohle je deterministické. Pokud nějaká jednotka závisí na jiné a ta se nespustí, tak se nespustí ani ta závislá. To je ukázkový příklad deterministického systému, kde následující stavy závisí na předchozích stavech.
Zaručeno, že vždy spustí vše, co má spustit, nemá ani sysvinit. Akorát na rozdíl od systemd chyby ignoruje a tváří se, že všechno spustil.
-
Pri trose stesti take nespusti nic, protoze se zasekne na jedne unite a bude cekat na timeout radove v nekonecnu.
Ale to by se dalo označit za správné chování. Pokud to má být spuštěno, má být selhání jasně indikováno. Na sysvinit se Vám něco spustí, něco ne, a teprve ze selhání služeb začnete zjišťovat, že se něco stalo.
-
Tohle je deterministické. Pokud nějaká jednotka závisí na jiné a ta se nespustí, tak se nespustí ani ta závislá. To je ukázkový příklad deterministického systému, kde následující stavy závisí na předchozích stavech.
Zretelne to nebude tak horke, kdyz si systemd nejak vyrabi unity ze SysV skriptu nebo co. Tam si pak urcuje poradi spusteni pri kazdem bootu jinak a nekdy to nabehne a nekdy ne.
-
Pokud to má být spuštěno, má být selhání jasně indikováno.
Ma to byt indikovano vytuhnutim systemu, kdy ani nemuzete problem resit, protoze system je tuhy?
-
Zretelne to nebude tak horke, kdyz si systemd nejak vyrabi unity ze SysV skriptu nebo co. Tam si pak urcuje poradi spusteni pri kazdem bootu jinak a nekdy to nabehne a nekdy ne.
Závislosti určuje podle INIT INFO na začátku takového skriptu a jsou pokaždé stejné
-
Okey, mozno teraz znovu trepnem blbost. Ale, ulohou sysvint-u (myslim toho "stareho" initu) je spustat init script, napr. /etc/init.d/networking. Systemd by potom podla vsetkeho mal pre zmenu spustat tie tzv. Unit file napr. networking.service.
Ak by kernel hladal, to co je mu predano v boot parametru init, init=/bin/sh, tak by init=/bin/sh musel byt spraveny tak, aby spustal jednolive init scpriti ci unit file...? Ci si pletiem dojmi a pojmi...?
Jenom přibližně (ale dost blízko :) ) - když se spustí init systém (sysv, systemd), tak ten program=init nějakým způsobem připraví ten počítač do určitého stavu (sysv spouští skripty, systemd podle unitů). Když se jádru předá init=/bin/bash, tak jádro spustí ten program=bash a ten provede zase svoje rutiny po spuštění (čte profile, bashrc a tak, nastavuje aliasy, vykonává příkazy).
Když se dá init=/bin/bash, tak ten počítač bude úplně v jiném stavu, než kdyby se pustil "obyčejný" init.
init=/někde/něco prostě znamená "až bude jádro hotové, spustí /někde/něco". Klidně si můžeš říct init=/sbin/reboot (myslím že je to ta cesta), ale pak se nesmíš divit, až se ti ten počítač restartuje :)
Stačí tak?
-
Kdyby nekoho zajimal prehled jak se tohle resi na ruznych systemch tak s kolegou jsme loni jsme na tohle tema meli prednasku:
http://redhat.slides.com/lnykryn/service-managers?token=wx4m4KxL
-
s6
-
Závislosti určuje podle INIT INFO na začátku takového skriptu a jsou pokaždé stejné
Tak urcite.
https://blog.darknedgy.net/technology/2015/10/11/0/ "Non-deterministic boot order
bootup(7) states:
The boot-up process is highly parallelized so that the order in which specific target units are reached is not deterministic, but still adheres to a limited amount of ordering structure.
It is known that in parallelism, the order of operations is not necessarily deterministic, but the result is (should be). Yet, in the case of dependency resolution, your order is your result, more-or-less. Issues have been reported in QEMU environments where dependency information is interpreted inconsistently on boot. This is one of the few cases where the author explicitly identifies it as “non-determinism,” as it is likely many cases are ignored in favor of just rebooting twice."
-
Binarka sa vola init, lebo ju tam jadro system hlada, ale v skutocnosti ide o systemd, ktory sa sa sprava uplne inak. :D :D
init je obecny nazev, konkretni pak jeden z nich je systemd
je to jako bys rikal "Do garaze se zajizdi autem, ja tam vjedu svojim autem, nebo tam vjede kamos s BMW a to vypada jinak :-D"
k zakladimu pochopeni staci si precist napr zaznam na wikipedii:
https://cs.wikipedia.org/wiki/Init
-
Závislosti určuje podle INIT INFO na začátku takového skriptu a jsou pokaždé stejné
Tak urcite.
Stejně se chová sysvinit, pokud zapneš paralelizaci, a obecně každý paralelní algoritmus. Nedeterministické pořadí kroků při vykonávání úlohy neznamená, že by ta úloha nebyla deterministická. Podle tvé definice by ani procesor ani jádro nebyly deterministické, jelikož při každém bootu procesor jinak vyhodnotí skoky a jádro jinak naplánuje úlohy.
-
Stejně se chová sysvinit, pokud zapneš paralelizaci, a obecně každý paralelní algoritmus. Nedeterministické pořadí kroků při vykonávání úlohy neznamená, že by ta úloha nebyla deterministická.
Zrejme proto na systemd muze dochazet k tomu, ze nekdy ulohy nabehnou a nekdy nedy ne. Sen kazdeho admina: Server, ktery staci nekolikrat rebootovat, az jednou nabehne spravne.
-
Zrejme proto na systemd muze dochazet k tomu, ze nekdy ulohy nabehnou a nekdy nedy ne. Sen kazdeho admina: Server, ktery staci nekolikrat rebootovat, az jednou nabehne spravne.
To těžko. To už je stav, který nemá nastat. Správně napsaná služba (unita) se musí chovat, musí vytvářet a nabízet závislosti tak, aby k takovému stavu nedošlo.
Je podle mě lepší zjistit, že je v něčem hokej hned na počátku, než se chlácholit, že vše proběhlo, ale ne "naběhlo".
-
Zrejme proto na systemd muze dochazet k tomu, ze nekdy ulohy nabehnou a nekdy nedy ne. Sen kazdeho admina: Server, ktery staci nekolikrat rebootovat, az jednou nabehne spravne.
Úlohy, které obsahují race condition, nejsou chyba systemd, stejně jako nejsou chyba jádra – to je přeci naplánovalo paralelně, ne? Kdyby je plánovalo postupně bez multitaskingu, tak se to nestane, dokonce i systemd by pak úlohy spouštěl vždy ve stejném pořadí.
-
Pozoruhodne rada tehlech problemu se objevila az s nastupem systemd. Jako drop-in replacement to tedy moc nefunguje. Tohleto automaticke generovani unit z init skriptu nebo co to ten systemd vlastne dela, byl neci blby napad a zbozne prani. Pri takove zmene se da leda spalit most a vsechny donutit, at si pekne rucne misto init skriptu sami vygeneruji unity.
-
Jako drop-in replacement to tedy moc nefunguje. Tohleto automaticke generovani unit z init skriptu nebo co to ten systemd vlastne dela, byl neci blby napad a zbozne prani.
To to je pravda, ale byl to nutný posun. Sysvinit je z dob krále Klacka a Linuxu, který se posunul někam dál, už nestačí. Linux už není pro konzervativní uživatele / správce, viz neustálé zkracování doby životního cyklu.
Jestli hledáte konzervativní přístup, pak si myslím, že budete muset vyplout z vod Linuxu někam jinam (okrajové distribuce se sysvinit se podle mě dlouho neudrží).
-
To to je pravda, ale byl to nutný posun. Sysvinit je z dob krále Klacka a Linuxu, který se posunul někam dál, už nestačí. Linux už není pro konzervativní uživatele / správce, viz neustálé zkracování doby životního cyklu.
Posun mozna byl nutny (kvuli me tedy ne), ale delat posun tim zpusobem, ze implementujeme to nejhorsi z Widli, tezko bude ta nejlepsi cesta. Soudruzi z RH by udelali lepe, kdyby se starali o to, aby v Linuxu fungovaly triviality typu uspavani a hibernace bez toho, ze to na pulce masin nepujde a na druhe pulce se to bude srat s kazdou verzi jadra jinak. Tohle je totiz jedna z veci, ktera je potreba proto, aby Linux mohl mit na stroji i kazdy BFU. Na paralelni start sluzeb sere pes, zejmena v dobe SSD, kdy to prinasi jeste mene vyznamny rozdil, nez v ere plotnovych disku.
-
Posun mozna byl nutny (kvuli me tedy ne), ale delat posun tim zpusobem, ze implementujeme to nejhorsi z Widli, tezko bude ta nejlepsi cesta. Soudruzi z RH by udelali lepe, kdyby se starali o to, aby v Linuxu fungovaly triviality typu uspavani a hibernace bez toho, ze to na pulce masin nepujde a na druhe pulce se to bude srat s kazdou verzi jadra jinak. Tohle je totiz jedna z veci, ktera je potreba proto, aby Linux mohl mit na stroji i kazdy BFU. Na paralelni start sluzeb sere pes, zejmena v dobe SSD, kdy to prinasi jeste mene vyznamny rozdil, nez v ere plotnovych disku.
Já si to třeba nemyslím, že je to to nejhorší z Windows, kde to mimochodem funguje minimálně od verze 2000 (tedy 18 let nazpět) obstojně. To, že jsou uživatelé trochu pokusní králíci, to je bohužel vlastnost celého GNU/Linux ekosystému. RedHat si svůj RHEL patrně vychytal i se systemd, samozřejmě za cenu pomalosti releasů.
Paralelní start služeb je vhodný z principu. Je pravda, že rychlost SSD to z části kompenzovala, ale je poměrně škoda mít start pomalejší, než je nutné.
Úvahami se pak dostáváme do bludného kruhu. Aby byl Linux atraktivnější, je systemd jedna z cest (asi ne jen podle mě dobrá, když k němu utekly skoro všechny distribuce). Zároveň by ale potřeboval stabilitu releasů (a s tím souhlasím), a systemd jde tak trochu proti tomu.
Systém balíčků se závislostmi v repozitáři má jednu nevýhodu: do linuxu jde jen s obtížemi instalovat programy z různé doby. Vždy je víceméně vyžadováno, aby byl celý systém ze stejného releasu. Je pak poměrně zajímavé sledovat, že uživatelé sice volají po stabilitě, ale v praxi sahají spíš k rychlejším, až rolling release distrům. Nikde jsem nečetl, co je toho příčinou. Jestli je to nějaká spíš - řekněme - zvídavost, šťouravost, nebo jestli je to tím, že jsou programy na tolik ve vývoji, že je opravdu potřeba mít všechno v nových verzích.
Systemd bych z toho všeho nevinil, tolik problémů v praxi nezpůsobuje.
-
Já si to třeba nemyslím, že je to to nejhorší z Windows,
Jo, za ty binarni logy by mel Poettering byt minimalne rozctvrcen. Clovek musi byt totalni debil aby neco takoveho tahal do Linuxu a jeste to implementovat tak, ze to prinejmensim v pulce pripadu nefunguje.
Je pak poměrně zajímavé sledovat, že uživatelé sice volají po stabilitě, ale v praxi sahají spíš k rychlejším, až rolling release distrům. Nikde jsem nečetl, co je toho příčinou.
Bohuzel, vyber stabilnich dister, zejmena s dlouhou podporou, je ponekud omezeny a clovek u nich ke konci muze narazet na problemy s tim, ze na ne uz obcas nepasuje SW, ktery je potreba updatovat, protoze bezpecnost. Vyber stabilnich dister bez systemd je pak jeste horsi.
-
Bohuzel, vyber stabilnich dister, zejmena s dlouhou podporou, je ponekud omezeny a clovek u nich ke konci muze narazet na problemy s tim, ze na ne uz obcas nepasuje SW, ktery je potreba updatovat, protoze bezpecnost. Vyber stabilnich dister bez systemd je pak jeste horsi.
To musí být hodně deprimující, mít na výběr Windows, nebo Windows převlečené za Linux.
-
Ahoj, muze mi nekdo rict, kde bych upravil ten parameter init, treba na init=/bin/bash, jak psal nekdo vejs? Rad bych si to vyskousel, ale jaksi to nemuzu najit. Nejlip na Ubuntu 16.04 nebo Debian 8,9...
-
Ahoj, muze mi nekdo rict, kde bych upravil ten parameter init, treba na init=/bin/bash, jak psal nekdo vejs? Rad bych si to vyskousel, ale jaksi to nemuzu najit. Nejlip na Ubuntu 16.04 nebo Debian 8,9...
Nejjednodušeji při startu, když naběhne GRUB
-
Ahoj, muze mi nekdo rict, kde bych upravil ten parameter init, treba na init=/bin/bash, jak psal nekdo vejs? Rad bych si to vyskousel, ale jaksi to nemuzu najit. Nejlip na Ubuntu 16.04 nebo Debian 8,9...
Nejjednodušeji při startu, když naběhne GRUB, umožní editovat parametry. Je to ten řádek, kde je "quiet ro". Změníte parametry např. na "init=/bin/sh ro".
-
Ahoj, muze mi nekdo rict, kde bych upravil ten parameter init, treba na init=/bin/bash, jak psal nekdo vejs? Rad bych si to vyskousel, ale jaksi to nemuzu najit. Nejlip na Ubuntu 16.04 nebo Debian 8,9...
Nejjednodušeji při startu, když naběhne GRUB, umožní editovat parametry. Je to ten řádek, kde je "quiet ro". Změníte parametry např. na "init=/bin/sh ro".
Mam tam radek Linux /boot-vmlinuz-4.9.0-4-amd64 root=/dev/sda1 ro quiet
Mam to smazat a napsat init=/bin/bash rw ?
-
https://wiki.archlinux.org/index.php/kernel_parameters
Nemazat, pridat
-
Mam tam radek Linux /boot-vmlinuz-4.9.0-4-amd64 root=/dev/sda1 ro quiet
Mam to smazat a napsat init=/bin/bash rw ?
Nene, za to celé přidat init=něco (nebo jestli tam už init=něco je, tak přepsat to něco).
Linux /boot-vmlinuz-4.9.0-4-amd64 root=/dev/sda1 ro quiet init=/bin/bash
Mohlo by tě zajímat srovnat si, jak vypadá start s init=/bin/bash a s normálním initem - co všechno se ne/děje, místo quiet použij noquiet nosplash
-
Mam tam radek Linux /boot-vmlinuz-4.9.0-4-amd64 root=/dev/sda1 ro quiet
Mam to smazat a napsat init=/bin/bash rw ?
Smazat můžeš třeba quiet, pak bude start jádra ukecanější, ale mazat třeba parametr root není dobrý nápad, jádro nebude vědět, jaký oddíl má připojit jako kořenový a skončí to nejspíš na Kernel Panic.
-
Ano, root kdyz sme smazal, skoncil sem s hlaskou kernel panic.
Kdyz sem pridal init=/bin/bash rw, skoncil som v bashi, ale som nemohl nic spravit, klavesnica vobec neraguje, tak je to okey? normlany stav?
Mohlo by tě zajímat srovnat si, jak vypadá start s init=/bin/bash a s normálním initem - co všechno se ne/děje, místo quiet použij noquiet nosplash
Urcite na to mrknu, pro mne sou to nevy veci :}
-
Ano, root kdyz sme smazal, skoncil sem s hlaskou kernel panic.
Kdyz sem pridal init=/bin/bash rw, skoncil som v bashi, ale som nemohl nic spravit, klavesnica vobec neraguje, tak je to okey? normlany stav?
Ne to není normální stav. Klávesnice by měla normálně fungovat. Otázka je, jaká klávesnice to je (PS/2 vs USB)...
-
Je to USB klavesnice, debian je virtualizovan v Hyper-V. Nech delam co delam, vzdy skoncim se stejnym stavem.
-
Je to USB klavesnice, debian je virtualizovan v Hyper-V. Nech delam co delam, vzdy skoncim se stejnym stavem.
Zkusil bych PS/2 klávesnici a pokud bych musel použít USB klávesnici, zkontroloval bych, jestli je v BIOSu/UEFI emulace legacy klávesnice pro USB - protože bez ovladače to nejede.
Otázka taky je, co je v initrd, možná by stálo za to, vnutit mu ovladače pro USB, pokud nejsou. Je více možností co může být nastaveno tak, že to vede k nefunkční USB klávesnici.