Zdravim,
jasne, je hezke, ze se nekdo ujima uvodu do systemd, to je treba ocenit, ale serial ve me spis vyvolava paniku.
Sluzba systemd-tamedated - divny jmeno, neni to preklep? Takze ntpd, ktery normalne dela svoji praci tak co - skonci? Jeste bych umel pochopit systemctl start ntpd, ale tohle je pro me matouci. Budou tedy bezet dva konkurenti?
A ten journalctl - jaky je vztah a rozdil k/s dmesg napr.? Kolik ma linux logu?
Desi me, ze by to mohlo byt jako na windows, kde pisou, ze cas je synchronizovany a mam 17 sekund posun proti ostatnim a ja nevim, co s tim, rucni klikani neni reseni.
Sluzba systemd-tamedated - divny jmeno, neni to preklep?
Je to překlep, má to být systemd-timedated.
Takze ntpd, ktery normalne dela svoji praci tak co - skonci?
Existovalo n klientů NTP, teď jich existuje n+1. Pro těch n to neznamená nic.
Budou tedy bezet dva konkurenti?
To by zrovna u synchronizace času bylo velmi nevhodné. Prostě si vyberete jednu z n+1 implementací, tu, která vám nejvíc vyhovuje.
Kolik ma linux logu?
Kolik chcete. Nejlepší je, když na jednom systému používáte jeden.
A ten journalctl - jaky je vztah a rozdil k/s dmesg napr.?
journald při startu zkopíruje aktuální výstup dmesg do svého logu a dmesg na sebe přesměruje, takže máte jaderný i aplikační log na jednom místě.
Desi me, ze by to mohlo byt jako na windows, kde pisou, ze cas je synchronizovany a mam 17 sekund posun proti ostatnim a ja nevim, co s tim, rucni klikani neni reseni.
To nezávisí na systemd, ale na konkrétní implementaci NTP klienta, kterou použijete. Přičemž zrovna ntpd (referenční implementace) je podle mne na podobné chování také náchylná. Mně se stalo, že byl čas posunutý o několik měsíců, a ntpd se tvářil, že je všechno v nejlepším pořádku. (Byla to chyba konfigurace – to, že ntpd řeší jen malé odchylky času a na skokové seřízení času při startu systému se má použít třeba ntpdate je dokumentované chování.)
Takze ten timedate nepotrebuju a nebude se mi tam cpat, kdyz uzivam ntpd. Ok.
Journald - tak jestli je to kopie, a logy do /var/log/ mi dal fungujou jako dosud, tak mi snad ani nevadi, dalo by se rict, ze muzu nekam dat to journalovani 'none' a na funkci agronoma to nebude mit vliv...ne?
17sec. - o ntpd uz dlouho vime sve a uz ho umime pouzit. Ted jen najit verzi pro win10.
Pokud je pro někoho problém použít Journal API, ať to přenechá někomu jinému. Navíc journald hezky funguje i s programy, které logují na standardní výstup – takže vývojář se nemusí učit používat dokonce ani Syslog API a prostě jenom zapisuje na standardní výstup. Což se naučí už s aplikací „Hello World“.
Správci distribucí i vývojáři musí nepřítomnost nějakého API řešit neustále. Když nemáte v systému implementaci Syslog API, budete mít problém pro změnu s aplikacemi, které ho vyžadují. Když v systému nemáte podporu cgroups (třeba protože to není Linux), budete mít problém s aplikacemi, které ho vyžadují.
Ale fakt by mne zajímalo, jaký je podle vás ten klíčový rozdíl mezi Syslog API a Journal API, který způsobuje, že na Syslog API může aplikace bez problémů záviset, ale závislost na Journal API je zlo největší.
Ale fakt by mne zajímalo, jaký je podle vás ten klíčový rozdíl mezi Syslog API a Journal API, který způsobuje, že na Syslog API může aplikace bez problémů záviset, ale závislost na Journal API je zlo největší.
Ano, zavislost na Journal API je zlo nejvetsi, protoze kvuli Poetterigovi nekdo bude muset preorat vsechny existujici aplikace.
Ale my nechceme posílat "simple, plain text log entries", my to chceme dělat moderně, ne tak zastarale jak to dělá dávno syslog (kupodivu syslog implementací je hafo a nikdy nebylo třeba kvůli tomu používat jinou funkci, teď přijde journald a najednou je třeba to posílat přes jinou fuknci, k čemu to?).
A když použiju syslog(...) bude to fungovat pravděpodobně na většině *nix OS, když použiju sd_journal_print(...), bude to fungovat jen pokud mám Linux a jen pokud mi v něm poběží syslog s journald, to je fakt killer vylepšení, bez kterého se nemůže nikdo obejít :-D
kupodivu syslog implementací je hafo a nikdy nebylo třeba kvůli tomu používat jinou funkci
A proto Apache a nginx používají syslog a vůbec si neudržují vlastní logy, že?
A když použiju syslog(...) bude to fungovat pravděpodobně na většině *nix OS, když použiju sd_journal_print(...), bude to fungovat jen pokud mám Linux a jen pokud mi v něm poběží syslog s journald, to je fakt killer vylepšení, bez kterého se nemůže nikdo obejít
Psal jsem o tom, jak je „těžké“ migrovat. Případně to jde rovnou udělat tak, že tam dáte #define syslog sd_journal_print. Samozřejmě pokud použijete funkce, které syslog neumí, tak se to pak těžko implementuje syslogem a budete muset napsat něco, co to překlopí.
1. Apache i NGINX umějí logovat do Syslogu
2. Těžké migrovat není, ale nějak nevím proč bych to měl dělat? Protože se autor systemd rozhodl, že všem bude přidělávat práci? Doteď jsem si myslel, že si komunitně práce ubíráme a přizpůsobujeme se zavedeným věcem a najednou přijde Poettering a najednou, aby se přizpůsobovali jemu a nechali si od něj přidávat práce, zajímavé...
Apache i NGINX umějí logovat do Syslogu
Používá to vůbec někdo? Syslog třeba nedokáže rozumně oddělit vhosty či HTTP od HTTPS. Systemd nabízí jednotné řešení i pro strukturované logování, které se dosud řeší tak, že každý démon loguje sám, ve vlastním formátu a s různě dobře fungující správou logů (třeba delaycompress je super workaround nebo real-time centralizace logů se dělá pomocí neustálého pollování souborů).
Těžké migrovat není, ale nějak nevím proč bych to měl dělat? Protože se autor systemd rozhodl, že všem bude přidělávat práci?
Někdo tvrdí, že by to bylo nutné? Journald bude i nadále podporovat syslog. Akorát pokud chcete něco víc než jen textové zprávy, tak holt budete muset použít Journal API, a pro ty případy lze začít jednoduše převodem syslog na sd_journal_print a strukturovat jen to, co zrovna potřebujete.
Vždyť je to zmíněno i v tom příspěvku! Apache i nginx už teď strukturují svoje logy tím, že je rozdělují do více souborů. Což je velká sranda, když je potřeba ladit něco, co jde napříč vhosty. Nebo pokud to jde z nginxu do PHP-FPM a MySQL. To se velmi dobře ladí, když je výsledek 500 Internal Server Error a různé části důvodu jsou rozesety po nejméně pěti souborech.
2Sten: Nj, nekdo jako ty nemuze tusit, ze 99,9% linuxovych appek umi logovat do vlastniho !!!! TEXTAKU !!!! a variantne pouziva systemovej log - a Apache to umi taky.
A vis proc se to v pripade Apache moc nepouziva? Protoze sysadmina vazne nezajimaji ty tuny logu ktery generuje. To zajima mozna admina webu, a tan se v nich muze rochnit pekne extra.
2ByCzech: Prinasi ti to tu vymozenost, ze se logy zcela pravidelne podelaji, takze zadny logy nemas. To ti usetri namahu s resenim problemu, a zjednodusi to administraci - muzes to cely preinstalovat a vyreseno, ne? PRESNE stejne jako ve widlich.
2Jirsak: Kdybys mel paru o tom, jak systemd nefunguje, tak bys tu nezvanil takovy bludy. Veskery logovani pres ni musi protyct, co neprotece pres, to neexistuje.
Prinasi ti to tu vymozenost, ze se logy zcela pravidelne podelaji, takze zadny logy nemas. To ti usetri namahu s resenim problemu, a zjednodusi to administraci - muzes to cely preinstalovat a vyreseno, ne? PRESNE stejne jako ve widlich.
No to já vím, že se to má schopnost hezky rozbíjet, ale čekal jsem, jestli na to dojdou i ti co to tak děsně obhajují.
Zase půlka informací. Rsyslog bude fungovat pouze, když bude fungovat journald. Takže v případě problémů, řešíte věc navíc.. Apropó ten argument o nepřenositelnosti vám asi nic neříká, že. Však je to chyba jiných, že nenapsali další implementace, chápu to správně? No jo, je to takové pragmatické. K tomu snad lze jen dodat, že revoluce ráda požírá své děti.
Takze to je tak, ze rsyslog je napojen az za journald? Takze si nesmim zmenit logovani v journald na "none", jinak by mi byl rsyslog k prdu?
Hmmm. Ale z toho mi plyne, ze kdyz si pred rsyslog stoupne dalsi program, tak nekdo udelal znova to, co uz fungovalo (u me teda dobry) a logicka ambice je nahradit to. To jsem zvedav...
- Koukam, ze slovo migrace jsem tu pouzil jenom ja :)
Ne, Rsyslog není napojen za journald. Aplikace, které logují přes Syslog API, tak mohou logovat pořád dál a budou logovat přímo do Rsyslogu. Jenom aplikace, které umí logovat jenom přes Journal API, budou logovat do journald a to bude zprávy přeposílat přes Syslog API do Rsyslogu. A nebo samozřejmě někdo může napsat jenom malou knihovnu, která bude volání Journal API rovnou překládat na Syslog API.
To, co spustí systemd a loguje na standardní výstup, může logovat třeba přes multilog (logovací nástroj, který je součástí správce služeb daemontools od DJB). Použití journald není povinné, jenom je to celé pro journald předkonfigurované, takže vám to bude fungovat rovnou – zatímco pro využití jiného řešení si budete muset něco nakonfigurovat sám. Ale pořád je to opensource, takže pokud bude hodně lidí chtít logovat nějakým jiným způsobem, vzniknou pro to návody a podpora v distribucích, a vy si jen při instalaci vyberete, zda chcete logovat přes journald nebo třeba přes metalog.
Já si dovedu představit cestu přes dynamický linker, ale je to trošku (dost) hack. Systemd skoro jistě používá libsystemd, která obsahuje implementaci těch funkcí z Journal API. Vhodný LD_PRELOAD by mohl podstrčit vlastní implementaci, která by journald obešla.
Ale jinak se obávám, že autoři systemd nepočítají s tím, že by umožnili vyměnit backend pro samotné systemd.
Takže musím přepsat unity tak, aby se vše volalo přes multilog a stejně to půjde do journald, který stále musí běžet?
Ano, musel byste v unitách přesměrovat standardní výstup do multilogu. Do journald by pak z té aplikace nešlo nic, ale předpokládám, že journald by stejně musel běžet, protože by do něj aspoň systemd logoval přes Journal API.
Nemůžu říct systemd tady máš komponentu co implementuje tvoje logovací api (předpokládám, že by se musela napsat) a posílej to do ní a nespouštěj journald?
Teoreticky by to jít mělo, Journal API je veřejné a jasně definované. Ale nevím, jak moc je do systemd zadrátované, že používá zrovna jednu konkrétní implementaci. Předpokládám, že je to jenom na úrovni sestavení kódu - a že současná implementace Journal API je součástí libsystemd, kde jsou i jiné funkce, a že by tedy stačilo implementaci Journal API vytrhnout z této knihovny a umístit do samostatné knihovny tak, aby bylo možné používat dál libsystemd, ale vedle toho použít jinou implementaci Journal API. Ale je to jenom můj dohad, nedíval jsem se, jaké knihovny přesně s jakým obsahem se sestavují. Na druhou stranu předpokládám, že se tohle bude zlepšovat s tím, jak budou skutečné alternativní implementace vznikat - dnes by to oddělení do samostatné knihovny bylo zbytečné.
Ak nestojite o strukturovane logovanie tak si mozte Vas system nakonfigurovat tak, ze do journalu bude logovat iba samotne systemd. Ako priklad vezmem CentOS 7 (situacia/konfiguracia v inych distrach moze byt mierne ina)
V CentOS 7 vytvara AF_UNIX socket /dev/log systemd. resp. journald ak mu nie je predany pri spusteni od systemd. Aplikacie pouzivajuce POSIXove syslog API sa pripajaju a zapisuju aplikacne logy na tento socket. journald zapisovane data spracovava. Aplikacie logujuce cez nativne Journal API komunikuju so journald cez iny socket. Oba zdroje logov journald uklada do suborov v /run/log/journal (/run je na tmpfs)
Rsyslog bezi vedla journald a pouziva Journal API na citanie logov. Rsyslog dalej logy ziskane zo journalu uklada a spracovava podla svojej konfiguracie, typicky uklada persistentne do /var/log/messages.
Nic z toho co som vyssie popisal nie je vytesane do kamena. Ak by som chcel postavit system ktory pouziva na spracovanie logov z /dev/log/ Rsyslog, tak staci zmenit prislusnu konfiguraciu Rsyslog. Dalej je potreba zabranit journald v praci s /dev/log. Na to staci velmi jednoduchy patch [1]. Dodatocne je potrebne vypnut prislusnu socket jednotku u systemd (systemctl --now disable systemd-journald.socket).
Vacsina spravcov distribucii stoji o strukturovane logovanie a teda je na Vas aby ste "isiel proti prudu" alebo zvolil alternativne distro.
Volba na to nie je pretoze, ona to je primarna funkcia toho daemona a mat na to konfiguracnu volbu nedava zmysel. Konfiguracia, ktoru som popisoval je pre softwarovych fundamentalistov, ktori jednoducho nechcu journald pouzivat za kazdu cenu. Ja som iba chcel demostrovat to, ze je to mozne dosiahnut relativne jednoducho, ale stale to obnasa nejaku pracu. Tu holt musi clovek ktory pouziva distribuciu XY, ale zaroven neveri v zdravy rozum a usudok spracov distribucie vynalozit.
A to je ten problem lidi kolem systemd, kdyz to nedava smysl jim, tak to nemuze davat smysl ostatnim. Presne nevim, kdo/co vytvarelo socket /dev/log pred systemd, zda rsyslog apod., udev ci neco dalsiho, ale pokud budu predpokladat, ze to dela rsyslog (napr. RHEL 6.x/CentOS 6.x), tak rsyslog je velice modularni a jednotlive moduly si mohu vypnout ci zapnout. A prave ta nemodularnost systemd v nekterych situacich a nemoznost vypnuti nekterych vlastnosti je trnem oku spouste lidi - napr. integrace udev, stejne jako pouzivani pro spoustu neprogramatoru/adminu nepruhledneho dbusu (tedy aspon pro mne).
Priklad - nechci resit jak funguje journald, umim lepe rsyslog, chci mit jako primarniho logovaciho demona rsyslog (protoze filtry, rulesety atd.) a journald jen pro ty "moderni" aplikace, ktere pouzivaji jeho API.
Osobne systemd a jeho dalsi komponenty/nastroje povazuji za zajimavy a potrebny posun nekam, ale nemusel(y) by tolik slapat na moje prsty.
Priklad - nechci resit jak funguje journald, umim lepe rsyslog, chci mit jako primarniho logovaciho demona rsyslog (protoze filtry, rulesety atd.) a journald jen pro ty "moderni" aplikace, ktere pouzivaji jeho API.
Nastavíte v journald.conf ForwardToSyslog=yes. Co je na tom složitého, nemodulárního, co na tom nemůžete vypnout?
Pod požadavkem "primární logovací démon rsyslog" si představuju, že aplikace, které logují přes Syslog API, logují přímo do rsyslogu. Tento požadavek splněn je. Pokud jste tím požadavkem myslel i to, že aplikace logující přes Journal API logují přímo do rsyslogu, pak nechápu ten další požadavek, že do journald mají logovat pouze aplikace používající Journal API.
Abychom se konečně dohodli, já jsem váš požadavek pochopil takhle:
app1 ------------------------\
\
app2 -------------------------+------> rsyslog
/
systemd ---> journald ------/
Nebo jste to myslel jinak?
Díky. Ta možnost s Rsyslog vypadá zajímavě.
Chápu to správně, že tímto způsobem by se vše co jde přes systemd nebo používá journald API logovalo pomocí rsyslog i s možností strukturovaných logů a journald by vůbec nemusel běžet?
Snad reaguji na správné vlákno. Můžete mít logování nakonfigurované tak, že aplikace používající Syslog API budou logovat přímo do syslogu. Aplikace používající Journal API budou logovat do journald, který strukturované zprávy převede na text a ten zaloguje do rsyslogu. Journald tedy musí běžet (zajišťuje logování pro Journal API), ale nemusí nic ukládat do svého logu, zprávy bude pouze transformovat a předávat dál do Syslogu. Aplikace používající Syslog API logují přímo, těch se journald nijak netýká.
Bylo by možné napsat i přímo rozhraní z Journal API do syslogu (tj. neřešit to v aplikaci journald, ale v knihovní funkci), ale pokud vím, zatím, taková implementace neexistuje.
Pane Jirsak, to ze lide systemd nemaji radi je vas takovy jakoby soukromy myslenkovy konstrukt. Lide spis nez ze ho nemaji radi ho nepotrebuji, protoze jim castokrat neprinese nic noveho, nicmene znacne zneefektivni praci. Ze vam systemd nadmiru vyhovuje neznamena, ze vyhovuje i jinym. Chapete rozdil, nebo toho nejste schopen a co je dobre pro vas je automaticky dobre pro ostatni?
Pane Jirsak, to ze lide systemd nemaji radi je vas takovy jakoby soukromy myslenkovy konstrukt.
No, zrovna nedávno byl v jednom dotazu tady v poradně systemd usvědčen, odsouzen, zlynčován a popraven, načež někdo vznesl takovou trapnou připomínku, že systemd v daném systému vůbec není. Na soukromý myšlenkový konstrukt mi to připadá docela živé.
Jinak já jsem nikdy netvrdil, že mi systemd nadmíru vyhovuje, a také jsme nikdy netvrdil, že musí vyhovovat všem. Právě naopak, vadí mi, když někdo tvrdí, že systemd nevyhovuje jemu, a tím pádem je špatné a nemůže vyhovovat nikomu. A ještě víc mi vadí, když někdo prostě jenom nemá rád systemd, argumenty proti němu nemá žádné, tak si je prostě vymýšlí. Přeborníkem v tomto oboru se stal Jarda_P, který už argumentuje jenom tím, co systemd nedělá, ale dělat by mohlo.
ad "No, zrovna nedávno byl v jednom dotazu tady v poradně systemd usvědčen, odsouzen, zlynčován a popraven, načež někdo vznesl takovou trapnou připomínku, že systemd v daném systému vůbec není."
Tak to prostě je. Když vám nepřizpůsobivý soused bude krást slepice a vy ho u toho nachytáte, logicky z každé další chybějící slepice obviníte jeho. A většinou i správně. Ale může se stát chyba a může v tom být nevinně, ale v takovém případě člověk podvědomě používá presumpci viny. Systémd je prostě (zatím) zmetek a s tím vaše agitace nic nenadělá. Kecy o přeposílání logů si nechte, když se rozsype ten binární pseudolog, sesype se ten bazmek komplet i s přeposíláním a nemáte nic. A to, že se to sesype, to je téměř jistota. Argumenty netřeba vymýšlet, argumentů je spousta a vaše agitace je na to krátká. Jediné co dokážete je tvrdit, že to systémd dělá správně a kompatibilitu likviduje jen proto, že to předtím bylo špatně. Ale to je ve většině případů jenom váš názor a dovolím si tvrdit, že je to špatnej názor. Systémd možná něco málo opravuje, ale za cenu rozbíjení celé koncepce.
Tady je to ovšem trošku jiný případ. Někdo napíše do diskuse nějaký blud o chování systemd, který je následně vyvrácen. Další napíše, že by se systemd nějak mohlo chovat, i když se tak zatím nechová. To se několikrát zopakuje. No a pak ti, které nezajímají fakta, klidně něco hodí na systemd, přestože nikdy nikdo nezaznamenal, že by systemd něco takového dělalo, a přestože systemd v daném počítači vůbec není. Vždyť už toho přece o systemd četli tolik špatného.
když se rozsype ten binární pseudolog, sesype se ten bazmek komplet i s přeposíláním a nemáte nic
Máte pro tohle své tvrzení nějaký důkaz? Nemáte, že. Ale proč si na systemd neplivnout tvrzením "nechová se tak, ale mohlo by". Těm, které nezajímají fakta, jste přispěl do sbírky dalším komentářem o tom, jak je systemd špatný - přestože jste si to vymyslel.
Argumenty netřeba vymýšlet, argumentů je spousta
Proč tedy nějaký nepoužijete? Proč si místo toho vymýšlíte?
Smutné je, že rozsypaný log už jsem se systemd zažil několikrát a fungovalo to přesně tak, jak jsem napsal. A stačí si do googlu zadat "systemd corrupted journal" a ejhle.... 27000 výsledků... a všichni si vymýšlí, nikomu se to nestalo a vy máte pravdu. Já jsem nikdy nenapsal, že se nějak může chovat a proto je to zmetek. Já tvrdím, že mám OSOBNÍ ZKUŠENOSTI s tím, co všechno dokáže doku*vit a proto je to podle mě zmetek. A ne, nezajímá mě, že 30+ let starý systém logování má svoje mouchy a proto jej někdo předělává k obrazu svému. Ať si předělává, ať to udělá líp, já budu rád, pokud to bude další možnost, která pro mě může mít v některých případech řadu výhod. Ahle hlavně mě zajímá to, že když se něco stane, chci mít log. U starého jsem si možná zanadával, ale bylo to stokrát lepší, než mít nečitelnou poškozenou binární sra*ku a k tomu prázdný remote log.
Zajímalo by mne, jestli trollíte, nebo jestli ty bludy opravdu nevidíte. Napíšete, že journald dělá chyby při zápisu do svého logu a že také journald dělá chyby při předávání do syslogu. Já se zeptám, zda máte nějaký důkaz pro ty chyby při posílání do syslogu, na což vy odpovíte, že máte osobní zkušenost s chybami při zápisu do logu journald. Tedy odpovíte přesně na tu druhou polovinu, než na kterou jsem se ptal. Nebo-li tvrdíte, že platí A a B, já se zeptám, jaké máte důkazy pro B, načež vy začnete sáhodlouze dokazovat A. Vidíte ten rozdíl? Chápete, že když vedle se be uvedete dvě tvrzení, důkazem jednoho tvrzení jste neřekl vůbec nic o tom druhém tvrzení? Chápete, že chyba při přeposílání do syslogu se neprojeví tak, že bude „corrupted journal“?
To vaše neustálé dehonestování zdejších lidí, co se mnohokrát setkali s problémy, které vznikají nasazením systemd či jeho nějakých nových částí je dost odporné.
Tuxík vám jasně napsal, že má špatné zkušenosti s rozbíjením logů, které způsobuje integrální součást systemd a sice journald. A že to nezachránilo ani přeposílání do syslogu. Vy jeho slova překroutíte k obrazu svému a tvrdíte, že řekl (napsal) něco co neřekl (nenapsal) a stavíte na tom své závěry. To není diskuze, to je lynč. Běžte s takových chováním někam!
Předkládám osobní zkušenost s tím, co se mi stalo. Asi 3x. Bohužel, logy jsem si neschoval, protože se nezapsaly. Příště si to vyfotím, abych měl nějakou potravu pro trolla. Chyba přeposílání do syslogu se neprojevila tím, že by byl corrupted journal, ale kvůli corrupted journal se sesypal celý journald a to včetně přeposílání. Výsledkem je ŽÁDNÝ LOG!, což je úžasné, protože vlastně nemusím nic řešit. Bohužel, i přes všechny trolloviny se momentálně journald NEDÁ vypnout bez zásadního vlivu na systém, jedinou možností jsou volby Storage=none a ForwardToSyslog=yes a to se vyplatí - další do sbírky nesmyslů k nekonečnému zvedaní padajících služeb - už jen za tuto funkcionalitu bych STŘÍLEL, nemá na serveru co dělat.
kvůli corrupted journal se sesypal celý journald a to včetně přeposílání
To, že je poškozený log journald, a to, že poškozený log journald způsobí, že se zprávy nepředávají ani do syslogu, jsou dvě naprosto odlišné chyby. Tu druhou jste popsal poprvé právě teď.
Pokud si necháváte logy přeposílat do syslogu, připadá mi Storage=none jako jasná volba, a moc nechápu, proč by to někdo chtěl mít jinak.
Ne. Jasná volba by byla v tomto případě celý journald vyhodit, protože je to pouze nesmyslný zabugovaný bazmek v cestě, něco jako retardér uprostřed dálnice. Ale to bohužel nejde. Jinak je zcela běžné třeba přes rsyslog zapisovat log lokálně i vzdáleně a klidně hádej proč. Což pořád můžu, ale stále budu mít v cestě ten retardér, kterýmu - pozor! - ZCELA SUBJEKTIVNĚ A TENTOKRÁT BEZ KONKRÉTNÍHO DŮVODU - prostě nevěřím, protože už mi v minulosti způsobil jiné problémy a nevidím žádný objektivní důvod, proč bych mu měl svěřit zbytečnou funkci papouškování zpráv od aplikace k logovacímu daemonu, který se tím na něm stává závislý a bez něj nebude fungovat (kecám, fungovat bude, protože to není systemd, ale nebude mít vstupní data).
No me by se zas libilo, kdyby autori aplikaci zacali pouzivat CEE-enhanced syslog messages - cee.mitre.org a rsyslog.com - a v zakladu implementovali logovani na STOUT, do souboru a pres syslog, aby si uzivatel/admin mohl vybrat, kam to chce poslat. Pak by stacilo rozsirit logovaci knihovnu o meta-informace, ktere ma journal a journal by treba nebyl potreba.
Pokud nějaký program loguje na standardní výstup, můžete ten výstup přesměrovat do souboru, jako dřív, nebo ho můžete přesměrovat do journald.
Pokud nějaký program loguje přes Syslog API, můžete ho nechat logovat přes libovolnou implementaci Syslogu – přičemž jendou z těch implementací je journald.
Pokud nějaký program loguje přes Journal API, můžete ho nechat logovat přes libovolnou implementaci Journal API (v současné době existuje asi jediná implementace, a tou je journald).
Vše, co je logováno přes journald, můžete nechat zapisovat do nativních souborů journald, nebo to můžete nechat přeposlat přes Syslog API do jiné implementace Syslogu.
Takže pokud jste měl logy ve /var/log, můžete je tam mít i nadále. Jediné, co budete muset vyřešit nově, jsou aplikace, které logují jenom přes Journal API (tedy obvykle součásti projektu systemd). Pokud do /var/log logujete přes Syslog, můžete do něj přesměrovat i journald. Pokud jste do /var/log logoval výhradně přímo z aplikací, asi nezbyde než použít nějaký Syslog, protože journald přímo do textových souborů logovat neumí. Ale takovu variantu nepředpokládám, snad na každém systému běží nějaká implementace Syslog API, i když se třeba nepoužívá pro všechny aplikace.
Pokud nějaký program loguje přes Syslog API, můžete ho nechat logovat přes libovolnou implementaci Syslogu – přičemž jendou z těch implementací je journald.
Pokud nějaký program loguje přes Journal API, můžete ho nechat logovat přes libovolnou implementaci Journal API (v současné době existuje asi jediná implementace, a tou je journald).
Tedy lze ocekavat postupne odemirani Syslog API a prechod na Journal API, az systemd bude zcela a totalne nevybouratelny a distra bez systemd budou muset implementovat mezidaemon, ktery to bude prekladat z jednoho na druhe.
to, že ntpd řeší jen malé odchylky času a na skokové seřízení času při startu systému se má použít třeba ntpdate je dokumentované chování.
Aha, no pokud se stejnou erudicí přistujete i k systemd, tak ten seriál je použitelný jen jako lehký úvod k systemd (takovým dojmem na mne stejně od začátku působil).
Je to děsné kam až ten root.cz klesá.
Nejsem autorem seriálu (autor článku je uveden vždy na začátku článku vpravo nahoře). A také nejsem autorem dokumentace k ntpd:
In case there is no TOY chip or for some reason its time is more than 1000s from the server time, ntpd assumes something must be terribly wrong and the only reliable action is for the operator to intervene and set the clock by hand. This causes ntpd to exit with a panic message to the system log. The -g option overrides this check and the clock will be set to the server time regardless of the chip time. However, and to protect against broken hardware, such as when the CMOS battery fails or the clock counter becomes defective, once the clock has been set, an error greater than 1000s will cause ntpd to exit anyway.
Máte pocit, že mé stručné shrnutí neodpovídá tomu,co je v dokumentaci? Nebo že se ntpd nechová podle té dokumentace? Nebo co přesně se vám nezdá?
systemd-networkd
V seriálu sice jen jedna věta, ale určitě doporučuju alespoň vyzkoušet. Mě osobně se nelíbí ani RH způsob (network-scripts) ani Debianní interfaces (o nefunkčním NM ani nemluvě), takže mi přišel networkd dost vhod. Má jednoduchou konfiguraci, bond se nastavuje v podstatě stejně jako bridge apod. Navíc se admin na serveru zbaví dalších zbytečných baličků (protože networkd v systemd stejně tak jako tak je).
timesyncd
Opět, pokud nepotřebujete nějaké důkladnější statistiky, tak timesyncd stačí. Netřeba instalovat další věci.
systemd-analyze
Také je dobré zmínit, že pohltil bootchart, takže si můžete snadno vykreslit graf ( systemd-analyze plot > boot.svg) doby spouštění jednotlivých unit.
V seriálu vůbec nebyla zmínka od nspawnu, což je škoda, protože je to ideální prostředí na rychlé testy (naklonovat existující systém - snapshot subvolume, spustit nspawn, hrát si, dropnout snapshot).
Existuje nějaký přímočarý způsob, jak logovat svou uživatelskou aplikaci homogenně s tím jak loguje systemd, tj aby k jejím logům šlo přistoupit přes ten journalctl ?
Byl jsem zvyklý prostě založit adresář /var/log/moje_sranda/ a cpát to tam textově, a nastavit si na to logrotate. Chci ale jít s dobou, jak to tedy přidat do systemd, aby mi to logoval a rotoval?
Nechci to ovšem cpát do syslogu, kde se to bude míchat s tunama jiných věcí...
Použijte Journal API. A nebo pokud vám stačí textový výstup (nepotřebujete logovat strukturované zprávy), posílejte to z aplikace normálně na standardní výstup – journald si to přesměruje do logu. Já osobně preferuju druhou variantu, protože je to jednoduché, na ničem dalším to nezávisí, aplikaci můžu snadno spouštět ve vývojovém prostředí nebo na popředí a rovnou vidím její výstup, a když ji pak spustím pod systemd, budu mít s tím samým kódem ten samý výstup v logu.
V mém komentáři byly rady dvě. Pokud chce někdo poradit něco modernějšího, než syslog, asi mu nebudu radit, že má použít syslog. Pokud víte o nějakém jiném API pro logování, sem s ním. Pokud byste měl pocit, že Syslog je dostatečně moderní API, tak mně na něm nevyhovuje například to, že v systému může běžet až závratných dvacet služeb, z nichž 14 je pevně daných. Takže až na svém serveru budu provozovat UUCP, USENET, FTP a jehličkovou tiskárnu, bude Syslog můj favorit pro logování.
Dotaz byl, jaké použít API. Vy se teď ptáte na to, jakou použít implementaci logovacího démona, který podporuje Journal API. No já bych doporučil journald, je to v současnosti jediná implementace, o které vím. A myslím, že by neměl být problém portovat ji na jiné POSIX platformy, protože si nemyslím, že by měla nějaké komplikované závislosti.
<cite>Tak můžete prosím vysvětlit, když pošlu přes Journal API data, co je teda přijme, když to nebude aplikace?</cite>
Ale to právě plyne z toho nepochopení rozdílu mezi API a implementací. Z dovolením Vám to tedy vysvětlím na struktuře programu v jazyce C:
Příklad A: Váš program v případě, že používá journald (API i službu):
1. API definuje prototyp funkce pomocí hlavičkového souboru (#include <systemd/sd-journal.h>)
2. V případě použití journald musíte krom #include také přidat implementaci té funkce slinkováním s libsystemd (např. gcc -lsystemd)
Vaše aplikace potom zavolá přikompilovanou funkci , která něco někam pošle (nedůležité pro Vás jako vývojáře aplikace) a ono se to objeví v journald.
Příklad B: Váš program používající API journald bez journald
1. API a hlavičkový soubor jsou stále přítomny (#include <systemd/sd-journal.h>)
2. Napíšete vlastní triviální (fakt) implementaci funkce sd_journal_print (a těch ostatních), které vezmou argumenty a pošlou je do souboru, na syslog, na web kamkoliv.. třeba jako JSON (když už logujete strukturovaně)
2B. Pokud už tu implementaci API napsal někdo za Vás, opět jen jednoduše použijete vhodné linker argumenty (-laltjournaldjsonsyslog) a spojíte Vaši aplikaci s touto jinou implementací místo libsystemd.
Výsledek? Zdrojový kód aplikace je v případech A a B úplně stejný, ale log je nakonec poslán jinam. Kam, to už není starost aplikačního zdrojového kódu, ale linkeru, implementace API a případně nějaké (úplně libovolné) služby.
Je proto opravdu potřeba rozlišovat službu journald a API journald. Vaše aplikace nepoužívá totiž službu journald, ale jednu konkrétní přilinkovanou implementaci journald API.
Je to změna? Je. Ale syslog strukturované logování neumí, takže se změně stejně nevyhnete.
Je to pevně svázané se systemd/journald? Na úrovní .c zdrojáků ne, na úrovni binárek ano, ale jen pokud chcete.
Vysvětlovat to mi (programátorovi), je zbytečná práce. Já tyhle věci vím. Akorát mi pořád není jasné, jak to použiju jinde, jak tady někteří tvrdí, že to jde, protože podle mě, když je implementace Journal API jediná a sice pouze v systemd, který je pouze pod Linuxem, tak to prostě jinde (jiné *nix like OS, Windows ap.) nefunguje. Bohužel jsou tu jedinci, kteří tvrdí, že to používat jde, ale odpovědi jak se to udělá, když to jinde neexistuje jsme se stále nedobrali.
> Vysvětlovat to mi (programátorovi), je zbytečná práce.
Očividně není..
> Bohužel jsou tu jedinci, kteří tvrdí, že to používat jde, ale odpovědi jak se to udělá, když to jinde
> neexistuje jsme se stále nedobrali.
No překvapivě se ta implementace napíše. Neumíte implementovat interface o 5 primitivních funkcích? Klidně to pak můžete zveřejnit pro ostatní, určitě Vám poděkují.
> když je implementace Journal API jediná a sice pouze v systemd, který je pouze pod Linuxem,
> tak to prostě jinde (jiné *nix like OS, Windows ap.) nefunguje
Protože tu implementaci o možná 100 řádcích C, kterou na ostatních platformách pošlete třeba JSON do syslogu ještě prostě nikdo nenapsal. To, že systemd je jen pod linuxem je úplně nepodstatné. Tomu hlavičkovému souboru je to jedno a víc nepotřebujete.
Journal API potřebujete používat jen (a pouze), pokud chcete logovat strukturovaně. Což nejde ani s tím všudypřítomným syslogem. Tak jako tak byste si to musel napsat. Z toho mi plyne, že fakt, že tvůrcem Journal API je Lennart & spol, je zrovna tady naprosto irrelevantní.
Btw, znáte třeba vztah Slf4j, Log4j a Logback? V Javě je totiž už mnoho let úplně běžné kompilovat proti abstraktní log vrstvě a implementaci dodat až na konkrétní platformě (vložením správného JARu a konfigurace do classpath).
Ano přesně tady jsem vás chtěl dostat, děkuji, že jste se nakonec odhalil.
Abych tedy shrnul vaši radu: Abych mohl naprogramovat aplikaci, ve které chci "moderně" logovat, musím si k tomu napsat i pro každý systém mimo Linuxu i logovacího démona, který bude implementovat Poetteringovo API. :-D
Přiznejte se, že jste byl toto léto moc dlouho na sluníčku.
PS: A když je to tak mega super cool věc, jak to že ještě nejsou hromady implementací toho API na všech možných i nemožných OS, aby se s tím každý programátor nemusel mrcasit sám?
A přesně tohle jsem zase chtěl vidět já. Očividně neumíte rozlišit kompilační, linker a runtime závislosti.
Nerozlišujete totiž API pro dynamickou knihovnu a logovacího daemona se kterým se jedna taková knihovna baví. To jsou totiž dvě zcela rozdílné komponenty a Journal API naprosto nic neříká o tom, že by se muselo něco posílat journald kompatibilním způsobem. Implementace Journal API může klidně mluvit přímo se Syslogem nebo psát do souboru - bez journald.
Tu poznámku o (ne-)podpoře struktury v syslog API ani ten odkaz na Slf4j jste taky nepochopil. A podle všeho zcela úmyslně (a špatně) trollujete.
Jj jasně, tonoucí se stébla chytá. Na některých OS bude stačit knihovna na jiném bude nutný i daemon. Slovíčkaříte a uchází vám podstatná pointa. Takhle to mají puberťáci, že bazírují na kravinách a podstata jim uniká.
PS: A k čemu bych posílal strukturovaná logovací data přes nějakou zvláštní novou knihovnu do syslogu, který strukturu nemá místo toho, abych to posílal syslogu přímo na všech *nix like platformách, to už mi asi taky nevysvětlíte, ale hlavně že je nutné dělat vlastní implementaci API, které na dané platformě neexistuje. :D
Ehm.. argumentace kruhem? Chceme modernější logování (na začátku vlákna), ale vlastně žádné nepotřebujeme, protože už máme syslog, který ho neumí, tak je to přece celé zbytečné.
Ale hlavně, že se bavíte a jste programátor. Ad hominem už taky umíte, gratuluji. Obávám se totiž, že podstata uniká vám. **Journal API není, nerovná se a nezávisí na journald ani linuxu**.
Na službě journald závisí pouze knihovna libsystemd, což je v tuto chvíli opravdu jediná rozšířená implementace Journal API. Nicméně to API má pouhých 5 funkcí, které se víceméně liší jen způsobem předávání parametrů.
Syslog strukturu mít může (na CEE už tu odkaz zazněl, ale jinak třeba http://www.rsyslog.com/tag/cee-enhanced/) a Vaše aplikace může používat strukturované logy i když neví nic o jejich dalším zpracování. Platformy, které je umí, v nich umožní vyhledávat, platformy co ne je prostě jen uloží (nebo předají dál).
Jako další samostudium Vám doporučuji si nastudovat architekturu jiného pokusu o univerzální logovací API, který se uchytil: Slf4j. Je to totiž úplně ten samý případ a přístup jako Journal API. Na platformě, backendu nezávislý interface bez předepsané implementace.
Tak se podívejte pořádně. Já žádné strukturované logování nechtěl, mě bylo nuceno a když jsem se zeptal, proč je to tak super skvělé, tak jsem se dověděl, že proto, že si musím na všech ostatních platformách kromě Linuxu se systemd naimplementovat vlastní a když to udělám, tak na hromadě platforem to stejně jen převedu ze struktury do textu. Rada jak noha :D
Tak si to sám vyzkoušejte. Napište si jednoduchou Hello World aplikaci a přidejte si do ní logování přes Journal API. Přidáte #include <systemd/sd-journal.h>, zavoláte sd_journal_print. Aplikaci přeložíte.
Co jste právě udělal? Naprogramoval jste aplikaci, která loguje přes Journal API. Musel jste naprogramovat logovacího démona pro každý systém mimo Linux? Nemusel. Takže buď umíte zázraky, nebo jste právě předvedl protipříklad ke svému tvrzení.
Normálně uvažující lidi mají nejprve nějaký problém (např. potřebuji logovat strukturované zprávy) a k němu hledají řešení (použiju Journal API). Vy jste se nejprve rozhodl, že použijete Journal API, a teď zoufale hledáte nějaký důvod, proč jste se tomu vlastně rozhodl.
Mám pro vás takový radikální návrh. Když nevíte, proč byste něco používal, tak to nepoužívejte.
Co mi to vkládáte do úst? Já vůbec Journal API nechtěl používat. Já naopak na začátku říkal, že journald a jeho API je vlastně k ničemu. Ale byl jsem přesvědčován, jak je to super věc a když jsem se zeptal proč, tak jsem se dověděl, že proto, že si ho můžu všude možně na různých platformách naimplementovat :D
Vy jste možná nechtěl, ale reagoval jste na někoho kdo chtěl: http://www.root.cz/clanky/nebojte-se-systemd-dalsi-komponenty/nazory/883074/
> Ale byl jsem přesvědčován, jak je to super věc a když jsem se zeptal proč, tak jsem se dověděl,
> že proto, že si ho můžu všude možně na různých platformách naimplementovat :D
Opravdu? Já jsem si celkem jistý, že se v prvních odpovědích na Vaše výpady mluvilo o strukturovaném logování. http://www.root.cz/clanky/nebojte-se-systemd-dalsi-komponenty/nazory/883132/ a o logování na standardní výstup: http://www.root.cz/clanky/nebojte-se-systemd-dalsi-komponenty/nazory/883143/
Snaha o vysvětlení pojmu API přišla až později, když jste demonstroval naprostou neochotu akceptovat, že to někdo opravdu chce používat a vymyslel si argument s multiplatformitou. Bohužel nepadla na úrodnou půdu... pořád si stojíte na vedení.
Nic proti, ale po tom co jsi tady napsal je potřeba úspěšně pochybovat o tom, že jsi programátor. Každy slušný projekt přesahující jakousi minimální hranici (definujme ji například cca 1000+ SLOC) loguje buď na standardní výstup/error výstup pokud nemá extra potřeby (třeba i kvůli Dockeru) nebo používá nějakou slušnou logovací multiplatformní knihovnu (pro každý jazyk jich bývá přehršel). A v těchto knihovnách si jednoduše nakonfigurujete, kam všude to má jít. Není jen standardní výstup/soubor/syslog/rsyslog, loguje se do logstashe/graylogu/fluentd, existují mraky cloudových logovacích služeb (ani nebudu vyjmenovávat). Takža kam se loguje je otázka změny konfigurace. Normální programátor neřeší API logovacích knihoven.
Na mne tyhle diskuse dělají dojem, že si tady honí trika správci ojedinělých serverů, občas o sobě prohlašující, že jsou programátoři. Opravdový programátor nebo správce opravdu rozlehlé sítě by nikdy něco takovéhohle nemohl napsat.
Ano to je taky přesně ta věc, co mi vadí. Proč bych měl měnit hromady aplikací, když taková věc má být konfigurací té komponenty, která ji má v systému na starost (v *nix like systémech syslog)? Poettering vyrobí novou (nespolehlivou) službu a nutí takhle ostatní, aby ji používali a to tímhle způsobem. Takhle se to podle mě nedělá.
Příklad nucení ostatních do změn je v poslední době v rozbití funkčnosti screen, tmux ap. a pak vysvětlování jeho nohsledů v diskuzi tuším právě u tmuxu, že to mají opravit oni. Mám obavu, že tohle není poslední věc, kterou budou autoři systemd tímto způsobem tlačit a problémy ohledně nové logovací služby to podle mě dokazují.
Normální programátor neřeší API logovacích knihoven.
Ano a to je v podstatě ten problém, na který jsem upozorňoval. Běžný (osobně se mi vaše dělení na normální a nenormální nezdá) programátor to nemá co řešit. A proto se mi to nabízené řešení v podobě toho, že si to má sám naimplementovat nelíbí.
PS: Vaše pochyby směrem ke mě rozebírat nebudu.
Výborně. To je na úrovni aplikace. Kde potom najdu definici API, která mi umožní napsat vlastní alternativu k journald tak, aby aplikace slinkovaná s libsystemd posílala data mě ? A abych samozřejmě nemusel mít jorunald vůbec spuštěný (chci ho nahradit vlastním podobně, jako už mám nahrazený běžný syslog).
API je definováno mezi logující aplikací a libsystemd (je to Journal API), nikoli mezi libsystemd a journald (tam je to implementační záležitost). Když chcete nahradit journald, napíšete vlastní implementaci Journal API, a aplikace nepoběží s implementací Journal API z libsystemd ale s implementací z vaší knihovny. A ta vaše knihovna třeba vůbec nemusí komunikovat s dalším běžící procesem, ale může rovnou zapisovat na disk.
Víte. Možná byste neměl odpovídat na dotazy, které Vám nebyly položeny. Pokud máte potřebu plácat, tak ji prosím ventilujte jinde. Otázka nezněla, jak napsat vlastní implementaci Journal API a potom pomocí LD_PRELOAD a podobných věcí nahrazovat libsystemd. Otázka zněla, co je třeba implementovat aby bylo možné nahradit v systému journald (tak jako lze nahradit ntpd, syslog a další komponenty) a aby programy s podporou journald API slinkované proti libsystemd mohly normálně logovat. Kvalitní odpověď jsem o něco níže dostal od toho koho jsem se ptal.
To už je o něco složitější, protože nejde o API, ale komunikační protokol.
První dva odkazy z google na "journald protocol":
https://www.freedesktop.org/software/systemd/man/systemd-journal-remote.html
https://lists.freedesktop.org/archives/systemd-devel/2012-November/007359.html
Oba jsou relevantní.
Tak to API na journald zavisi tim, ze je to jeho jedina implementace.
To ovšem nechápete význam zkratky API. To, kolik je implementací, není věcí autorů API.
A vzhledem k tomu, ze Poetterig to API jeste treba 20x zmeni, tak se do alternativni implementace asi nikdo nepozene.
To jsou akorát vaše ničím nepodložené kecy.
LOL!
Otázka: Jak použiju Journal API jinde než v Linuxu a systemdd?
Odpověď Jirsáka: Úplně normálně, API je API a můžete to použít třeba i na WIndows
Otázka: Ale když to jinde než v Linuxu a SystemD neexistuje, jak to teda použiju?
Odpověď Jirsáka: To ovšem nechápete význam zkratky API. To, kolik je implementací, není věcí autorů API.
To už je na Chocholouška toto :D. A prej neexistující problém jak je výše psáno. Jasně, hned jdu do Windows programovat pomocí Journal API, které Windows nepodporují :D :D :D
Systemd má mouchy, JournalD nemám moc rád, ale tohle už je chytání se stébla a ukázka argumentace s jediným cílem a bez ohledu na fakta. Syslog totiž na Windows taky nativně není, ale u něj Vám to očividně nevadí.
Windows nic totiž podporovat nemusí, prostě si ve Vašem programu za #ifndef sd_journal_print napište 5 primitivních funkcí, které přeloží argumenty třeba do správného ReportEvent volání ve Windows.
A hle, multiplatformní aplikace je na světě. To samé už někdo udělal za Vás v případě těch několika implementací syslogů pro Win co jsem našel. Občas prostě musíte být první, přestat žvanit a těch pár řádku pro ostatní napsat.
To, že nechápete pojem API, není zas taková tragédie, rozhodně to není na Chocholouška. Na Chocholouška je to, že místo abyste si to zjistil, píšete pořád různé nesmysly založené na nesmyslných představách o tom, co je API.
Zkusím to ještě jednou. API je rozhraní mezi dvěma softwarovými komponentami. Použití API znamená, že dokážete zavolat funkce poskytované tím API. API může mít nějaké podmínky použití a závislosti – např. pokud bude funkce vyvolána zasláním zprávy dbus, je takové API závislé na dbus. Pokud se funkce vyvolává zasláním zprávy vytvořené přes funkci CreateEvent Win32 API, bude to API závislé na Win32 API. Journal API je tvořené pouze voláním C funkcí, takže nemá žádné závislosti a je multiplatformní.
Jako programátor Journal API použijete tak, že do svého zdrojáku includujete příslušný hlavičkový soubor a zavoláte funkce v něm deklarované. V závislostech své aplikace pak uvedete, že k běhu potřebuje (volitelně nebo povinně, záleží jak jste to implementoval) implementaci Journal API. Tím to pro vás končí, neřešíte, kde je jaká implementace, stejně jako neřešíte, kde vaše aplikace sebere implementaci funkce fopen nebo SSL_accept.
Když pak někdo chce vaši aplikaci použít, musí nejprve splnit všechny její závislosti. Když bude potřebovat implementaci SSL_accept, použije třeba LibreSSL – a to přesto, že v době, kdy jste psal ten program, LibreSSL ještě vůbec nemusela existovat a jediná implementace SSL_accept byla v OpenSSL. Úplně stejně je to s Journal API. Vy dneska napíšete aplikaci používající Journal API, a vůbec vás při programování nemusí zajímat, jaké existují implementace. Ten váš program může zítra někdo vzít a spustit s implementací, o které jste ani nevěděl. Dokonce ten program můžete napsat i tehdy, když neexistuje vůbec žádná implementace toho API. A v tom je právě celá výhoda API a jeho smysl – vy jako programátor se nestaráte o konkrétní implementace, je vám jedno, jestli není žádná, je jedna nebo jich je padesát, je vám jedno jestli zítra přibyde dalších dvacet implementací, protože pro vás se tím nic nemění, vy píšete pořád proti tomu jednomu API.
Z toho je mimo jiné patrné, že vaše věta „Windows nepodporují Journal API“ je nesmyslná. Žádná podpora Windows není potřeba. Když někdo napíše implementaci Journal API pro Windows, můžete pod Windows Journal API klidně používat – na Windows samotných se přitom nic nezmění, v Redmondu nebudou muset hnout ani prstem, aby Windows nějak začaly podporovat Journal API. To, zda můžete nějaké API v daný okamžik někde použít, je totiž závislé pouze na jeho závislostech a na dostupných implementacích. Pro použití API nepotřebujete žádnou podporu operačního systému.
Tolik k původní otázce autora programu, jaké multiplatformní API může použít. Vedle ní je také možné položit otázku uživatele: mám aplikaci vyžadující implementaci Journal API. Jakou implementaci Journal API mám použít? Což je ovšem jiná otázka, než ta, která byla na začátku tohohle vlákna.
Hmm. Takže tady máme Filipa Jirsáka coby autora seriálu a tudíž automaticky zastánce systemd.
K němu se přidal Sten.
Ostatní (pokud jsem nikoho nepřehlédl) vidí, že je tady mnoho - v lepším případě - nejasností.
Zajímavé.
Já si nemyslím, že systemd je ďábel, který může za vše.
Daleko horší je podle mě to, že většina tvůrců distribucí si v nějakém záhadném okamžiku začala myslet, že systemd je krok kupředu.
Pro mě osobně to znamená, že se Linux dostává do stavu, ve kterém se dle mého názoru nikdy neměl ocitnout: totiž že si nezanedbatelná část jeho uživatelů myslí něco jiného než jeho tvůrci. To ho staví na úroveň nejmenovaného systému nejmenované firmy.
Pro mě to znamená, že se mám začít zajímat o jiné OS, konkrétně BSD.
Fajn, rozšířím si obzory. Horší je to, že pokud by se s BSD časem stalo to, co s Linuxem, není moc jiných možností.
Je to smutné. Ale třeba bude řešením vrátit se k tužce a papíru. Což nakonec nemusí být zase tak špatné.
Kdybyste četl pozorněji, zjistil byste, že k zastávání se systemd jsem se ještě nedostal (a ani k tomu nemám důvod). Zatím jenom vyvracím bludy - že aplikace logující přes Syslog musí povinně logovat do journald, že pro strukturované logování, které podporuje journald, neexistuje API, nebo že je to API závislé na journald.
totiž že si nezanedbatelná část jeho uživatelů myslí něco jiného než jeho tvůrci
Diskuse na Rootu asi nebude to správné místo, kde zjišťovat, jestli je nějaká část uživatelů zanedbatelná nebo nezanedbatelná. Ostatně, Linux je opensource, důležití pro něj myslím vždy byli vývojáři a přispěvatelé, ne pasivní uživatelé. A z vývojářů nebo přispěvatelů nemáte v dnešní diskusi ze systemd-haterů nikoho, z představy, že by měli implementovat pár funkcí v C, mají noční můry, a do tajů významu zkratky API se jim ještě nepodařilo proniknout. Z aktivních uživatelů, na kterých Linux stojí, se v dřívějších diskusích vyskytoval třeba Heron, který na systemd kritizoval dost věcí (ale nebylo to tak, že by nenáviděl systemd protože proto), jenže to je zanedbatelná výjimka mezi zanedbatelnými výjimkami.
Ono totiž "API" je něco co administrátory nezajímá. To je věc programátorů. Administrátory zajímá, jestli to může logovat jinam bez překompilování. Typický příklad je systém založený na tradiční distribuci (například debian nebo ubuntu). Administrátor chce používat balíčky z distribuce, tak jak jsou odzkoušené, a zároveň chce rychle aplikovat security updaty. Obojímu rekompilace distribučních balíčků spíše překáží.
Pak tu máme dvě možnosti: ABI nebo protokol. A z dosavadní diskuze mám pocit, že protokol není standardizovaný a může se měnit. Náhrada na úrovni ABI (dynamické slinkování s knihovnou) je problematická, neboť potřebuji nahradit jen 5 symbolů z libsystemd, která toho poskytuje mnohem více.
Může to logovat jinam bez překompilování. Bylo to tu napsáno mnohokrát. Jenže pak přišli odpůrci systemd, a začali si vymýšlet, jestli mohou pomocí Journal API logovat z Windows do Syslogu. Bylo jim vysvětleno, jaké jsou možnosti, co se dá použít rovnou a co by si případně museli implementovat sami. Odpůrci systemd předvedli, že netuší, co je API, na základě toho dokázali, že systemd je nepoužitelný nesmysl, o což jim od začátku šlo, a odcházejí spokojeni.
Takže ještě jednou, pokud chcete vědět, jak je to doopravdy, nedejte na komentáře „odpůrců systemd“. Chápu, že někdy může být těžké je rozpoznat a odlišit je od těch, kteří mají proti systemd věcné výhrady, ale mezi těmito dvěma skupinami lze docela snadno rozlišit třeba podle toho, jestli používají nebo nepoužívají nadávky.
Administrátory žádné API zajímat nemusí, pokud chtějí zprávy z journald přeposílat do Syslogu, je na to konfigurační volba ForwardToSyslog=yes, pokud do kernelového logu (kmsg), pak je to volba ForwardToKMsg=yes, pro výstup do konzole ForwardToConsole=yes a pro výstup na konzolu všem uživatelům (wall) ForwardToWall=yes.
Tak jak si přejete, abych vás nazýval? Společným znakem všech vašich komentářů je, že se snažíte dát všemožně najevo, že nemáte rád systemd – i za cenu, že ze sebe uděláte úplného hlupáka. Pokud jediným projevem někoho je, že nemá rád systemd, jak jinak ho nazývat, než odpůrce systemd? Já vím, že systemd-hater je výstižnější a ironicky to odkazuje na způsob pojmenování binárek v systemd, ale já anglicismy nemám rád, takže to moc nepoužívám.
Kdybyste kritizoval systemd, psal byste věcné komentáře, argumentoval byste něčím, u čeho by se dalo věřit aspoň tomu, že si myslíte, že je to pravda, nenazýval bych vás odpůrcem systemd. Všimněte si, že takový komentář napsal na konci diskuse například Heron, a odpůrcem systemd jsem ho nenazval. Dokud v tom tématu reagoval věcně NULL, ani jeho jsem tak nenazýval. Ale když nekritizujete, jenom prezentujete svůj odpor, proč bych vás měl nazývat jinak?
Jj jak před '89... Kdo nesouhlasil, byl hned nepřítel lidu :D.
Vzhledem k tomu, že systemd nejen používám, ale řeším hromadu problémů, reportuji chyby, analyzuji kde chyba vzniká, zkouším najít opravy a taky je často nacházím si nemyslím, že jsem odpůrce nebo hater systemd, ale jak říkám, neznamená, že si z toho kusu softu budu dělat modlu, obzvlášť, když hromadu věcí dle mého názoru (na který mám po '89 nárok) dělá špatně.
Ještě jednou a naposledy, třeba to pochopíte: za odpůrce systemd neoznačuju ty, kteří nesouhlasí, ale ty, kteří neváhají psát nesmysly a vymýšlet si, jenom aby předvedli, že systemd nemají rádi.
Pokud to ani tentokrát nepochopíte, omlouvám se vám za označení „odpůrce systemd“ – v takovém případě to neděláte schválně, ale prostě jenom nechápete význam textu.
Tak si pojďme některé ty problémy rozebrat. Problém č. 1 - bez systemd nejde spustit linux (obecně). S tímto problémem jsem se nesetkal, ale myslím, že snadno prokážu, že neexistuje - mám totiž zařízení bez systemd, na kterém linux jde normálně spustit. Problém č. 2 - v budoucnosti nebude možné logovat jinak, než přes systemd. V současné době ten problém neexistuje (což lze opět snadno prokázat systémem, kde se loguje a není tam ani systemd ani journald). Teď je přítomnost, ne budoucnost, takže teď ten problém neexistuje. Problém č. 3 - uživatel Libcha chce ve své vlastní aplikaci logovat stejně, jako na daném systému loguje systemd. Uživatel ByCzech má problém s tím, že takové logování není multiplatformní a že vlastně vůbec neví, proč by měl logovat přes Journal API. Uživatel Libcha je někdo jiný, než uživatel ByCzech, takže uživatel ByCzech se laskavě přestane cpát do toho, co Libcha chce nebo nechce. Problém vyřešen.
Pokračovat můžete vy, protože byste mohl tvrdit, že schválně vybírám ty případy, kdy to dotyčným jenom ujelo a neexistující problém vytvořili omylem. Tam sem s nějakým reálným problémem, který já jsem označil za neexistující.
Já už na to neupozorňuju, je to zbytečné. Vzhledem k těm chybám co tu jsou a nikdo s tím nejen nic nedělá, ale ani to nikoho nezajímá.
Každopádně jedna věc je nepřehlednost a druhá chování Jirsáka, který často místo věcné diskuze očerňuje nebo se staví do role samozvaného správce téhle diskuze, který má problém s chápáním toho co mu ostatní chtějí sdělovat. Slovíčkaří a trvá na svém chápání toho co kdo napíše, ačkoli se mu to snaží diskutující vysvětlit, že jim jde o něco jiného a uniká mu podstata příspěvku ap.
v dnešní diskusi ze systemd-haterů nikoho
Ano, kdo s něčím nesouhlasí je hned špatný hater. Proč mi to sakra tak připomíná dobu přes '89?
PS: Vzhledem k vašim reakcím předpokládám, že za systemd hatera označujete i mě. Bohužel se pletete, hodně věcí ze systemd se mi líbí, dokonce jsem ho v Debianu používal už v předchozích verzích pomocí backports, ale to neznamená, že jako ovce budu konzumovat cokoli mi kdo nasype do žlabu a ještě u toho budu békat a tvářit se šťastně.
Takže tady máme Filipa Jirsáka coby autora seriálu a tudíž automaticky zastánce systemd.
Upřímně řečeno, kdyby ten seriál napsal Jirsák, bylo to by to na zcela jiné úrovni a rád bych si takové články přečetl.
Pro mě osobně to znamená, že se Linux dostává do stavu, ve kterém se dle mého názoru nikdy neměl ocitnout
Můj postoj k systemd je následující a dlouhodobě neměnný: Kdyby to byl jeden program ze 40 tis. v repu, tak jsem rád, že tam je. Protože pokud se najde situace, pro kterou je vhodný, tak jej můžu použít. Stejně jako ty další programy. Prostě díky za něj.
Pokud by někdo namítal, že "init systém má přece výjimečné postavení..." (na což se dá taky reagovat, ale nebudu flamovat), tak ok, nechť si kolem systemd postaví vlastní distribuci (třeba ten CoreOS) a ostatní nechají být.
Co se mi ovšem nelíbí (a jistě na to bude někdo reagovat stylem, že to není chyba systemd, k tomu se ještě dostanu) je, když se chování systému zcela radikálně změní v "poločase". Linuxový OS byl historicky nějak postaven, na nějakých principech, nějak se choval. To vše se teď mění. Správné by bylo, pokud někdo chce měnit koncept chování systému, prostě vydat novou distribuci. Třeba bude úspěšnější a ty staré zaniknou. Ne, místo toho se mění chování z verze na verzi.
Teď k tomu, jestli to je nebo není chyba systemd. Samozřejmě, systemd je jen program, ten za to nemůže. Ale v dřívějších diskusích tady někdo dal odkazy na interview s LP, kde LP jednoznačně říká, že i zbývající distra prostě přejdou (rozhovor byl ještě před rozhodnutím v Debianu) a říká to stylem autoritativním (skoro jsem chtěl napsat diktátorským), nikoliv, že by si to přál, nebo že tak vidí budoucnost. Ne, prostě přejdou!
O tom, jakým způsobem toho systemd dociluje, už se naflamovalo dost. Pro mě osobně je zcela nepřijatelné to, jakým způsobem někdo přišel na bugtracker tmuxu a začal jim tam psát, že po změně v SD 230 (KillUserProcess=yes) by cosi měli změnit v tmuxu. Ať si to každý přebere jak chce, já už jsem k tomu v minulých diskusích napsal dost. (Takhle se zkrátka diskuse nevede. Kdyby přišli dopředu: "Hele, ve verzi 450 plánujeme tohleto, co vy si o tom myslíte a jaké úpravy to u vás znamená?" Tak ok. Dá se diskutovat, dá se hledat nové řešení. Ale udělat změnu a potom někoho nutit ... prostě sorry, takhle se prostě ve slušné společnosti nejedná.)
Ještě k tomu konceptu systemd. Tohle je jistě věc názoru. Několikrát jsem tady flamoval o vhodnosti RestartOnFailure. Můj postoj vychází z praxe. Když se lidem dá nějaký jednoduchý prostředek, tak jej začnou využívat. A tady vidím, že místo toho, aby si dali tu práci a našli bug, který ten program shazuje, tak jednoduše použijí restartonfailure. Vyřešeno. (Tohle se netýká jen systemd, s tímto konceptem v posledních letech přišlo víc projektů.) Vlastně celé je to o tom, zda má software vychovávat. Podle mě ano. Vzpomínám si na dokumentaci API jednoho programu, kde bylo dokonce popsáno, proč API některé věci neobsahuje (záměrně) a autoři tam vysvětlovali, že chtějí přimět uživatele k tomu, aby našli lepší (v tomto případě současně i výkonnější) cestu a že to stávající api k této cestě přímo vybízí (a současně dokumentovali i jak). Opět, věc názoru, jestli je tady interface od toho, aby vychovával. Já jsem toho názoru, že ano.
Ostatně toto ukazuje i na jiný způsob myšlení. Včera jsem se tady ve fóru ptal na to, jak předat socket na stdin, ale bez socket activation. Systemd to umí (příjemná vlastnost, hodí se to), ale právě jen s tou aktivací. Což prostě nechápu (a viz výše, čekal jsem, že to má nějaký hlubší důvod, proč konkrétně toto tam není - zřejmě tedy nemá), protože já bych při implementaci (hypoteticky, už dlouho nejsem programátor a vracet se k tomu nehodlám) postupoval tak, že nejdřív napíšu předávání socketu na stdin a až někdy později by mě (třeba) napadlo, že by se to mohlo hodit pro on demand aktivaci. Proč je v systemd implementovaný ten konec, ale už ne ten prostředek (který tam stejně je, jen se nedá přímo použít) je mi záhadou. (Ale to není kritika, jen to fakt ukazuje na jiný způsob myšlení.)
Uff, ty jo, to už je skoro na blog.
Ano, citim neco podobneho - ekosystem a soutez, ktera zatim vedla k uzasne evoluci. Ted prisla doba, obriho kanalu Odra Dunaj Labe a najednou na nej vsichni narazeji.
Z ekosystemu se vynoril obri predator a ekosystem prestava zit z boje o jednotlive uzivatele, ale musi se adaptovat na noveho krale.
Rikam to samozrejme obrazne a v nadsazce, ale ted pouzit alternativu neumim, coz jsem udelal vzdycky, kdyz bylo neco spatne.
Myslím, že změna chování systému „v poločase“ je něco, s čím se u živého systému musí počítat – a naopak považuju za známku vyspělosti toho systému, že takovou změnu dokáže „přežít“. A takových změn bylo v linuxu už spousta – PAM, devfs – hotplug – udev, přímo v jádru odstranění Big Kernel Lock, a spousty a spousty dalších. Myslím, že systemd z téhle řady nevybočuje.
Ad „ostatní distra prostě přejdou“, vedení diskuse – já osobně bych takový způsob komunikace nikdy nevolil. Dokonce ani u ostatních mi není jedno a považuju ho za mínus – u Poetteringa stejně jako u Linuse (a ne, netvrdím, že jsou stejní, v přístupu k chybám v projektech, které na jejich projektu závisí, jsou své přesné opaky – ale vystupování obou dvou někdo považuje za arogantní). Chápu, že někomu to chování může vadit natolik, že nebude chtít používat ani ten projekt. Ale to je vše, to chování není příčinou toho, jak je systemd rozšířený. Poku má někdo pocit, že Poetteringovo vyjádření „ostatní distra prostě přejdou“ má opravdu svůj podíl na tom, že ta distra přejdou, není to chyba Poetteringa, ale správců těch distribucí. Protože pokud se zaleknou jenom Poetteringa udělají, co požaduje, jak by se asi zachovali, kdyby na ně nastoupil pořádný sekáč, který za sebou bude mít třeba Oracle nebo Microsoft?
Ad RestartOnFailure – nepovažuju tuhle vlastnost za způsobe řešení chyb. To, že se tak dá zneužít, je pravda, ale bohužel tohle nemá jiné řešení, když zároveň existují dobré důvody pro použití té vlastnosti. Můj postoj také vychází z praxe, a už jsem viděl příliš mnoho věcí,. které nikdy neměly nastat. Takže i u aplikace, která nikdy nemá spadnout, řeším, co se má stát, když nastane nemožné a aplikace spadne. Nelíbí se mi třeba, že v systemd je rovnou podpora pro restart, ale když budu chtít třeba poslat nějakou zprávu, musím se o to postarat sám.
Osobně vnímám systemd jako takový most od beznadějně zastaralého systému založeného na SysVinitu a skriptech k nějakému dobře navrženému správci služeb, který přijde po systemd. Nemyslím si, že by se ze SysVinitu+skriptů dalo na moderní správce služeb přejít, aniž by se ta náhrada pořádně umazala. Pořád je nutné řešit spoustu problémů se zpětnou kompatibilitou, a to prostě návrh toho nového systému pokroutí. Podle mne je systemd zářným příkladem – drtivá většina věcí, které mu jsou vytýkány, souvisí právě se zpětnou kompatibilitou, třeba ten zmíněný tmux. Důsledek toho je třeba i RestartOnFailure – ano, správné řešení by bylo, že systemd zjistí, že proces umřel, tak pošle přes dbus zprávu, že k tomu došlo, a někde nějaký management zprávu zpracuje a pošle zprávu třeba do jiného nodu, že se má nastartovat jiná služba, a nebo v tom nejkrajnějším případě pošle zprávu zpět systemd, ať tu službu tedy znova nastartuje. Jenže to by bylo ještě mnohem komplikovanější, než současný stav, byla by kolem toho zase spousta řečí, jak bez systemd už ani nejde spustit program… Naproti tomu operace ukončení procesu a spuštění procesu je velmi jednoduché API, se kterým si dokáže poradit každý.
Takže já očekávám, že systemd odvede tu špinavou práci, „vyžere“ si to, že je potřeba kvůli němu upravit tmux atd., a převede tak systémy na používání moderního správce služeb. A po systemd už pak bude moci přijít nový správce, který nebude zatížen minulostí, a bude se moc soustředit na to, aby věci vyřešil koncepčně správně a hezky a s výhledem do budoucnosti. Podobně to bylo třeba s devfs/hotplug, na což všichni nadávali, a teprve druhá generace, udev, byla všeobecně přijata.
Hlavní problém je ten, že kdo si dovolí nesouhlasit je hned "odpůrce". Ve skutečnosti je to ale IMHO tak, že prostě každý je nějaký, na něčem profesně vyrostl a má nějaké pohledy na to co je správná implementace a co není. Nikdo ale netvrdí, že musí být správná jenom jedna strana. Ty doby už jsou doufám pryč. Většinou to ale bývá tak, že se maximálně tak mohou posoudit výhody a nevýhody pro danou situaci a taky záleží na tom, kde a s kým i pracujete. Ruku na srdce, p. Jirsáku, kdybychom měli všichni vyvýjet jenom tam, kde se dodržují všechna skvělá pravidla, workflow a vůbec vývojové cykly odpovídají jen našim představám a zásadám, tak by jsme asi v žádné firmě dlouho nevydrželi. A zde se již dostávám k samotnému systemd. Někdo, třeba já, bych volil konzervativnější a tím i dlouhodobější variantu vývoje/změn. Někdo zase ne a někdo ještě jinak. Prvním problémem je hned to označování odpůrců a druhým je to, že pak, když už něco takového "přetváří" podobu systému a létají v tom změny, bugy a kontroverzní rozhodnutí atd., tak se nemůžete divit, že to části lidí vadí. To ale nemusí nutně znamenat že jsou odpůrci "pokroku" a "světlých zítřků", ale možná jen to, že je něco ne úplně dobře. Ano, lidi nadávají na Poetteringa, ale když už projektu veřejně propůjčíte tvář, tak toto prostě riskujete. Nic není zadarmo.
Otázkou však zůstává, ve vztahu k tomu co píšete, jestli není trochu blbé budovat ten most, když už nyní to vypadá, že až se dodělá, bude nahrazen. Vy si to možná uvědomujete, ale uvědomuje si to i systemd A-Team, když takhle rozkopávají věci okolo?
Hlavní problém je ten, že kdo si dovolí nesouhlasit je hned "odpůrce".
To tvrdí kdo? Já za odpůrce systemd zásadně označuji jenom ty, kdo argumentuje věcmi, které nejsou pravda, nebo si údajné problémy systemd rovnou vymýšlí.
létají v tom změny, bugy a kontroverzní rozhodnutí atd., tak se nemůžete divit, že to části lidí vadí
Tomu se já v žádném případě nedivím. Akorát mi vadí, že hlas těch, kteří poukazují na skutečné problémy systemd, zaniká v řevu odpůrců systemd (tedy těch výše uvedených, kterým jsou fakta úplně jedno a prostě jen potřebují na systemd kydat špínu, a když žádnou nemají, tak si ji klidně vymyslí).
Otázkou však zůstává, ve vztahu k tomu co píšete, jestli není trochu blbé budovat ten most, když už nyní to vypadá, že až se dodělá, bude nahrazen.
Není to blbé, je to jediná možná cesta. Někdo musí udělat tu špinavou práci a převést systém z původního stavu k modernímu správci služeb. Bez toho mostu to nejde. A zároveň je extrémně nepravděpodobné, že by se ten most dokázal transformovat do cílového řešení, protože kvůli tomu převodu bude na sobě mít nabaleno tolik ošklivých věcí, že se nevyplatí to všechno čistit.
já bych volil konzervativnější a tím i dlouhodobější variantu vývoje/změn
Já vás chápu, mně by se to teoreticky také líbilo – ale obávám se, že by to k ničemu nevedlo. Ten současný systém je velmi schopný v rušení a odstraňování změn (kdyby nebyl, tak nepřežil tak dlouho). Takže u pomalejšího tempa změn reálně hrozí, že je původní systém stihne rušit stejně rychle, jako se ty změny dělají. Stačí se podívat na několik projektů, které měly za cíl SysVinit nahradit. Žádný z nich se reálně nerozšiřoval.
Vy si to možná uvědomujete, ale uvědomuje si to i systemd A-Team, když takhle rozkopávají věci okolo?
Jestli si to uvědomují nevím, ale tu špinavou práci dělají zatím velmi dobře. Někdy se to nepodaří hned na první pokus a těch mostů je potřeba udělat postupně několik (ostatně pokusů nahradit SysVinit už bylo docela dost, ale žádný se nedokázal dostatečně odpoutat). Lidem okolo systemd se podařilo udělat něco, co je dostatečně velký posun od SysVinit, takže se to opravdu používá a tedy se prostředí reálně mění. A zároveň jsou dost radikální na to, aby skutečně odstraňovali zátěž z minulosti. Ten, kdo přijde po nich, se bude muset potýkat s podstatně menší zátěží minulosti.
@F. Jirsák
"To tvrdí kdo? Já za odpůrce systemd zásadně označuji jenom ty, kdo argumentuje věcmi, které nejsou pravda, nebo si údajné problémy systemd rovnou vymýšlí."
Ještě jste zapomněl na ty, kteří nechtějí implementovat API do všech svých aplikací a nebo podle Vás ani neví co je to API atd. No tím pádem v tom už máme všechny, kteří si dovolili něco napsat. Disclaimer: nepočítám Jardu_P
Vite, ta "špinavá práce" nemusí být až tak špinavá.
V situaci, kdy stavíme ten "metaforicky" most. Několik starších máme vedle, ale z nějakých důvodů nevyhovují.
Začneme budovat most nový, moderní, Máme základy vybetonované v řece, možná i nějaké pilíře + něco. Silnice a trasy v okrese byly přesměrovány na most, všechny, nebo spousta obcí musela implementovat nové cedule a návěstí, most se používá, ale dostavěný ještě není.
Takže jsme někde mezi půlkou vývoje mostu a dokončením - nikdo přesně neví + vývoj mostu nekončí nikdy => opravy, úpravy, údržba
Pak se zjistí, že některé funkce jsou zbytečné, některé chybí, některé by měli fungovat jinak. Prostě změna nároků a pořadavků a tak se zjistí, že by to chtělo most další "generace".
Já tvrdím, že je lepší práce na mostu zastavit a buď most předělat, rozšířit nebo začít dělat úplně nový a že ho nejdříve dostavit s tím, že pak se bude budovat plnohodnotná náhrada je neekonomické časově===finančně i užitně a nišemu to nepomůže, nehledě na to. Ke styvu systemd by se dalo ještě dodat, že stavba nového mostu, kdy kus komunity křičel že to není dobré, se vynaložily prostředky a včechny obce okolo musely implementovat cedule směrování dopravy a návěstí a nyní se to bude zase rušit - to souvisí s tím, co jsem psal už mnohokráte - postavím most a nechám obce aby si implementovaly cedule směrování dopravy buď na starý nebo nový most. Se systemd to vypadá tak, že kdo se rozhodne pro nový, už nesmí mít cedule na starý - třeba to Gnome a bude víc. K tomu polyká ten most ještě funkce okolo, třeba řízení semaforů v okolních obcích - cron.
Snad jsem tu metaforu moc nezkomplikoval, ale systemd a jeho místo v OS taky není jednoduché.
Ale jak jsem psal, to je prostě o přístupu k řešení a každý to může vidět jinak. Jeden můj bývalý kolega by klidně i organizoval lodní dopravu kvůli tomu :-D
Ještě jste zapomněl na ty, kteří nechtějí implementovat API do všech svých aplikací
Nezapomněl. K tomu, aby aplikace mohla běhat v systému, který používá systemd, nemusí autor té aplikace implementovat žádné API, nemusí napsat ani čárku. Pokud někdo tvrdí opak, spadá do kategorie těch, kteří si prostě jen vymýšlí. Nikoho jsem neoznačil za odpůrce systemd proto, že by nevěděl, co je API.
Vite, ta "špinavá práce" nemusí být až tak špinavá.
Když se probíráte špínou, což je současný stav SysVinit+skripty, není to čistá práce.
Ta vaše metafora s mostem vůbec nesedí. My dneska nemáme několik starších mostů, které nevyhovují. My dneska máme děravou loď, holinky, bidlo, děravý záchranný kruh a spoustu leukoplasti, vytipované místo v řece, kde je mělčina a dá se tam postavit, když se člověk topí, a k tomu do detailu vypracovaný postup, jak se s pomocí těchhle propriet dostat na druhý břeh. A když někdo namítne, že děravá loď není úplně ideální dopravní prostředek, hned přijde někdo s tím, že proto je tam přece ten záchranný kruh a každý ví, kde má z loďky vyskočit a kde je ta mělčina, na které si může odpočinout – a nějaké novoty jako neděravou loď nikdo nepotřebuje.
V takové situaci neseženete prostředky na postavení drahého dálničního mostu někde vysoko nad údolím, lidé si takový most ani nebudou umět představit, a ani nebudete vědět, jak na to. Takže nejprve musíte postavit dřevěnou lávku nízko nad vodou, budou z ní schody k té mělčině, kde odpočívají topící se, bude u něj molo pro připoutání té děravé loďky, budou na něm zásobárny leukoplasti na ten záchranný kruh atd. A teprve až si lidé zvyknout, že nemusí jet děravou loďkou, topit se a teprve pak vylézat na most, ale že mohou přes most přejít z jednoho břehu na druhý, teprve pak jim můžete navrhnout pořádný most, který nebude omezený tím, že u něj musí být molo pro zakotvení děravé loďky a nemusí z něj vést schody do odpočívárny pro topící se.
Těch náhrad SysVinitu, které se snažily řešit jen malou část a postupně, bylo docela dost – a systemd vzniklo jenom proto, že žádná z nich neuspěla.
Takže nejprve musíte postavit dřevěnou lávku nízko nad vodou, budou z ní schody k té mělčině, kde odpočívají topící se, bude u něj molo pro připoutání té děravé loďky, budou na něm zásobárny leukoplasti na ten záchranný kruh atd. A teprve až si lidé zvyknout, že nemusí jet děravou loďkou, topit se a teprve pak vylézat na most, ale že mohou přes most přejít z jednoho břehu na druhý, teprve pak jim můžete navrhnout pořádný most, který nebude omezený tím, že u něj musí být molo pro zakotvení děravé loďky a nemusí z něj vést schody do odpočívárny pro topící se.
aha a systemd ma byt akoze tou dřevěnou lávkou nízko nad vodou?
"Pokud někdo tvrdí opak, spadá do kategorie těch, kteří si prostě jen vymýšlí. Nikoho jsem neoznačil za odpůrce systemd proto, že by nevěděl, co je API."
Ne že jste nařkl člověka za odpurce systemd kvůli API, ale naopak. Protože odporoval, nařkl jste ho že neví co je API.
"My dneska nemáme několik starších mostů, které nevyhovují. My dneska máme děravou loď, holinky, bidlo, děravý záchranný kruh a spoustu leukoplasti, vytipované místo v řece, . . ."
Tak to vůbec a stejně se ten odstavec nevyslovuje k dobudování mostu a jeho následnému opuštění.
"V takové situaci neseženete prostředky na postavení drahého dálničního mostu někde vysoko nad údolím, lidé si takový most ani nebudou umět představit,"
To je ustřelené. Dneska ohledně procesů si lidi dokážou představit co je potřeba. Jinak by to asi ani P-Team nemohl dělat, kdyby nevěděli co je vůbec potřeba. Nepodezírám je z toho, že jsou to idioti anic o tom neví, podezřívám je z toh, že tak úplně nekočírují jízdu.
Ostatně když použiji te Váš příměr, tak nyní se místo děravé loďky staví vratká lávka, která má občas uvolněné lanka, občas se dost houpe a kdo che chodit po té vratké lávce, tak už nesmí měnit za loďku, případně mu stavitelé mostu zruší některé ty mělčiny nebo kotviště. Možná je to pro někoho evoluční posun, ale když se pod někým ta lávka vyvrátí a on se stejně vykoupe, tak mu to moc jako výhoda proti děravé loďce asi nepřijde. U ní aspoň věděl, kde je ta mělčina a jak moc do ní teče.
Protože odporoval, nařkl jste ho že neví co je API.
Ne. Nařkl jsem ho, že neví, co je API, protože v komentářích předváděl, že neví, co je API – například tvrdil, že API závisí na implementaci, nebo že aplikace využívající API musí vědět o tom, jaké všechny implementace API existují.
Dneska ohledně procesů si lidi dokážou představit co je potřeba. Jinak by to asi ani P-Team nemohl dělat, kdyby nevěděli co je vůbec potřeba.
Někteří lidé si to představit dokážou a jiní ne.
kdo che chodit po té vratké lávce, tak už nesmí měnit za loďku, případně mu stavitelé mostu zruší některé ty mělčiny nebo kotviště
Tak to ale není. Kdo se rozhodne používat most, klidně se zase může vrátit k loďce. Mělčiny nebo kotviště mu nikdo neruší. Ale je pravda, že když se někdo rozhodne, že tu loďku pro jistotu potáhne po mostě za sebou, že to nebude komfortní a bude to dokonce namáhavější, než s ní jet po vodě (než se potopí). Ale tahat za sebou loďku po mostě nebyl nápad tvůrců mostu.
"Někteří lidé si to představit dokážou a jiní ne."
No, takže stavitelé toho Vašeho megamostu by to tedy jistě dokázali.
" ... někde vysoko nad údolím, lidé si takový most ani nebudou umět představit, a ani nebudete vědět, jak na t ..."
"Tak to ale není. Kdo se rozhodne používat . . . "
Na to mám názor jiný, ale jaksi jste opomenul tu vratkou lávku, vykoupání a ekvivalenci s děravou loďkou.
Já k té myšlence a snaze P-Teamu nic nemám, ale zdá se mi že to přehánějí a tak trošku prasí okolo. Bohužel . . .
Vratká lávka, po které přejde 99 suchou nohou a jeden se namočí (navíc vlastní nepozorností) mi připadá jako výrazný pokrok oproti stavu, kdy se jich namočí sto a je to vnímáno jako normální součást překonání řeky.
Já k té myšlence a snaze P-Teamu nic nemám, ale zdá se mi že to přehánějí a tak trošku prasí okolo. Bohužel . . .
Já vás chápu, přemýšlel jsem o tom několikrát, jestli to nepřehánějí. Ale vždy jsem dospěl k tomu, že se mi nechce riskovat, že by systemd byl další neúspěšný pokus, a za 3 roky se bude řešit to samé, jenom v ještě horší situaci a bude potřeba být ještě drsnější. Ty méně drsné metody už se zkoušely a neuspěly.
" po které přejde 99 suchou nohou a jeden se namočí (navíc vlastní nepozorností) "
Hmmm, tento poměr si nedokážu ověřit.
Navíc vzpomenu opět to Gnome. Ano, Gnome se samo dobrovolně rozhodlo přidat závislost na systemd-logind. Dle mne je ale chyba, že instalovat pouze systemd-logind samotný, aby pouze zajišťoval potřebné funkce nebo vracel třeba -1.
Je to chyba 1 ze 100 a ještě jeho vlastní? Nebo je to má vlastní chyba?
No ještě že se tak nechovají maintaineři každého programu . V Debianu je jich přes 20tis. to by byla sranda . . .
to ste vsetci systemd(ebilina) fans taki priblbli alebo co? pointa je nie v tom, ze systemd je sracka, ale ze bez tej sracky linux nejde spustit - to je ten hlavny problem. pre mna za mna si nad systemd(ebilna) onanuj cely den, ale neotravuj s tym ostatnych. a pokial to je stale vo vyvoji, tak to nema co robit na produkcnych serveroch...
Tohle je přesně příklad toho, co označuju za „odpůrce systemd“. Nadávky a lži, nic jiného v komentáři není. Že nejde bez systemd linux spustit, to je lež, všichni to vědí, že je to lež, ví to dokonce i autor komentáře. Jaký jiný smysl má ten komentář, než ukázat, že nemá rád systemd? Jaký jiný smysl má, než předvést, že jeho autor je odpůrce systemd?
Konfiguracny subor /etc/grub2.cfg, riadky zacinajuce na linux, dopisat na koniec riadku init=/bin/bash. Prajem Vam vela zdaru a pevnych nervov pri praci s takto spustenym systemom.
Před lety, na centos 5, to vůbec nebylo složité. Mount disků, ip a / ip r nastavení sítě. service sshd start. Zbytek po síti.
Já jsem ale nikde nepsal, že rozběháte CentOS 7 bez systemd. Já jsem pouze vyvracel vaši lež, že bez systemd nespustíte linux. To, že CentOS 7 je linux na věci nic nemění, protože vy jste tvdil, že bez systemd nespustíte (žádný) linux, což rozhodně nelze dokázat jediným příkladem (ale jediným příkladem to lze vyvrátit).
Nelíbí se mi třeba, že v systemd je rovnou podpora pro restart, ale když budu chtít třeba poslat nějakou zprávu, musím se o to postarat sám.
Samozrejme, pretoze restart sluzby je jednoduchy. Nejake zlozitejsie riesenie krizovej situacie vyzaduje znalost okolnosti za ktorych sluzba spadla (analyza logu, atd...) a to nie je rozumne implementovatelne v obecnom programe ako je systemd. Na druhej strane, automaticky restart ma svoje aplikacie. Vhodny priklad, je podla mojho nazoru, smerovaci daemon. Napr. daemoni v baliku quagga (na Fedore) maju Restart=on-abort. Ten daemon (napr. ospfd) nema ziaden stav na disku, ziadne persistentne data. Nerestartovat ho hned ak spadol neocakavane (abort() zavolany kvoli assertu v kode) nedava zmysel. Ak ide o zavaznu chybu a bude padat znova a znova, tak systemd to nebude skusat do nekonecna, eventualne dojde k tomu, ze zakroci restart rate-limiting a sluzba ostane vo failed stave.
Ak je potrebne zlozitejsie, ale stale automatizovane riesenie padu sluzby, tak na to systemd ponuka nastavit option OnFailure=<unit>. Takto aktivovana jednotka moze spustit nejaku recovery proceduru, ktora eventualne znova sluzbu nastartuje (alebo aj nie a da vediet o uroven vyssie, napriklad SW pre spravu clustru).
Naopak, smysl to dava ... nekdo ti to moh hacknout, a to by admin mel proverit a mozna by to vycet (z na systemd neexistujiich) logu. Kdyz to rovnou nabehne, muze hacker spokojene hackovat dal. nadto pokud neco zbuchne, zcela jednoznacne to indikuje chybu a zadnej soft se znamou chybou nema v produkcnim prostredi co pohledavat.
Stejne systemd neumi zjistit, jestli ta vec bezi a umet nikdy nebude.
Narazil jsem na zajímavý článek, který souvisí s RestartOnFailure - to, že se software musí vypořádat i s neočekávaně neočekávanými situacemi, vymyslela Margaret Hamiltonová už u projektu Apollo. A ani tenkrát jí to nejprve nevěřili.
Narazil jsem na zajímavý článek, který souvisí s RestartOnFailure - to, že se software musí vypořádat i s neočekávaně neočekávanými situacemi, vymyslela Margaret Hamiltonová už u projektu Apollo. A ani tenkrát jí to nejprve nevěřili.
Na to se dá reagovat i takto:
https://en.wikipedia.org/wiki/Mars_Climate_Orbiter
Vůbec nepomůže restart, vůbec nepomůže přepnutí na záložní cpu.
Jinak to co je v tom článku popisováno bych spíše viděl do oblasti realtime os.
Že to nepomůže v jednom případě neznamená, že to nepomůže nikdy. Ostatně, nepomohl by restart, nepomohlo by záložní CPU, ale stejně tak by nepomohlo vypnutí a čekání na zásah administrátora. Navíc zrovna v případě Mars Climate Orbiter to byl ten samý problém, jako problémy popsané u projektu Apollo - chybný vstup, který se nikde nepodařilo zachytit, protože to byla neočekávaná chyba.
Že to nepomůže v jednom případě neznamená, že to nepomůže nikdy.
Ano, takže místo toho aby se psali programy správně a testovali se (Její pojetí asynchronního softwaru, plánování priorit, důkladného testování a ošetřování chyb způsobených chybným zadáním), tak se to bude zbůhdarma restartovat a třeba se to zrovna povede, pokud jsou hvězdy nakloněny. Ostatně, kdyby tam byl systemd, tak po restartu naběhnou všechny services jako před tím (protože konfigurace je přece jen jedna a je nesmysl to dělit na boot a aktuální, že).
Navíc zrovna v případě Mars Climate Orbiter to byl ten samý problém
To nebyla chyba vstupu, to byl vadný program. Nepředpokládám, že by tam někde byla tabulka fyzikálních konstant, kterou stačilo jen na dálku přeflashnout, tohle všechno bylo jistě zadrátováno do programu. Ostatně, kdyby tam byla, tak by si toho asi i někdo všiml.
PS: Jinak po včerejším kompletním výpadku DC Master Internet Praha nemám chuť dál flamovat. Mimochodem, půl dne nejelo ani Internet Info a nikde ani čárka. Počkáme do zítřka ;-). Každopádně toto ukazuje, s čím se musejí sysadmini potýkat. Vůbec to není problém padajících services. Za posledních několik let jsou to hlavně krajně nespolehliví dodavatelé, kteří LŽOU. Včera se provalila LEŽ o tom, že Master má zálohované redundantní napájení.
Ano, takže místo toho aby se psali programy správně a testovali se (Její pojetí asynchronního softwaru, plánování priorit, důkladného testování a ošetřování chyb způsobených chybným zadáním)
Ne místo. Správně napsaný a otestovaný program je takový, který se v neočekávané situaci přepne do bezpečného režimu, ve kterém nepáchá žádné škody a pomáhá při diagnostice problému.
zbůhdarma restartovat
To je vaše konstrukce.
To nebyla chyba vstupu, to byl vadný program.
Byla to chyba na vstupu. Nejdřív dostali od sondy údaje o aktuální rychlosti, které byly mimo očekávané hodnoty, sonda pak naopak dostala příkaz k manévru mimo očekávané hodnoty.
protože konfigurace je přece jen jedna a je nesmysl to dělit na boot a aktuální, že
po včerejším kompletním výpadku DC Master Internet Praha
Ano, je to nesmysl, protože jak ukazuje mimo jiné ten včerejší výpadek, můžete si klidně myslet, že máte zálohované redundantní napájení, ale stejně je potřeba počítat s tím, že server bude najednou z ničeho nic bootovat (protože to zálohované redundantní napájení už zase běží) a vy k němu navíc nemáte přístup (protože port na switchi není po tom neplánovaném výpadku tak zcela v kondici). Nebo-li pokud najednou z ničeho nic bootuje server, nebo najednou z ničeho nic startuje služba, měly by vždy skončit v nějakém bezpečném stavu. Pokud tedy administrátor pracuje způsobem "teď mám systém v jiném stavu, než do kterého by se dostal po bootu, ale správce služeb mi do toho hrabat nebude a dá-li Bůh, k restartu nedojde", docela hazarduje.
Někdo zkrátka počítá s tím, že správně napsaný program se nikdy neočekávaně neukončí, běží na serveru, který se nikdy neočekávaně nerestartuje, a je umístěn v datacentru, kde nikdy nedojde k výpadku napájení. A pak jsou lidé, kteří na tohle nespoléhají, a řeší, aby i v případě toho neočekávaného výpadku systém skončil v bezpečném stavu. Takže třeba aplikace, která se spouští v okamžiku, kdy nebyla řádně ukončena, naběhne v režimu pouze pro čtení, aby bylo možné zkontrolovat, že nedošlo k nějakému skrytému poškození dat. A nebo ještě lépe, aplikace v takovém okamžiku naběhne v režimu jen pro čtení a sama spustí diagnostiku. Takže až se k ní správce přes ten nefunkční switch probojuje, budou už na něj čekat výsledky, že je vše v pořádku a jestli je možné se přepnout do plného provozu.
stejně je potřeba počítat s tím, že server bude najednou z ničeho nic bootovat
S tím se kupodivu počítat dá a vždy se s tím počítalo i v minulosti s oddělenou konfigurací pro boot. Mimochodem, tohle tady (se slovníkem sobě vlastním) komentovat j. A velmi trefně.
To se stalo zrovna našemu ex-konkurentovi (nebo jak to nazvat) minulý týden, který si k nám do racku dal svůj hw. Po prvotním nastavení na místě si to chtěl donastavit z kanclu a ejhle, co čert nechtěl (nebo možná chtěl), uklepl se v iptables pravidlu a odřízl si síť kompletně.
Stačilo přes monitorovací rozhraní poslat impuls reboot, počkat až to najede, a bylo to OK (načetla se původní konfigurace). Kdyby to nastavoval přes hypotetický sd-firewalld stylem "je jen jedna konfigurace", tak aby ani reboot nepomohl, protože po bootu by se mu tam opět načetlo to špatné pravidlo (a ne každý HW má na mgmt grafickou konzoli, takže by tam musel někdo dokráčet).
Pokud tedy administrátor pracuje způsobem "teď mám systém v jiném stavu, než do kterého by se dostal po bootu, ale správce služeb mi do toho hrabat nebude a dá-li Bůh, k restartu nedojde", docela hazarduje.
Viz. Výše. Nikdo nepsal o tom, že k výpadku nikdy nedojde. Jen jsem psal o tom, že se těžko jedná s dodavateli, kteří lžou. Ten včerejšek byl jen vhodným příkladem takových lhářů.
S tím se kupodivu počítat dá a vždy se s tím počítalo i v minulosti s oddělenou konfigurací pro boot.
V tom případě nechápu ty nářky na to, že systemd připojil souborový systém nebo spustil službu - protože přesně to by se stalo po bootu.
Stačilo přes monitorovací rozhraní poslat impuls reboot, počkat až to najede, a bylo to OK (načetla se původní konfigurace).
To musí být děsně prima. Upravím konfiguraci firewallu, za několik týdnů někdo jiný aktualizuje jádro, musí provést restart serveru, a načte se mu jiná konfigurace firewallu. A ještě lepší to bude v případě výpadku napájení - server naběhne, něco v síťování nebude fungovat (kvůli chybně nastavenému firewallu), všichni budou řešit, co se tím výpadkem napájení pokazilo, a ona je to akorát chybná nikdy nepoužitá konfigurace firewallu.
Řešit chybnou konfiguraci služby restartem celého systému je oblíbený způsob ve Windows. V unixovém světě se to řeší tak, že se připraví nová konfigurace, ta se aplikuje dočasně, a pokud hrozí, že by si mohl správce odříznout přístup, nastaví si časový limit, po kterém se vrátí předchozí konfigurace automaticky.
Mimochodem, tohle tady (se slovníkem sobě vlastním) komentovat j. A velmi trefně.
Pokud se mi někdy přihodí, že souhlasím s tím, co napsal j, zamyslím se nad tím ještě jednou a hledám, kde je v mých úvahách chyba.
V tom případě nechápu ty nářky na to, že systemd připojil souborový systém nebo spustil službu - protože přesně to by se stalo po bootu.
To už jsme probrali. Může na ten server spadnout meteorit. Ano, může. Příčetný admin si nebude rebootovat stroj, u kterého vyměňuje disk. Elektřina zpravidla nevypadává (pokud omylem nemáte server v DC Master Praha). Pokud by vypadla, tak by to příčetný admin nechal najet do nějakého rescue režimu. Nebo by se zařídil jinak. Fakt nevím, co je to za argument: stejně by se to stalo po bootu.
To musí být děsně prima. Upravím konfiguraci firewallu, za několik týdnů někdo jiný aktualizuje jádro, musí provést restart serveru, a načte se mu jiná konfigurace firewallu.
Velmi se omlouvám, že jsem to pro vás nenapsal jasně, pohybuji se mezi adminy, takže jsem předpokládal (moje chyba), že všichni vědí, že se ta konfigurace při bootu dá změnit. Takže: ve chvíli, kdy si dotyčný nastaví ten fw tak, že je s ním spokojen, může toto nastavení uložit i pro příští boot.
Takže s tím, že server bude najednou z ničeho nic bootovat, se samozřejmě počítá, až na výjimky, kdy se s tím nepočítá.
Jistě, dá se tak pracovat, ostatně dělali jsme to tak spoustu let. Akorát v tom nevidím jedinou výhodu, zato tam je dost příležitostí pro chyby. Připadá mi lepší mít jednu nebo více konfigurací (třeba pro běžný běh a záchrannou konfiguraci), mezi kterými se přepíná podle definovaných pravidel nebo na pokyn administrátora, ne rebootem.