Ano a podla vas kde ma systemd smerovat? aby uspokojil 0.1% ludi co su puristi a 0.1% ludi co z principu odmietaju vsetko nove? Ak su tam chyby treba ich fixnut ale bezneho pouzivatela sa toto v najmensom nedotkne. To, ze vy vydavate vzorku root.cz a ine linux stranky za nejaku smerodajnu vzorku je mimo navyse clovek v principe skor pise ked mu nieco nejde ako ked mu to funguje. Takze pomerovat podla toho ci je nieco ok alebo nie je usmevne.
PS: Guix som si nepozeral a ani to nevidim dovod. Potrebujem linux na pracu a nie skumat ci stromy v kerneli su implementovane pomocou redblack stromov alebo inac. Podobne sa ma nedotyka systemd vs init okrem toho, ze vzdy ked som si potreboval rucne upravit nejaky servis co spustal veci v java tak ma pekne stval cely ten system zazracneho kontrolovania ci cosi bezi, nebezi a co asi tak by sa malo urobit. Samozrejme co verzia (Centos, Fedora) to trocha ine scripty. A to Fedora a centos maju aspon nejaky vztah.
Ale jasne, nebudme "puriste", at si kazdej proces placa konfiguraci kde jen chce! Kdyz ji systemd muze mit nekde /usr/lib/, pak treba network at je nekde ve /var/eth a sshd ji muze mit treba v /sbin/ssh.
Proc bychom meli mit vsechno prehledne v etc, vzdyt nejsme puriste! Tech 40-50 lokaci kde vsude bude zalezla konfigurace si kazdej jiste snadno zapamatuje. FHS je jen pro "puristy", toho se predce my nebudem drzet!
ale jasne ze ma...
/etc/systemd/system:
dbus-org.bluez.service -> /usr/lib/systemd/system/bluetooth.service
dbus-org.freedesktop.Avahi.service -> /usr/lib/systemd/system/avahi-daemon.service
dbus-org.freedesktop.NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
dbus-org.freedesktop.nm-dispatcher.service -> /usr/lib/systemd/system/NetworkManager-dispatcher.service
default.target -> /lib/systemd/system/graphical.target
...
..
.
nasymlinkovat sa to da aj do /tmp
Nečetl jste příspěvek, na který reagujete. V tom přísvěvku byl základní "RH" argument typu "chci s tím pracovat a v tomto rámci si to i nastavit, ale nechci se vrtat v nákladních systémových procesech". Nejde o ignoranci, ale o odlišný profil uživatelských priorit. Udělat si o někom subjektivní představu a vydávat to za princip je vskutku dost ujeté...
A to je právě to. Proč hledat alternativu k systémům které systemd obsahují? Ano, možná se zdá systemd složitý, ale na rozdíl od jiných svobodných projektů má alespoň dokumentaci a poměrně dobré manuálové stránky, což se například o různých ConsoleKitech, PackageKitech (které se taky pěkně infiltrovali do spousty distribucí) říci nedá.
Co to je za nesmysl, že se alternativy „nedají používat?“ Gentoo používáme ve stovkách instalací, od produkčních serverů až po desktopové stanice (pravda, ne „kancelářská PC“, ale trochu specifické použití), k plné spokojenosti, bez nějakého hackování.
Jediná věc, která mi v OpenRC zatím schází, je supervising služeb (když spadne, tak aby se ji pokusil znovu spustit). A to není nic nějak složitého, co by se do něj nedalo doplnit.
Uznávám, že Gentoo není úplně pro každého, ale rozhodně bych to neoznačil za něco „co se nedá používat.“
Jediná věc, která mi v OpenRC zatím schází, je supervising služeb (když spadne, tak aby se ji pokusil znovu spustit). A to není nic nějak složitého, co by se do něj nedalo doplnit.
Mně tohle připadá jako klíčová vlastnost pro systém na správu služeb. Trochu jako kdyby webový prohlížeč uměl posílat e-mail, telefonovat a stahovat z FTP, akorát mu chyběla taková drobnost, jako podpora HTTP.
Správa služeb rozhodně žádná data nezničí, to může udělat nanejvýš špatně napsaná služba – a takovou službu správce nemusí nechávat automaticky znovu spouštět. Kvůli tomu, aby se administrátor podíval, proč služba spadla, nemusí ta služba být vypnutá.
Mimochodem, restart ukončeného programu umí i init
, akorát že to (na rozdíl od jiných správců) není moc konfigurovatelné – a reálně se to používá jen pro getty
.
Da ze na to nainstalovat demon, kterej bude sam o sobe rozhodne spolehlivejsi, nez systemd, ale viz niz, kdyz neco zbuchne, je to treba spravit, a ne tu rozbitou vec poustet znova.
Problem gentoo je, ze uz je timhle svinstvem taky nakazeny. Trebas na udev tam uz jsou tusim nejaky patche, aby to svinstvo odparaly, ale otazka je, jak dlouho do bude maintainery bavit.
Gentoo je především o možnosti volby. Primární init systém je stále OpenRC, na tom se nic nezměnilo, jen přibyla možnost místo něj použít systemd.
Pracuje se na forku eudev, který je drop-in náhradou za udev (https://github.com/gentoo/eudev). Sám jsem ho zatím nezkoušel, ale co jsem četl, tak ho mnozí lidé již bez problémů používají.
Já došel k tomu, že na virtuálech udev vůbec nepotřebuju (zbytečný overkill) a přešel jsem na jednoduchoučký mdev z BusyBox (viz https://gist.github.com/jirutka/9496300). Na hypervizorech mám ještě udev, ale v dohledné době ho chci zkusit taktéž nahradit za mdev. Pokud by se to ukázalo jako příliš komplikované, tak zkusím eudev.
Ta možnost je ale trošku pokažená tím, že jsou situace, kdy ten podělanej systemd musím natvrdo zahardmaskovat, aby se mi tam nenatáhl. :-(
Nejde o USE flagy. Jde o to, že i s vypnutými příslušnými USE flagy a nainstalovaným balíčkem upower-pm-utils se ten bazmek pořád chtěl instalovat a nakonec pomohlo až to, že jsem ho natvrdo zapsal do package.mask. A evidentně potřeba nebyl, po zamaskování to nijak neprotestovalo...
Tak to je rozhodně chyba. Reportoval jsi to na https://bugs.gentoo.org?
Ne. Uvažoval jsem o tom, ale poté, co jsem si přečetl diskuse se správci příslušných balíčků na forums.gentoo.org, usoudil jsem, že a) už o tom stejně vědí a b) mám lepší věci na práci než se se svou mizernou angličtinou dohadovat s někým, komu jsou moje problémy (resp. problémy lidí jako já) evidentně fuk.
Jinak souhlas, když nějaká služba padá, je potřeba ji opravit, ne ji dokolečka spouštět znovu. To je jen řešení z nouze, leč občas se hodí. Nicméně chápu, že tvůrci systemd tuto funkci nezbytně potřebují, vzhledem k tomu, jaké sra*ky programují…
Navíc v seriózním nasazení má admin nad službami centrální monitoring, který mu výpadky zahlásí. A výpadek služby není jen to, že umře její proces, ale že se třeba HTTP rozhraní stane nedostupné, tudíž je totální kravina tohle řešit init systémem.
On se linux nepoužívá jen na enterprise serverech. Na nějakých „domácích“ serverech se nemusí nic dít, než se „admin“ za 14 dní vrátí z džungle a webserver znovu nastartuje. Ale je zbytečné, aby ten server 14 dní neběžel jenom proto, že jeden skript shodou okolností vyčerpal limit paměti.
Mimochodem, správu služeb i s tím znovuspuštěním služby umí třeba Daemontools od DJB, který to používá pro jeho balík TinyDNS. Neřekl bych, že by DJB programoval „sra*ky“, jak to nazýváte – akorát si asi nemyslí, že je vše dokonalé. Podobně se chová třeba aplikační server WebLogic – je tam node manažer, který hlídá běžící instance, a když se některá ukončí, nastartuje jí znova. Takže třeba když JRockit zvoře optimalizaci a padne na segfault, server za chvíli běží znovu. Jistě, správné řešení je pokusit se chybu zreprodukovat, nahlásit Oraclu a doufat, že vydají opravu – ale do té doby ten server klidně může běžet, ne?
Ostatně, na nastartování a zastavení služby nepotřebuju žádný speciální systém. Nastartuju jí jednoduše tak, že spustím příslušný program, a zastavím příkazem kill
. Správce služeb tedy není od toho, aby služby startoval a vypínal, ale od toho, aby udržoval v běhu ty služby, které mají být zapnuté.
Však jsem sám psal, že se to občas hodí. Třeba právě na takové případy, které zmiňujete. Nicméně nepovažuju to za klíčovou funkci init systému, bez které by se tomu nedal říkat init systém.
TinyDNS neznám, takže nemohu soudit. WebLogic bohužel trochu ano a to je zrovna příklad ultimátní sra*ky. Upozorňuji, že jsem java vývojář, takže za sra*ku to NEpovažuju automaticky jen proto, že je to psané v Javě.
Mně připadá, že bez té funkce to není žádný systém, bez toho máte jen sadu nějakých skriptů nebo konfiguračních souborů, které akorát určí, v jakém pořadí se má co nastartovat. Někomu to klidně může stačit. Jenže i ten původní SysVinit má respwan procesů, má runlevels, takže evidentně tam na začátku byla nějaká snaha, aby to fungovalo jako správce služeb. Akorát se od té doby trochu změnila doba a typická služba není terminál naslouchající na sériové lince, ale síťový server, který závisí na spoustě jiných služeb.
Já tedy vnímám systemd jako pokus, jak to, co musí být nad SysVinitem dobastleno pomosí spousty skriptů (a pak to zase neumí využívat ty původní funkce initu jako respwan), udělat jako jednu komponentu odpovídající dnešním požadavkům. Způsob implementace nebo nasazování může být sporný, ale k cíli, který systemd má, můžu říct jenom „no konečně“.
Stran akademickych kecu neco z realneho prostredi.
Na velkych infrastrukturach kde spravujes veci tretich stran, na kterych bezi veci ctvrtych stran fakt netusis co dana sluzba ma natahano a co ji muze vsechno shodit. Byvaji to kraviny jako chvilkove upadly link nebo chvilkovy timeout. Nez zburcujes vsechny po svete k analyze problemu, tak sluzba nebezi a stoji te to prachy.
Co je lepsi?
1. Uhnije mi sluzba a opet se sama nahodi. Sluzba bezi, zakaznik je spokojenej a technik mezitim resi analyzu coredumpu nebot mu pad sluzby byl zareportovan.
2. Sluzba 5krat rychle za sebou pri pokusech o nahozeni chcipne. Jelikoz system nedelal hlupak, tak po nastavenem poctu pokusu to vzda a spusti vyssi alarm na dohledu.
Takto nam treba funguje solarisi SMF. Muzete si i nastavit veci jako kdyz chcipne tahle sluzba tak naskoci tahle sluzba atp.
A nebo sluzba uhnije ale mohla by byt automaticky nahozena. Nez propadne call na dotycneho technika tak je minimalne pulhodina v haji ne-li, dele protoze clovek na druhe strane indovi nerozumel a vola primo na ops centrum. Vsechno stoji prachy...
Tim nerikam ze v pripade sluzeb kde je treba znat know how k jejich cistemu nahozeni a koordinovat to s jinymi tymy nema proste upadnuti sluzby smysl. Nicmene nemelo by se to naduzivat. Startovani pokud je to zadane ponechme strojum. Na blbou praci jsou dobri oni, lidem necht patri analyza.
Problém je v tom, že to programátor nenapsal dost robustně. Všechno ostatní jsou workaroundy a my se jen bavíme o tom, který je menší zlo. A tam se nám míchá názor provozovatele, názor administrátora, názor zákazníka a názor náhodného kolemjdoucího. Není překvapivé, že se neshodnou.
"Nez propadne call na dotycneho technika tak je minimalne pulhodina v haji ne-li, dele protoze clovek na druhe strane indovi nerozumel a vola primo na ops centrum."
"Problém je v tom, že to programátor nenapsal dost robustně."
Ve firmě, kde "call" na technika trvá půl hodiny a kde si jednotliví zaměstnanci vzájemně nerozumí, je také docela dobře možné, že to programátor nenapsal dost robustně, to zcela jistě.
Jak jsem psal, problém je v něčem zcela jiném, než v init systému.
Uhnije ti kabel k disku, sluzba zbuchne ... ty ji znovu nahodis, ona zapise ... poskodi cast dat ... a znova zbuchne ... a pak jeste petkrat ... takze data jsou v trapu. Pak muzes trebas 30 hodin obnovovat tyden stary backup ... to zakaznika jiste potesi. Jen kvuli tomu, ze startujes neco, co pada ...
Nemocné služby je přece potřeba opravit, jak tu bylo opakovaně napsáno. Takže je potřeba tu službu opravit, aby nepoškozovala data ale používala žurnál a kontrolní součty.
Ještě vám chybí protipříklad pro službu, která žádná data na disk nezapisuje. Předpokládám tedy, že tušíte, že tvrzení „existuje služba, kterou je nejlepší po pádu hned znova nastartovat“ nelze vyvrátit tvrzením „existuje služba, kterou po pádu nelze hned znova nastartovat“.
"Nemalou měrou se na nevhodnosti systemd podílí zřejmě i rozšiřující se základna mobilních zařízení s Androidem, pro kterou je systemd nestravitelný."
...podivejme se proc (v odkazovanem blogu): The biggest "other init" is Android's. To me this is probably the biggest issue: Systemd's license is incompatible with android, and it's made itself hard to clone.
licence systemd je lesser gpl, takze v tomto pripade je nadavani na systemd uplne mimo. problemem je dementni licence androidu (kterou tam maji kvuli vyrobcum).
...celkove bych doporucil redakci, aby podobne emotivni vylevy (predevsim prvni cast clanku) trochu korigovala nebo rovnou presmerovala do sekce blogu. ;-)
a ted flame topic: lennart me obcas taky stve a treba systemd 214 me stve doted, protoze rozbili dhcp klienta a zavedli mnozstvi kravin, ale presto musim rict, ze systemd jako celek konecne splnuje to, co jsem od initu chtel jiz davno (tedy jakousi fuzi mezi runitem a sysv). ano, ma to bugy a podivnosti, ale budme za to radi, vsechno ostatni je jeste vetsi sracka... ;-) ...systemd se casem procisti nebo to nekdo forkne, toho bych se nebal.
Článek mně mluví z duše.
Bohužel, alternativy, které nabízí, nejsou řešením(až na BSD systémy ve specifických případech).
Systemd je to nejhorší, co mohlo Linux potkat. Redhat, který jím silou a někdy pochopitelně jen nepřímo zaneřádil distribuce(všichni se bojí, aby s ním nebyli nekompatibilní) se bohužel chová jako standardní korporace...což se ale dalo čekat.
Vane z toho teď opravdu pořádný smrad... Je to hodně smutné.
Chapu. ale to je ale hrozne kratkozrake. Jiste, bezny Franta uzivatel ktery to ma jako cernou skrinku, hlavne ze to funguje a nic jineho ho nezajima, muze byt spokojeny. Problem zacina pokud mate narocnejsi nebo specialni pozadavky, ktere se sysv-init distribucemi sly jednoduse resit, nabizely modularitu vymeny nebo vypusteni komponenty, snadneji se dal eliminovat zdroj chyby. Firmam vznikaji a budou vznikat zbytecne vicenaklady, protoze musi resit prechod od odladenych systemu na zcela odlisny systemd, ktery jim pro jejich pouziti neprinasi nic nez starosti navic.
Skoda ze si vic lidi neuvedomuje a nevidi problemy v narustu komplexity, omezeni prenositelnosti a posileni vlivu komercnich subjektu na smer vyvoje.
Mluví autor o složitosti kódu, nebo užívání? S užíváním to tedy rozhodně není strašné!
Musím se přidat k některým z předchozích komentujících - práce se systemd (používám Arch linux) mi přijde skvělá a mnohem jednoduší a transparentnější než dříve na Ubuntu. Je pravda, že jsem dost pokročil, co se týká znalostí, ale i tak. 99% práce se systemd jsem schopen s touto znalostí:
* systemctl status/start/stop/restart/enable/disable <unit>
* že konfiguráky jsou v /usr/lib/systemd/system/*
další features, které jsem v ubuntu prostě jednoduše nenašel (ne, že by na to nebyly nějaké bizardní balíky), je systemd-analyze. Díky možnosti si vyplotovat boot sequence v svg jsem si opravil plno věcí, co mi na jiném linuxu nechodilo - něco se startovalo před něčím, co nemělo atp. (opět by to šlo asi i na jiných distribucí, ale tady to je out-of-the-box jeden příkaz).
Informace o jednotkách (systemctl status <unit>) jsou také parádní - vše na jednom místě, od stdout po všechny další detaily.
Další věc co vítám je journalctl - naprosto primitivní používat i nastavovat (jeden konfigurák v /etc). Možnost uložení v paměti atp. též vítám.
Pár mých kamarádů teď přešlo také na Arch - naučit je se systemd obnášelo přesně jen tyto informace a spokojenost. Editovat jeden řádek "exec" tak, aby to dělalo co chcete, je primitivní.
Na RPi jsem také s radostí využil networkd (místo netctl) a timsyncd, který bohužel potřebuje právě ten networkd, ale ten může v základu žít jen tak vedle. Nahradilo to netctl, fake-hwclock i ntp. Konfiguráky už nemůžou být pro tyto služby jednoduší.
Nazval bych se pokročilejším uživatelem a systemd si zkrátka nemohu vynachválit ať už možnostmi, tak ovládáním.
Co se týká kódu tak do toho nemohu moc mluvit. Četl jsem pár děsivých blogů o tom, jak je systemd složitý a jak je pravděpodobně prošpikovaný backdoory od Red Hatem, která je financovaná US Army a podobně... To asi nebudu raději hodnotit a věřím tu vývojářům - je-li to zbytečně složité, pak je to zbytečně složité. Ale jako uživatel jsem nenašel nic jiného a principiálně si nedokážu nic jednoduššího představit.
Se znalostmi, které uvádíte, ale daleko nedojdete.
Se systemd se samozřejmě dá žít, ale pokud od něj budete chtít něco víc, brzy narazíte na problémy, které budou díky jeho neprůhlednosti velmi špatně řešitelné.
Věnoval jsem dokumentaci dost času, takže snad něco vím a přesto narážím na těžko řešitelné problémy, které se starým initem prostě neexistovaly... Z triviality se náhle stane velká akce.
Malý příklad z poslední doby:
Potřeboval jsem na jednom stroji při shutdownu spustit můj vlastní shell script, který něco dělá přes SSH protokol na jiném serveru. Je pro to třeba nějaký čas a potřebuje k tomu funkční připojení do síťe. Bohužel systemd během shutdownu síť předčasně ukončí, script tudíž nemůže práci dokončit...
Pochopitelně jsem to dělal tak, aby byly služby shazovány ve správné sekvenci. Zkoušel jsem to řešit pomocí network.target, pomocí network-online.target, .... atd.... Bohužel, shození sítě je sice spuštěno po mém scriptu, ale na jeho dokončení nepočká...
Dříve trivialita, dnes pakárna... Nakonec to vyřeším, ale ten čas mně magor Poetering nevrátí.
Rozumím Vám. Jak jsem říkal, hlouběji do systemd nevidím, nicméně na povrchní uživatelská část je to nejpříjemnější, co jsem na Linuxových init systémech viděl (a pravda, nebylo jich moc...)
Ještě bych se systemd zastal z jednoho hlediska - přeci jen jde o relativně mladý projekt. I upstart je o 4 roky starší. Ovšem pokud jeho komplexita roste, do ničeho lepšího to asi nespěje. Ale zrovna to o čem mluvíte bych řekl, že se do čtyř let vyřeší :).
To jsem vše pochopitelně zkoušel - na to logicky přijdete, když čtete dokumentaci. Bez úspěchu.
Budu to muset ještě projít, jestli jsem někde něco nepřehlédl - nejspíš ano... Ale je na tom krásně vidět debilita podobných překombinovaných nástrojů tváří v tvář úplně triviálním problémům.
Nechce se mně věřit, že by to nešlo, ale vůbec bych se nedivil, pokud by Poetering(nebo nějaký jeho poskok) začal s přednáškou, jak je špatné to, co chci udělat a že správný moderní frikulín takové věci dělat nepotřebuje, protože ON se rozhodl, že to není nutné...
Mohu to pochopitelně nějak nabastlit, ale chtěl jsem čisté systémové řešení :-) Ve světě systemd je to možná přemrštěný požadavek :-)
To je presne to co dela systemd spatnym - jeho "proramovaci" jazyk, ma neomezenou mnozinu prikazu, protoze ruznepodobne a hruzne direktivy se pridavaji jak se kde zaplatuje nejaky problem. Pamatovat si pak vsechny tyto "prepinace" jz uz temer nemozne. Opet nedelal jsem studii jak moc je ta mnozina jiz stabilni, ale driv se to menilo s kazdou verzi systemd.
Co nutí lidi cpát do slova "bizarní" to d navíc, to je značná záhada. Převzaté z jiného jazyka to není, snad žádný tam to d nemá (a rozhodně ho tam nemá etymologický zdroj toho slova- francouzština). Je to delší, je to divné jak v psané tak mluvené podobě... Snad autor toho příspěvku by mi to mohl vysvětlit.
GNU usiluje, mimo jiné o to, aby si každý mohl sestavit svou distribuci kompletně sám a to tak, aby mu vyšli binárně stejné balíčky...
Ona i ta první lichá čárka člověka trochu rozhodí... :-)
A pokud jde o ten konec, tak správně přece je aby mu vyšli binárně stejní balíčci, ne? :-)))
> Další věc co vítám je journalctl - naprosto primitivní používat i nastavovat (jeden konfigurák v /etc). Možnost uložení v paměti atp. též vítám.
journalctl a journald su vyslovene skvele veci pre kazdeho, kto logy v skutocnosti nepotrebuje citat :) Zatial vzdy, ked sa mi podarilo system rozbit, journald a ten jeho blob padol prvy. Hladanie problemu je potom vyslovena sranda.
Bohuzel poskozeni blobu journald uz jsem take zazil. Zatim stale jeste loguji i pres rsyslog ale otazka je, jak dlouho to jeste pujde - existoval problem s tim, ze v textovych log souborech byly zaznamy ruzne prehazany a Lennart na to reagoval tim, ze to neni problem journald ale neschopnosti syslogu... jeste vic by me zajimala kompatiblita blobu z ruznych verzi systemd/journald...
Mě hlavně překvapilo to, že se by default loguje do paměti a taky to, že "na rozdíl od syslogu" řeší důvěryhodnost a nezměnitelnost logů (prý použitelné v případě napadení stroje). Syslog umí odesílat logy na jiný server, útočník je tedy nemůže smazat ani změnit a když ten stroj spadne tak se, jako v případě journald, o ty logy nepřijde. Journald logy na jiný server odesílat neumí. Ale určitě je to v plánu. ;-)
Logování na server v journalctl pochopitelně je (speciální service file)...
Logování do paměti jsem ocenil na RPi, kde je snížení zápisů na disk žádané. To že je to defaultně nemohu potvrdit. Mám za to, že jsem to musel měnit. Nicméně je to opět jeden (hned první) řádek v journalctl.conf.
"Logování na server v journalctl"
Tak fajn, ještě před několika lety to tam nebylo. Konečně se journalctl blíží klasickým syslogů,
"Logování do paměti jsem ocenil"
Logování do paměti lze snadno rozběhat i se syslogem. Prostě /var/log připojíte na tmpfs či jiný fs v paměti. Všimněte si, jak je toto řešení univerzální, nezávisí na tom, zda tuto funkci poskytuje samotný program a lze jej použít i na jiné věci, než jen logy.
...ktery jsem vytvoril prave pouzitim toho "reseni".
typicka situace:
nejaky proces se zblazni a do logu zacne hustit giga nejakych debugovacich hlasek. nebo treba brute force password attack na ssh. nebo logy z netfilteru od podivnych packetech. proste cokoliv co zacne floodovat log. (a ne, vsechno to neuhlidas).
to nasledne vede k tomu, ze v lepsim pripade se logovani zasekne (coz je jeste ok, pokud sluzba jede, ale stejne je neprijemne, ze clovek netusi, co se deje prave TED - ma jen stare logy). v horsim pripade (a to byva castejsi) se kvuli tomu podela kde co (napriklad protoze do /var nejde odkladat data nebo failujici logovani shodi proces, ktery se snazi logovat, coz je nase dulezita sluzba, ktera musi bezet, atd...).
no, anebo nebudeme bastlit vlastni "chytra reseni" a proste pouzijeme logovani do pameti, tak jak je skutecne zamysleno (kruhovy buffer) a mame po problemech.
> A jak jednodušeji na headless mini homeserveru zjistit brutal force útoky, kterých jsem si jich nebyl vědom?
DenyHosts? Alebo obdobny nastroj, existuje ich viac nez par. Spolu s automatickym banovanim, synchronizaciou medzi strojmi a pripadne globalnym blacklistom.
Zial, o tom, ze by niektory z nich podporoval Journald nic neviem.
> Systém si nerozbijím (Arch)
Arch pouzivam viac-menej spokojne uz nejakych 6 rokov. S rozbijanim nikdy prilis pomahat nepotreboval, vacsinou na to stacilo spravit update :)
Update dělám denně. V IgnPkg nemám ani jeden balíček a za ty necelé 3 roky mi systém ani jednou neprovedl to, že by nenabootoval. Momentálně, pravda, mám problém s Bluez, ale to nedávám za vinu Archu, ale naprosto nepochopitelném vedení toho, jak se Bluez vede (například - najděte mi dokumentaci k Bluez 5 - GRRR!).
A DenyHost rozhodně není jednodušší. V journalctl jsem si toho všiml sám - prostě si projdu jestli někde není nějaký problém a nemusím na 5 služeb instalovat speciální utility či procházet 5 různých logů (nginx, sshguard, ssh, svftp...).
Btw. sshguard podporuje journalctl, jen se o tom nikde moc nedozvíte.
Vy proste robite to, co DenyHost automatizuje, rucne. Jasne, nic proti tomu, aj to je riesenie. Pravdepodobne spolahlivejsie, nez DenyHost pod Archom :(
Len taka drobnost, neuspesne prihlasenia sa pod Archom (a hadam i vsade inde) vzdy logovali do toho isteho suboru - /var/log/auth.log. V tomto journalctl ziadnu vyhodu nepriniesol.
"A jak jednodušeji na headless mini homeserveru zjistit brutal force útoky, kterých jsem si jich nebyl vědom?"
Když jste si jich nebyl vědom a patrně ani nijak neovlivnily chod serveru (potom byste si jich asi byl vědom), proč je chcete zjišťovat a řešit? (To, že ono "řešení" nastíněné v dalších komentářích není řešením nechávám stranou.) Evidentně tento jev nepředstavuje problém.
Ano, bootchart je pěkná funkce, ale vnikla spíše jako z nouze cnost. Tím, že je start se systemd mnohem složitější než v klasickém SysVInit, přišli autoři (s poměrně pěkným) nástrojem jak jej zobrazit jednoduše. Ale v klasickém sysvinit (kromě toho, že i tam bootchart lze aplikovat) to nebylo potřeba. Na svém serveru mám 14 služeb, z toho 14, které tam chci a úmyslně jsem je zařadil do bootu. Vyznat se v tom není problém, na vylistování stačí obyčejný příkaz ls
. Všimněte si, jak je toto řešení univerzální. Příkaz ls můžete používat i na jiné věci, než jen zobrazování obsahu adresáře /etc/rcX.d
.
Na své pracovní stanici se systemd mám asi 30 položek, z toho dvě bych tam chtěl (sshd a lightdm) a zbytek jsou prostě závislosti ve stromu unit (ano, já vím co jsou a co dělají, ale rozhodně to není přehlednější).
Chápu, že je okurková sezóna, a zároveň kontroverzní články jsou hodně diskutované, takže mají pěkný dopad do příjmů, ale minimálně ta první část, kterou bych nazval "systemd rant", patří někam na osobní blogýsek a nikoli na server, který se profiluje jako top server "nejen ze světa Linuxu"...
Druhá půlka je pak taková úsměvná... ale ano, jsou prázdniny...
Můj komentář nebyl mířen ani tak na autora jako na redakci... a za tím, že první část je takové hartusení nad systemd, které neříká celou část pravdy, ale spíše vyjadřuje autorův světonázor, a druhá část je souhrn alternativ, které stojí spíš už za okrajem množiny použitelných řešení než před ním, si stojím.
Musím souhlasit s panem Jirsákem. Část o systemd je vaším názorem. Připomíná mi to nadávání v hospodě - viz. systemd vs Android (není to o technickém problému, ale licenčním, za který IMO nemůže licence systemd, ale Androidu) nebo část ohledně konfiguráků v /usr - nevím co dělám špatně, ale já mám konfigurace systemd v /etc - pravda, jsou i v /usr, ale tam jsou jen "výchozí", cokoli chci změnit, obvykle znamená kopii příslušného souboru do /etc a změna tam. Dělá to takhle dnes více projektů (namátkou Xorg) a u těch vám to nevadí (?) - mě tohle přijde elegantní, výchozí konfigurace je jinde a v /etc je jen to, co je změněno, když je konfigurace hardwired v binárce, je to vlastně stejné, s tím rozdílem, že tady si můžu ty výchozí hodnoty najít v textovém souboru a nemusím pátrat ve zdrojácích binárky.
Přijde mi to, jako když se vám osobně něco nelíbí, tak hledáte argumenty jak to vysvětlit, ale neumíte to.
Obávám se, že /etc/default
je něco úplně jiného.
Myslím, že celý tenhle problém má prapůvod v odvěkém problému zapracovávání uživatelských změn konfigurace při upgrade. Málo která distribuce má tak propracovaný systém jako třeba dispatch-conf
u Gentoo. Většinou se starý konfigurák nechá na místě a nový se pleskne vedle s nějakým .rpmnew
a admine, starej se. To zpětně přidělává problém vývojářům, kteří nemají jak vynutit zavedení nových výchozích konfigurací, které třeba opravují známé problémy. Cesta, kterou používá udev a systemd tenhle problém částečně řeší, ale jen částečně.
Naplno se to ukázalo třeba s konceptem nových šílených jmen síťových rozhraní (ano ano, já vím, že je to rozbité, ale u svého systému s jednou síťovou kartou chci mít eth0 a nic jiného). K zablokování stačilo vytvořit prázdný soubor /etc/udev/rules.d/80-net-name-slot.rules
, který překryl upstreamový konfigurák zodpovědný za přejmenování. Jenže pak přišla verze 210 a soubor se v upstreamu přejmenoval na 80-net-setup-link.rules
. Připadá mi to jako hra na kočku a myš.
Co zatím funguje, je parametr net.ifnames=0
na příkazovém řádku kernelu. Otázka je, na jak dlouho.
Konfigurace by ale nemela byt mistem, kde se resi opravy ...
Osobne prave gentoo celkem hodne vyuzivam, ale i pres dostupne relativne slusne nastroje mam nekdy chut do toho kopnout, protoze se klidne i behem par dnu objevi nekolik revizi konfiguraku, na kterych je jen videt, ze to editujou dva+lidi, ktery maj ve zdroji proste ruzny poradi stejnych veci ...
Nadto si kazdej admin do konfiguracku pise poznamky (chvala bohu za to ...) a zadnej nastroj tak jako tak nevyresi, co s tema poznamkama, kdyz tam nekam chce flaknout nejaky dalsi parametr.
BTW: Ted si nevzpomenu co to bylo, ale uz sem narazil na appku, ktera proste nic jinyho nez ethX jako oznaceni sitovky neakceptuje. At zije nerozbijeni API ...
„Konfigurace by ale nemela byt mistem, kde se resi opravy ...“
Teorie hezká, nicméně výchozí konfigurace je součástí toho, co se dodává uživatelům, objevují se v ní chyby a je často potřeba je opravovat alespoň těm uživatelům systému, kteří si té konfigurace nejsou vůbec vědomi a tedy ji neměnili. Aneb, nic není dokonalé.
Komentáře pod článkem bývají většinou názory. V médiích ovšem bývá dobrým zvykem názorové články nějak odlišovat – zvlášť když jde o glosu, která vyjadřuje jen osobní postoj autora, aniž by jej podkládala nějakými argumenty (na rozdíl třeba od komentáře, kde se očekává i nějaká analýza). I to by se dalo omluvit tím, že Root.cz prostě dává všechny články na jednu hromadu bez ladu a skladu. Ale když se přilepí glosa před vážně míněný technický článek, nemůže z toho vzniknout nic jiného, než paskvil.
Tady asi bude problem v tom co si _vy_ predstavujete, ze by v takovem clanku melo nebo nemelo byt a jak by mel byt strukturovany. Nami komentovany clanek neni ani komentar k API systemd, ani vycet a popis aktualnich vlastnosti ani srovnavaci test. Jde o glosu k soucasnemu stavu, doplnenou o relevantni odkazy a takto by se k tomu melo pristupovat. Jestli ve vas vyvolal zmatek, ze nebyl specialne oznacen je spis na zamysleni nad sebou samym. V podobnem duchu se tu publikovaly clanky napr. p. Macicha o prekazkach linuxu pri nasazovani do firem nebo clanky p. Boranka jako o nejcastejsich chybach linuxovych zacatecniku.
Vas subjektivni nazor neni faktem, na jehoz zaklade by se dalo rozhodovat. Smirte se s tim.
Jde o glosu k soucasnemu stavu, doplnenou o relevantni odkazy a takto by se k tomu melo pristupovat.
Jinými slovy, jde o mišmaš dvou velmi různých textů. Asi jako kdybyste spojil kabaret a dokument do jednoho televizního pořadu.
Jak k tomu tedy mám přistupovat? Jako ke glose, kde se od autora nečeká, že by něco analyzoval, a možná trochu přehání? Takže ten seznam odkazů nemám brát zas tak vážně, autor si v něm možná také vymýšlí, o některých programech moc neví, a kritériem výběru byla spíš vtipnost než co jiného? A jak mám chápat poslední odstavec? Je to ironie, není z čeho vybírat a na směřování svobodného software nemáme žádný vliv?
Víte, ono to oddělování a dodržování různých stylů má svůj důvod, čtenář ke každému textu přistupuje jinak. Návod si nebudu číst pro zábavu a glosu zase nebudu brát jako zdroj faktů.
Zdravím,
pokud autora irituje systemd, proč si nevybere jiný init systém? V Ubuntu mám stále k dispozici upstart, runit, svtools, minit, sysv-rc... Neříkám, že jsou úplně všechny přátelské a/nebo použitelnější než systemd. Ale hardcore lidé milující D. J. Bernsteina můžou použít svtools (daemontools wrapper), nebo se vrátit k sysv-rc (klasický init), upstart taky nebyl úplně špatný... Proč zrovna kvůli init systému přecházet na nepoužitelný Plan9? Nechápu.
Zrovna udev mi na server přijde vcelku zbytečný; nedávno jsem ho zahodil a nahradil za mdev. Sepsal jsem k tomu malé howto: https://gist.github.com/jirutka/9496300
Rad by som, bohuzial nepoznam alternativu ku logind (kedze nejaky expert ukoncil consolekit v prospech logind).
Takze sice pouzivam OpenRC, ale na session autorizacie mam systemd.logind (lebo nieje ina mne znama alternativa).
Snazil som sa prejst na systemd, ale ked to v default instalacii nevedelo namountovat jednoduch LVM setup ktory pouzivam tak som to vzdal (to uz nehovorim o tom, ze to potom nemountovalo korektne nazvy/linky).
Nejak sa z Linuxu vytraca jeho hlavna vyhoda - KISS.
Ano,logind je dalsi zazrak z dilny systermd. Pokd naor. nepouzivate posvedcene pracovni prostredi a vas WM provede pozadavek na shutdown prilis rychle, logind vam shutodn zakaze protoze v systemu vidi stale aktivni session. K tomu si pripocteme ze logind... zcela logicky... prebarl i funkce UPower a je tu dalsi zabava zarucena.
tak urcite! tohle je jeden z design goalu: zadny rychly shutdowny, kkti!
spatnym nastavenim nebo proste bugem to urcite nebude, because logic...
a vyvojari gnome a kde jsou nymandi, kdyz to chtej pouzivat. protoze kdyby byli aspon tak kvalitni ajtaci jako mistr Pribyl, tak se toho nedotknou ani dvoumetrovou ockovaci tyci na gorily, wtz!
SystemD se prosazuje silou. Je jen velmi málo věcí v prostředí linuxu, které se prosadili silou. Většinou fungovalo několik implemetací téhož vedle sebe, vzájemně si "konkurovaly", tím se vylepšovaly a také se každá implementace hodila na jiné použití.
Jeden z cílů systemd, tedy unifikovatelenost, jde přesně proti tomu, co stojí za úspěchem linuxu. Každá věc se hodí na něco jiného. Ty forky v podstatě všeho, co za ty roky vznikly, nevznikly proto, že někdo chtěl štěpit síly, jak odpůrci linuxu někdy uvádějí, ale proto, že původní produkt nevyhovoval novým a jiným podmínkám. Díky forkům je k disposici mnohem více software, a lze jej lépe vybrat pro každé konrétní nasazení. Tím, že se to pokusí někdo zunifikovat nakonec nastane situace, že to unitární řešení nevyhovuje vlastně nikomu (nebo možná právě někomu, potom je třeba se ptát komu a proč).
To nasazování silou se projevuje tak (a bylo to patrné hlavně u PulseAudio), že se nejdřív rozbije původní funkční řešení, potom se nasadí o něco lepší nové řešení, které je ale stále mnohem horší než původní stav a za pár let se vyladí. Těch pár let ale znamená zpozdění oproti konkurentním řešení.
Prosazovatelé nových řešení se velmi často snaží pošpinit to původní. Buď v tom původním něco "nejde", nebo to jde "složitě". Není náhodou, že si úmyslně vyberou takové řešení v původním systému, které je nejsložitější. Přičemž zamlčují jednodušší varianty (je také otázkou, zda o nich vůbec vědí, přijde mi, že někteří zastánci (nejen) systemd vůbec nemají páru o tom, jak se věci mají dělat.)
Dále, to jsou všechny ty věci FreeSoftware a hnutí GNU. KISS princip; dokonalé není to, kam nelze nic přidat, ale to odkud nelze nic odebrat; znovupoužitelnost apod. Pokud mám systém postavený na programech, které současně používám každý den ve své práci, není pro mě problém si ten systém upravit k obrazu svému. Pokud mám OS, které je postaveno na úplně jiných základech, než je potom celý userspace, je to pro mě mnohem složitější (bez ohledu na to, že některé ukázkové funkce mohou být jednodušší).
Někdo v diskusi zmínil journal, že je mnohem jednodušší. Ehm, co je tak složitého na tom mít data v textových souborech, ty si můžu zpracovat desítky let starými nástroji (ne náhodou opět těmi, na kterých je postaven zbytek systému)?
Naopak journal je složitější, už jen proto, že musím použít další nástroj. A pokud chci používat původní nástroje, musím ty logy exportovat. Je to složitější než dříve.
Dále, systemd je konstruován jako Linux only. Tedy distribuce, co používají jiná jádra jsou ze hry venku. Opět je to záměrné snížení diverzity a zvýšení ohrožení. Jakákoliv chyba v Linuxu ohrozí veškeré nasazení. Stejně tak různé *BSD. Čím víc budou jednotlivé programy záviset na systemd / pa, tím hůře budou portovatelné na jiné unixy. Opět se sníží rozmanitost a zvýší se ohrožení.
Myslím, že máte pravdu, ale situace se už dostala do takového bodu, že destrukce je nastartována a není v našich silách s tím moc dělat :-( Alternativy, které článek nabízí, bohužel nejsou z reálného světa(snad xxBSD může být někdy řešením).
Nezbývá než se s tím naučit žít. Takže - ano - hrabu se v systemd, nadávám při tom, ale nakonec si budu muset zvyknout :-( Ten krásný Linux, odvozený od Unixu nám zkrátka mizí pod nánosem balastu a začíná se své původní filosofii vzdalovat. Dějí se na světě ale i horší věci...
Je v této souvislosti smutné, když člověk vidí, že i lidé jako je Ondřej Surý se snižují k metodám té divné Poeteringovy bandy:
- snažit se zpochybňovat odbornost těch, kterým se jejich vynálezy nelíbí a mají s nimi problémy
- vyvolávat dojem, že není jiné cesty
- nafukovat problémy jiných, klasických, řešení
"Je v této souvislosti smutné"
Ondřeje Surého osobně neznám, potkali jsme se jednou v budově nic.cz v Praze. Co mě mrzí víc je to, že moji přátelé a známí, kteří pracují v RedHatu, se uchylují k témuž. Místo technických argumentů proč je podle nich systemd lepší a v čem (resp. co že to přesně nejde dělat ve starším systému a proč se to vůbec musí dělat*), místo diskuse, zaznívají pouze "argumenty" jako že http://boycottsystemd.org/ jsou tendenční bláboly (opravdu hodnotný argument), že se raději vyhnout FreeBSD (proč?), že bych měl vyzkoušet měsíc se systemd a potom bych viděl apod. Lennartova rétorika a metody jsou, zdá se, velmi nakažlivé.
*) I to je docela podstatné. Ne vše, co je možné dělat, by se také mělo dělat. A měly by se hledat důvody proč to dělat a nikoliv proč něco nedělat. Většina argumentů, které jsem v diskusích četl, zejména kolem journálu se týkala věcí u kterých jsem si říkal: "no je to sice moc pěkné, že to journalctl umí levou zadní, ale proč bych to měl vůbec dělat, k čemu to je?"
Jistě, stále chtějí "argumenty" a když jim je dáte, nedokáží se k nim kloudně a nezaujatě vyjádřit. :-)
Svět má štěstí, že Poetering nekonstruuje třeba letadla. Kdyby to dělal, měla by ta jeho místo křídel kola od traktoru a ve vzduchu by je držely pro ten účel důmyslně vymyšlené balóny s hořlavým vodíkem.
Když jsem se systemd začínal a narazil na věc, zvanou "generátory", dlouhou dobu jsem nevěřícně zíral do blba a neustále opakoval: "Bože, c o t o j e, c o t o j e, c o t o j e ......?"
Nemám pocit, že bych se snižoval k metodám nějaké bandy, pokud jste někdy nabyl dojmu, že se uchyluji k vyjmenovaným metodám, tak mi to klidně omlaťte o ústa a rovnou se předem omlouvám...
Dívám se na celé init-wars velmi pragmaticky z pohledu člověka, který se ve správě Linuxových serverů pohybuje už nějaký ten rok, a který u sebe míval telefon, který měl tendenci zvonit ve čtyři ráno, protože někde něco spadlo...
A který běhal věci pod daemontools, aby v ty čtyři ráno nemusel kvůli nějaké okrajové chybě v programu, kterou fakt nemá smysl debuggovat v ty čtyři ráno, opravdu vstávat, cca již před 10 lety... (Zde si uvědomte, že zákazníka nezajímá, že se na to admin musí podívat, protože věci přece nepadají samy od sebe, ale chce, aby mu ta služba (web, mail, ...) běžela...)
Z mých zkušeností jsem došel k následujícím závěrům:
a) Linux potřebuje moderní init systém, sysvinit+sysv-rc nevyhovuje z mnoha důvodů
b) Linux potřeboval jednotný (a snadno konfigurovatelný) supervizor
c) Pod "snadno konfigurovatelný" si nepředstavuji shell skript, ale deklarativní jazyk.
d) Bylo mi docela jedno, který init bude vybrán v Debianu jako standardní
e) I přesto považuji systemd o fous lepší řešení než upstart, a jsem rád, že Debian tech-ctte nakonec zvolilo systemd[1]
O konkrétních příkladech k jednotlivým bodům se vyjadřovat nechci, kdo najít chce, najde...
1. Zde bych podotkl, že ač byla spousta křiklounů, že tech-ctte bude přehlasováno, tak do teď nikdo návrh na GR ani nepodal. A z diskuzí na debian-devel je závěr takový, že jsou asi tak aktivní dva DD křiklouni, co furt prudí a tím to končí[2]...
2. Naopak doporučuji si přečíst pár vyjádření Russe Allberyho (správce na Stanfordu...)
Kdyby nekoho zajimalo, co rikal ten pan Allberry (at si usetrite googleni):
https://lists.debian.org/debian-ctte/2013/12/msg00234.html
Jinak, zda se mi to, ze vsichni na upstart nejak zapomneli? Spousta lidi si stezuje, ze systemd je prilis vazany na Linux. Jak je na tom upstart?
Díky, četl jsem v rámci initwars od rra více emailů, ale máte pravdu, že tenhle možná úplně stačí...
A musím říct, že jestli má někdo pocit po přečtení tohoto emailu pocit, že se systemd dostal do Debianu[1] násilím, tak už si myslím, že je to pocit čistě ideologický a nikoli založený na faktech.
1. A komunitní distribuce beru v tomto případě vážněji, protože to u nich není "manažerské" rozhodnutí...
ad a) Souhlasím, že sysvinit+sysv-rc nevyhovuje, ale také už tu dávno máme lepší alternativy, třeba OpenRC nebo UpStart (moc ho neznám, ale co jsem se bavil s kolegou, tak je srovnatelný).
ad c) Pro jednoduchou deklarativní konfiguraci není potřeba žádný extra jazyk. Třeba tohle http://haste.fit.cvut.cz/tigurevexa, to je deklarativní konfigurace, ne? Přitom je to pořád Bash!
Anebo trochu složitější příklad http://haste.fit.cvut.cz/pipavipete, který kombinuje deklarativní konfiguraci s trochou vlastního skriptování. Nijak tě to neomezuje, když potřebuješ něco nestandardního, klidně si můžeš start(), stop() a další funkce nadefinovat sám, jak se ti jen zlíbí, třeba http://haste.fit.cvut.cz/carotuvega. Anebo něco z mé zahrádky, upravený init skript pro Postfix, který řeší i vytvoření chroot prostředí https://github.com/jirutka/ansible-role-mail-server/blob/master/files/postfix/postfix.rc.
K OpenRC a upstartu viz https://lists.debian.org/debian-ctte/2013/12/msg00234.html
Jen bych opakoval Russovy argumenty...
Pro mne osobně je integrovaná supervize procesů v kolonce MUST.
Můžu se zeptat, jak počítač vlastně používáte? Mně třeba u web serveru vůbec nezajímá, zda začal startovat, ale zda poskytuje služby nebo alespoň zda běží. Pokud ten web server potřebuje databázi, nestačí mu, že se někdo databázi pokusil nastartovat, ale potřebuje, aby běžela. Vašemu zaměstnavateli asi taky nestačí, že jste vyrazil do práce.
Heh, jenže to, zda daná služba nejen spustila proces, ale také poskytuje to, co má, ani systemd vůbec neřeší. Viz třeba http://ewontfix.com/15/.
"nebo alespoň zda běží"
To je informace naprosto k ničemu. Aby webové stránky fungovaly, ano jistě musí běžet webserver. Je to podmínka nutná, nikoliv postačující.
Je tedy zbytečné monitorovat zda běží webserver, zda běží proxy, zda běží dalších sto závislostí. Mnohem přínosnější je monitoravat, zda ten webserver vrací co má. Tím se současně nepřímo zjistí, zda vše nutné běží. Místo x checků stačí jeden. A pokud ten check neprojde, tak admin nemá problém zjistit, zda nějaká služba je kaput. On ten webserver může nakrásně běžet v takovém stavu, že systemd si "bude myslet", že je vše ok a přesto pro uživatele bude daná služba nedostupná.
A to, že služba pracuje jak má a vrací správná data, je něco, co ani nejlepší init systém nezjistí, protože z principu nemůže.
"zda začal startovat"
Takže admin nakonec skončí u informace, kterou má dává i dnešní init, tedy že byl učiněn pokus službu spustit. To, jak nakonec ta služba dopadla ani systemd z principu nezjistí.
Pokud webserver neběží, ve většině případů je potřeba ho nejdřív nastartovat. Kvůli tomu nemusí správce držet službu 24×7, to zvládne i kus software.
Správce neskončí s informací, že služba začala startovat. Má také informaci, zda ještě stále běží. Dále může mít informaci, že služba dala smluveným způsobem signál, že se provedla inicializace. Nebo Systemd ví, že služba přijímá spojení (protože je ve skutečnosti přijímá Systemd a až se někdo pokusí spojení navázat, službu nastartuje a spojení přesměruje).
"Pokud webserver neběží, ve většině případů je potřeba ho nejdřív nastartovat. Kvůli tomu nemusí správce držet službu 24×7, to zvládne i kus software."
Služba startuje společně se startem serveru. Bavíme se o sitaci, kdy služba někdy v minulosti správně nastartovala, proces běží a po čas svého života se dostala do nestandardní situace, která vede k tomu, že vrací nesprávná data. Jeden by si myslel, že to je z kontextu diskuse jasné.
"Má také informaci, zda ještě stále běží"
To snad uvidí i z výpisu procesů, na to nepotřebuje systemd.
"protože je ve skutečnosti přijímá Systemd"
A kdo hlídá hlídače? Co když je to právě systemd, který se dostal do nestandardní situace a data odesílá špatně nebo je třeba nepředává vůbec?
Stejně tam ten check, jak jsem ho popsal, být musí.
Ano, to máme hezky popsaný případ, který je příliš obecný a nelze jej řešit pouhým zaškrtnutím nějakého příznaku ve správci služeb. Takže to, že to neumí, bych nevyčítal žádnému správci služeb.
Vedle toho ale máme případ, kdy služba správně nastartovala, proces běží a během života procesu dojde k nějaké nestandardní situaci, která způsobí ukončení procesu. A to je ten případ, o kterém jsem psal já. V takovém případě většina správců u většiny služeb tu službu znovu nastartuje, a pak zkoumá, proč ta služba havarovala. Na to zkoumání pak má hodiny a dny, na nápravu často týdny nebo měsíce - a nebo se v nezanedbatelném počtu případů ukáže, že se nepodařilo zjistit, v čem je problém, nebo by oprava problému byla tak nákladná, že se nevyplatí.
Celý ten proces - monitoring po x minutách otestuje dostupnost serveru a zjistí, že je nedostupný - pošle se SMS - správce se vzbudí a nadává, že webserver opět překročil limit paměti, což se dvakrát za rok stává a nikdo neví proč - správce se přihlásí přes SSH a web server znovu nahodí -počká, jestli server naběhl - správce znovu uléhá a ráno se podívá, jestli příčina výpadku byla stále stejná - tedy celý tento proces se dá nahradit malým kouskem softwaru, který když dostane signál, že se sledovaný proces ukončil, pokusí se jej nastartovat znova. A teprve pokud se to třeba napotřetí nepodaří, ohlásí chybu (a mezi tím už i onen monitoring webu zaznamenal výpadek a správce dostal SMS). Ano, správce pak nevypadá tak důležitě, protože všichni okolo nevidí, že něco nefunguje a že to správce musí nahodit. Ale zase na druhou stranu správci nechodí v noci tolik SMS, které vyžadují jenom to, aby napsal /etc/init.d/apache2 zap start
.
Ano, u důležitého serveru musí být i ten externí monitoring, to nikdo nezpochybňuje. Ale to přece neznamená, že i banální stavy, u kterých je postup obnovy jednoduchý a jasně daný, se musí řešit přes monitoring a hlavně živého správce.
On ten monitoring ovšem nemusí poslat jen sms a dál tupě zírat do zdi. On úplně klidně může ty služby restartovat sám (resp. se na základě monitorované situace spustí nějaký skript, který se o to postará). Právě a jen v případě, že konkrétní check dosáhne konkrétní hodnoty, kterou tam zadal admin v případě, že tohle nastane.*
Upřímně řečeno, já si ani nepamatuju, kdy naposledy jsem vstával k vůli tomu, že nějaký proces neběžel. Nechci říct nikdy, ale to se prostě nestává. Mnohem častěji se stává právě ono něco mezi (a ani to nenastává nijak často). Služba běží, ale OOMK odstřílel pár podprocesů, takže běží ale divně. Tohle se stane jednou a potom se nastaví parametry lépe (RAM > součet paměti všech procesů nebo tak něco). Nebo moje "oblíbená" MySQL (která mi sice už pár let do domu nesmí, ale bohužel některé staré projekty musí bůh ví proč běžet), se rozhodně, že po milionté rozbije myisam tabulky. Na tohle opravdu restart nepomůže.
Takže po čase ony se ty jednoduché případy (kdy by možná pomohl restart) stejně vyřeší a potom z monitoringu chodí jen ty netriviální věci.
*) A ne, opravdu nechci, aby součástí systemd byla ještě icinga a munin. Opravdu ne. Je mnohem univerzálnější, když to zůstane oddělené.
Přesně tak, mám stejnou zkušenost. Když už nějaká služba zhavaruje, tak nejčastěji do nějakého podivného stavu, kdy proces běží, ale služba nereaguje. A to prostě init systém řešit nemůže.
Docela by mě zajímalo, jaký software to někteří zdejší diskutující používají, že jim (asi) neustále padá jak jablka ze stromu a zároveň evidentně nepoužívají žádnou monitorovací službu (anebo ji neumí pořádně nastavit)…
"Docela by mě zajímalo, jaký software to někteří zdejší diskutující používají, že jim (asi) neustále padá jak jablka ze stromu a zároveň evidentně nepoužívají žádnou monitorovací službu (anebo ji neumí pořádně nastavit)…"
Hehe, to mi připomnělo situaci, kdy jsme jedné nemalé organizaci dodávali servery a oni se nás, zcela vážně ptali, jak často je mají restartovat. Po chvíli naprosto nechápavých pohledů nám sdělili, že minulý dodavatel (asi tak 5000x větší jak my) technologíí jim doporučoval restart alespoň jednou týdně. Nám naše servery běží tak dlouho, dokud nevyjde kritická oprava nějaké vzdáleně zneužitelné chyby, jinak servery (což pochopitelně platí i pro služby, ty se prostě bezdůvodně nerestartují) mají uptime 500 i víc dnů. Pokud vím, tak námi dodávané servery (pro danou organizaci) nebyly restartovány od nasazení před lety ani jednou. Zda je to dobře nebo špatně nechávám stranou, osobně rád restartuju po každém updatu prostě jen abych měl jistotu, že vše najede. Ale pokud updaty nejsou, tak ať to běží dva roky v kuse, není problém.
Tak já například používám TinyDNS s daemontools, protože je to nejjednodušší a autorem doporučený způsob použití - o žádné havárii nevím. Používám Postfix, protože je tak napsaný - o žádné havárii nevím. Používám daemontools pro běh různých dalších služeb (třeba i jen rychle naskriptovaných), protože se můžu spolehnout, že pokud to bude možné, ta služba poběží - a nemusím se o to starat. Používám WebLogic s jejich node managerem - vím o případech, kdy se server dostal do chybového stavu ale běžel, správci jej museli restartovat ručně. A také vím o menším množství případů, kdy server spadnul (kvůli chybě JRockitu) a node manager jej restartoval. Snažíme se ty první případy převést na ty druhé, protože když se zblázní JVM, je její ukončení to nejlepší, co se dá udělat.
Monitorovací služba slouží k monitoringu, ne k udržování služeb v běhu.
Kdysi dávno apache2+mod_php, taky si pamatuju na občasné výpadky dovecotu, ale ty mohly být způsobené i tím naším custom autentizačním modulem.
Z nedávné doby gitlab-sidekiq service (než jsem to překopal na systemd service), tak se pouštěl gitlab + gitlab-sidekiq z jednoho init.d skriptu, který dodával upstream. A když zdechl sidekiq, tak nejely různé joby na pozadí, což se nedalo na první pohled zjistit. Pak pomohl upgrade ruby a mám pocit, že to od té doby už tolik nepadá (každopádně to nevím, neb to supervizor případně znovu nahodí).
Pro ten externí monitoring je mnohem složitější rozpoznat, že jenom havaroval nějaký proces. Navíc nejspíš provádí kontrolu jednou za čas, ale správce služeb se o havárii procesu dozví v ten okamžik, kdy se proces ukončí.
OOMK může stejně tak zabít hlavní proces. Navíc pokud nějaká aplikace používá podprocesy a neumí se o ně postarat - má to nechat na správci služeb, který to umí :-) I kdyby se ty jednoduché případy po čase vyřešily, není do doby, než se vyřeší, důvod nestartovat služby automaticky. Přičemž moje zkušenost je taková, že některé problémy se postupem času podaří vyřešit, a jiné zase vzniknou. Hlavně ale nechápu, k čemu je dobré nechávat tu službu po pádu vypnutou (samozřejmě kromě výjimek typu porušená databáze). Někdo pravděpodobně chtěl, aby ta služba běžela, tak by se snad správce služeb měl postarat, aby opravdu běžela. Pokud to tak nechce, nastaví službu do režimu "jednou spustit a dál si toho nevšímat".
Mimochodem, i autoři původního SysVinitu byli toho názoru, že některé služby mají běžet pořád ať se děje co se děje, a pokud se z jakéhokoli důvodu ukončí, je potřeba je znovu nastartovat. Proto má akci respawn.
"Navíc pokud nějaká aplikace používá podprocesy a neumí se o ně postarat - má to nechat na správci služeb, který to umí :-)"
Nejde o ty podpocesy samotné. V Unixovém světě je běžné, že pokud něčemu pošlu SIGTERM, proces se spořádaně ukončí. Stejně tak je běžné, že se s každou novou síťovou konexí ten proces vytvoří.
Bohužel, programátoři některých frameworků používají pooling spojení (což je jiště hezká věc), ale ten pooling je napsaný tak blbě, že nepozná nefunkční spojení. Což může být i krátký výpadek sítě apod, ne jen selhání onoho procesu.
Takže problém není v tom, že ten původní proces nežije (on se při dalším spojení opět vytvoří), problém je v tom, že nějaká úplně jiná služba třeba na úplně jiném serveru ten proces vyžaduje. A jako řešení není restartovat onu službu s tím spadeným procesem, řešení je vylejt ten pool spojení.
Což je něco, co admin ví a co opět žádný init systém na světě nevyřeší.
Ale tady už se dostáváme do oblastí našich konkrétních každodenních zkušeností. Já problém s padajícími službami, který se vyřeší jejich opětovným nahozením nemám. Služby prostě nepadají. A většina hlášení, které z monitoringu chodí, mají jakýsí netriviální charakter. Prostě jen proto, že se za těch x let provozu všechny ty triviální záležitosti vychytaly.
Jestli má někdo problém, který se vyřeší opětovným spuštěním služby, ať si klidně používá systemd. Je to jeho volba. Ale ať mi toto volbu nikdo nenutí.
Řekl bych, že popisuješ problém nezdravé služby, který se má přece opravit a pak už žádný problém nebude. Jinak to, že nějaká aplikace špatně používá pool spojení, podle mne vůbec nijak nesouvisí se správcem služeb. Není potřeba vyjmenovávat všechny možné problémy, které správce služeb neřeší – správce služeb má za úkol udržet v chodu nějakou službu. Nic víc.
Myslím, že Systemd nikdo nikomu nenutí. Naopak, dobře napsané aplikace budou dobře fungovat ve Systemd, a jiný init/rc systém si s nimi určitě také poradí.
Fajn, jsem rád, že jsme se konečně shodli na tom, že reálné problémy, které vznikají, init systém stejně nevyřeší a je potřeba je řešit na místě, na kterém vznikly. :-)
"Myslím, že Systemd nikdo nikomu nenutí."
To není pravda, jak už tady bylo mnohokrát uvedeno. Na systemd závisí spousta věcí, která by vůbec nemusela. Pokud chci danou věc používat, mám na výběr zda si budu složitě udržovat verzi bez systemd, nebo se prostě podřídím. Většina lidí evidentně volí ono podřízení.
Ano, reálně ještě stále jde se systemd vyhnout a zatím to tak moc nebolí (to, že nemůžu používat gnome mě zas tak netrápí, stejně má jako závislost další sračku v podobě PA), ale systemdmizace linuxu zdárně pokračuje dál. Takže nakonec nezbude nic jiného, než linux trvale opustit.
Že správce služeb nevyřeší všechny problémy, které mohou nastat, to je snad samozřejmé a nic jiného jsem nikdy netvrdil. Systemd dělá to, co lidé očekávají od správce služeb – tj. když mu řeknou, že má běžet web server, tak Systemd dělá vše, co je v jeho silách, aby web server běžel. SysVinit se v takovém případě pokusí server nastartovat, a tím skončí – což rozhodně není vše, co se pro splnění toho úkolu dá udělat.
Ty věci, které na Systemd závisí, z toho asi mají nějakou výhodu, ne? Proč by to jinak jejich autoři dělali. Ano, pokud si někdo chce udržovat jinou verzi, musí do toho investovat. Když je nějaký program pro unixové systémy, a já budu chtít verzi pro Windows, je to taky moje starost, abych si jí upravil a udržoval. Nebo si mám stěžovat, že autoři podporují jen unixové systémy, a mám nadávat autorům Linuxu, proč autorům toho programu poskytuje služby, které chtějí používat?
"Že správce služeb nevyřeší všechny problémy, které mohou nastat, to je snad samozřejmé a nic jiného jsem nikdy netvrdil."
A jak dokazuje i tato diskuse, tak systemd neřeší nic víc, než stávající systémy.
"SysVinit se v takovém případě pokusí server nastartovat, a tím skončí – což rozhodně není vše, co se pro splnění toho úkolu dá udělat."
Boha jeho, to je fakt jak do dubu. sysVinit spustí skript. Jestliže v tom skriptu bude while (true) { služba --start; } tak se ta služba bude, přesně dle přání správce, po pádu opakovaně spouštět. Na to není potřeba systemd.
"Proč by to jinak jejich autoři dělali."
Protože třeba ti autoři nevědí, jak se to dá dělat jinak a lépe. Ne, tohle není urážka. Tohle je o tom dělat věci s jakousi pokorou a vědomím, že nejsem dokonalý. Proto je potřeba se podívat, jaké všechny existující prostředky existují, proč existují a naučit se je používat. Jak jsem už psal, podle mě tihle autoři vůbec nemají páru o tom, jak se některé věci mají (a nebo, aby to nebylo tak tvrdě řečeno: mohou) dělat.
"Když je nějaký program pro unixové systémy, a já budu chtít verzi pro Windows"
Pěkný pokus. Nevyšel. Mluvíš o unixových systémech. Dosud se (většina) "linuxových" (či spíše unixových) programů psala tak, že nebyl větší problém je rozběhat na téměř libovolném unixu (linux, bsd, solaris apod, stačí dodržovat posix v nějaké obecné variantě). Systemd jde záměrně směrem, že je linux only. A každý program, který se mu podaří nakazit, bude od té doby také linux only.
Někteří uživatelé údajně nepotřebují nic víc z toho, co Systemd nabízí. To dokazuje tahle diskuse. A také dokazuje, že pro některé uživatele to řeší víc – třeba to, že místo svaté dvojice init/rc doplněné třeba o daemontools mohou používat jediný balík, který se chová konzistentně.
Ano, SysVinit spustí skript, nic jiného nedělá – to hlídání služby případně už musí řešit ten skript. Takže se vlastně dá říct, že SysVinit nedělá nic jiného, než co umí shell, a tudíž nepotřebujeme ani SysVinit.
Nebo třeba ti autoři naopak vědí, jak se to má dělat jinak a lépe. Mně třeba připadá správný ten koncept, že služba je normální proces, který běží na popředí, informace vypisuje na standardní výstup a chyby na chybový výstup a reaguje na běžné signály. Výhodou je třeba to, že proces běží úplně stejně, ať ho spustím z příkazové řádky nebo přes správce služeb. Daemoni a dvojitý fork, abych se dostal z dosahu rodičovského procesu, to je podle mne omyl přírody.
Já jsem ale psal, že chci ten unixový program rozběhat na Windows. Ale i když budou vznikat linux only programy – pokud je ten program opensource, nikomu přece nic nebrání udržovat kód, který bude na Systemd nezávislý. Nikomu nic nebrání implementovat tu samou funkcionalitu i do jiných systémů.
Mimochodem, které jsou ty vlastnosti, které „nutí“ autory programů být závislý na Systemd a na Linuxu?
"Mimochodem, které jsou ty vlastnosti, které „nutí“ autory programů být závislý na Systemd a na Linuxu?"
To je snad jasné. Systemd vyžaduje cgroups, což je, jak jistě všichni víme, součást Linuxu. Nikde jinde není. Takže dokonce ani nemůžu provozovat systemd sice na Linuxu, ale bez cgroups...
Tedy, pokud něco závisí na systemd, a systemd běží jen na Linuxu, tak je ta věc automaticky linux only.
"Boha jeho, to je fakt jak do dubu. sysVinit spustí skript. Jestliže v tom skriptu bude while (true) { služba --start; } tak se ta služba bude, přesně dle přání správce, po pádu opakovaně spouštět. Na to není potřeba systemd."
Tohle přece nebude fungovat, ne? SysVinitu přece musí vadit, že se ten script neukončí.
A není to dost zbytečná diskuse? Ve Windows máme možnost automatického restartu služeb prostým nastavením v service manageru. Je to fajn věc, určitě to může v některých případech pomoci, ale za těch nevím kolik let jsem to viděl použité tuším jednou.
Zajistit že když proces umře, tak se servis považuje za ukončený, považuji za poměrně důležité. Řeší to ale samozřejmě jen část problému. I když executable běží, nikdo netvrdí, že servis fakticky funguje. Na zjišťování takových problémů jsou zaměřené jiné nástroje, které případně dovedou nahradit i ten automatický restart služby.
Ještě k závislosti systemd na Linuxu: to je samozřejmě nepříjemné. Ale jedná se o širší problém, kdy se už delší dobu fragmentují Unixy, a k tomu navíc i distra Linuxu. Na Solarisu je Service Management Facility podobná NT Service Manageru, na MacOS X SystemStarter a launchd, a na Linuxu (jaksi tradičně) směsku sysvinit, Upstart, systemd, Initng a pár dalších. To samozřejmě proto, aby se vývojářům i adminům snáze pracovalo, rozumně se alokovaly zdroje na vývoj, a nedocházelo ke zbytečné fragmentaci :D
Tohle mi pripomnelo dobu temna adminovani Win serveru, kde se podobnym stylem pristupovalo zajistovani sluzeb. Pri padu nebo nedostupnosti se nastavily opakovane restarty sluzby s progresivnimy timeouty a az po x-tem selhani poslat zpravu. Takove iluzorni budovani spolehlivosti, hlavne ze se to nemuselo hned resit a admin si mohl pospat, zevlovat na soc. sitich nebo lestit bambus. To ze pady signalizovaly vazny problem (chybu sw v okrajovych podminkach, pokus bezpecnostni prunik, odchazejici hw atd) se neresilo, dokud se to totalne nerozsyopalo.
Lze namitat, ze admin by mel pravidelne a nezavisle na incidentech prolejzat logy, ale v praxi neni pri vyse popsanem zpusobu vubec motivovan neco takoveho delat.
A s tim prikladem web serveru mate naprostou pravdu. Tohle jsme uz resili milionkrat, hlavne u hostingu e-shopu. Bezici procesy nginxu, postgresu, memcache aj. vubec nic neznamenaji, kdyz aplikace nebo primo webserver vraci misto ocekavaneho obsahu chyby. Spolehat se sockety a jejich monitoring je ignorance, nezkusenost nebo oboji.
Jaký přesně by byl správný postup v případě těch vážných problémů (chyby sw v okrajových podmínkách, pokus o bezpečnostní průnik, odcházející hw)? Nechat službu zastavenou do doby, než se problém vyřeší? Nebo to, že musí správce službu nastartovat ručně, jej má motivovat, aby problém řešil? Tak pak ať si líní správci, kteří potřebují takovouhle motivaci, dál používají SysVinit, a ti svědomití budou používat Systemd...
Když už diskuse došla do fáze nočního vstávání po smsce z monitoringu, tak právě tohle je ta největší motivace. .
liquidwater (hezký nick :-)) to napsal naprosto přesně. Pokud jakýsi obskurní (snad jsem to napsal dobře) systém tu službu udrží tak nějak v chodu, je to jednak odkládání problému do bodu, kdy jej bude daleko složitější vyřešit (protože například může zafungoval i silent data corruption, které se může zpropagovat do záloh a pokud se vydrží chybu ingorovat dostatečně dlouho, tak i data na všech zálohách budou vadná) a hlavně admin nemá žádnou motivaci problém vyřešit, protože ho to prostě nepálí. Když se k vůli tomu nevyspí, tak se bude hodně snažit, aby už ho to nikdy nevzbudilo.
"Nebo to, že musí správce službu nastartovat ručně, jej má motivovat, aby problém řešil?"
Opakuješ se jak kolovrátek. Drtivá většina případů není jen restart služby. Zdravé služby nepadají. To, že to spadlo je indikátorem něčeho složitějšího. Tím, že se to jen restartuje a ono to naběhne a jede se dál se nic nevyřeší.
Dobře, takže správce, který potřebuje, aby mu služba neběžela, aby s ní začal něco dělat, nebude tuhle funkci používat. My ostatní ji klidně použijeme, protože víme, že bychom službu po pádu stejně nejdřív ručně nahazovali - což může lépe a rychleji udělat software. A my se pak místo restartování můžeme věnovat řešení problému. Pokud někde hrozí silent data corruption, může se služba nastavit do režimu, že nastartuje jen jednou, nebo ještě lépe může se nastavit do režimu, že se po pádu provede kontrola dat a teprve pokud dopadne dobře, služba se nastartuje.
Ano, zdravé služby nepadají. Jenže je naivní myslet si, že je veškerý software bezchybný. Ony to ty služby na sobě nemívají napsané "tato služba bude padat". Zajímalo by mne třeba jak ozdravit tu službu, kde třeba dvakrát za rok spadne JVM. Nasimulovat to reálně nejde, a i kdybychom to dokázali nějak rozumně reportovat výrobci, dozvíme se, že máme upgradovat na nejnovější verzi. Která bude mít zase jiné chyby. A i kdyby se to celé podařilo, chybu jsme nahlásili a výrobce ji na náš popud opravil, bude to celé trvat několik měsíců - jak pomůže, že ten server budou muset plus mínus dvakrát ročně správci restartovat ručně?
Opakuju se jako kolovrátek, protože ignoruješ, co jsem napsal. "Drtivá většina případů" není argument pro to dělat to ve zbytku případů ručně.
Jinak pokud zdravé služby nepadají a nechybují, není ani důvod řešit nějaké restartování z monitoringu. Pokud služba neběží z toho důvodu, že se ukončil příslušný proces, je v drtivé většině případů správné řešení proces opět nastartovat. Pokud to bude chtít řešit monitoring, stejně musí spolupracovat se správcem služeb, dotazovat se na stav procesu, jestli nejde o plánované vypnutí - a proč to všechno, když o ukončení procesu ví správce služeb dřív, než monitoring, a má všechny dostupné informace proto, aby rozhodl, zda jde o tento případ?
> My ostatní ji klidně použijeme, protože víme, že bychom službu po pádu stejně nejdřív ručně nahazovali - což může lépe a rychleji udělat software
Jak Vas tak pocuvam, zacinam mat pocit, ze by bolo najlepsie, keby "vas ostatnych" radsej nikto k ziadnemu serveru nepustal :)
Nebolo by najlepsie do toho systemd pridat automaticky restart po 2 dnoch behu? Na NT Serveroch to vraj pomaha :)
Chcete diskutovat se mnou, nebo si sám budete vymýšlet hloupé protiargumenty, abyste je následně slavnostně rozcupoval? Když jsem napsal, že existují služby, které je po případném pádu potřeba nejprve restartovat, očekával bych jako polemiku argumenty, proč žádná taková služba neexistuje a co je vždy potřeba udělat jiného, co brání restartu služby.
Picoviny tu taras ty jirsak, tebe bych k administraci cehokoli nepusti ani na 10s. Protoze ty ses presne prototyp widliho admina "tak to restartnem" a uvidi se ...
NEEXISTUJE ani jedina sluzba, kterou by normalni admin restartoval jen proto ... aby bezela, kdyz mu zbuchne. Protoze KAZDEJ normalni admin vi, ze tim muze napachat daleko vic skod nez uzitku.
Dobře, takže máme web server, který servíruje statické soubory (uzel nějaké CDN). Jaké škody napáchá, když se ten server po pádu restartuje? Jaké škody napáchá, když se po pádu restartuje SSHD?
Mimochodem, proč vůbec používáte nějaký init/rc systém? Když dojde k výpadku proudu a systém se před úplným vybitím UPS vypne, nemůže se po zapnutí proudu sám nastartovat. To by mohlo napáchat daleko víc škody než užitku. Takže vy k serveru přijedete, ručně jej zapnete, přihlásíte se do terminálu, vše zkontrolujete a začnete postupně startovat jednotlivé služby. Síť, SSH server, produkční služby… K tomu žádný init/rc systém nepotřebujete, naopak by škodil. Když nainstalujete novou verzi jádra, je to to samé. Nemůžete jen tak nastartovat systém, to by mohlo napáchat víc škod, než užitku. Takže stejně, přihlásit do terminálu, vše zkontrolovat, postupně ručně nastartovat. Takže vy vlastně žádný init/rc systém nepoužíváte, stačí vám samotný init, který připojí terminály. Proč vůbec řešíte nějaký Systemd?
Ukončení služby nemusí vždy znamenat nekorektní vypnutí. Spousta služeb je záměrně navržena tak, že se s nekorektním ukončením počítá. Pokud budeme počítat jen s korektním ukončením, nepotřebujeme žádné žurnály ani v souborových systémech, ani v databázích. Naopak pokud je služba dobře navržená, restart po nekorektním ukončení nenapáchá žádné škody (protože se služba buď dokáže zotavit, nebo se odmítne znovu nastartovat). No a pokud mám takhle navrženou službu, proč ji po pádu hned nenastartovat?
Přesně tenhle princip se přece používá u žurnálovacích souborových systémů. Ve „zdravém systému“ žádný žurnálovací souborový systém není potřeba, protože přece nikdy nedojde k nekorektnímu ukončení/odpojení – není dokonce potřeba ani fsck
. Přesto si většina administrátorů myslí, že mít fsck
a žurnálovací souborový systém je dobrý nápad – protože nikdo nedokáže zajistit, že se opravdu nikdy nic nestane. Většina serverů je také nastavena tak, že se po zapnutí prostě připojí disky v režimu zápisu tak, jak mají být za normálního běhu. Nikdo nezkoumá, zda došlo ke korektnímu nebo nekorektnímu vypnutí – prostě se příslušný správce (mount) pokusí službu nastartovat (disk připojit). A je věcí toho souborového systému, aby zkontroloval, zda je souborový systém v pořádku a připojil jej, opravil se, nebo aby se odmítl připojit s tím, že je to chyba, kterou sám nedokáže opravit. No a žurnálovací souborové systémy jdou v tomhle ještě dál, zefektivňují tu úvodní kontrolu a opravu chyb – přesně z toho důvodu, že když dojde k problému, nikdo nechce čekat, až správce disk přimountuje ručně, dokonce ani nikdo nechce čekat, než se celý souborový systém zkontroluje. Prostě má po výpadku začít co nejdřív poskytovat služby, a analýza problému a oprava, aby k němu příště nedošlo, se může řešit paralelně vedle toho.
"Spousta služeb je záměrně navržena tak, že se s nekorektním ukončením počítá."
To jistě ano, ale tohle už úplně uhýbá z tématu předchozí diskuse. Tématem předchozí diskuse je to, že služba spadne z dosud neznýmých příčin.
"Pokud budeme počítat jen s korektním ukončením"
Nic takového tady nikdo netvrdil. Až ty jsi přišel se srovnáním korektně vypnutého serveru a tím, že ho nějaký admin musí před zapnutím zkontrolovat. Což je mimo mísu.
" Nikdo nezkoumá, zda došlo ke korektnímu nebo nekorektnímu vypnutí"
To přece není pravda. Teda, ve vaší organizaci to asi pravda je... Přece příčina vypnutí je dost podstatná informace před tím, než se ten server pokusím znovu zapnout. Ať již se jedná o fyzický či virtuální. Pokud jen vypadl elektrický proud, je to jiná situace, než když došlo k nějakému fyzickému selhnání. Fyzicky poškozený server asi zapínat nebudu, vyndám z něj disky a pokusím se z nich dostat data. (Pokud nejsou na záloze.) Není to tak dávno, co v jednom datacentru technologii prolila voda z prasklé trubky. Ty bys takový server prostě zapnul, protože přece nikdo nezkoumá, zda došlo k nekorektnímu vypnutí.
Pokud se jedná o vmka, je velký rozdíl, zda došlo prostě k ukončení například vlivem toho, že fyzický server někdo odpojil od elektřiny, nebo proto, že něco porušilo data virtuálního disku.
Možností, co se mohlo stát, je spousta. Pokusit se to "prostě zapnout" může situaci významě zhoršit. Odpovědný admin tohle neudělá.
Ne, není to uhýbání od tématu předchozí diskuse. Připojení souborového systému po nekorektním ukončení je start po pádu z neznámých příčin. Start databázového serveru po nekorektním ukončení je start po pádu z neznámých příčin. Proto je to zotavení po havárii – pokud je příčina předem známá, zdravá služba na ní zareaguje a k pádu vůbec nedojde.
Příklad toho „jednoho datacentra“ je dobrý. Tam někdo zkoumal, zda si ten který klient přeje server nastartovat? Já myslím že ne, že virtuální servery prostě nastartovali, a servery, které nevypadaly, že by jimi protekla voda, prostě zpátky připojili na napájení.
Jinak já jsem samozřejmě nepsal o případu, kdy serverem protekla voda. Ale pokud jen vypadl elektrický proud, asi nevyndaváš disky a nepokoušíš se z nich dostat data. Když jenom vypadne proud, co vlastně děláš jiného, než že server zapneš a necháš ho normálně nabootovat – a teprve pokud by se to nepodařilo, budeš řešit to, co při bootu selhalo?
Tak ještě jednou tvoje slova:
"Nikdo nezkoumá, zda došlo ke korektnímu nebo nekorektnímu vypnutí"
vs.
"a servery, které nevypadaly, že by jimi protekla voda, prostě zpátky připojili na napájení."
Tak zkoumá nebo nezkoumá? Když nezkoumá, tak jak ví, že jimi neprotekla voda?
"Když jenom vypadne proud, co vlastně děláš jiného, než že server zapneš a necháš ho normálně nabootovat – a teprve pokud by se to nepodařilo, budeš řešit to, co při bootu selhalo?"
Když vím (tím, že zkoumám příčiny vypnutí), že jenom vypadl proud, tak server normálně zapnu a dohlédnu na to, že všechny služby spolehlivně nastartovaly. U mých osobních serverů ještě rád provedu fsck -f
, nebo btrfs scrub
, prostě jen pro moji jistotu (což ostatně dělám sem tam jen tak, protože se mi líbí průběh a výstup xfs_repair
, ale osobní úchylky nechme stranou).
Tím „nikdo nezkoumá…“ jsem myslel případ, kdy se prostě server pustí – buď ho někdo zapne „vypínačem“, nebo je nastaven pro automatický start po výpadku napájení a napájení je obnoveno. Psal jsem tedy o vypnutí serveru jako nějaké logické jednotky, nemyslel jsem tím přímo fyzický server.
Pokud u každého zařízení musíš fyzicky být, abys zjistil příčinu výpadku a pak jej zapnul, asi máš všechna zařízení na jednom místě. Když někde přejde bouřka nebo jen vypadne proud, úplně stačí osobně obcházet ty routery, switche, NASy a podobná zařízení, která mají po obnovení napájení automaticky naběhnout, ale nenaběhnou. Nedovedu si představit, že by takhle někdo ručně zapínal všechno.
> Jaké škody napáchá, když se ten server po pádu restartuje? Jaké škody napáchá, když se po pádu restartuje SSHD?
To sa fakt chcete hrat tymto sposobom? Staticky webserver pre CDN nema prilis dovodov spadnut, ale ked uz fantazirujeme - ak sa zosype kvoli chybe na disku a systemd ho bez hlesnutia restartuje, bud sa dostane do stavu, ked pri kazdom requeste spadne znovu, alebo zacne servovat nezmyselne data. Klienti CDN dostanu poskodene data, ktore nasledne v lepsom priade neprejdu checksumom a budu sa tahat stale dookola... Nez to admin restartujuceho typu zacne riesit, tyzden nebude nikto tusit, co sa deje.
A to je ten lepsi pripad. V horsom pripade vam staticky webserver pada kvoly nejakemu script kiddie, ktore skusa spustit kod cez este neopatchovany exploit. V pripade neuspechu mu ho restart urcite pomoze :)
Ako Vam uz povedali viacery predomnou, v *nixovom svete sluzby nepadaju. Preto aj spominal ten Windows NT a preto i pan predomnou asi "widliho admina" spominal. Pretoze "riesenie", o ktorom hovorite Vy a vlastne i cely pristup k veciam okolo systemd velmi pripomina ten MS-styl, kde sa vsetky prusery riesia az v momente, ked uz su tak enormne, ze sa nedaju ignorovat.
> Ako Vam uz povedali viacery predomnou, v *nixovom svete sluzby nepadaju
Bohuzel musim oznamit vam a viacerym pred vami, ze padaji, smirte se s tim. Dalsi novinkou pro vas asi bude, ze jsou situace, kdy je proste nejjednodussim a pritom dostatecne dobrym resenim to nechat automaticky restartovat.
Chapu, ze jsou situace, kdy jedinym spravnym resenim je zavolat admina, aby se v tom tyden vrtal a pak slavnostne se 100% jistotou rekl, ze data jsou ok a pricinu nenasel, jedeme dal.
Ale taky vy pochopte, ze jsou situace, kdy je proste dost dobry jet dal rovnou.
Ja bych to preformuloval, ve svete nixu se padajici sluzba nepovazuje za normalni stav. Narozdil od sveta widli, kde to normalni stav je, a zcela standardne se "resi" pravidelnym restartem celyho serveru.
A jelikoz je tedy padajici sluzba neco nenormalniho, je zcela nesmyslne ji startovat znovu, nebot pad = nekde je chyba, kterou je treba opravit.
Navic z hlediska bezpecnosti je restartovani sluzby doslova pruser, protoze nebezici derava sluzba je asi tak o 100 radu bezpecnejsi, nez bezici derava sluzba.
Situace kdy je "dobry jet dal rovnou" ... NEEXISTUJE.
> Situace kdy je "dobry jet dal rovnou" ... NEEXISTUJE.
Ach jo, vy jste tady sami zkuseni teoretici. To vas mam jako prosit, abyste mi uverili, ze toto byl normalni stav, kdy sluzba ve svete nixu obcas spadla a bylo uplne v poradku ji nastartovat a jet dal? Podotykam, ze takovy stav trval nekolik let a firma na nem je zavisla. Na datech se delaly inkrementalni zalohy ktere nikdy nebyly poskozeny a nikdy nebyly potreba pro recovery, protoze nikdy nedoslo k poskozeni dat. Takze to bylo uplne normalni, velmi levne a pritom ucinne reseni.
Dle vasich teoretickych superbezpecnych opatreni byste asi doporucili, aby se firma preorientovala na prodej rohliku, ze?
> Dle vasich teoretickych superbezpecnych opatreni byste asi doporucili, aby se firma preorientovala na prodej rohliku, ze?
Ano. Celkom vazne. Alebo, aby to neznelo tak hrubo, vsetko OK, ale ak ta firma nejak suvisi s IT, poprosim nazov. Aby som s nou nahodou niekedy v zivote nemal nieco spolocne.
Inak ja si viem predstavit situaciu, ked ma clovek na krku daku zdedenu vec, z ktorou nemoze robit nic a pady riesi restartom. Aj ked musim priznat, ze som sa s takou stretol zatial vzdy len na Windowsoch. Cize ano, verim, ze stav, aky popisujete moze nastat. Ale je to okrajova a nestastna situacia a riesenie restartovanim je otazkou 2 riadkov skriptu. Fakt nechapem, preco to rvat do initu a preco to nasledne hlasit za uzasnu, absolutne nevyhnutnu featuru a tvarit sa, ze je chybou, ak tato moznost chyba ostatnym initom.
Nebylo to zdedene ale novy sw, ktery jeste nebyl optimalizovany a pri odesilani velkych kvant dat dosla pamet a padalo to. Pak bylo nutno operaci opakovat aby odeslal i zbytek. Nicmene melo to jinak tak dobre vlastnosti, ze jsme to nasadili, obcasne preruseni sluzby za to stalo. Po par letech doslo i na tu optimalizaci... :-) Monitoring a restart se resil monitem, jestli to cpat do initu nevim.
Můžu se zeptat na jeden konkrétní příklad takové chyby, jak byste ji opravil? Máte server, v něm ECC paměti, na serveru nějakou normální unixovou službu, která nemůže nikdy spadnout. Slunce má zrovna živější období, pošle nám sem spršku nějakých zajímavých částic, a co čert nechtěl trefí se zrovna do naší RAM a dva bity překlopí. Dva bity už jsou moc, to ECC nedokáže opravit, jenom to detekuje. Ale s procesem, který má poškozenou paměť, se toho moc rozumného dělat nedá, jedině ho okamžitě zabít, dřív, než s tou poškozenou pamětí začne pracovat a někam jí zapíše nebo pošle nebo se pokusí provést. Takže nám ta služba, která nikdy nemůže spadnout, tak nějak spadla.
Jak se má tahle chyba opravit?
Žádný software nemá příliš důvodů spadnout. Pokud dojde k chybě na disku, nemusí ten webserver nutně spadnout – takže ta chybná data bude odesílat bez ohledu na restart. Pokud admin neřeší problém, není to chyba žádné aplikace. Jinak ten server může spadnout kvůli chybě v programu, kvůli chybě v paměti, kvůli překročení nějakého limitu (třeba kvůli memory leaku)… Nic z toho nebrání tomu server znovu nastartovat, a problém řešit při nastartovaném serveru.
Pokud webserver padá kvůli script kiddie (jak to, vždyť provozujete jen bezchybný software), jak pomůže, že ten server zůstane dole? To ho správce nechá vypnutý, bude zkoumat logy, z nich vyvěští, že to byl exploit, počká na opravu a teprve pak server znovu zapne?
Pokud ve vašem světě služby nepadají, nechápu, proč řešíte nějaké neexistující epxloity nebo neexistující chyby disku. A taky proč vůbec řešíte automatický restart po pádu služby – když ve vašem světě služba nikdy nespadne, nedojde nikdy ani k tomu automatickému restartu.
Ten váš popis „widliho admina“ nijak nesouvisí s tím, o čem se tady diskutuje. Automatický restart služby neimplikuje to, že se průsery řeší až v okamžiku, kdy jsou enormní. Automatický restart služby vůbec neznamená, že se problémem nebudu zabývat. Naopak dává správci možnost zabývat se problémem dřív, protože se nemusí starat o to, aby služba vůbec běžela.
Zkuste si to představit na něčem kritičtějším. Pokud dojde k nějakému problému za letu v letadle, které řešení byste preferoval – to vaše, kdy se piloti přestanou věnovat pilotování a budou spoléhat, že to nějak dopadne (nejspíš na zem nebo do moře), a místo toho budou vše důkladně analyzovat, aby si byli jistí příčinou problému dříve, než se pokusí obnovit řízení letadla – nebo to moje, kdy je potřeba nejprve obnovit ovládání letadla a pokud možno s ním přistát, a teprve pak v klidu na zemi ať si to týmy expertů zkoumají klidně měsíce? Nebo se zase dozvím, že ve vašem světě letadla nepadají?
"Pokud dojde k nějakému problému za letu v letadle"
Mě celkem mrzí, že jsem neodeslal komentář s jaderným reaktorem, teď to bude vypadat, že se snad od tebe inspiruji.
Jaderný reaktor byl odstaven po té, co se dostal do nestandardního stavu (memory, ehm, radiation leaky). Vy byste reaktor restartoval a potom v klidu řešil, proč došlo k příčině odstavení. Nakonec k leakům dochází jen 2x za rok. Moje pojetí IT má daleko blíže k řízení jaderné elektrárny (podobný příměr jsem použil před 5 lety při zavádění pohotovosti u nás ve firmě).
"se pokusí obnovit řízení letadla"
Oni se pokusí obnovit řízení letadla právě na základě těch informací. Nemá smysl zkoušet nastartovat levý motor, když je urvané celé levé křídlo.
Jinak to nebyl dobrý příměr. Ti piloti se navíc pokusí o co nejbezpečnější havarijní přistání tak, jak je to za daných podmínek možné (k tomu ty podmínky musejí znát). Na zemi potom je to letadlo odstaveno a důkladně prozkoumáno techniky. A také se stává, že je globálně zakázán provoz daného typu letadla, dokud se příčina neobjasní.
Ve vašem pojetí je to letadlo dál využíváno a normálně se s ním létá. Protože při příštím startu prostě normálně vzlétlo, tak vo co de, že.
Pokud byl jaderný reaktor odstaven, není požadavek, aby běžel, ale naopak, aby byl odstaven. Během normálního provozu se neodstavuje kvůli každé nepřesnosti, naopak je tam spousta automatických mechanismů, které nejrůznější chybové stavy automaticky řeší. Nečeká se pokaždé na operátora, aby provedl nějakou úpravu přesně podle daného postupu, když ten samý postup může spolehlivěji udělat automat.
Pokud by se reaktor dostal do nestandardního stavu, se kterým nikdo nepočítal, nebo který vyžaduje odstavení, samozřejmě se odstaví a nejprve se řeší příčina. Ale stejně tak služba, která se dostane do nestandardního stavu, se kterým nikdo nepočítal, nebo který vyžaduje zastavení, tak se znova nespouští. Ale ukončení procesu není nic nečekaného nebo překvapivého.
Přesně jako ti piloti se chová i správce služeb. Znovu spustí službu, a ta se podle dostupných informací pokusí obnovit plný běh, nebo se pokusí o co nejbezpečnější havarijní přistání. Jenže k tomu, aby cokoliv z toho mohla udělat, musí nejprve běžet. Ano ten příměr s letadlem nebyl úplně přesný – přesnější by bylo, kdyby v okamžiku, kdy dojde k problému, ty piloty někdo vyrazil z pilotní kabiny a dovolil jim vrátit se, až vyšetřovatelé budou mít bezpečně zjištěno, v čem byl problém.
"Nečeká se pokaždé na operátora, aby provedl nějakou úpravu přesně podle daného postupu, když ten samý postup může spolehlivěji udělat automat."
Správně, to je přesně to, co jsem psal u monitorovacícho systemu. Pokud nastala přesně definovaná situace, může monitorovací system spustit skript, který to dá dopořádku.
"Přesně jako ti piloti se chová i správce služeb."
To je trochu zmatení pojmů. Pilot v letadle je totéž co admin v IT. Operátor ve velíně jaderného reaktoru je totéž co admin v IT. Úkolem admina je to letadlo nebo ten reaktor bezpečně udržovat v bezpečném provozu. A pokud to nejde, tak bezpečně odstavit. Ano, slouží mu k tomu další nástroje. Pokud systemd (nebo správcu služeb) považuješ za totéž jako pilota v letadle, asi se nemáme o čem bavit, naše myšlení je úplně někde jinde.
To je ale krasny priklad. U te jaderky je nebezpecne pokracovat dal, na druhou stranu je sit navrzena na to, aby ji slo odstavit a tak ji odstavi a hledaji pricinu.
U letadla jaksi nejde presadit cestujici za letu do zalozniho letadla a tak se musi pokracovat v letu i kdyz to letadlo ma kritickou zavadu.
Stejne tak IT admin - nekdy musi za kazdou cenu prijit na pricinu a az pak nastartovat sluzbu, nekdy ji musi nastartovat rovnou a pricinu resit pozdeji, a nekdy ji proste jen nastartuje a nic neresi proste proto, ze to bud nikoho nezajima nebo to nikdo nezaplati. To je proste realita. Jsou firmy, kde by zkoumaveho admina vyhodili, protoze veci zbytecne komplikuje.
To se pletes, to ze sluzba zbuchla == nouzove pristani. Pokud jsou veci kolem navrzeny koser, tak takove nouzove pristani = minimalni skody (nejaky ten chdisk, mozna prepocitani indexu ...).
Pokud ovsem tu rozbitou sluzbu znova nastartujes == to letadlo co prave spadlo posilas znova do vzduchu. V pripade letadla ten motor co jim proletela kachna a pri pristani bezel jen na volnobeh ma plnej vykon => jste navic ti vybouchne, coz povede k tomu, ze odpadne kridlo ....
Podle mne to „dá do pořádku“ nemá dělat nějaký skript, ale má to dělat ta služba samotná. A nevidím důvod, proč čekat na pokyn monitorovacího systému (který navíc netuší nic o situaci), když to správce služby zjistí okamžitě. Třeba pokud se služba plánovaně restartuje (třeba po upgradu), nebyl bych nadšen z toho, že se do toho začne montovat nějaký zachraňovací skript.
Podle mne úkolem admina nebo operátora v jaderné elektrárně je řešit nestandardní situace. Bezpečné rutinní udržování v bezpečném provozu je věc, která jde daleko lépe automatům než lidem.
Jinak to, že úkolem admina je, aby služby bezpečně běžely, tady píšu stále dokola. A neustále se dozvídám, že start služby je velmi kritická operace, kterou musí provést jedině administrátor ručně až po té, co zkontroloval vše možné i nemožné.
"Třeba pokud se služba plánovaně restartuje (třeba po upgradu), nebyl bych nadšen z toho, že se do toho začne montovat nějaký zachraňovací skript."
Když admin dělá update, tak snad dá něco jako downtime do monitorovadla. Nebo ve tvém světě se služby sami updatují a sami poté restartují? To mi opět připomíná widle, kde se každá appka stará o svou vlastní aktualizaci. V linuxu máme repositáře. Služba se (sama sebe) neupdatuje.
"start služby je velmi kritická operace"
Nějak ti tam záměrně vypadlo několik slov. Start služby po předchozím neočekáváném pádu je velmi kritická operace.
Downtime v monitorovadlu je dobrý způsob, jak se o příští chybě dovědět rovnou od uživatelů (a pak zjistit, že tenkrát to monitorovadlo někdo zapomněl zase nahodit).
Nic mi tam nevypadlo. Ta služba neví, zda startuje po předchozím neočekávaném pádu. Takže nemůže nikdy nastartovat automaticky (ani po startu počítače), musí vždy administrátor potvrdit, že se nejedná o situaci po předchozím neočekáváném pádu a službu nastartovat ručně.
Také by mě zajímalo, co tak magického dělá administrátor před tím spuštěním služby - že to nemůže udělat ta služba sama.
A jak je to s tou službou souborových systémů? Opravdu při startu žádný souborový systém nepřipojuješ automaticky, ale nejprve je nějak kontroluješ a teprve pak je připojíš ručně? Nebo jsou souborové systémy nějaký magický druh služby, která zvládá ten automatický start, kontrolu, že služba může běžet, a podle výsledku kontroly buď plný provoz služby (připojení disku) nebo její ukončení s chybou?
Zacina to byt dost napinavy. Ono vlastne v principu jakekoli nestandardni/neocekavane chovani jakehokoli programu je chyba a mohla by vest k poskozeni dat apod. To ze to nespadlo jeste neznamena, ze je vse ok! V takovem pripade by melo monitorovadlo prepnout vsechny FS do readonly, povypinat vsechny demony, odhlasit vsechny usery, prepnout kernel do trasovaciho rezimu a zavolat admina. Admin se dostavi, zkusenym okem omrkne vsech 50TB dat a s pocitem bezpeci nahodi demony zpet. Je to tak spravne zodpovedne (TM)?
"Downtime v monitorovadlu je dobrý způsob, jak se o příští chybě dovědět rovnou od uživatelů (a pak zjistit, že tenkrát to monitorovadlo někdo zapomněl zase nahodit)."
Pro ty, kteří nikdy neviděli například nagios (nebo icingu), tak dowtime se dává na určitý časový interval. Default je 2h, lze jej zkrátit nebo prodloužit. Pokud vím, že update bude trvat deset minut a nahlášená doba výpadky služby je 20minut, dám downtime na 15minut. Jak prosté.
"Také by mě zajímalo, co tak magického dělá administrátor před tím spuštěním služby - že to nemůže udělat ta služba sama."
Tak opět, po stošedesáté. Bavíme se celou dobu o situaci, kdy ta služba, nebo rovnou celý server přestal fungovat v důsledku nějaké nestandardní situace. Služba spadla, vypadl proud, do serveru natekla voda. Je to mimořádný stav. Ještě jednou speciálně pro tebe. Jedná se o mimořádný stav, když služba nebo server, který má běžet, náhle něbeží. Doufám že už je to konečně jasné.
Tuto skutečnost admin ví. A když tuto skutečnost admin ví, tak podle závažnosti situace se rozhodne co dál. Buď si "jen" pohlidá start služeb. Je to start po nějaké předchozí nestandardní události, která (opět pro jistotu opakuji) vedla k pádu služby či vypnutí celého serveru. Nebo udělá nějaká další opatření. Jako třeba že server vysuší. Není to nic magického, ale je to na zvážení admina, co a jak provede. Od toho tam je.
"A jak je to s tou službou souborových systémů? Opravdu při startu žádný souborový systém nepřipojuješ automaticky, ale nejprve je nějak kontroluješ a teprve pak je připojíš ručně?"
Tohle se snad děje automaticky při každém připojení fs. Jestli narážíš na /boot, který se rovnou čte, protože v MBM a prvních sektorech není místo na kompletní fsck, tak /boot je zvykem připojovat jako readonly, protože je to oddíl, do kterého se běžně nezapisuje. Pouze při změně jádra či nastavení. Riziko, že se takový oddíl poškodí je minimalizované a de facto omezené pouze na chybu hw. /boot je tak jediným oddílem, který se rovnou čte, protože tak, jak je udělán bootovací proces PC, to nelze dělat jinak.
Veškeré další připojované systémy se v klasickém init skriptu nejdříve zkontrolují (fsck) a až potom se připojí. Dokonce je na to sloupec i ve fstabu (pořadí, ve kterém se mají kontrolovat).
Takže ne, já systémy souborů nekontroluji, kontroluje to při _každém_ bootu samotný os.
To mi ale nebrání v tom, pokud usoudím, že to vypnutí bylo hodně nestandardní (například odešel diskový řadič), udělat ten check z nějakého jiného prostředí (systemrescuecd apod.). Opět je to na rozhodutí admina.
V čem je připojení souborového systému tak ojedinělé, že tam může zotavení z předchozího neznámého stavu a vysušení proběhnout automaticky, ale u žádných jiných služeb to možné není? Proč nemůžu mít nějakou jinou službu, která se bude chovat stejně jako připojení souborového systému - tj. na začátku se provede kontrola, a teprve pokud dopadne dobře, naběhne ta skutečná služba? A stejně jako u souborového systému by pak podmínky pro běh té služby nekontroloval administrátor, ale kontrolovaly by se při _každém_ spuštění té služby samotnou službou?
Pokud se admin rozhodne, že předchozí závada nebyla tak závažná a server spustí, tak to také může dopadnout tak, že fs check při startu os mu sdělí, že ten fs je bez dalšího zásahu automaticky neopravitelný. Což se ostatně stává i u relativně bezpečného odpojení od elektřiny. A potom je opět na adminovi, co udělá. Buď prosté fsck -yf a jede se dál, nebo zvolí opatrnější metodu a udělá si třeba kopii daného blokového zařízení a nad mí bude bádat co dál.
Proto ten admin u startu po zotavení z nějaké chyby stejně musí být, protože pravděpodobnost nutnosti jeho zásahu je vyšší (dle závažnosti předchozího problému), než u startu po korektním vypnutí (kde je pravděpodobnost zásahu prakticky nulová a pokud je potřeba, tak naopak ukazuje na opravdu velký problém bez předem známé příčiny -- protože po korektním umount se na daném blokovém zařízení nemá co měnit).
Takže ne, ono "vysušení" neproběhlo automaticky jak se snažíš podsouvat, ale admin se rozhodl, že to prostě spustí s vědomím toho, že fs check to zkontroluje.
Ale jako to už se fakt točíme v kruhu, vše podstatné bylo řečeno. Jen neustále vytrháváš věci z kontextu, zasazuješ do jiných, úmyslně zapomínáš na části podmínek apod.
Jestli ve tvém adminování to funguje tak, že se věci startují automaticky bez ohledu na předchozí stav, tak fajn, je to tvůj boj. Moje a z diskuse plyne, že nejen moje praxe je taková, že je potřeba si dát velký pozor na to, jak dobře ta služba najede po předchozí neočekávané události. Ano, jsou služby, které si žádný stav neuchovávají a krom konfiguračního souboru (pokud jej mají) nemají žádná persistentní data. Tyto služby nemají co kontrolovat a je možné je spustit. Ale o těchto službách se nebavíme.
Ten FS je naprosto konkrétní případ "služby" na které závisí prakticky všechno ostatní. A o tento typ služeb se admin musí sakra dobře postarat, protože pokud bude fs obsahovat vadná data, tak je všechno na ním v poškozené. Toto nevyřeší žádný init, dokonce to často nevyřeší daný konkrétní admin. Proto je i tolik dotazů v poradnách jak postupovat a proto je jako první rada udělat si kopii na úrovni blokového zařízení.
Tímto tuto diskusi končím, vše podstatné bylo řečeno a mé stanovisko je jasné. Očekávám, že opět vytrhneš něco z kontextu, klidně si posluž.
Takže jsme se snad shodli na tom, že existují služby (například souborový systém), které si svůj stav dokážou zkontrolovat samy, a mohu to dělat při každém startu. Případně se mohou z některých typů problémů i samy zotavit. Ty služby je tedy možné bezpečně startovat bez ohledu na předchozí stav, protože ta služba si při startu předchozí stav zjistí. Takže nic nebrání tomu, aby taková služba startovala zcela automaticky, bez zásahu admina – a admina zavolá teprve tehdy, když je o problém, se kterým se ta služba neumí nebo nechce automaticky vypořádat.
Ty takhle provozuješ jedinou službu – souborový systém, někdo jiný takhle provozuje i jiné služby, které splňují výše uvedené podmínky.
Já osobně považuju služby, které si ten stav zkontrolovat neumí, za nedodělky. K nějaké chybě může dojít i bez toho, aniž by se to projevilo nějak navenek. Takže služba by neměla být závislá na tom, že admin chybu dostatečně rychle odhalí a službu zastaví (nebo služba stihne spadnout sama), ale měla by být schopná ty anomálie detekovat sama. V souborových systémech je to běžné, u databázových systémů také.
Člověče, to jsou nehorázné nesmysly, co tady hlásáte. Pokud služba zhučí neplánovaně, je to VŽDY nestandardní a neočekávané. Admin je tam od toho, aby jistil bezpečný provoz, třeba i ve 4 ráno, ne aby se vrtal v nose a spoléhal na init, že zajistí automatický restart. Takový "admin" ať jde radši kopat kanály.
Řešit pád jakékoliv služby automatickým restartem u systémů, kde o něco jde, je prasárna a takový admin si říká o průser. Pokud je požadována non-stop dostupnost, řeší se to různými failover a HA postupy.
Služba může před startem kontrolovat integritu dat, ale nikdo nezajistí, že ta kontrola bude dostatečná. Opět, od toho je tam admin, aby zajistil bezproblémový start neočekávaně ukončené služby (nebo čehokoliv jiného). Mně něco takového hlásat aspirant na pozaci admina, tak se s ním ani dál nebavím.
Víc rozepisovat se ani nebudu, nemyslím, že to má smysl.
Když nikdo nezajistí, že kontrola integrity bude dostatečná, jak zajistí dostatečnou kontrolu správce? Tady se to pořád řeší, jako kdyby měl správce nějaké magické schopnosti. Ne, ten správce taky jen spustí nástroj na kontrolu integrity dat, a když ten nástroj prohlásí, že je vše v pořádku, tak tu službu spustí.
Ano, správce má rozum a může něco zjišťovat, ale k té chybě klidně může dojít, aniž by ta služba spadla. Takže tu máme stejný problém, ale správce nedostane žádný podnět – takže asi stejně nezbývá, než aby se s tím nekorektním stavem uměla ta služba sama vyrovnat, a alespoň se ukončila.
Také pořád nevím, proč by se měl správce nějak zachovat až po té, co podrobně prozkoumá příčinu. Třeba pokud dojde při připojování souborového systému k chybě, kterou je možné opravit, chyba se opraví a souborový systém se přimountuje – a přesnou příčinu je možné zkoumat potom.
Vaším argumentem proti restartu služeb přece je, že může dojít k problému a ta běžící služba bude problém dále zhoršovat. Tak mně jenom připadá, že k tomu problému může dojít kdykoli, restart služby není žádný speciální případ. Takže pokud ten problém chcete nějak řešit, musíte ho vyřešit obecně (nejspíš tak, že ta služba konzistenci dat kontroluje průběžně). No a pak už zase nemusíte řešit nějaké ruční zásahy administrátora do restartu služby.
Souborový systém je příklad služby, připojování souborového systému je příklad startu služby. A je to přesně ten případ, kdy administrátor nemá žádné magické schopnosti, nebude kontrolovat disk v hexaeditoru nebo pod mikroskopem, ale spustí fsck
. Spuštění fsck
ale není žádná věda a zvládne to automat.
"A je to přesně ten případ, kdy administrátor nemá žádné magické schopnosti"
Ale má. Pro někoho magické, pro někoho zcela všední. Má mozek, má zkušenosti, má znalosti. Spuštění fsck může v úrčitých situacích udělat víc škody než užitku. Někdy i samotné zapnutí onoho disku není nejlepší nápad. (Znám případ, kdy disk fyzicky někomu vypadl z ruky, "něco v něm hrkalo" a dotyčný neměl žádný lepší nápad, než to prostě zapojit a nechat roztočit plotny. Pokud se z toho dalo před tím něco dostat, tak po této akci už v žádné případě.)
"Já bych si myslel, že když má někdo disk v ruce, má i možnost rozhodovat o tom, zda a jak ho někde nastartuje."
Stejně jako admin má možnost po neočekávaném výpadku se rozhodnout, jak bude dál postupovat. Zapnutím serveru počínaje, přes obyčejný restart služby až po podrobnou diagnostiku (hw nebo dat). Je to zcela na adminovi. Ty bys to prostě nechal na automatice s tím, že když např. fsck neprojde, tak se to nenamountuje. Jenže v té chvíli už mohou být data nenávratně ztracena. Ta automatika nemá žádnou možnost zjistit, zda to, co se chystá udělat, v daném konkrétním případě situaci ještě nezhorší. Proto je to zcela na adminovi.
Rozdíl je v tom, že do stavu "disk v ruce" se nelze žádným způsobem dostat bez zásahu administrátora. Když už do toho administrátor zasáhne (vypne server a vezme disk do ruky), je logické, že to pak zase musí vrátit do provozuschopného stavu. Ukončení procesu je ale jiný případ, to není zásah administrátora. To s "chystá se udělat" ale úplně stejně platí i pro "právě dělá". Pokud něco pokazí start služby, úplně stejně se to může pokazit i tehdy, když ta služba nespadne a poběží dál. Takže řešit zrovna ukončení procesu jako zvláštní případ nemá smysl - spíš je potřeba zabezpečit, aby ta služba rozpoznala, že je něco špatně, a alespoň neničila data. Samozřejmě, pokud je nějaká služba známá tím, že poničí data a spadne, a po restartu to není schopná poznat, a někdo je nucen takovou službu provozovat, nezbývá mu než si užívat manuální obnovy dat a modlit se, aby to příště zase dal dohromady. Ale to už se dostáváme k oblíbenému tématu, zda by dotyčný raději nechtěl rovnou používat Windows.
"Pokud něco pokazí start služby, úplně stejně se to může pokazit i tehdy, když ta služba nespadne a poběží dál. Takže řešit zrovna ukončení procesu jako zvláštní případ nemá smysl - spíš je potřeba zabezpečit, aby ta služba rozpoznala, že je něco špatně, a alespoň neničila data."
Nejde jen o ono pokažení startu, jde o důvod, proč ta služba spadla (doufám že se stále ještě bavíme o situaci, kdy dojde k neočekávanému ukončení služby či běhu servery). Bud se sama dostala do takových podmínek, že není možné její další běh, nebo ji něco z vnějšku odstřelilo. V každém případě to má hodně daleko do standardních běhových podmínek (programy běžně nepadají a běžně je nic neodstřeluje), proto je nutné v případě nestandardního ukončení služby zjistit důvod jejího ukončení, tento odstranit a potom tu službu znovu spustit.
Pokud bude na serveru docházek paměť, OOMK bude zoufale střílet, tak opakovaný restart odstřelené služby opravdu situaci nezachrání. Pokud do serveru natekla voda, není dobrý nápad ho zapínat. Ale příkladů jako tento bylo již uvedeno dost.
Jenže důvod, proč ta služba spadla, může úplně stejně nastat i v jiném případě, kdy to tu službu neshodí. Takže není moc rozumné čekat, jestli se o tom problému náhodou dozvím tak, že služba spadne, ale měl bych ten problém detekovat nějak jinak. U té vody se také používají detektory a nečeká se na to, až voda nateče do serveru a zkratuje jej, a teprve pak to někdo začne řešit.
Pokud OOMK odstřelí nevinnou službu, situaci nijak nepomůže, když ta služba zůstane zastavená. Pokud odstřelí tu správnou, je to buď krátce po startu a bude k tomu docházet opakovaně, pokud to bude hodně rychlé, správce služeb službu odstaví rovnou sám. A nebo ji zastaví správce, který ji před chvílí zapnul. A nebo to bude třeba po několika dnech nebo měsících běhu, a pak je pravděpodobné, že se ten problém neobjeví hned po restartu znova, ale služba může klidně běžet dál, a mezi tím se bude zkoumat, proč k problému došlo.
Jsem jenom hloupy programator, ale treba vam to dokazu vysvetlit. Z principu muze jakakoli akce pokazit jakakoli data na danem systemu. Muze to byt akce ktera skoncila uspesne, muze to byt nestandardni chovani, muze to byt pad, hw chyba, vypadek proudu. Z tohoto hlediska neni rozdil mezi runtime pameti v kernelu, FS na disku, daty v DB. Neni rozdil, jestli sluzba spadla nebo spatne naparsovala konfigurak nebo pracuje zdanlive spravne. Cokoli muze vest k poskozeni dat.
Dale, z principu neni mozne 100% odhalit poskozeni dat.
Pak jsou zde komponenty jako treba zurnalovaci FS, ktere se snazi zajistit nejakou miru spolehlivosti bez zasahu admina a takove, ktere se o to nesnazi, nicmene v principu je mozne napsat jakoukoli sluzbu tak, aby se o sva data starala stejne jako zurnalovaci FS (treba).
Ale porad jsou zde admini (jako treba vy), kteri si z toho nepreberneho mnozstvi zpusobu jak se muze neco pokazit, vybrali pouze sluzby a pouze jejich pad a rozhodli, ze tohle musi resit oni rozumem. Ostatni udalosti je patrne nechavaji klidnymi. Nevim jestli zijete v blahe nevedomosti, ze vase data jsou ok zatimco se nedivate, ze kontrola konzistence je nejak magicka, ze kdyz dopadne dobre, tak se muze sluzba nahodit atd. Ten pocit je velmi falesny. Stejne nakonec jen delate nejake automaticke kroky a doufate, ze to bude ok. Stejne tak to muze delat automat. Ostatne, v oblastech kde o neco jde jsou definovany standard operating procedures a pro lidsky rozum se tam moc mista nenechava.
Na druhou stranu tu mame treba google se svymi datacentry, kde to proste resi uplne jinak a rozhodne tam nebehaji admini ke spadlym serverum.
"Na druhou stranu tu mame treba google se svymi datacentry, kde to proste resi uplne jinak a rozhodne tam nebehaji admini ke spadlym serverum."
Takže počet běžících serverů v čase neustále ubývá, protože k těm spadlým přece nikdo neběhá.
Víte o tom, že jsou místa, kde je jen výměna vadných disků full time job?
> Mně něco takového hlásat aspirant na pozaci admina, tak se s ním ani dál nebavím.
V prvni rade by se mel admin (a stejne kazdej dalsi aspirant na praci v IT) ptat, jakej je na to rozpocet, co se od toho ocekava a jaky k tomu budou dalsi podminky. Bez toho nemuze rozhodnout reseni. Takovi, co kvuli kusu plechu zacnou stavbou ocelarny jsou mnohem vic nepouzitelni nez admin, co necha restartovat sluzbu. Vzdy zalezi na tech ostatnich podminkach.
Je zajimavy, ze v teto diskuzi nikdo nerekl, ze zalezi na tech okolnostech, ale reseni uz ma jasny.
Vy tomu rikate ze dlabou, ja rikam, ze pouzivaji nejlepsi reseni vhodne pro dany ucel. Jestlize totiz udrzba serveru ktery automaticky restartuje nestoji ani korunu a udrzba adminem stoji desetitisice nebo statisice behem let a vysledny efekt je nerozeznatelny, tak proc by platili toho admina, ze. Pokud je pravdepodobnost, ze dojde k poskozeni dat a nutnosti obnovy ze zalohy nizka (behem tech let to nikdy nenastalo) a pripadne skody zanedbatelne, tak firma prave usetrila stovky tisic korun za administraci. V tom svetle se da i chapat, ze se nekterym adminum takovy pristup nelibi :-)
> V tom svetle se da i chapat, ze se nekterym adminum takovy pristup nelibi :-)
To, co sa nam nepaci je, ked sa potom firma s takymto pristupom pyta, kde ze sa jej podeli vsetky data. Pretoze aj ked je vsetko zmluvne osetrene a admin moze odkracat s hlaskou "varoval som vas", stale je to z ludskeho hladiska maximalne neprijemna situacia.
Takových firem, co jim nikdy nezmizely data, až do prvního průseru, už jsem potkal a s radostí se jim vyhnu ;-)
"...udrzba adminem stoji desetitisice nebo statisice behem let a vysledny efekt je nerozeznatelny..."
Jojo, to mi připomíná různé webhostingy za pár korun, nejlépe s dostupností 100 %, kde se pak lidi po havárii serveru divili, kam jim zmizely data. Co na tom, že do té havárie to jelo pár let spolehlivě, že. Pokud firma není ochotna investovat pár stovek měsíčně pro základní dohled nějakým adminem, dobře jí tak. A mezi námi, Murphyho zákony jsou neoblomné :-)
Treba takovy Seti pred dvema hodinami:
>Já tady mluvím o restartu služeb a vy si vymýšlíte nějaké problémy na pozadí nebo mountování filesystému
Z toho jsem si dovolil vydedukovat, ze Seti rozlisuje restart sluzby a mount systemu, ale z principu muze oboji data rozbit nebo neprijit na to, ze rozbita jsou apod.
Pochopitelně, že automatický restart služby po jejím pádu a mount FS je něco jiného. A když už jsme u toho, bavíme se právě o automatickém restartu služeb, což je zásadní argument příznivců systemd. Takže jestli jsem vás správně pochopil, tak vy říkáte: rozbít data může prakticky cokoliv, tak co bychom řešili pády služeb, prostě se restartnou a budem spoléhat na to, že se nic nepodělá. A když se něco podělá, jsou tu přece zálohy.
Předpokládám, že stejný přístup je i pro pád celého serveru. Je tady fsck, nejlépe s automatickou opravou, tak se prostě nahodí, aby to jelo, a pak se (možná) bude řešit, proč to zbuchlo. BTW i ty pitomé windows poznají nestandardní shutdown a nabídnou systém nouze.
> Pochopitelně, že automatický restart služby po jejím pádu a mount FS je něco jiného
Tak mi prosimvas vysvetlete, v cem je to v principu jine. Obecne k poskozeni dat muze dojit uplne kdykoli a jakkoli - chybou v programu, vypadkem site, vypadkem spojeni s jinou sluzbou, proste obecne jakkoli. Jediny zpusob jak se s tim aspon nejak vyporadat je, ze se program aktivne snazi o nejakou zaruku konzistence dat a jeste lepsim zpusobem jsou inkrementalni zalohy. Takze muzete paralelne spustit vice stejnych systemu a volit spravne vysledky apod. Z toho taky neprimo plyne, ze pokud se sluzba aktivne snazi o konzistenci a take si spusti kontrolu dat pri startu, tak vy stejne o moc vic neudelate - tim se dostavame k dalsi otazce, ktera tu uz mnohokrat padla - proc se tohle nemuze udelat automaticky?
Ve skutecnosti k situaci ekvivalentni "restartu sluzby" muze dochazet uvnitr programu docela casto, ale protoze se to nevypise do zadneho logu, tak jste uplne v klidu. Ale kdyz to v tom logu je, tak to najednou pusobi strasne dulezite.
Dale podotykam, ze ten samotny pad bezi na uplne stejnem CPU a se stejnou RAM a stejnym ulozistem, je to porad ten samy turingovsky uplny system. Nejlepe bude, kdyz vysvetlite, ktere strojove instrukce bezi behem padu sluzby, ktere nikdy jindy bezet nemuzou, a ktere strojove instrukce spoustite vy pri manualnim restartu, ze je nemozne je pustit automaticky. Verim ze pak se posuneme v debate dale :-)
To je pořád dokola. Admin je tam od toho, aby zjistil, proč ta služba spadla a podle toho se zařídil. V podstatě vaše odpověd na mé:
"Takže jestli jsem vás správně pochopil, tak vy říkáte: rozbít data může prakticky cokoliv, tak co bychom řešili pády služeb, prostě se restartnou a budem spoléhat na to, že se nic nepodělá. A když se něco podělá, jsou tu přece zálohy."
je ANO. Stačilo to napsat, nemusel jste to znova okecávat :-)
Pořád nechápu, v čem je ten rozdíl. První případ: dojde k neočekávané chybě, služba začne poškozovat data, ale běží dál. Druhý případ: dojde k neočekávané chybě, služba spadne a po opětovném spuštění by začala poškozovat data. Podle vás první případ je OK a admin nemusí nic řešit, a druhým případem se admin musí zabývat? Mně tedy připadá, že je jedno, jak přesně se ta chyba projeví. A že tedy poškozování dat službou je nutné řešit vždy, bez ohledu na to, zda služba spadla nebo nespadla.
Pokud nechápete, v čem je rozdíl, tak je diskuse zbytečná.
"Podle vás první případ je OK a admin nemusí nic řešit, a druhým případem se admin musí zabývat?"
A to jsem říkal jako kde? Přestaňte tady cpát nějaké případy, kdy služba nebo nějaký SW začne za běhu poškozovat data. To NENÍ žádný argument pro automatický restart služeb. A přestaňte mi cpát něco, co jsem nikdy netvrdil.
Plyne to z vašich tvrzení. Nebo snad ne? Stačí si odpovědět na pár jednoduchých otázek. Pokud se služba dostane do stavu, kdy je její další běh nežádoucí (např. začne ničit data), má se o tom administrátor dozvědět vždy/někdy/nikdy? To, že se služba dostala do takovéhoto stavu se projeví pádem služby vždy/někdy/nikdy? Z předchozích tvrzení tedy plyne, že pád služby je z hlediska detekce chyb situace specifická ničím / vůbec ničím?
V čem je ten automatický restart služeb tak jiný? Buď ta služba bude po startu normálně fungovat, pak je to v pořádku a v automatickém restartu nebyl žádný problém. Nebo ta služba nebude normálně fungovat a v nejhorším případě bude situaci zhoršovat – např. bude ničit data. Jaký je rozdíl v tom, když se ta služba takhle začne chovat po automatickém restartu, a když se tak začne chovat za normálního běhu? Podle mne žádný, je tedy nutné tomu předcházet neustále – no a pokud už mám zaručeno, že služba rozpozná situaci, kdy by se stav jenom zhoršoval, a vypne se nebo se přepne do nějakého bezpečného režimu, může se klidně služba automaticky nastartovat.
Takže celé „řešení“ „hlavně ne automatický restart“ je jenom jinak nazvaný přístup: „Zuřivě se modlím, aby služba spadla co nejdřív po té, co začne zhoršovat situaci – např. poškozovat data. Protože jestli nespadne, nijak to nepoznám a dozvím se o tom teprve až budou všechna data pryč.“
Zase špatně.
"Jaký je rozdíl v tom, když se ta služba takhle začne chovat po automatickém restartu, a když se tak začne chovat za normálního běhu?"
Podstatný. Neřešte slepě následek, tedy zničená data, řešte, zda jsem mohl jako admin tomu zničení předejít. V případě restartu je to více než pravděpodobné, protože místo, abych nemusel vstávat a umožnil automatický restart, nejprve jsem si zjistil, co se stalo. Ve druhém případě jsem na tom jako admin hůře. Jsou to prostě dva odlišné případy, každý má jiná řešení. Jinými slovy když spadnu ze střechy, nebo když mě srazí náklaďák, v obou případech budu mrtvý nebo zraněný, ale každý ten případ je jiný a má jiná řešení, jak mu předcházet.
"Pane, co tady tak chodíte? - Ale, ztratil jsem klíče. - Tak já vám pomůžu je hledat... Pořád nic, opravdu jste je ztratil tady pod lampou? - Ne, támhle o kus dál ve tmě, ale copak tam je můžu najít?"
Takhle nějak je to i s tím správcem? Chyby, které se projeví pádem služby, se dobře hledají, tak budeme hledat jenom ty? Já právě neřeším následek - zničená data - ale řeším to, jak tomu zničení předejít. Přičemž tím "předejít" myslím skutečně předejít ničení dat, ne čekat, až to dojde tak daleko, že služba havaruje.
Takže nejde o dva odlišné případy. Je to pořád jedna a táž chyba, a je víceméně věcí náhody, jestli zároveň způsobí pád programu nebo ne. Takže se musím snažit té chybě předcházet, bez ohledu na to, zda službu shodí. Ale máte pravdu, že tohle je spíš věc programátora, administrátor si akorát může (někdy) vybírat, zda zvolí službu, která se takhle chová, nebo službu, která data klidně nenápadně poškozuje.
Pak asi nezbývá než odpovědět v tradici této diskuse, že takoví administrátoři ať pak radši zůstanou u Windows, kde je zvykem, že služba pokazí co může a na závěr slavnostně spadne. Já zůstanu věren tradici unixových systémů, kde se administrátor nemusí bát nějakou službu nastartovat.
Kde se v mém pojetí objevuje nějaké „posbírá a sestaví“? V mém pojetí je potřeba se o závadě na letadle dozvědět co nejdřív, není potřeba čekat, až letadlo spadne. Ale dozvídám se tu, že někteří raději praktikují postup „Zatím to nespadlo, tak je všechno v pořádku. Až se objeví nějaké problémy, poznáme to, protože to spadne.“
Mam cim dal vetsi pocit, ze to tady je samy teoretik a akademik, ktery hlasa tu spravnou pravdu, jak ma admin nahazovat systemy a resit konzistenci dat (patrne s hex editorem nebo cim).
Nikdo ale nemluvi o terminech, nikdo nemluvi o penezich, to je nejakej paralelni vesmir nebo co. Bud delate pro stat, kde se prachy neresi, nebo to jsou ohromny korporace kde minuta vypadku stoji miliony atd, nebo ja uz nevim.
Musim vam teda prozradit, ze existuje jeste zbytek sveta, kde uplne staci, kdyz to nejak bezi, funguje to, kde nikdo nezaplati admina na 24/7, kde nevadi kdyz by to pripadne chvili nebezelo, nevznikne tim milionova skoda a nikdo se nebude logovat na server v pet hodin rano. Chapete to? Mnohem dulezitejsi bylo, ze to bylo docela zadarmo a ze to proste _plnilo ucel_.
Onehda byl na TheDailyWTF clanek o tom, jak korporace nahazovala ohromny system, meli na to sileny mainframy, 3x zalohovany, ohromny datovy sklady, aby zvladli ten veliky provoz. Pak slavnostne sluzbu spustili a behem prvniho mesice meli celych 300 registrovanych useru. A podobne jevy vidim nejmin v polovine teto diskuze.
Jiste a pak je tu jeden karell, kterej je zjevne reditel zemekoule, ale administrovat neumi ani trikolku. Kdyz si na ni decko totiz rozbije hubu, tak se aspon podivam, jestli to brzdi a jestli nekde neco neprasklo, rozhodne to na to neposadim a s bouchancem do zad neprohlasim "tak jed".
Ne, takovou práci rád přenechám jiným. Já myslel, že se bavíme o seriózní práci, ne o firmičce s jedním servříkem, kde admin je potřeba jednou za půl roku na 2 hodiny.
Celý problém se systemd je v tom, že vzniká jakýsi moloch, který pomalu prorůstá neodstranitelně do systému, a pro jeho potřebu se vymýšlejí pseudoargumenty typu autorestaru daemonů, aby se adminům "ulehčila" práce. Místo aby se tyto vlastnosti doplnily do stávajících initů, které se používají a funguji už 40 let, vytvoří se binární sra*ka s binárním logem a šíleným neustále se měnícím řídícím jazykem, nebo jak to nazvat. To už za chvíli můžu rovnou linux vyhodit a nainstalovat windows a ještě dostanu bonus ve formě AD a víceméně kvalitního groupware.
Ona je ta posloupnost trochu jiná. Autorestart je jednou z vlastností, kterou spousta adminů chce – proto za ta léta vznikla spousta projektů, které tohle řeší. A lepilo se to k původnímu initu – samotný SysVinit už se dávno nepoužívá, snad všude je k němu dobastlené nějaké init.rc, no a nad tím bývá třetí vrstva, která řeší třeba ten autorestart, vedle toho ve třetí vrstvě může být třeba xinetd, a nejspíš i další věci. Teď se akorát někdo rozhodl, že místo tohohle bastlu na bastlu, který jen tak tak drží pohromadě*), napíše něco nového, co bude splňovat současné požadavky. Protože jak se ukázalo, je to nesrovnatelně jednodušší, než něco dopisovat do toho bastlu. Což není nic proti SysVinit, vydržel s námi hodně dlouho, ale dneska už holt nestačí. (A některým ještě nějakou dobu stačit bude, než je to udržování tradice za cenu značného nepohodlí přestane bavit.)
Třeba já jsem se o tyhle init/rc války dlouho nestaral. Řešil jsem si, jak nad init+rc dostat daemontools (a měl jsem takový divný pocit, že se vlastně všechny tři části snaží dělat to samé, akorát každá neumí něco jiného – a že by ideální bylo mít to vše v jednom). A pak jsem si přečetl pár nenávistných blogů a komentářů o systemd (asi jako ten článek, pod kterým diskutujeme), a dozvěděl jsem se, že systemd ó hrůza udržuje spuštěné ty služby, které spuštěné mají být, navíc ještě hlídá stav služeb, troufá si přijímat notifikace, kdy služba doopravdy nastartovala a podle toho spouštět závislosti, připravit socket a službu spustit teprve tehdy, když se na něj někdo připojí (to taky nikdo nechce, proto existuje xinetd)… Byly to přesně ty věci, u kterých mi pořád vadilo, že to init/rc neumí, a divil jsem se, že to nechybí všem. Takže tímto děkuji všem systemd haterům, kteří mi ukázali, že to, co už léta marně sháním, konečně někdo dělá.
*) Ano, nastartovat služby to většinou s vypětím všech sil zvládne, ale nesmíte po tom chtít nic jiného. Jenom si vzpomeňte, kolik let se řeší paralelní start – a stále je to všude v různých experimentálních fázích, nikde to není tak, že se to rutinně používá a nikdo se tomu nediví. Přitom je to vlastně úplně triviální věc.
Sice jsem říkal, že se další diskuse nebudu účastnit, ale tak když je ten pátek...
"Autorestart je jednou z vlastností, kterou spousta adminů chce"
Netuším, kde to bylo, ale snad v nějaké specifikaci programovacího jazyka bylo uvedeno, že pokud se vám nějaká konstrukce nebo použití zdá přiliš složitá, tak se zamyslete, zda věci děláte správně. Protože, jak autoři uváděli, existuje i jiná, jednodušší cesta. To, že je to složité je indikátor toho, že jdete špatně.
Stejně tak API jisté databáze exportuje pouze a jen metody s konstatní časovou složitostí. A opět zcela záměrně s nadějí, že programátor místo toho, aby implementoval cosi se složitostí O(e^n) se zastaví a zamyslí, zda nemůže použít výhody dané DB, data uspořádat jinak, a opět to mít jako O(1). Nebo třeba zjistí, že udělal chybu v návrhu a daná DB se na jeho problém vůbec nehodí.
Tedy to, že něco chci a ono to tam (za 40 let) není, by mělo být upozorněním, že to možná jde dělat jinak a že ono zvolené řešení asi nebude to nejlepší. Je to ona pokora o které jsem tu psal.
"ale dneska už holt nestačí"
Na co dneska nestačí? Co se změnilo? Proč se to změnilo? A je to správně?
"kolik let se řeší paralelní start"
A pokaždé je pod tím diskuse: je sice pěkné, že to startuje 5s místo 10s, ale ono je to stejně jedno, protože jen POST trvá na domácím hw 30s (a na serveru klidně i 10minut) a ten boot jednou denně (jednou za rok), klidně počkám. On se totiž rychlejší start dobře vyjímá na "letácích", ale užitek pro od jisté hodnoty nemá (5s místo 10s je zrychlení o 100%, což zní bombasticky, no ale když se napíše zrychlení o 5s, tak už to tak dobře nevypadá -- totéž marketingové kecy u různých "green" technologií. Úspora stovky procent!!! Jo, místo 200mW to má teď 50mW za dvojnásobnou cenu a hlavně dalšího odpadu. To je hrozně ekologické.). Nehledě na to, že paralelní start u klasických disků start spíše zpomaluje (mě na ssd -- iops asi tak 40tis -- a systemd userspace startuje 1.3s, ale klasický disk má iops kolem 100 a je mnohem výhodnější ho používat sekvenčně).
"Takže tímto děkuji všem systemd haterům, kteří mi ukázali, že to, co už léta marně sháním, konečně někdo dělá."
No rádo se stalo, ale to jsi nemusel čekat léta a mohl jsi ty Widle používat rovnou.
To, že je to složité je indikátor toho, že jdete špatně.
Když je něco složité (init+xinetd+spousta různých bash skriptů) a indikuje to, že jdeme špatně - není na čase pokusit se najít tu správnou cestu?
Tedy to, že něco chci a ono to tam (za 40 let) není, by mělo být upozorněním, že to možná jde dělat jinak a že ono zvolené řešení asi nebude to nejlepší. Je to ona pokora o které jsem tu psal.
A když to někdo pečlivě zváží, a přijde na to, že je chyba opravdu v tom 40 let starém systému, může to opravit? Není pokora také v tom nepodezírat hned každého, že to nepromyslel? Není pokora také v tom, i když to sám promyslíte a na nic lepšího nepřijdete, připustit, že ten druhý se nad tím možná zamyslel lépe a na něco přišel?
Na co dneska nestačí? Co se změnilo? Proč se to změnilo? A je to správně?
Na co dneska nestačí? Tak evidentně SysVinit nestačí ani na zavedení systému, když se k tomu musí dobastlovat nejrůznější shell skripty. Změnilo se třeba to, že mnohem méně chceme říkat jak se něco má udělat na nejnižší úrovni, ale raději říkám, co se má udělat. Tedy ne že se má nastartovat databázová služba a po ní web server, ale řekneme, že chceme, aby běžel web server. Ono je to jak pořád stejné, a je lepší to popsat jednou a pak už to jen používat, než to vymýšlet pořád znova.
je sice pěkné, že to startuje 5s místo 10s, ale ono je to stejně jedno,
Možná je to prkotina, ale každopádně to znamená, že SysVinit není nejlepší možné řešení. Tady vůbec nejde o to, jestli paralelní start něco ušetří. Ty problémy s paralelním startem jsou především indikátorem toho, že je v tom systému něco hodně špatně, a je to tím systémem celé prolezlé.
No rádo se stalo, ale to jsi nemusel čekat léta a mohl jsi ty Widle používat rovnou.
Já ale nechci používat Windows. Nevím, proč bych nemohl používat linux způsobem, jak chci já. Je mi líto, že někomu bořím jeho představu o 40leté tradici, já mám tradice taky rád, ale když je něco podle všeho hloupá tradice, tak se jí vzdám. Takové linuxové jádro taky mělo spoustu let tradičně BKL, taky to léta stačilo, taky se jeho odstraněním prakticky nic neušetřilo, ale prostě to byla přítěž, i když to v době vzniku bylo nejlepší možné řešení.
"Když je něco složité (init+xinetd+spousta různých bash skriptů)"
xinetd považuji za špatný nápad a sám ho ve svých systémech nepoužívám.
Spoustu různých bash skriptů považuji za dobrý nápad, protože typickým použitím bashe je pouhé spojení vstupů a výstupů několika málo programů. Bash je pouze takové tkanivo, pomocí něhož se staví na již hotových komponentách.
Většinu těch komponent použitých v "klasických" init bash skriptech stejně admin zná a používá je i k jiným účelům. Na zjištění, které služby se startují v jakém pořadí mi poslouží příkaz ls nebo třeba komplexní program mc. Oba tyto programy mohu použít i k něčemu jinému. A typicky se právě používají k něčemu jinému a ne jen k výpisu pořadí startu služeb.
Logy si mohu prohlížet příkazem more, less, cat, nebo třeba mcedit. Opět, less, more nebo třeba cat neslouží pouze k tomu, aby se pomocí nic prohlížely logy. Jsou mnohem univerzálnější.
Editovat konfiguraci mohu pomocí nástrojů jako vim, emacs nebo třeba mcedit. Opět, tyto nástroje mi neslouží pouze pro konfiguraci initu, ale mohu s nimi editovat libovolný textový soubor nebo je mít nastavené jako komplexní programátorské prostředí.
Stejně tak pro takového admina není žádný problém si změnit jakýkoliv init skript. Je to jen bash a je to jen pospojování jemu známých nástrojů. Kterých není moc.
A tak dále.
Všechny tyto nástroje admin zná, denně je používá. Proto pro něj není žádnou překážkou něco nastavit změnou parametru v nějakém textovém souboru, proto pro něj není problém se podívat na obsah logů.
A patrně každý admin používá jiné nástroje. Někdo vim, někdo emacs, někdo nano, někdo třeba na grafickém terminálu sublime nebo kate. Ten systém nikoho nenutí používat nějaké konkrétní nástroje.
SystemD jde jinou cestou. Na prohlížení logů musím použít journalctl. Fajn, nemusím, pokud si nastavím přesměrování na syslog. Je to práce navíc a navíc musí běžet jakýsi démon. Proč to není naopak? Tedy, že journalctl by byl speciální program pro snadné čtení logů? Logy by byly v textových souborech jako dosud a pokud někdo chce použít journalctl, měl by tu možnost?
"A když to někdo pečlivě zváží"
Kdyby někdo pečlivě zvážil, projednal to v širokém plénu, napsal o tom rfc a nechal by ho schválit tak klidně. Nemám námitek. Potom by totiž mohlo vzniknout několik implementací tohoto standardu. A admin by si vybral, který chce, stejně jako například si vybírá FS (což může právě díky tomu, že všechny implementují stejný standard, což ovšem v žádném případě neznamená, že ty FS jsou stejné).
Zkušenosti s Lennartem jsou ale takové, že: rozbije, prosadí, nechá jinými opravit. Viz katastrofální zkušenosti s PulseAudiem, kdy se spousta věcí, co fungovala rozbila a potom se stav posunu o 20 let zpět. (S Alsou není problém samplerate 192kHz, PA až to určité verze měl problém s čímkoliv vyšším než s 44.1/48 defaultem. A to pouze na 16b. Návrat o 20let zpět. Ano, dneska už umí 96kHz/24b a lehce vyšší samplerate algoritmus, než je default. Fajn, už to není 20let, už je jen 5 let zpět.)
"připustit, že ten druhý se nad tím možná zamyslel lépe a na něco přišel?"
Nemám problém připustit, že se mýlím, nemám problém se zamyslet, že to někdo myslel lépe. Ještě jsem neviděl žádný příklad ze světa systemd, který by nebyl možný dřív. Není tam žádný přínos. Jen pokus o unifikaci. To za přínos nepovažuji.
"ale řekneme, že chceme, aby běžel web server. Ono je to jak pořád stejné, a je lepší to popsat jednou a pak už to jen používat, než to vymýšlet pořád znova."
Tohle jsem buď nepochopil já nebo ty. Já jsem si nevšiml, že by říkal, jak se to má stát. Prostě zadám: spusť db, spusť proxy, spusť webserver. Ať si to udělá jak chce. A můžu to "říct" stylem "pg_ctl start -D /data", "service postgresql start", nebo třeba "systemctl start pg.service". Je to úplně jedno, výsledek je stejný. Nevidím na tom nic k neustálému vymýšlení. On ten příkaz pg_ctl start -D /data stejně je ve všech případech někde ukrytý.
"Nevím, proč bych nemohl používat linux způsobem, jak chci já."
Klidně můžeš. Já vim, on, vi, ty pico. ;-) Každý má to své, co mu vyhovuje a co nejlépe odpovídá jeho problému, který tím řeší. Akorát nevím, proč jsem já a ostatní nucen používat zrovna systemd. Ono už to totiž není o tom, zda chci na linuxu používat systemd, to už je nutnost. Tato zrůdnost (podle mého názoru) prorostla do všech významných dister. Takže už to není GNU / Linux, už je to SystemD / Linux. Kdo nechce používat systemd, musí odejít pryč.
Toto je první věc za celou historii linuxu, kdy je něco nucené. Jinak si každý mohl používat fs jaký chtěl, editor jaký chtěl, shell jaký chtěl, webserver jaký chtěl. Se systemd to končí. Čím dál víc projektů na něm závisí.
Mě to nevadí ale mrzí. Já klidně přejdu na BSD, a život jde dál. Ale mrzí mě, že projekt, který vznikl z jisté filozofie FreeSoftware najednou končí takhle. Ale co, nic netrvá věčně, bylo to hezkých 12 let.
Problém je, že to tkanivo skriptů nedokáže kontrolovat stav služby. Dokáže ji jednorázově spustit, zastavit, zjistit stav. Ale nedokáže ji průběžně monitorovat, zjistit okamžitě, že skončila.
Abych zjistil, které služby se startují, tomu principiálně nic nebrání ani u Systemd (nevím, zda reálně nějaké symlinky vytváří, nikdy jsem takhle nepracoval se službami ani u jiných init systémů). V jakém se služby spouštějí pořadí, to je podle mne důsledek nedokonalosti init+rc - já nechci mít žádné pořadí spouštění služeb, já chci, aby se závislé služby spustily až po té, co mají splněné podmínky pro spuštění.
To, že někdo zná nějaké nástroje, neznamená, že jsou to nástroje vhodné na všechno. Je na to známý bonmot - pokud mát v ruce kladivo, všechno vám připadá jako hřebík. Za jeden z nejsnazších způsobů, jak něco s velkou námahou nevyřešit, považuju situaci, když člověk přestane řešit problém, a místo toho začne řešit, jak by mohl použít nástroje, které zrovna má.
Proč SystemD má speciální nástroj na logování? Protože logování je se správou služeb úzce provázané - SystemD není jediný doplněk/náhrada initu, který řeší i logování. Opět, někde se ještě dnes řeší logrotate, někde rotování logů snad vyžaduje restart příslušné služby - to mohlo být dobré v době svého vzniku, ale snad se shodneme alespoň na tom, že restartovat službu kvůli rotování logů je hloupost. Také u logování se to řešilo postupným vylepšováním - a SystemD se logicky snaží ta vylepšení také používat. Logy v nestrukturovaných textových souborech také nejsou žádná výhra. Vždycky mne fascinovalo, že nikomu nevadí, že se logy nezapisují tak, aby byly 100% strojově zpracovatelné. Takže se klidně může bez nějakého uvozování do logu zapsat znak, který je jinak oddělovačem - a ať si to pak někdo skládá jak chce.
Nevím, proč by se mělo projednávat v širokém plénu, zda si já chci nasadit na server SystemD. No a pokud jsou vývojáři se SystemD spokojeni a dokonce na něm udělají svůj projekt závislý, pokud jsou s ním spokojeni správci distribucí, asi to bude pro většinu lidí dobrý projekt. To přece není špatně. No a pokud chce někdo něco mít jinak, než ostatní, asi se o to bude muset postarat sám.
No a že by se ve světě OSS nejdříve psaly nějaké specifikace a standardy - myslím, že na to moc lidí z OSS nevěří. Používá se opačný přístup - nejdříve se napíše kód, ověří se, jak to funguje ve skutečnosti, upraví se to podle potřeb reálných uživatelů, a pak se z toho případně udělá dokumentované a závazné rozhraní. Na začátku taky Linux neměl spoustu souborových systémů, neměl podporu spousty architektur. Začalo se s jedním, a když se to vyzkoušelo, odladilo a osvědčilo, přidaly se další.
Vy nepoužijete nic z nových vlastností SystemD. To ale neznamená, že to nepoužije nikdo.
Příklad s web serverem - když chceš napsat spouštěč pro web server, musíš napsat skript, kterým popíšeš, jak se ten server spouští, jak se restartuje, jak se vypíná. Jeden se spouští přímo, další se odforkuje a někam zapíše PID, jeden se restartuje signálem, druhý speciálním programem...
Pokud se SystemD dostává do tolika distribucí, asi je dobrý a lidé jej chtějí, ne? Proč když je tak špatný a tolik lidí ho nenávidí, proč ty distribuce neforknou? Nemyslím si ani že by to bylo nucené, ani že by to bylo poprvé v historii linuxu, kdy se nová věc prosadí na úkor té staré.
"Ale nedokáže ji průběžně monitorovat, zjistit okamžitě, že skončila."
Tak pro mě za mě si tam dej: služba || echo "skončila jsem s chybou". Místo echo tam může být třeba příkaz na autodestrukci, když chceš.
Jinak bash je turingovsky úplný jazyk, takže v něm lze napsat totéž co v jakémkoliv jiném turingovsky úplném jazyku. Třeba i něco jako systemd. (Ne, že bych to někomu doporučoval, ale znám člověka, co v bashi naprogramoval podvojné účetnictví.)
"nevím, zda reálně nějaké symlinky vytváří, nikdy jsem takhle nepracoval se službami ani u jiných init systémů"
Aha...
Tak mě napadá, že stejně jako mnozí doporučují systemd "vyzkoušej a potom uvidíš" (systemd mám na debianu jessie od chvíle, kdy se debian rozhodl jej nasadit, protože se mu stejně nevyhnu v RHEL7), tak by možná tito lidé mohli vyzkoušet klasické ovládání unixového typu. Možná by byli překvapeni co všechno je možné udělat s minimem nástrojů a s jakou elegancí.
"Je na to známý bonmot - pokud mát v ruce kladivo, všechno vám připadá jako hřebík."
Tohle ale platí mnohem víc na systemd. Systemd musí dělat všechno, od initu, přes logování, po přihlašování uživatelů, nově je tam dokonce i dhcp server (k čemu proboha každý desktop musí obsahovat dhcp server?). SystemD se snaží být kladivo na všechny hřebíky světa.
"ale snad se shodneme alespoň na tom, že restartovat službu kvůli rotování logů je hloupost"
Ano, to je hloupost. Netuším, jak moc je tohle rozšířené, ale afaik by šlo udělat něco jako že logovací soubor je pojmenovaná pipe a na druhé straně by poslouchal nějaký program, který by ten stream logů ukládal a dělil. Čekal bych, že nějak takhle bude implementován journalctl démon.
"Vždycky mne fascinovalo, že nikomu nevadí, že se logy nezapisují tak, aby byly 100% strojově zpracovatelné."
Proč tě to fascinovalo a proč by logy měly být 100% strojově čitelné? Drtivá většina logů se nikdy nečte, prostě se po určité době smažou. Možná je to dokonce tak, že většina logů se ani nikdy nezapíše (různé embeded systémy s readonly flashkou a logování do ramdisku). Proč za tohoto stavu klást ještě další nároky na logovací systém?
Mě v poslední době přijde čím dál větší tlak na logování a uchovávání všeho co jde. Samozřejmně, různé komerční firmy na tom můžou dobře vydělat, je to oblast "big data" apod. Ale soudný admin (podle mého názoru) by měl těmto tlakům čelit. Nevidím důvod, proč bych měl uchovávat xTB logů. Pro provoz systému je nepotřebuju, tak do /dev/null s nima.
"Pokud se SystemD dostává do tolika distribucí, asi je dobrý a lidé jej chtějí, ne?"
Aneb miliony lidí se nemou mýlit co? Argument počtem bych tu fakt nečekal.
To je fakt marný. Ano, v Bashi jde napsat cokoli. Kdyby měl SystemD stejné vlastnosti jako dnes, ale byl napsaný v Bashi, bylo by to v pořádku, byl bys s ním spokojen? Vůbec nejde o to, v čem je to napsané, ale jaké služby to poskytuje. Kdybych chtěl mít ty služby SystemD, musel bych je dobastlit do každého z těch startovacích skriptů. Není jednodušší, když se to udělá jednou a dá se to k dispozici ostatním?
Nevím, proč bych měl služby vypisovat ls
, a které běží zjišťovat nejspíš nějakým šíleným ps
a grep
em, když můžu napsat rc-status
a vidím seznam služeb v jednotlivých runlevelech včetně aktuálního stavu. Nemyslím si, že "klasické ovládání unixového typu" znamená "použít co nejvíc GNU utilit najednou".
Od kdy přítomnost DHCP serveru v projektu SystemD znamená, že DHCP server musí mít každý desktop? Copak to je povinná funkce, která nejde vypnout? To už těžko můžu chápat jako nedorozumění, to je prostě FUD.
Logy by měly být strojově čitelné proto, aby bylo možné je dál zpracovat - vytvořit z nich statistiku, něco v nich vyhledat... Ono nemusí jít jen o strojové zpracování, i člověka může špatné zalomení řádku zmást. To, že má být z logu jasné, co je jaký údaj, mi připadá jako samozřejmost, ne jako "další nárok". A třeba přidat přes pár znaků zpětné lomítko mi nepřipadá jako tak složitý úkol.
Miliony lidí se mohou mýlit. Ale pokud si miliony lidí myslí, že je pro ně něco dobré, nevím, proč ti tak záleží na tom přesvědčit je, že to pro ně dobré není. A když už je o tom chceš přesvědčovat, budou potřeba pádnější argumenty, než "já tohle nepotřebuju".
Doporučil bych panu Jirsákovi i panu Crhonkovi nainstalování následujícího doplňku: https://addons.mozilla.org/cs/firefox/addon/commentblocker/
A zbytek léta pak strávit čtením: https://twitter.com/AvoidComments
"To je fakt marný."
Je
"nějakým šíleným ps a grep em"
Jestli je ps a grep šílený, tak je to fakt marný. Na druhou stranu se tím vysvětluje spousta tvých komentářů v této diskusi. To myslím bez jakýchkoliv postraních úmyslů. Dodnes by mě nenapadalo, že nějaký správce linuxových systémů může považovat výpis procesů a filtr za šílený.
"Copak to je povinná funkce, která nejde vypnout? To už těžko můžu chápat jako nedorozumění, to je prostě FUD."
Zatím se systemd instaluje jako celek. Nelze nainstaloval systemd bez journalctl. Nebo jen journalctl samotný bez zbytku. Tedy v aktuální verzi systemd má dotyčný admin i dhcp server. Není to FUD, je to fakt. Ten dhcp server naštěstí není default zapnutý, ale (v takovém případě) proč tam vůbec je? Je zvykem instalovat pouze to, co je potřeba. Což platí o to víc pro systémové služby.
Jinak logy tady nejsou od toho, aby se z nich dělala statistika. Bohužel jsou někdy ke statistice zneužívány, bohužel jsou zneužívány i k jiným činnostem.
Šíleným ps
a grep
em jsem nemyslel samotné ty dva programy, ale jejich poskládání tak, abych se dozvěděl, které služby právě běží.
SystemD nelze zkompilovat bez podpory DHCP serveru?
Mimochodem, když se vše tak snadno zařídí pomocí krátký skriptů v shellu, jak se tedy zařídí třeba klasický start webového serveru v nějakém skriptovacím jazyce, třeba Pythonu? Server běží normálně na popředí, informace vypisuje na standardní výstup a chyby na chybový výstup, má běžet pod uživatele a skupinou web:web
, naslouchat má na portu 80. To že by měl nastartovat až po spuštění sítě, měl by být zařazený v nějaké cgroup
a měl by být kontrolovaný rodičovským procesem, to zatím ponecháme stranou, to není nutnost.
U obyčejného multihostingu se nepouští pro každý virtuál zvláštní kompletní instance webového serveru. Pokud to zapotřebí je, použije se virtualizace. Problém solved.
"Jinak je pozoruhodné, že tady někdo řeší SystemD jako zbytečně složitou věc..."
Já tady ohledně systemd řeším něco úplně jiného. Už jsem to tady psal a nebudu se pořád opakovat. A BTW ano, z původního nápadu pro jednoduchý supervising služeb se stává složitý binární moloch, který toho do sebe integruje čím dál víc, prorůstá všude pomalu jako rakovina, neřeší nic, co by už řešit nešlo dříve, a jehož autoři spolu s uctívači kritiky nazvou hatery, aniž by se nad tou kritikou alespoň zamysleli. Možná by si měli vzít příklad z Microsoftu, ten kupodivu začal naslouchat.
Nepouští proč? Protože je to moc složité? Nebo protože jiné řešení je lepší? Mně tedy varianta, že každý server běží pod svým uživatelem a se svými limity připadá logická, naopak varianta „nacpeme všechny uživatele do jednoho serverového procesu“ mi připadá jako hack. Virtualizace je zase v mnoha případech kanón na vrabce.
Nepouští proto, protože to není zapotřebí. Jinak viz dokumentace. Řešit něco takového initem asi není dost dobře možné, protože nevím, jak chcete zaručit načtení správné konfigurace, kterou každý SW řeší po svém. Nehledě na to, že každá instance si natahá do paměti opakovaně všechny moduly.
"naopak varianta „nacpeme všechny uživatele do jednoho serverového procesu“ mi připadá jako hack"
Každý uživatel je obsluhován vlastním subprocesem. Zjistěte si, jak funguje např. Apache.
Jak tedy to řešení s Apache a subprocesy zařídí, aby nic z web serveru neběželo pod rootem, a zároveň aby jednotlivé weby byly z hlediska práv oddělené na úrovni operačního systému, tj. aby každý web (IP adresa nebo virtualhost) běžel pod samostatným uživatelem?
Jinak to, že nějak funguje Apache, neznamená, že je to nejlepší řešení.
"SystemD nelze zkompilovat bez podpory DHCP serveru?"
No to si snad děláte srandu. Takže já, abych si nezasíral systém naprosto zbytečnými ptákovinami, které jsou dobré akorát tak na to, aby byl kód složitější a zaneslo se více chyb, tak budu rekompilovat stupidní systemd. Hele co takhle celý linux udělat jako jeden blob? Když něco nebudu chtít, tak si to překompiluju.
Bohužel, sranda to není, vývojáři systemd vážně hodlají přepsat úplně všechno co dřív bylo modulárně řešeno jinými projekty - viz např. release notes od verze 215:
systemd-networkd learnt minimal DHCPv4 server support in addition to the existing DHCPv4 client support. It also learnt DHCPv6 client and IPv6 Router Solicitation client support. The DHCPv4 client gained support for static routes passed in from the server.
Monitoring sluzby specificky nastaveny, ktery muze ale nemusi podle nastavenych parametru predmetnou sluzbu restartovat. Spolehat se na unifikovane obecne reseni, navic znacne omezene co do pokryti moznych situaci je zcestne a ani se v me znamych serioznich projektech nikde na nej nespoleha.
Čemu to vadí, že vedle OpenRC a UpStartu existuje ještě Systemd? Zvlášť když má pěkné vlastnosti, které umožňují řešit věci, které se do teď jen hackovaly?
Deklarativní konfigurace a Bash nejdou moc dohromady. Buď to pořád spouštíte Bashem, což je jednak overhead, jednak tam kdokoli může zavést nějaký kód, a zdání deklarativnosti je pryč. Nebo to interpretujete po svém, pak už to ale není Bash, a syntaxe podobná Bashi je naopak matoucí (protože si někdo bude myslet, že to Bash je, a bude se divit, proč mu tam něco nefunguje).
Vadí mi to, že s politikou systemd už za chvíli nebudeme mít žádnou jinou možnost. Systemd totiž není zdaleka jen init systém, pohlcuje do sebe spousty více či méně nesouvisejících věcí, které dříve fungovaly samostatně. Nicméně to už tu bylo řečeno snad milionkrát.
Může tam zavést nějaký kód… no a co? To je naopak výhoda. Prostě v reálném světě potřebuješ řešit i nějaké krajní případy, které ti žádná deklarativní konfigurace nevyřeší. A pokud ano, tak řádově složitěji než když napíšeš pár řádek skriptu.
Monitoring sluzeb tu fungoval a funguje bez ohledu na systemd a pouha kontrola beziciho procesu je _nedostatecna_, protoze negarantuje funkcnost sluzby.
Problem zavislosti mezi sluzbami je vykonstruovany a spis v hypoteticke rovine, protoze pokud uz nekdo nastavuje server tak presne vi co musi bezet a podle toho upravi jejich spousteni. Zase mi to tu zavani embedded bezstavovymi zarizenimi, kde se jakykoli problem resi restartem.
Já jsem ale opravdu nikde nenapsal ani nenaznačil, že by snad kontrola běžícího procesu řešila všechny problémy. Celou dobu píšu jenom o tom, že pokud správce služeb dostane pokyn "zajisti běh serveru", má prostě zařídit, aby ten proces běžel - a když se z jakéhokoli důvodu ukončí, pustit jej znova. Mimochodem, "kontrola běžícího procesu" jste napsal správně - ono nejde jen o to zařídit, aby ten proces běžel, ale opravdu nad ním mít plnou kontrolu. Ono se pak i mnoho věcí dělá mnohem snáz - třeba jen taková prkotina jako restart té služby (na pokyn administrátora). Když má správce služeb ten proces pod kontrolou, zjistí, kdy se proces ukončil a je možné jej nastartovat znova.
Problém se závislostmi není hypotetický - třeba síťový server nemá smysl startovat dřív, než je nakonfigurovaná síť. Často je nejjednodušší nastartovat webový server až po té, co je možné se připojit k databázovému serveru.
"Celou dobu píšu jenom o tom, že pokud správce služeb dostane pokyn "zajisti běh serveru", má prostě zařídit, aby ten proces běžel - a když se z jakéhokoli důvodu ukončí, pustit jej znova. "
Co je tohle s prominutím za kravinu? Tím, že se ten proces bude donekonečna restartovat se jeho běh _nezajistí_. To, že neběží má nějakou příčinu (kdyby tam příčina nebyla, tak by ten proces nespadl), tu je nutné odstranit a potom je možné ten proces znovu spustit. Ten proces poběží mnohem spolehlivěji, když mu admin zařídí správné podmínky pro běh.
Ten proces se nerestartuje donekonečna. Příčina, která způsobila pád procesu, vůbec nemusí znamenat, že ten proces nepůjde nastartovat a nebude spokojeně běžet dalších několik let. Příkladů, kdy něco takového může nastat, už tady bylo napsáno dost. Správné podmínky pro běh admin zpravidla zajistí před prvním spuštěním toho procesu. Vzhledem k tomu, že ne úplně špatně napsaný program si ty podmínky při startu ověří, je navíc jisté, že restartem toho procesu se nic nepokazí. Mimochodem, ani sebelíp nastavené podmínky nezajistí, že ten proces nehavaruje.
„Problem zavislosti mezi sluzbami je vykonstruovany a spis v hypoteticke rovine...“
Ty Kurde, tak tohle bych si nedovolil vyslovit ani jako laik.
„...protoze pokud uz nekdo nastavuje server tak presne vi co musi bezet a podle toho upravi jejich spousteni.“
To přece neznamená, že to nemůže být řešeno automaticky, koncepčně a jednoznačně deklarací závislostí. Je snad administrátor větší borec, když to umí seřadit ručně jako opička?
„Zase mi to tu zavani embedded bezstavovymi zarizenimi, kde se jakykoli problem resi restartem.“
Má snad být nevýhodou, že systém zvládne sám po startu správně pospouštět služby? Je k tomu opravdu ta ruční práce nutná?
Aby bylo jasno: Snažím se jako laik z této diskuse dozvědět, zda je systemd krokem vpřed či ne, ale nějak to kurva nemůžu zjistit. Trochu mi to připomíná spor příznivců IPv4 a IPv6.
Já bych řekl, že to máš jako se starým a novým autem. Takové staré auto bylo v podstatě relativně jednoduchá věc, mohl jsi mu dokonale rozumět a spoustu věcí sis mohl sám opravit. V těch nových je to často samý "black box", kde bez servisu a bez propojení s jejich diagnostickým softwarem s tím často nehneš. No a teď co je lepší? Někdo chce holt jednoduché věci, kterým má šanci plně rozumět a které se snáze opravují, někdo zase chce ty pěkné a komplexní vlastnosti.
Já bych to viděl na přirovnání mezi fyzikou a chemií.
Chemie je zvyklá na to, že má 118 prvků, každá skupina prvků má jiné uspořádání elektronů v poslední vrstvě, různé typy vazeb mezi prvky a celkový počet kombinací je astronomický (afaik dodnes nejsme schopni modelovat molekuly o více než několik málo desítek atomů, za což ostatně byla udělena nobelova cena).
Fyzika je naopak posedlá hledáním jedné, pokud možno krátké, rovnice, kterou by se vyřešelo všechno. Částicová fyzika aktuálně pracuje s relativně malým počet částic (tři generace leptonů, tři generace kvarků, intermediální bosony, higsův boson -- resp. příslušná pole), které maji vlastnosti typu +1 a -1. Některým se i tohle zdá přiliš složité, a přicházejí s jedním základním stavebním kamenem, který má několik málo diskrétních vlastností (superstruny).
Stejně jako IT. Pomocí 0 a 1 uděláte cokoliv. Každý logický obvod postavíte pomocí jednoho typu hradla (NAND). Stačí vám 3 prvky: dvě úrovně signálu a jedna "součástka" a uděláte cokoliv.
Stejně tak unixový přístup. Minimalizace počtu komponent (dokonalé není to, kam nelze nic přidat, ale to, odkud nelze nic odebrat), ze kterých postavíte cokoliv.
Mě osobně je bližší klasický unixový přístup a asi nepřekvapí, že moje formální akademické vzdělání je právě z oblasti fyziky.
System sam zvladne leda kulovy, system sam vi taky leda kulovy o tom, jestli sluzba uz bezi. Tak maximale vi, ze bezi proces, ale vi lautr howno o tom, zda uz poskytne nebo neposkytne pozadovany vystup, coz je presne to, co zajima admina. Pokud trebas startuju aplikacni server, potrebuju aby uz bezela databaze, bezici proces je mi k hownu, kdyz se server k databazi jeste 10 minut nepripoji ...
Tudiz to admin ve 100% pripadu musi nejak osetrit a to nejak = napsati si na to script. Script, kterej si trebas hrabne na tu databazi, a kdyz nic, tak pocka. No a s binarnim blobem ma hned problem ... problem kterej by nemel se scriptama.
Tohle může řešit socket activation, protože i když ta databáze zatím pouze startuje, už je schopna přijmout požadavky (jen si klient bude muset chvíli počkat).
Jiným řešením je, že ten daemon/program přechází na pozadí až poté, co je plně spuštěn. Systemd považuje službu typu forking za spuštěnou až ve chvíli, kdy daemon přejde na pozadí.
Další možností je, že služna je typu notify a sama systemd upozorní, až bude schopna plnit požadavky.
Cece ... databaze muze klidne startovat desiky minut, chci videt appku, ktera mezitim minimalne nevytimeoutuje, ale 50% z nich se rovnou zhrouti s tim, ze jaksi neni proc bezet, kdyz neni databaze.
A DB jako takova mluze kldine i bezet, presto neposkytne data, ktera aplikace potrebuje, protoze bezi nejaky check uvnitr databaze, ktery to nedovoli. Pritom jina databaze obsluhovana stejnou sluzbou muze klidne byt dostupna ...
Systemd je v tomhle ohledu naprosto nanic. A takovych situaci je drtiva vetsina, protoze adminovi vazne nestaci, ze neco bezi. To je informace naprd.
Hmm.. porad mi to pripada jako zbytecna komplikace, ktera jde resit dosavadnimi nastroji a navic zavadi dalsi nekompatibilitu.
Nekdo by musel pro ty daemony dopsat zasilani notifikaci (jinymi slovy ohybat upstream kvuli jednomu initu ktery bezi jen na linuxu). Pokud by to resil nejakym wrapperem, tak jsme tam kde jsme byli - u hackovani ktere se da obdobne resit obycejnym shell scriptem.
Dotaz: jak resi systemd kdyz ve stanovenem timeoutu neprijde oznameni READY ? Napr. si pro webovou aplikaci napisete zavislost apache na mysql a redisu a jedna z nich tu notifikaci nevrati. A jak poresite podminku zaslani zpravy READY, aby http server vratil ocekavany obsah z <url serveru>/check ?
Pokud ve stanoveném timeoutu nepříjde READY, pak se to považuje za selhání a služba je ukončena.
U té poslední otázky si nejsem jistý, jak ji mám chápat. Na svém stroji, který používám pro vývoj, mám mysql nastavenu na socket activation. Když aplikační server potřebuje mysql, tak se prostě spojí s daným socketem a systemd spustí mysql. Aplikační server tedy mysql jako závislost přímo nemá.
Pokud bych chtěl, aby se aplikační server spouštěl až po spuštění mysql, tak bych to udělal prostě úpravou závislostí.
Jinak já se nezabývám správou serverů a nebudu tu správcům říkat, jak je mají spravovat. Pouze zde reaguji na některé nepřesnosti.
Ukončena ?! Nebude se ani pokoušet tu závislou službu restartovat ? To nezní moc uspokojivě :(
Webová aplikace která běží na http serveru a tahá data z SQL databáze (např. LAMP) je jedno z nejběžnějších nasazení. Bez funkční komunikace s databází je nepoužitelná a jak tohle lépe řeší systemd než stávající řešení zatím nikdo nevysvětlil. Mimochodem pro každý server bývá vyhrazený samostatný stroj. Doufám že sd_notify je síťově transparentní ač to podle deklarace nevypadá a nefunguje jen lokálně.
Jinak já se nezabývám správou serverů a nebudu tu správcům říkat, jak je mají spravovat.
Njn, to bude asi ten problém.
Ukončena?! Nebude se ani pokoušet tu závislou službu restartovat?
Pokud je tak nastaven, tak se ji pokusí restartovat.
Mimochodem pro každý server bývá vyhrazený samostatný stroj.
Ono to snad ale v reálu nechodí tak, že by stroj s aplikačním serverem posílal požadavek na jiný stroj, ať spustí databázi, ne?
Njn, to bude asi ten problém.
Ne, to problém nebude. Protože já tu správcům neříkám, jak mají své systémy spravovat.
Aha, tak že ta celá debata výš o hlídání závislostí mezi službami byla o ničem. Systemd to umí jen lokálně (podobně jako lze u stávajících systémů) a pro běžné serverové nasazení se to musí stejně řešit jako dosud. Kde je pak ten přínos, když umí prakticky to samé jen po svém navíc zbytečně komplikoavaně ?
Ne, to problém nebude. Protože já tu správcům neříkám, jak mají své systémy spravovat.
To jsem netvrdil. Jen mi přijde že obhájcům systemd jde jen o os pro virtuální stroje, vestavěná zařízení max. domácí desktop a nedomyšlenosti pro jiné použití jako klasické servery jsou jim u zadele. Ztráta univerzálnosti a přenositelnosti má svoji cenu, i když si to kdekdo nechce připustit.
Resi se to uplne jednoduse a zcela bezne ... do init scriptu si napisu nejaky check, kterym si hrabnu na server, po kterem chci, aby mi bezel, nez spustim to co potrebuju. Tedy napriklad si hrabnu do cilove databaze, a pokud mi to vrati vysledek, spustim aplikacni server.
Jak tohle napisu do konfigurace systemd? Systemd uz integroval rozhrani do myslq/mssql/oracle/... s desitek dalsich databazi? Aha, to abych zas vymejslel narovnavak na vohejbak ... a psal si nejspis nejaky servis, ktere zjisti co potrebuju ... takze na to, co v init scriptu napisu na par radku, abych napsal aspon par tisic radku kodu ... lol.
Nejsem administrátor, ale tohle bych řešil asi takto: Udělám service typu oneshot. Do ExecStart dám příkaz mysql, který bude mít za úkol spojit se se vzdálenou databází. Přidám tam RequiredBy na aplikační server, takže aplikační server bude záviset na vzdálené databázi, aniž bych musel upravovat service file aplikačního serveru. Jo a ještě do té service přidám, že před spuštěním musí být už ten lokální stroj online. Tolik k těm tvým tisícům řádků kódu.
Pak bych považoval za koncepční řešení, že binárka, která má být spuštěna jako služba, povinně implementuje API (a k tomu vlastní vnitřek s vlastní zodpovědností), které hlásí „už jsem dostupná“, aniž by se to muselo dobastlovat zvenku, neboli se jedná o koncepční součást dané služby.
„...protoze pokud uz nekdo nastavuje server tak presne vi co musi bezet a podle toho upravi jejich spousteni.“
To přece neznamená, že to nemůže být řešeno automaticky, koncepčně a jednoznačně deklarací závislostí. Je snad administrátor větší borec, když to umí seřadit ručně jako opička?
To nemá s automatickým řešením IMHO nic společnýho. I se SysV initem ti buď správce distribučního balíčku nastaví spuštění rc skriptu ve správném pořadí, pokud služba pro svůj běh nutně nevyžaduje jinou. Jinak si to stejně musíš nadefinovat sám, protože nikdo nemůže vědět co pro konkrétní nasazení má běžet (jak závisí Apache na MySQL ?). Platí pro systemd i sysv init. Jedinej rozdíl je forma. systemd používá deklarativní zápis s omezenou sadou voleb, sysv používá seřazené linky na rc skripty. Zase někdo znovu objevuje kolo.
Az na to, ze systemd pouziva neomezenou sadu voleb, protoze nikdo nevi, jake volby pribudou s pristim patchem, jake pripadne ubudou a jake zmeni chovani .... a tak jako tak 100% podobnych systemu driv nebo pozdejs skonci u toho, ze implementuje nejaky scriptovaci jazyk. A vysledek bude, ze tu budou hromady scriptu pro ruzny ucely stejne jako ted, a jako bonus pod tim pobezi jeste obrovskej binarni blob.
Realne systemd neprinasi absolutne nic, ale hromady veci rozbiji naprosto k nepouzitelnosti.
A tohle je myslím ještě docela pěkný příklad – univerzální runscript pro php-fpm pool vč. podpory chroot: https://github.com/jirutka/ansible-role-php-fpm/blob/master/files/runscript. Pro další „pooly“ (mám pro každý samostatný master proces) jen nasymlinkuju tento jeden runscript – jméno souboru určuje název poolu, jeho konfiguraci atd. Když potřebuju, můžu si v /etc/conf.d vytvořit stejnojmenný soubor, ve kterém jen předefinuju potřebné proměnné. Stejně tak tam můžu předefinovat závislosti (depend()) dané instance.
Co se snažím na tom všem ukázat je to, že init skripty v OpenRC mohou být zároveň až primitivně jednoduché (deklarativní konfigurace, convention over configuration) a zároveň velmi flexibilní a mocné (tj. umožňující řešit i různé krajní případy). Přitom nepotřebuje nic složitého, žádnou novou syntaxi, je to pořád jednoduchý Bash, který se chová jako Bash, který všichni známe, jen s pár konvencemi co do pojmenování proměnných a funkcí.
A co stojí za tím? 10k LoC v C99, ~3k LoC Posix SH (viz https://lists.debian.org/debian-devel/2012/04/msg00547.html). A mimochodem to není Linux-only řešení, funguje i na *BSD.
Neberte to jen jako agitku pro OpenRC, spíš jsem chtěl ukázat, že se to dá řešit i jinak a že init skripty v Bashi nemusí být jen kupa boilerplate.
> Neberte to jen jako agitku pro OpenRC,
Jste bohužel jen jeden z mála konstruktivních v této diskuzi... :). Díky za to.
> spíš jsem chtěl ukázat, že se to dá řešit i jinak a že init skripty v Bashi nemusí být jen kupa boilerplate.
To každopádně - nicméně tam bohužel pořád chybí ta supervize (zvlášť u toho php5:). Osobně by se mi líbilo, kdyby non-Linux Debian platformy přešly ze sysvrc shell skriptů na OpenRC, ale tak nějak se mi zdá, že se do toho opět nikdo nehrne... A samo se to bohužel neudělá.
Souhlasím, že ta supervize by se občas hodila. Jen jsem po ní zatím neměl takovou potřebu, abych ji do OpenRC sám doimplementoval a zdá se, že ani další lidé… Nicméně OpenRC poskytuje funkcionality na zjištění stavu služby, zda běží či spadla. Doplnit k tomu jednoduchou supervizi by tedy IMHO neměl být takový problém.
Dále drtivá většina init skriptů v Gentoo používá pro vlastní spuštění démona "run-script-daemon" (mj. řeší třeba přepnutí uživatele, vytvoření pidfile, pokud to neudělá sám démon, uzavření do chroot atd.) To nám dává prostor k tomu, aby tento místo přímého spuštění daného programu např. spustil supervisor a ten až daný program. Mít trochu času, tak se na to podívám už jen proto, abych vzal zastáncům systemd jeden argument z ruky (imho jediný relevantní, ta funkcionalita tam fakticky není a existují reálné případy, kdy se hodí). :)
Jinak já se PHP vyhýbám velkým obloukem, tohle mám jen pro Roundcube na svém osobním serveru, takže jsem pády PHP moc neřešil.
Supervize procesů na popředí v OpenRC by každopádně byla dobrá věc (bez ohledu na systemd).
Myslím, že tím posledním odstavcem jste pěkně popsal situaci, která tady je. Každý řeší jen to, co ho doopravdy pálí :).
Trochu off-topic: Jako praktické cvičení by mě docela zajímalo, jestli by se postfixový a cyrus-imapový supervizor nedal nahradit obecným systémovým supervizorem se socket-activation :).
FYI: Napsal jsem dotaz na https://github.com/OpenRC/openrc/issues/22 a dostal jsem reakci, že už se na tom pracuje. :) https://bugs.gentoo.org/show_bug.cgi?id=501364
Predevsim textovej soubor dekryptujes i v pripade, ze je z nejakyho duvodu poskozenej. S binarnim blobem neudelas nic. Kolikrat ja jen spravoval vsechno mozny ... trebas i na widlich ... a to vse jen proto, ze to proste byl jen text, takze stim nebyl zadnej problem.
Dtto scripty vs binarni blob ... v tech nekolika malo pripadech, kdy sem narazil na to, ze script nefungoval ... sem si behem par minut napsal svuj, sice zcela neuniverzalni ... ale zcela fukcni.
Mimochodem, vazne nechapu, k cemu mi bude binarni log na stroji, kde neco (a dost pravdepocobne vubec nic) nefunguje. S normalnim textovym logem mi staci ten nejpriminitvnejsi nastroj dostupny doslova naprosto kdekoli.
Mám hnidopišský příspěvek netýkající se obsahu, ale nemůžu si pomoct. Rád bych autora upozornil na velké množství pravopisných chyb, kvůli kterým jsem článek vůbec nedočetl, protože jsem se v něm ztratil.
Zejména mám na mysli interpunkci (větné čárky), která je zde skutečně mizerná. Jednoduchý příklad hned ze začátku: proč je čárka ve větě "Jednoduchost zmizela, kdesi v propadlišti jeho vývoje a s každou novou vlastností naštve další okruh lidí." ? Čárky nejsou jen nástrojem buzerace žáků a studentů, ale mají velký význam pro čitelnost textu - pokud jsou správně používány. V opačném případě se snadno ztrácí kontinuita a článek přestává být zajímavý.
Podobný efekt mohou mít i jiné chyby, třeba ve shodě podmětu s přísudkem (viz např. "aby mu vyšli binárně stejné balíčky"). Člověk pak hledá, k jakému podmětu/předmětu se sloveso pojí, a než zjistí, že se jedná o chybu, ztratí kontinuitu.
Prosím autora, aby si to nebral osobně. Jedná se jen o doporučení, na co si též dávat pozor - protože k dobrému článku patří i dobrá čeština. Přeji mnoho úspěchů!
Musím se trochu zastat autora. Taky píšu články a taky se občas v mých textech takové chyby objeví. Když člověk přemýšlí, přepisuje atd., tak tam občas zůstávají podobné artefakty. A když nad tím textem sedíte x hodin, tak už prostě trpíte autorskou slepotou a tyto věci nevidíte. V tomto momentě má nastoupit jazyková korektura, kdy si k tomu sedne někdo čerstvý, který ovládá češtinu a čte ten text poprvé.
Bohužel v dnešní době, kdy se rozpočty na redakce krátí a krátí, je jazykový korektor nebo editor to první, co se škrtá. Děje se to v mnohem větším redakcích než root.cz.
OpenRC funguje, jenze ... systemd je jako mor kombinovanej s chripkou. Co je ti platny openrc, kdyz potrebujes udev a ten uz magori kolem systemd mrvit zacli. A muzem samo pokracovat, dalsi pripady jsou zmineny i tady kolem. Zachvilu bez systemd nezalozis usera, nespustis gui ...
Mno aspon se to bude dobre hackovat, takovej binarni blob bude mit der jak nasrano, rozlezly to bude vsude ... a vsude budou ty diry pekne unifikovany ... takze misto abys vymejslel postup pro ten kterej konkretni system ... proste aplikujes script ...a miliarda stroju je tvych.
Uniklo ti to, ze ... usera budes mit ulozenyho ve skutecnosti nejspis nekde ve var/lib/.. a useradd bude jen jakejsi alias ... a v /etc/.. bude jen view z duvodu kompatibility = nez ostatni prifarej ke svym apps systemd.
Takze az se ti neco podela, budes muset editova nejakej binarni blob. Bez toho ti system nenastartuje.
A samo, muzes (zatim) tenhle virus drzet za hranici svyho firewallu, otazka je jak dlouho.
se pak nekolika temer az nenavistnych reakci... (podobne jako v pripade kritiky Androidu a jeho zravosti ohledne resourcu atd.).
Jsem rad, ze doslo na ma slova a ze si uz konecne vetsina zacina uvedomovat, ze systemd byl krok spatnym smerem. SysV se mel spise chytre inovovat,hlavne smerem k rychlosti, ale ne ho vyhazovat do staryho zeleza. Napada mne primer, ze je to neco jako zbourat Vaclavak, protoze byl postavenej v 19. stoleti a udelat tam z toho velkej hypermarket :(
Eh. Aniž bych měl vhled do dané problematiky, článek mi rychle dal najevo, že tady se nic nedovím. Emoce a subjektivita, ale informace či argumenty minimální. Bulvár jako vystřížený - nebo spíš hospodské blábolení nějakého extrémisty-mudrce? Vždyť to ani jazykově ani stylisticky nemá hlavu ani patu - elementární jazykové chyby, neúplné věty, nesouvislé myšlenky... To už root.cz nemá ani základní jazykovou korekturu?
Hledal jsem linuxovou alternativu na domácí počítač místo winxp. Gentoo je super na server ale na desktop na to prostě nemám sílů. Tak jsem zkusil pár distribucí (kubuntu, arch, manjaro,...) a zjistil jsem že jsem prostě starej. Všechny ty systémy jsou natolik jiný než na co jsem zvyklý, že se je musím učit znova. Proč? Evoluce? Třeba je systemd lepší... ale já jsem prostě líný to řešit.
Tak holt příští počítač domů bude s win7. Protože je to jednoduchý.
Pro uživatele spočívá rozdíl hlavně v té Start screen. Když ji přeplácnete na staré Start menu nějakým freewarem, změny mezi Win7 a Win8 jsou pro uživatele minimální. Pokud stroj nemá dotekové ovládání, a uživatelé nedovedou pobrat že Start Menu vyrostlo na celou obrazovku ("wow, všechno je to úplně jinak, i když na ikonu klikám úplně stejně!"), můžete to takhle snadno vyřešit.
Jo jo. Kdyz se neco chci naucit, tak proto, ze mi to da novou funkcionalitu. Tyhle situace mi silne nevyhovujou. Zvladnul jsem lilo, prisel grub. Ok, bylo to zamenne, postupem casu jsem zustal na grubu. Pak se reklo, ze je to dal neudrzitelne, grub 2.0, a clovek nestastne kouka na samostatny init.d system, kde se edituje az treti radka a zobrazit logo lze tisici zpusoby, ale radsi se na to vykasles, nez abys jeden zjistoval. Ok, bylo to uz neudrzitelne, tak jsme zaplatili komplexnosti.
Co je tohle? Koukal jsem na duvody debianu, proc to implementovat - 'v budoucnosti by od nas odchazeli uzivatele, kteri jsou na to uz zvykli'. Duvody ubuntu - 'zavadi to nase matka - debian'.
Myslim, ze to taky muze skoncit tim, ze odriznou lidi, ktery tomu rozumeji a pouzivaji to, pak zbydou jen BFU a tym, ktery tohle vsechno zavedl, po case odehnije - jako se to vzdycky stava (xorg,staroffice....) a bude vymalovano, budeme pouzivat 7 pionyru.
Upřímně moc nechápu, proč je okolo tohoto tématu tak mocná diskuse. Systemd spouští deamony, což je celkem triviální práce. Co je potřeba?
- Definovat jednotné rozhraní pro služby - start(), stop(), suspent(), resume(), případně nějakou rozšiřitelnost a callback pro případ změny stavu (servis se zastavil).
- Definovat způsob registrace servisů (executable, parameters, dependencies) a způsob startu (automatic, delayed, manual), případně recovery action (start again, run script)
- Vytvořit k tomu API, které umožní zjistit seznam servisů, zjistit jejich stav, provést na službě metody (start/stop/...), založit servis a odstranit ho.
- Zajistit inicializaci služeb při startu. Klidně s volbou pro paralelní/sériový start.
- Napsat nějaké GUI, s tím že další GUI za použití veřejných API se dá napsat kdokoliv později.
Asi to není job na jeden víkend, ale pořád mi to přijde celkem jednoduché.
Tak mocná diskuze je kolem toho přesně proto, že tuhle jednoduchou věc řeší neuvěřitelně složitým způsobem na 500 000 řádkách kódu (http://jdem.cz/bhu8f6)… a k tomu dalších milion věcí, který s init systémem vůbec nesouvisí (logování, device manager atd).
Přitom už tu dávno máme pokročilé, ale stále jednoduché init systémy, které tohle všechno umí (tedy krom recovery). Například OpenRC (ano, i paralelní start a ne, nejsou to „jen“ shell skripty, umí i zcela deklarativní konfiguraci).
Přitom na NT to funguje zcela bez problému, a v Sunu udělali něco dost podobného.
http://docs.oracle.com/cd/E26502_01/html/E29003/hbrunlevels-25516.htm
Tak nějak nevím, kde Phoronix vzal 500k, ohloh.net dává něco okolo 270k: http://www.ohloh.net/p/systemd a výstup cloc nad aktuální master branchí taky dává mnohem nižší číslo:
systemd (master)$ cloc .
1510 text files.
1394 unique files.
454 files ignored.
http://cloc.sourceforge.net v 1.60 T=4.27 s (233.3 files/s, 78173.6 lines/s)
--------------------------------------------------------------------------------
Language files blank comment code
--------------------------------------------------------------------------------
C 482 53214 17237 177381
XML 184 6708 2494 37068
C/C++ Header 282 5275 6136 11775
make 8 1455 306 5820
m4 6 225 44 2223
Perl 3 107 35 1754
Bourne Again Shell 4 170 214 1016
Python 10 321 553 774
HTML 2 91 3 467
Bourne Shell 8 80 62 354
XSLT 2 32 33 183
CSS 1 42 3 151
Javascript 3 31 6 148
YAML 1 0 0 14
Lisp 1 1 3 3
--------------------------------------------------------------------------------
SUM: 997 67752 27129 239131
--------------------------------------------------------------------------------
Dobře, sice mi teď připadá, že kdo chce psa bít, ...
Stejně tady sem jako anti-FUD nástroj ještě hodím číslo, samotný systemd (tedy adresář src/core/) má 32k řádků a to je sakra rozdíl od půl miliónu...:
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
C 62 10131 2733 32168
C/C++ Header 62 1174 1169 2087
m4 1 0 0 322
make 1 4 19 5
-------------------------------------------------------------------------------
SUM: 126 11309 3921 34582
-------------------------------------------------------------------------------
A osobně mi ten kód připadá čistě psaný a vcelku srozumitelný na to, že do něj koukám poprvé v životě...
Zkuste se podívat na Daemontools. DJB v době Sendmailu přišel s Qmailem, který místo jednoho velkého procesu pro vše zavedl specializovaný program pro každou část zpracování e-mailů. Pak v době Bindu přišel s TinyDNS, kde opět každý program dělá jen jednu věc. Takže z toho, že slévá vše dohromady bych DJB určitě nepodezíral. Přitom Daemontools je balík, který obsahuje správce služeb, logování a nastavení politiky procesů (uid/gid, limity).
Ony jednotlivé části zůstávají samostatné, každá má jednu zodpovědnost. Akorát se vyvíjejí společně – to je problém? Vždyť ty jiné části klidně můžete ignorovat. U jádra vám taky asi nevadí, že kód zajímavý pro vás (třeba platforma x86-64) je ve společném repositáři s ARM a SPARCem…
Díky Adame, že nikomu nic nevnucujete a zůstáváte převážně v informativní rovině. Archlinux má pořád podporu sysV initu s rc.d a pro jednodušší nástroje to je stále optimální init. Jenže jsme to my, uživatelé, kdo neustále brečíme nad tím, že nám něco nechodí, jak by mělo navzdory všem wiki, man a distribuční diskusní moudrosti. Suckless idea UNIXu dnes zakopává o prostou skutečnost, že funkční rozšíření znamená růst systémové komplexity a nediplomatické kybermozky jako ten Poetteringův to prostě vnímají rigorozně jako kategorický imperativ. Proto to protlačování dosud jediného na rostoucí komplexitu reagujícího initu (jiný takový ve funkční podobě opravdu neexistuje navzdory uvedeným projektům). proto jsem také při své komplexní práci v Archu bez reptání na systemd přešel a získal jsem do té doby nebývalý přehled o nikde nedokumentovaných kolizích při zavádění a na tomto základě je i vyřešil. Projekty GNU jsou velmi sympatické, ale pracovat se s tím nedá a vývoj není ničím dostatečně stabilním tažen. Takže zaplať příroda, že se našel jeden kybermozek schopný stvořit a dále vyvíjet systemd.
init (ani systemd) ale vubec neresi to, ze uzivatelum veci nefunguji. Naopak, uzivatelum velmi casto veci nefunguji prave proto, ze se vecne neco "modernizuje" ...
systemd navic zpusobuje to, ze veci prestavaji fungovat i tem, kterym bez nej fungovaly zcela bez problemu, viz trebas zminovany sitovky.
Já vidím problém hlavně v té roztříštěnosti. Chcete zjistit, jestli nějaký servis jede, případně ho spustit nebo zastavit? Na Linuxu v podstatě neexistuje způsob jak to ověřit, protože systém může jet na sysvinit, Upstart, systemd, Initng a kdo ví čem ještě, přičemž většina z toho "pro jistotu" nemá API. A pokud hovoříme o Unixech, tak tam se k tomu ještě přidává Solaris Service Management Facility (který alespoň má API), MacOS X SystemStarter a launchd atd. To si fakt každý musí hrát na svém písečku, a v případě Linuxu ten malý píseček ještě demarkovat na vzájemně soupeřící kousky?
"Já vidím problém hlavně v té roztříštěnosti."
Vám to asi nevysvětlím, ale roztříštěnost není problém ale pozitivum. Ty forky nevznikají proto, že si někdo řekl, že jen tak pro chaos udělá další fork. Právě naopak, ten fork vzniká z toho důvodu, že na jeho konkrétní řešení se nic existujícího nehodí (případně ne dostatečně efektivně), tak si forkne cíly nejbližší projekt a ten si příslušně upraví. Díky tomu je snadné nalézt takový software (resp. v praxi spíš kombinaci), který řeší váš problém optimálně.
Jedno jediné správné řešení (TM) v praxi způsobuje to, že se vlastně nehodí téměř na nic.
"Na Linuxu"
Díváte se na to špatně. Chtějte to po konkrétním OS (který může a nemusí být postavený na Linuxu).
Bohužel výsledkem je, že různé systém management deamony dělají víceméně to samé, ale dost odlišným způsobem.
Dám vám konkrétní příklad. Potřebuji napsat kus kódu, který zjistí, jestli běží deamon daného jména. Pozor, to neznamená proces daného jména - mohlo by se jednat o zcela odlišné procesy se stejným jménem image, případně o různé instance. To zjištění by mělo běžet na různých distrech Linuxu, na Solarisu, AIXu, HP-UX, a nejlépe i na MacOS X. Jaké API mi doporučíte použít?
A hned si odpovím: žádné API. Záleží na konkrétním OS, v případě Linuxu na konkrétním distru. Ve většině případů navíc neexistuje žádné API, jen klubko skriptů. Tolik k tomu, jak jsou Unixy vlastně jedna platforma, a Linux není roztříštěný.
Ad jediné správné řešení v praxi způsobuje to, že se vlastně nehodí téměř na nic - nemyslím. Pokud se správně udělá design, řeší naprostou většinu případů. Ten malý zbytek případů se pak dá na většinové řešení nějak naroubovat. U Unixů je problém prostě v tom, že neexistuje žádná centrální autorita, a levá ruka neví co dělá pravá. Resp. to asi není přesné - těch rukou jsou desítky, většinu z nich nezajímá co dělají ostatní, a některé se spolu perou. V případě tak primitivní věci, jakou je správa servisů, se nelze vymlouvat na "špecifiká".
A ještě jeden příklad. Mějme aplikaci, která běží jako servis. Potřebuji aby se byla schopná nainstalovat na různých distrech Linuxu, na Solarisu, AIXu, HP-UX, a nejlépe i na MacOS X. Co mi doporučíte? Vyrobit balíčky různého typu a s různým instalačním mechanismem pro každý OS, v případě Linuxu pro každé distro? To mi situaci moc neulehčí.
Staci dat k dizpozici zdrojak, zajemce se uz postara aby mu aplikace chodila.
Zato na widlich aby resil chodak vyvojar na ktery verzi widli zrovna je ... a kam ma co nakopirovat, a to zcela ve svy rezii, protoze system sam nic takovyho neumi. Navic jeste aby resil, jak tu svoji plikaci aktualizovat ....
Jo, stačí když ten SW dám lidem jako freeware i se zdrojákem, a instalaci možná vyřeší někdo další, pro každé distro (a každou jeho verzi) zvlášť. To je super rada třeba pro autory podvojného účetnictví, Photoshopu, Lotus Domino serveru nebo AutoCadu - ať to prostě dají zdarma :D
Ve Windows si ve Visual Studio uděláte setup project, a ten se postará o instalaci včetně dialogů (případně bez dialogů), registraci servisu, odinstalaci atd. Aktualizaci můžete řešit různými způsoby, umí ji třeba WiX Toolset.
Hele loliku, to ze si retardovanej uz vime ... ale i pomerne hodne velkej retard ma aspon poneti, ze dat k dizpozici zdrojaky != dat neco nekomu zadarmo. Mimochodem ty jako propagator M$ bys trebas moh aspon tusit, ze kuprikladu akcapta (vytvor to koupeny M$), coz je mimochodem taky "ucetnicvi", muze mit zajemce vcetne kompletnich zdrojaku.
Ale to bys aspon musel tusit o cem plkas, ze ...
Projekt se postara leda o prdlajs, protoze kazdy jednotlivy soucasti musi vyvojar nastavit, kam ze se to ma dat.
Oslovení "hele, lolíku" je nepatřičně familiérní. Zkuste trochu slušného vychování. Když vám někdo vyká, vykejte mu také, a odpusťte si familiérnost.
Dát k dispozici zdroják samozřejmě neznamená nutně dát aplikaci zdarma. Nicméně v kontextu je to snad jasné. Platící zákazník nebude řešit kompilaci ze zdrojáku a pracovat na dodělání instalace. Tuhle práci dělají zdarma správci dister, a to typicky jen pokud jde o open source aplikaci, ke které mají zdrojáky. To ovšem pro komerční SW není cesta.
Ad MS Dynamics AX (aka Axapta)... muze mit zajemce vcetne kompletnich zdrojaku - zdroj?
Hele, Lolíku, jako vývojář jsem se už několikrát pokoušel vytvořit balíček pro Windows, a je s tím takového drbání, že jsem to zatím pokaždé vzdal. Všichni kolegové, kteří instalují svou Windows aplikaci na Windows to většinou dělají nějak tak, že to tam prostě natvrdo nakopírují. (A tvářili se hrozně divně, když jsem se jich ptal na msi.)
Tak mi milý Lolíku nevykládej jak je to ve Windows jednoduché. Zlaté rpm, zladé deb. I za cenu zohlednění různých distribucí.
Vidím že jste (nepatřičně) familiérní se mnou, ale zjevně ne s Visual Studiem :). Vytvořit MSI balíček z projektu je ve Visual Studio je otázka pár minut. Pokud to vy ani kolegové neumíte, tak bude zcela zjevně problém někde mezi klávesnicí a židlí.
Ad rpm, zladé deb. I za cenu zohlednění různých distribucí - takový výrok spíš ukazuje vaší neznalost.
On normální SW závisí na verzi jednotlivých dister? To je zajímavé, že LO, FF, nebo tisíce jiných aplikací si můžu nainstalovat klidně i ve starších verzích, aniž by mě trápila verze distra. A samozřejmě není problém, pokud jde o nějaký Photoshop, Autocad, nebo účetnictví, udělat instalaci nezávisle na distru, jako to má třeba Sybase nebo VMWare.
Většina SW používá řadu knihoven, které nejsou součástí balíčku. Pokud SW použijete na jiném distru (nebo na jiné verzi cílového distra), snadno dojde na dependency hell. Tedy pokud to distro vůbec umí instalovat balíčky daného formátu. Autoři komerčních aplikací to řeší nejčastěji tak, že SW kompilují staticky, a k tomu většinou vytvoří specifické balíčky pro několik dister.
Pokud jde o registraci deamonu, API pro zjištění stavu deamonu, spuštění a zastavení daemonu, samozřejmě na různých distrech a různých Unixech, tak se rád poučím, jak to efektivně řešit pro všechny systémy najednou. VMware (alespoň ve Windows) používá servis běžící na pozadí, takže předpokládám, že ho musí nějak registrovat. Možná budete vědět, jak to dělá. Podle všeho podporuje pár dister, a spoléhá na to, že si uživatel nenahradil init.d/systemd/UpStart/další za něco jiného.
BTW problematická je dokonce i registrace programu do Start Menu daného prostředí. Různá prostředí to totiž řeší různě, a i když máte balíček pro správnou verzi správného distra, aplikace se ve Start Menu nemusí objevit, pokud si uživatel nainstaloval alternativní prostředí. Nemluvě o různých Unixech.
A asi mi nebudete tvrdit, že technicky nelze vytvořit jednotný systém registrace deamonů, včetně jednotného API. Nebo že nelze dohodnout konvenci registrace programů ve Start Menu pro různá prostředí. Samozřejmě to (a mnohem víc) lze udělat, není to ani moc technické práce, a neexistují žádná "špecifiká", která by tomu bránila. Problém je jen v roztříštěnosti vývoje, kterou jsem popisoval.
Nebudu opakovat pořád dokola to, co už bylo řečeno x-krát. Používejte si své windows ke své spokojenosti a jiné nechte si zase používat linux ke spokojenosti jejich. Já chápu, že trpíte nějakou obsedantní poruchou, protože žádný jiný důvod pro ty vaše projevy zde neexistuje, když linux nepoužíváte, ani pro něj nevyvíjíte. A vy zase pochopte, že diskuse s někovým takovým je pro mě nadále ztráta času.
Aha. Takže když věcně kritizuji něco co je špatně udělané, tak místo technických argumentů začnete plácat cosi o obsedantní poruše. Jo, to fakt dává smysl :)
BTW ve vašem světe se k Linuxu smí vyjadřovat jeho nadšení uživatelé a nadšení vývojáři? To má samo o sobě dost velkou vypovídací hodnotu.
Souhlas, takováto diskuse je na nic. Neobtěžujte se odpovídat.
Klidně se ještě jednou vyjádřím. Oni ti uživatelé a vývojáři nemusí být ani nadšení, stačí, že o systému něco ví a používají ho. To bylo ostatně hlavním bodem mého příspěvku, pokud jste to neráčil pochopit.
A ne, vy nekritizujete, co je udělané špatně. Vy haníte linux VŽDY na úkor windows, proto ta zmínka o obsedantní poruše. Když už není jiný pseudoargument k dispozici, tak přijde vaše obligátní "linux je opisem 50 let starého unixu".
ad dependenci hell: V linuxu na to máme nástroje. Balíčkovací systémy to řeší. Některé dostatečně, některé ještě lépe.
ad roztříštěnost api: Ano, je to prostor pro vylepšení, o tom žádná. Když by sis ale pozorněji (zda vůbec) přečetl místní kritiky, a trochu nad tím popřemýšlel, tak by ti vypadlo, že: systemd jako binární blob je cílem kritiky, ale problém to sám o sobě není. Problém je v tom, že se systemd stává defakto standardem, a znemožnuje nahradit sám sebe za něco jiného.
Na rozdíl od vývoje Windows, které od začátku měla jednu autoritu, která prosazovala, co uzná za vhodné, v Linuxovém světě něco takového není žádoucí. ANO, bylo by fajn, když by se objevilo nějaké unifikované API pro spouštění služeb, ale NE, ne za cenu, že nebude možné toto API nahradit za jiné.
ad roztříštěnost: Ano, je to problém. Je to komplikující, že máme na každou věc spousta implementací. A ano, bylo by fajn, když by se více lidí na něčem shodlo, a soustředili se na jednu věc. Jenomže NE, ne za cenu, že nebude možné použít něco jiného. Tohle je jedním ze základních důvodů, proč i navzdory roztříštěnosti je Linux lepší než Windows.
Ad dependenc[y] hell - pokud instalujete na jiné než cílové verzi (toho samého) distra, snadno dojdete na závislost na verzi Qt, glibc nebo kernelu, kterou těžko vyřešíte.
Ad ANO, bylo by fajn, když by se objevilo nějaké unifikované API pro spouštění služeb, ale NE, ne za cenu, že nebude možné toto API nahradit za jiné - proboha proč byste nahrazoval dobře navržené API za jiné?
Pokud potřebujete pro svůj projekt nějakou specialitu, a chcete své služby spouštět nějakým obskurním způsobem, tak prostě implementujete jednu vlastní službu, pomocí které si pak můžete spouštět co chcete a jak chcete. Občas se takhle řeší portování unixových serverových aplikací (roztahaných do desítek executables, každá s jiným způsobem spouštění a zastavování) na platformu Windows.
Ad Je to komplikující, že máme na každou věc spousta implementací - na tom se shodneme
Ad Jenomže NE, ne za cenu, že nebude možné použít něco jiného - u Unixů máte standardizovanou spoustu věcí: therading, libc, utility. Asi nebudete tvrdit, že je výhodou mít na každém Unix-based OS C runtime library s odlišným API, threading s odlišným API, nebo naprosto odlišné utility. Úplně stejně se dá standardizovat spouštění deamonů, multimediální API, a v podstatě cokoliv dalšího. Když se vám standardní implementace nelíbí, můžete si ji přece rozšířit, případně napsat jinou.
Skutečný problém je v tom co jsem popisoval: neexistuje žádná centrální autorita, a levá ruka neví co dělá pravá. Resp. těch rukou jsou desítky, většinu z nich nezajímá co dělají ostatní, a některé se spolu perou. S vaším přístupem bychom by auta neměla volant, aby si každý mohl (resp. musel) udělat vlastní v dílně.
Dependency hell: zajímavé je, že mně se to nestává. A pokud se to stane, je to řešitelné.
Unifikované API: co třeba proto, že existují systémy, které již jsou nějak řešené a zavedení toho jediného správného nenahraditelného API (tm) (r) tyto systémy rozbije? Že vy si žádný důvod nedokážete předsta it neznamená, že žádný neexistuje. Opět: vyjadřujete se k něčemu, co nepoužíváte.
A poslední odstavec: vybral jste si (nejspíš úplně čirou náhodou) standardy, u kterých tak nějak nemá smysl jiné řešení. Možná je to pro vás i po těch letech neustále nepochopitelné, ale variabilita linuxu je jeho výhodou. Díky tomu lze nalézt linux, na rozdíl od windows, všude možně. Díky tomu lze pro jeden problém použít různá řešení podle situace. Zřejmě máte stejný problém naprosto černobílého vidění jako výše p. Jirsák, který nechápe rozdíl mezi tím, když data poškodí běžicí služba a tím, když jsou data poškozena při startu služby.
"Když se vám standardní implementace nelíbí, můžete si ji přece rozšířit, případně napsat jinou."
To je to, čeho se kritici systemd obávají, a ostatně píše to i předřečník, že to možné NEBUDE.
"proboha proč byste nahrazoval dobře navržené API za jiné?" -- toto je přesně ten problém. Ty, milí Lolíku jsi windowsák, u windowsáků se to tak nedělá. My se ale této svobody velice neradi vzdáváme. Já považuji PostgreSQL za jedinou pravou databázi. Někdo ale z nějakého pro mě nepochopitelného důvodu dá přednost MySQL. Jenže je to jeho právo, bez ohledu na to, že já ho nechápu.
Když to pochopíš ty, milí Lolíku, naučíš se novou věc. No neber to.
Zbytek co píšeš je smetí, a nepravdy, namátkou libc, utility, pro všechno jsou alternativy, a někdy se dokonce i používají.
Chtěl bych aby co nejvíce věcí fungovalo samo a abych se o ně nemusel starat, jak úvodním konfigurováním tak následnou údržbou. Ale to je těžko splnitelné bez přidání složitosti.
Zatím mi to připadá, že se Linux pomalými šouravými kroky blíží k systému pro lidi, kteří v něm chtějí pracovat, a dál od těch, co se v něm chtějí šťourat. (Třebaže i šťourači si hrají vždy jen s jednou komponentou, a při tom např koukají na video stejným způsobem, jako obyčejné lidé, takže normální systém prospěje i jim.)
Původní myšlenka svobodného softwaru je, aby lidé měli právo měnit SW, který provozují. Pokud možno všichni lidé, ne jen programátoři. Asi bylo vždy jasné, že většina lidí počítačům nebude nikdy rozumět.
„Zatím mi to připadá, že se Linux pomalými šouravými kroky blíží k systému pro lidi, kteří v něm chtějí pracovat, a dál od těch, co se v něm chtějí šťourat.“
Nějaký konkrétní důvod, proč by nebyl linux nadále tak vhodný pro ty, co se v něm chtějí šťourat? Osobně ten pocit zatím nemám, ale pokud by měl být do budoucna linux výrazně méně hacker friendly, vadilo by mi to.
„Původní myšlenka svobodného softwaru je, aby lidé měli právo měnit SW, který provozují. Pokud možno všichni lidé, ne jen programátoři. Asi bylo vždy jasné, že většina lidí počítačům nebude nikdy rozumět.“
Nemyslím si, že by kdy bylo účelem, aby každý jednotlivý uživatel byl schopný upravit každou jednotlivou komponentu. Lidé ze softwarových svobod často těží i když je nedokážou využít přímo. Nehledě na to, že si vždy mohou najmout člověka, který to dokáže nebo požádat člověka, který má důvod pro ně něco udělat.
Ne.
Pro lidi nebo pro systemove administratory.
Ti druzi nechteji aby se museli ucit novou vec, ktera jim v hlave nezustane, protoze do ni budou zasahovat jen obcas. Takze kdyz s tim bude neco potreba udelat, tak to pro ne bude slozitejsi. Dnes musi umet jen ty nastroje, ktere pouzivaji na spoustu dalsich veci, proto je maji dobre zvladnute a nemusi premyslet nad tim jak se pouzivaji, kdyz maji neco opravit nebo prenastavit.
A "unix" way by byla neco pro lidi a neco jineho pro systemove administratory. To co se tu resi je, ze to vypada, ze to "neco jineho" nebude mozne bez vysokych nakladu (bez ohybani distribuce), pricemz to doted bylo "zdarma".