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é :-)