Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
Po rokoch strávených pri Archlinuxe uvažujem o odchode. Dôvod - systemd. Nikdy som sa nepovažoval za nejakého zarytého odporcu - koniec-koncov, som s ním na Archu už riadne dlhý čas. Ani nejak extra tento kus SW nesledujem - len občas narazím na správičku, ktorá ma ale v podstate nikdy veľmi nepoteší - došlo to však až do štádia, keď mi systemd začína liezť na nervy.
Aj keď snaha koncentrovať do systemd rôznu funkcionalitu navyše (mimo funkcie init démona) mi nikdy nebola veľmi sympatická, z počiatku mi to až tak veľmi nevadilo. V poslednej dobe je toho však akosi veľa - zavŕšila to správička o ambicióznom projekte prekopať komplet správu používateľov. Ako inak - v rámci systemd. Len tak som mrkol, čože to už ten systemd všetko vie - a je toho dosť. Logovanie, správa sietí, zavádzač, synchronizácia času - a to iste nie je koniec zoznamu (a koniec snáh o začleňovanie rôznych funkcionalít do init démona).
Voľakedy sa myslím hovorilo o systemd ako o modulárnom - ale ak aj to je pravda, praktické dopady tejto modulárnosti akosi nie je veľmi cítiť. Skrátka, keď si predstavím, ako asi vyzerá taká dnešná distribúcia (zo systemd) a ako asi bude vyzerať za pár rokov... Je to riadne vzdialené od unixovej filozofie - toho, čo som dakedy začal používať a toho, čo sa mi páčilo. Nemám z toho dobrý pocit - taký ten DIY pocit, keď som si nainštaloval Archlinux pred... 8 rokmi? Tak nejako - ešte z pred čias systemd, v čase, keď existoval ten dialógový inštalačný skript a neboli digitálne podpísané balíky. (Len tak na okraj - dá sa nejako zistiť kedy presne bola urobená inštalácia?)
Našťastie máme stále dosť non-systemd distribúcií - stačí si vybrať. Možno to nebude taký mainstream ako Archlinux, ale... vadí to vlastne? Mne nie. Otázka je však - kam ujsť? Mám rád koncept rolling release a KISS prístup k veciam. Pacman ako správca balíkov mi tiež vyhovuje. V podstate mi ide o to mať čo možno najčistejší Arch bez systemd. Keď si to zrátam, vychádzajú mi dve možnosti: Artix Linux a Parabola GNU/Linux-libre.
Parabola patrí k tým "dogmatickým" distrám poskytujúcim výlučne slobodný SW. Osobne si na tom až tak veľmi nezakladám, ale svojim spôsobom by to mohla byť výhoda. Nemyslím si tiež, že narazím na problémy - HW sa snažím kupovať tak, aby som sa týmto problémom vyhol a SW uprednostňujem slobodný - čiže sa aspoň ukáže, v akej miere je to u mňa v skutočnosti. Parabola síce používa systemd, ale dá sa fungovať aj na alternatíve (OpenRC).
Artix je zase taký ten anti-systemd punk. Podľa všetkého za ním stoja zarytý fanúšikovia Hviezdnych vojen - nič proti nim (sám mám Hviezdne vojny rád), ale trocha ma to od Artixu odrádza - asi najprv mám taký ten pocit, že to neberú celkom vážne. Ale zase si racionálne hovorím - no a? Aspoň bude sranda - veď sa jedná len o domácu mašinu. Artix má v otázke výberu init systému dve možnosti (OpenRC a runit).
Používate niečo z tých dvoch niekto? Aké je to v porovnaní s Archom? Aká je komunita? Ste spokojní s prechodom / výberom? Prípadne plánuje niekto tiež utiecť od Archu? Kam? A prečo?
Tiskni
Sdílej:
Registr nahradil konfigurační soubory aplikací z Windows 3 a tím to Microsoft poSZral. Ukládal do něho kdy, jaký soubor se otevřel... a jiné 'důležité' kraviny. Nevím, jak to dnes ve Windows řeší, ale tehdá často bobtnal, a bobtnal, až se systém zadrhával.
No, jen jsem tak odbočil do prahistorie konkurenčního systému.
Pro mě systemd znamenal totální konec aktivního zájmu o Linux.Takže jsi přešel na Windows. To je vážně z deště pod okap.
Plus to, že linux začíná řešit moderní neomarxistické progresivní věci natolik, že to nehodlám akceptovat.Tohle taky nijak zvlášť nemusím, ale není to jen doménou svobodného softwaru. Podobný přístup a názory dnes najdeš i v téměř každé větší západní firmě.
Já jsem začal mít zase po dlouhé době extrémně raději Windows než Linux.Je zvláštní, že Windowsí "init" Ti nevadí, přítom je to podstatně větší šílenost, než systemd.
Demokraticky bylo rozhodnuto většinou, že systemd je nový směr.Demokraticky sa dá rozhodnúť pri jednom konkrétnom distre. Ťažko budeš demokraticky rozhodovať, akým smerom sa majú uberať iní - obzvlášť pri slobodnom SW.
Je chyba si spojovat Linux nebo GNU/Linux se systemd. Řada uživatelů a vývojářů s tím má problém a používají nebo chtějí používat něco jiného. Rozhodně ale existence systemd není důvod k opouštění GNU/Linuxu. Aktuálně se to řeší třeba tady: gnu-system-discuss
Zase když ti systemd někdo naordinuje jako požadavek, tak případné problémy nejsou tvoje starost – buď má konkrétní verze otestované, že budou fungovat, nebo jsou ty chyby jeho odpovědnost.
Když si zákazník objedná a zaplatí Red Hat, tak to bude mít na Red Hatu. Nemám s tím zásadní problém. A byť můžu mít výhrady ke kvalitě nebo přehnané komplexitě, pořád je to svobodný software.
zkontroluješ flagy- to taký gentooista musí pri update robiť osobitne pre každý balík? Alebo sa to urobí raz pri inštalácii balíka?
[...] doporucuju vyzkouset, co se stane, kdyz uprostred aktualizace strelis deb, blbuntu nebo cokoli jinyho[...]nestane se "nic", pokud by slo o jadro/initrd, bude dostupne predchozi, pokud by slo o (treba)xorg, v nejhorsim to po rebootu najede do konzole, kde pustit aktulizaci totozne znovu a pojede od pocatku mista kde zkoncila/byla_strelena, "kupodivu" se pri aktualizaci balicku totiz zaznamenava, zda byl uspesne rozbalen, nainsalovan, zkonfigurovan a podle toho se pozna kde to zkoncilo...
v pripade upgradu na vyssi release sa robi merge konfiguracieAutomaticky?
pri RR je to hadam ok, nie?Subjektívne sa mi to zdalo horšie, ako pri Archu (ale to môže byť tým, že Debian má programy rozdelené do viacerých balíkov).
mam zato, ze zmeny si hlavne musis strazit ty sam sledovanim changelogovZa roky pri Archu som nič také nerobil. Pred updatom mrknem na web, kde sa môže vyskytnúť info o nejakých závažnejších zmenách. Po update mrknem výpis, kde vidím prípadné upozornenia, hlavne ohľadom potreby ručných mergov konfigurákov. Ak sa aj napriek tomu niečo poserie, mrknem na nejaký mailing list (čo treba tak raz za rok, ale závisí, čo všetko človek s tým distrom robí).
merge ponuka automaticky, ale rucne treba vybrat moznost. ale mozno to ide urobit nejakym nastavenim, neviem, neriesil som to estev pripade upgradu na vyssi release sa robi merge konfiguracieAutomaticky?
ako neviem, v com je problem, updatne sa to, co sa ma a je topri RR je to hadam ok, nie?Subjektívne sa mi to zdalo horšie, ako pri Archu (ale to môže byť tým, že Debian má programy rozdelené do viacerých balíkov).
no ved to som mal na mysli. ale tu to treba rozdelit na system a porty. pri upgrade portov som fakt nic neriesilmam zato, ze zmeny si hlavne musis strazit ty sam sledovanim changelogovZa roky pri Archu som nič také nerobil. Pred updatom mrknem na web, kde sa môže vyskytnúť info o nejakých závažnejších zmenách. Po update mrknem výpis, kde vidím prípadné upozornenia, hlavne ohľadom potreby ručných mergov konfigurákov. Ak sa aj napriek tomu niečo poserie, mrknem na nejaký mailing list (čo treba tak raz za rok, ale závisí, čo všetko človek s tým distrom robí).
softlevel=
nebo za běhu#!/sbin/openrc-run # Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 #NB: Config is in /etc/conf.d/gpm command=/usr/sbin/gpm command_args=" -m ${MOUSEDEV} -t ${MOUSE} ${RESPONSIVENESS:+ -r ${RESPONSIVENESS}} ${REPEAT_TYPE:+ -R${REPEAT_TYPE}} ${APPEND} " pidfile=/var/run/gpm.pid depend() { need localmount use hotplug logger } start_pre() { if [ -z "${MOUSEDEV}" ] || [ -z "${MOUSE}" ] ; then eerror "You need to setup MOUSEDEV and MOUSE in /etc/conf.d/gpm first" return 1 fi }
/etc/init.d/demon prikaz
Možnost, ale ne nutnost psaní skriptů à la SystemDNemyslel si náhodou a la sysvinit?
Len tak na okraj - dá sa nejako zistiť kedy presne bola urobená inštalácia?12. listopadu 2011. You're welcome.
dá sa nejako zistiť kedy presne bola urobená inštalácia?Stačí najít soubor, který nebyl změněn od instalace. Může (ale nemusí) to být např. adresář
/bin
.
find / ! -newer /opt/ -printf "%Ty-%Tm-%Td %p\n"
ukazuje aj staršie systémové súbory ako z r. 2011 (vrátane adresárov). Ten mtime bol uložený v tar archívoch pri zostavovaní balíkov...
dumpe2fs /dev/tveho_rootfs | grep created
dá sa nejako zistiť kedy presne bola urobená inštalácia?pacman tuhle informaci ukládá do logu:
head -n1 /var/log/pacman.log
$ head -n1 /var/log/pacman.log
[2009-05-25 20:50] installed filesystem (2009.01-1)
... koukám, že už mam ten systém taky nějakej pátek Vezmemez jednu pidicast - logovani. Kupodivu od toho vetsina adminu ocekava predevsim to, ze ty logy jaksi budou (a pak samo jeste bambiliardy dalsi veci - to uz kazdy soudruh dle svych preferenci). Se systemd nejen ze nebudou ty dalsi veci, ale ony predevsim nebudou ty logy.Ano, journald měl na počátku hromadu problémů, ale asi většina je vyřešena. Stále si logy můžeš přeposílat jinam, v tomto se nic nemění. Co mi vadí je poměrně málo možností journalctl pro filtrování. Umí to jen OR nebo AND (a to ještě omezeně). Ale třeba to neumí vypsat logy od všech unit kromě těchto. (Tj vypnout si zobrazení logů od nějaké ukecané služby a nechat tam vše ostatní. Jasně, dá se to filtrovat v jiných programech.)
Takovej script muze mit klidne i desitky tisic radku, a nikdy to nebyl problem.Což je přesně ten problém. Pokud nějaká služba potřebuje tisíci řádkový rc skript, tak asi nebude úplně v pořádku. Normální služba se jednoduše spustí jako binárka a vypne se po poslání signálu sigint.
Muzem pokracovat, screen je snami uz peknych par desetileti, a kazdej prece vi, ze kdyz potrebuje ... mno a se systemd to opet je rozbity.screen obcházel problém, který ani nemusel existovat. Asi každý zná kombinaci
nohup program &
. Mnozí to dokonce doporučují dávat i do rc.local
. Jen proto, aby nějaký proces přežil odhlášení uživatele (ignorovat signál hup). Pokud ten proces má běžet, má to být řádně zapsáno do init systému jako service. screen toho řešil pochopitelně mnohem víc, ale v zásadě stejnou věc. Jak spustit program (a uchovat jeho výstupy) a přežít odhlášení od terminálu. systemd nabízí řešení, jak tohoto docílit. Toto je systemd way, kterou používám pro start tmuxu. Je to moje user unita, takže si ji mohu upravovat. A díky tomu, že mi admin nastavil linger, tak to přežije i odhlášení. Tj. místo toho, aby tam běžely uživatelské procesy, které možná mají a možná nemají běžet, tak je to jasně definováno unitou. A všechno ostatní je zabito (KillUserProcesses=yes
).
A ted se rozhodli rozbit i desitky let pouzivanej system uzivatelu, a kvuli nim maji svy aplikace prepsat mililony vyvojaru?To byl jen návrh a proof of concept. Je jasné, že takto to nemůže fungovat obecně a v serverovém prostředí už vůbec ne, ani ten PoC nijak neřešil systémové uživatele, jen se zkoušel podívat na určitý problém uživatelských účtů z jiného úhlu pohledu. LDAP ti fakt nikdo nebere.
A už sa skurvené logovanie do blobov dá vypnúť?Snad odjakživa šlo logy přesměrovat do rsyslogu a tím zachovat původní chování (na Debianu to byl dlouho default, nebo aspoň to tak zůstávalo po aktualizacích). Také jde v journald přepnout logy jen do paměti nebo i úplně vypnout (
Storage=none
).
A už sa skurvené logovanie do blobov dá vypnúť?Pokud vím, tak ne. Ale dá se to přesměrovat.
Na to aby ti fungoval Tmux si musíš otvoriť Lennartovu modlitebnú knížku to je fakt paráda.Nemusíš. Některá distra mají default
KillUserProcesses=no
(zkompilováno), u jiných si to můžeš nastavit v /etc/systemd/logind.conf
. Potom ti bude fungovat vše jako dřív.
To, co jsem psal, je najít správnou systemd cestu. Používat to nemusíš. A důvod, proč jsem napsal: "nohup" řešení jsou ve skutečnosti jen workaround. To, že se tento workaround používal tak dlouho, že to někdo bere jako správné, je chybou. To, že něco funguje, ještě neznamená, že je to uděláno správně. A mít v systému jen tak naspawnované procesy, o kterých nevíš ani to, jestli mají vůbec běžet (protože jejich user se před měsícem odhlásil) nepovažuji za správné. Když se to uzavře do unity (resp do čehokoliv, co má nějaká metadata), tak je naprosto jasný kontext těch procesů a ty jako admin víš, co to je a proč to tam je. To, že je to zrovna dneska v systemd unitě pomocí system groups je čistě implementační detail. Klidně to mohl napsat někdo dřív nějak jinak.
Si kámošDík.
si admin v biznis sfére, kde proste človek nechce riešiť to a to pretože toto je inJá vůbec neřeším co je in a co je out. Vůbec. Pokud mám server, kde je systemd, tak to nastavím přes systemd. A funguje to. Když se budu tvářit, že tam systemd vůbec není (protože se mi nelíbí), a nastavím to jinak, zpravidla to nebude fungovat. Vidím to dnes a denně. Admin, který se tváří, že ho nějaký systemd nezajímá a nastavuje to jako před 15 lety, má neustálé problémy. Takže to vůbec není o tom co je in nebo není, je to zcela pragmatický přístup, abych si ušetřil co nejvíc práce.
Boha jeho, kto nevie nastaviť sieťNěkdy si udělej reality check. Stále ještě spousta adminů nedá dopustit na
ifconfig
a route
. U některých nepomůže ani ukázka toho, že jejich nástroj nefunguje (stačí jedné iface přiřadit více adres, ifconfig
vidí jen jednu, ip addr show
vidí všechny). Někteří to dál ignorují a vesele používají to, co bylo obsolete už v době, kdy to vyzkoušeli poprvé.
Nehledě na to, že různé nástroje buď nefungují (NM), nebo nefungují v moderním prostředí (zkuste si do network-scripts dát hromadu rout, ipv6 apod.) To, že ty network skripty fungovaly v době, kdy tam byla jedna ip a jedna brána je moc hezké, ale dneska už to nestačí.
Mno nijak neskontroluje, že ten démon produkuje hovná. Takže si to ošéfujem sám a to či vôbec beží je ten najmenší problém.Tohle se týká monitoringu a ano, ten je potřeba samozřejmě také.
Systemd is compatible with SysV and LSB init scripts.Proste fajn nový init, nové pravidlá a ten zápis unit fakt nevyzerá zle. Čo sa týka ifconfig, to je deprecated 10+ rokov a stále vznikajú návody kde sa spomína, prv som nadával, dnes už na to ani nereagujem
Za toto ťa mám rád, že aj keď sa niekto vytočí, ty reaguješ rozumnými argumentami.Dík. No mě to nevytáčí. Já to spíš beru tak, že každý má svoji formu komunikace, kterou používá. Proto mi třeba ani nevadí poněkud necenzurovaný slovník diskutéra 'j'. Prostě je to jeho signatura.
Čo je ale hlavný problém, že sa z Linux enviromnt v main streame stáva monolit, bez možnosti vymeniť hocijakú komponentu.To mě vadí taky. Osobně si nemyslím, že by byl nějaký větší problém přepsat libovolnou systemd komponentu, přece jen je to OSS, ale současně mi vadí to, že neexistuje (nebo se o tom nemluví) popis komunikace a propojení jednotlivých systemd komponent. Možná to používá nějakou interní sběrnici, možná rovnou dbus. Nevím. Pokud by to tak bylo a bylo by to dobře zdokumentované, tak by si každý mohl napsat vlastní implementaci něčeho. Spíš mě vlastně překvapuje, že se to neděje už dnes. Zdrojáky jsou dostupné.
Napr. aj v embedded systémoch máme systemd a neskutočne ma sere, že to neposiela čo má, pretože systemd začne jebať a tam ide o závažnejší problém, pretože, keď to nehackneš, tak to neupgradneš a upgrade od výrobcu raz za rok je k hovnu a po dvoch, troch rokoch už žiadny upgrade ani nepríde.Dalo by se to více specifikovat? Co to přesně neposílá a jak to souvisí se systemd? Systemd tam padá (segfault nebo nějak jinak?) Celkově z toho popisu mám pocit, že jde o nějaké specifické zařízení, které navíc není výrobcem dobře podporováno (update jednou za rok?).
V tých embedded systémoch beží úplne hovno bez možnosti vymeniť hocijaký HW komponent, načo tam vôbec nejaký univerzálny init vôbec je?No to se musíš zeptat těch vývojářů. Mě to taky, podle popisu, nedává smysl.
Ževraj kvôli jednoduchému deploymentu, to čo je dnes za vývojárov?S deploymentem na, ještě k tomu vlastní, systém nemá systemd nic společného. Tohle jsou všechno výmluvy na vlastní neschopnost. Vidím to zcela jasně: "Nějaký nadšenec, zaměstnanec, kdysi dávno napsal systemd unity pro ten bastl. Tento borec odešel a nikdo další už to neumí napsat. Proto se to ani nezmění. 'Deployment' funguje, takže to budeme dělat na systemd, protože nic jiného neumíme." (Podobnost s realitou mnohých firem je čistě náhodná.
Systém ktorý je jednoúčelový, si nevie vývojár nastaviť na tých pár knižníc, na ten jeden procesor, na jednu zbernicu a vie že to proste nikto nemá šancu nič vymeniť. Ja tým maldým fandím, nech si všetko skurvia po svojom...Tohle mě neskutečně štve na hype kolem dockeru. Místo toho, aby se vývojář zamyslel nad tím, jaký bude výsledek jeho práce a cílil to na nějaký balíček nebo jednu binárku (v tomto fandím GoLangu), tak si zmastí docker image a je to. Bordel je schovaný uvnitř a nikdo tam nevidí. Ale zase, za tohle docker nemůže, tohle se dělo dřív i kolem javy. "Program" byla skrumáž jarů, nějaký startovací sh skript, miliarda libs ale hlavně, přibalený zcela konkrétní a roky zastaralý JRE, protože na systémovém to prostě nejede a nikdo nebude řešit kompatibilitu. Hrůza.
Dík. No mě to nevytáčí. Já to spíš beru tak, že každý má svoji formu komunikace, kterou používá. Proto mi třeba ani nevadí poněkud necenzurovaný slovník diskutéra 'j'. Prostě je to jeho signatura.Ako to cítim, tak to zo mňa ide. Nejaký čas som sa krotil, pretože sme všade boli za trollov, ktorí všetko len kritizujú, teraz to vidím ako chybu, že sme sa dali zahnať do kúta. (Jasne, ja proste mám svoju signatúru :) )
To mě vadí taky. Osobně si nemyslím, že by byl nějaký větší problém přepsat libovolnou systemd komponentu, přece jen je to OSS, ale současně mi vadí to, že neexistuje (nebo se o tom nemluví) popis komunikace a propojení jednotlivých systemd komponent.Ja by som to otočil, prečo keď niekde bol nejaký nepísaný štandard, tak sa systemd komponenta nesnažila včleniť do Linux enviroment? Používam všade antiX Linux a dosť vecí sa prebralo z Gentoo vrátane eudev a nie defaultného, ale predpripraveného OpenRC. Systemd vývojárov zaujíma len to ako pohltiť celý Linux enviroment a nie, že by snažili na niečo nadviazať, alebo s niekym spolupracovať. Načo, však RedHat to všetko zaplatí.
Dalo by se to více specifikovat? Co to přesně neposílá a jak to souvisí se systemd? Systemd tam padá (segfault nebo nějak jinak?) Celkově z toho popisu mám pocit, že jde o nějaké specifické zařízení, které navíc není výrobcem dobře podporováno (update jednou za rok?).Proste zlyhá služba a systemd sa ju snaží znova nakopnúť a nenakopne. V logoch vidím ten problém, ale neviem prečo to nedokáže. Lennart by by určite vedel vysvetliť, kde všade okolo sú chyby s ktorými musí bojovať. Načo je tam vôbec zložitý init je záhadou aj mne, keď by to všetko obslúžil jeden skript v Bashi a pracoval ako chcem.
hypeToto je asi najväčší problém, na každej linuxovej konfe sú narvaní RH rečníci o tam aký je vynikajúci deployment v kontajneroch a všetko okolo zabezpeči systemd. Falošný pocit bezpečia, odjebaná práca, proste "keď to nejede" tak jej dáme všetky práva. Ja som pred rokmi od Widiel utiekol k Linuxu kvoli tomu aký je a milujem ho. Nikto ma zatiaľ nepresvedčil, že Linux enviroment stojí roky za hovno a treba ho prekopať. To by skôr neschopní RedHat zamestnanci zaslúžili nakopať. Je tam aj veľa skvelých ľudí ktorí s tou ich politikou nesúhlasia, ale po tých je vidieť len kopec skvelej práce a moc sa o nich nehovorí.
Ja by som to otočil, prečo keď niekde bol nejaký nepísaný štandard, tak sa systemd komponenta nesnažila včleniť do Linux enviroment? Používam všade antiX Linux a dosť vecí sa prebralo z Gentoo vrátane eudev a nie defaultného, ale predpripraveného OpenRC. Systemd vývojárov zaujíma len to ako pohltiť celý Linux enviroment a nie, že by snažili na niečo nadviazať, alebo s niekym spolupracovať. Načo, však RedHat to všetko zaplatí.To je podle mě trochu širší problém. systemd nikam nepřišel, nezačal nikoho vydírat "jestli nás nedáte do distra, tak vám utopíme koťátka". Jak už jsem to psal v jiném komentáři. systemd je velmi často "jednooký mezi slepými". Ale místo toho, aby přišla lepší implementace toho něčeho, tak se nasadil systemd. Velmi často salámovou metodou. Ano, toto mi vadí taky, osobně mám raději otevřený přístup typu: nás systém nabízí toto a je jen na vás, zda to nasadíte, karty máme otevřené. Takhle lze přistupovat ke všem programům splňující nějaké API. Klidně si každý den používej jiný FS, nic se nezmění, protože všechny používají stejný VFS. Nebo DB splňující standard. Takže kdyby systemd byl jen další balíček v repu, který můžeš nebo nemusíš použít, bylo by to, za mě, čistější řešení.
Proste zlyhá služba a systemd sa ju snaží znova nakopnúť a nenakopne.Osobně autorestart (restart-on-failure) nepožívám. Zdravé služby nepadají a pokud to spadne, tak chci vědět proč. Ale nemám problém ani s unitami, který restart-on-něco využívají. Prostě pokud to spadne, systemd to zaloguje a opět spustí. Pokud se ta service nespustí, tam tam má nastaven určitý počet opakovaní za určitý čas. Tj vadná služba může skončit vypnutá. Ale to není chyba systemd. Ta služba by především neměla padat.
V logoch vidím ten problém, ale neviem prečo to nedokáže.No a ten problém (chybová hláška) je ze strany systemd? Asi by to chtělo více podrobností, pokud je možné jej zveřejnit.
Nikto ma zatiaľ nepresvedčil, že Linux enviroment stojí roky za hovno a treba ho prekopať.To záleží, co konkrétně myslíš tím Linux enviroment. Sám za sebe můžu říct, že věci jako nastavení sítě (zrovna konkrétně sítě!!!) stálo vždy za prd a to i u serverových distribucí (vlastně nic jiného ani nedělám), kde by se dala automaticky očekávat velmi zvládnutá podpora mnoha ip, rout, bridgů, iface apod. Jako network-scripts v RHELu nebo interfaces v Debu snad ani nikdo nemohl myslet vážně. Serverový operační systém, který na síti vyrostl, neměl ani pořádné nastavení. Mimochodem, třeba u iptables už několik desetiletí (2
Některá distra mají defaultaby to bylo jako driv, je potreba vice, vim ze si na to reagoval ze u tebe ne, u me na xubuntu 18.04 nekde jo, nekde take ne, nezkoumal sem procKillUserProcesses=no
(zkompilováno), u jiných si to můžeš nastavit v/etc/systemd/logind.conf
. Potom ti bude fungovat vše jako dřív.
vim ze si na to reagoval ze u tebe neJak je vidět, reagoval jsem více obšírněji, včetně odkazu na návod.
nechce to už konečně nějaký systemd lover vzít za mě?Je otázka, jestli někdo takový vůbec existuje...
[...]Stále ještě spousta adminů nedá dopustit namyslim ze 99% tech co pouzijou ifconfig bud nevedi/nepotrebuji ze vice ip priradit lze, nebo vedi ale i vedi ze maji k rozhrani prirazenu jen 1ifconfig
aroute
. U některých nepomůže ani ukázka toho, že jejich nástroj nefunguje (stačí jedné iface přiřadit více adres,ifconfig
vidí jen jednu,ip addr show
vidí všechny). Někteří to dál ignorují a vesele používají to, co bylo obsolete už v době, kdy to vyzkoušeli poprvé.
vedi ze maji k rozhrani prirazenu jen 1Tj taková kladná zpětná vazba: "Používám ifconfig, protože mám jen jednu ip." "Jak víš, že máš jen jednu?" "Protože to vidím v ifconfigu."
osobne pouzivam ifconfig nejcaseji na zjisteni prirazene ip z dhcp, ten vystup je mnohem prehlednejsi nez z "ip a" kde to musim 10x dle hledatTo už jsem slyšel několikrát. Asi je to o zvyku. Mě chybí adekvátní nástroj jako byl
brctl
. Ten výstup byl krásně přehledný. Dneska se bridge nastavuje pomocí ip link
a pro zobrazení se dá použít nástroj bridge
, ale ten výstup moc pěkný a hlavně názorný není. brctl jasně ukazoval tu hierarchii a bylo vidět, co je kam přiřazené. (Jasně, ale jen zjednodušený stav.)
ssh server screen scp neco_velkyho.tgz jinej_server:/kamsi CTRL-A CTRL-D exita jestli fakt ne, co to dneska nahradilo?
Jak bys to asi tak chtel delat?Rozdělit to na jednotlivé komponenty a definovat mezi nimi závislosti. Aby bylo zcela jasné, co spadlo. A definovat reakce na dané události. Už jen ten popis toho tvého systému volá na všechny strany, že je to špatně navržené. Protože to, že stroj, na kterém ti to závisí, běžel před 1s neznamená, že běží teď. Tj ta appka stejně musí počítat s tím, že nějaký závislý server bude nedostupný. Tedy ani když ten předstartovní skript zkontroluje milion věcí, tak to neznamená, že po jeho doběhnutí jsou stále ok. Atd.
Ad screen, zjevne meles o vecech o kterych nic nevis.Jistě, protože mi vůbec neběží na několika stovkách serverů.
Screen resi predevsim to, ze uzivatel CHCE spustit appku, ktera jako servisa NEBEZI, ale NECHCE(nebo nemuze) byt prihlasen hodiny, dny nebo tydny, nez to dobehne a kam jinam nez na fronend terminalu, vypise vysledek.V tom případě to může pustit jako unitu (
systemd-run
) a výsledek si přečíst v logu. Protože toto popsané řešení (které jsem několikrát v praxi taky viděl) je velmi křehké. Např. když se ten server někdy po vykonání té úlohy restartuje, tak user nevidí výsledek, protože ten jeho screen neběží. Kdyby to udělal pořádně, pustil na pozadí a logoval do nějakého logu, tak má výsledek vždy. A nemusí si jej jít přečíst na terminál, může jej najít v nějakém systému pro zobrazování logů nebo třeba v emailu.
V tom případě to může pustit jako unitu (systemd-run) a výsledek si přečíst v logu.Coz je absolutne kokotskej pristup. Nutis uzivatele pouzivat slozitejsi reseni, jen kvuli tomu, ze resi problemy, ktere uzivatel nema.
program | tee output
Jinak já nikoho nenutím. Psal jsem může.
Sám jsem byl svědkem toho, jak se někdo divil, kam mu zmizel "superdůležitý výstup" z něčeho, co měl puštěné ve screenu. V noci vypadla elektřina, server na ups se vypnul, potom zase zapnul a hle, screen nebyl. Takže si nejsem jist, zda tyto problémy uživatel nemá.Uzivatel, ktory pozna prikaz
tee
tieto problemy fakt nema. A sranie sa so systemd-unitou a tee pre jednorazove pouzitie je neporovnatelne.
screen obcházel problém, který ani nemusel existovat. Asi každý zná kombinaci nohup program &. Mnozí to dokonce doporučují dávat i do rc.local. Jen proto, aby nějaký proces přežil odhlášení uživatele (ignorovat signál hup). Pokud ten proces má běžet, má to být řádně zapsáno do init systému jako service. screen toho řešil pochopitelně mnohem víc, ale v zásadě stejnou věc. ... to může pustit jako unitu (systemd-run) a výsledek si přečíst v logu. ... Ale mám to pro interaktivní prostředíNejak si vzajomne odporujes. Najprv tu vsekym podsuvas, ze scren je dobry ta na krajsi "nohup" a ludia su blbci a maju na to pouzivat systemd a potom tomu priznas interaktivne pouzitie. Pretoze screen je dolezity pravepretu prerusenu interaktiviu - pre pokracovanie v interaktivnej praci v iny cas a z ineho pripojenia. Ze sijes zabetovnovany v davkovom server svete je tvoja vec, ale tvrdit, zeto kazdmeu musi stacit, je zabednenost.
Najprv tu vsekym podsuvas, ze scren je dobry ta na krajsi "nohup"Já jsem nikde nepsal, že screen je dobrý jen na kratší nohup! Já jsem jen popisoval, jak tento problém historicky vznikl. Potřebovalo se vyřešit běh programu na pozadí po odhlášení z terminálu. Program běžně reaguje na signál hup tím, že se ukončí. Potom někoho napadlo, že budeme hup ignorovat a odpojíme se od řídícího terminálu. Tím získáme proces, který měl původ v terminálu, ale dokázat se od něj odpoutat. Takže teď máme v systému proces, který nemá žádný kontext, nikdo neví jak a proč vznikl a zda má vůbec běžet. A toto jsem nazval workaroundem. A systemd čisté řešení je zabalit si screen / tmux do unity, aby byl znám kontext (kdo, kdy, ano má to běžet atd.). Takže screen / tmux je v pohodě, proti tomu jsem nic nepsal. Jen jsem upřesnil, jak by měl startovat, aby to nebyl volně plující proces prostorem. Takže mi nepodsouvej něco, co jsem nenapsal. A ano, screen nijak nezajistí, že člověk uvidí výsledek nějakého procesu, takže proto je dobré u dlouho běžících procesů s důležitým výstupem zajistit, aby se ten výstup neztratil. Možností je víc, systemd-run to napíše do logu, výsledek si lze uložit do souboru, poslat emailem apod. To byla jen připomínka, že i ve screenu se ten výstup může ztratit. Jinak pro interaktivní práci, si to vesel používejte, je to skvělý nástroj.
V tom případě to může pustit jako unitu (systemd-run) a výsledek si přečíst v logu.A vstup do toho programu mám taky zapsat do toho logu, že si ho odtud aplikace přečte?
Mimochodem, sem zvedav, jak si nonroot user bude nastavovat nejaky unity v ty sracce ...systemd/User
screen obcházel problém, který ani nemusel existovat. Asi každý zná kombinaci nohup programTo vážně považujete screen a nohup za ekvivalentní?
systemd nabízí řešení, jak tohoto docílit. Toto je systemd way, kterou používám pro start tmuxuJak už tady bylo mnohokrát zmíněno, kdysi bylo považováno za standard nabízet nové věci, ale nerozbíjet ty stávající.
To vážně považujete screen a nohup za ekvivalentní?Z dalších komentářů je snad dostatečně patrné, že nikoliv.
Jak už tady bylo mnohokrát zmíněno, kdysi bylo považováno za standard nabízet nové věci, ale nerozbíjet ty stávající.No jednak je to věc nastavení distribuce a existují distribuce, které mají nebo měly zkompilováno (tj ani ne v konfiguráku)
KillUserProcesses=no
. Tedy pro uživatele dané distribuce se nezměnilo vůbec nic. Pokud to ta distribuce neměla takto zkompilováno ani explicitně nastavené v konfigu, tak si to admin mohl nastavit. Tedy buď se nic nerozbilo, nebo se to velmi snadno přivedlo do předchozího stavu.
Jinak přístup nic nerozbít taky znamená být zabetonovaný v minulosti. Tento mindset předpokládá, že, tak jak se to udělalo napoprvé, je prostě správně a nikdo další v budoucnu už to nesmí rozbít. Málo co je uděláno dobře hned na poprvé. Proto je dobré to změnit.
Ale uznávám, oba přístupu jsou legitimní. Osobně na nějakou dlouhodobou kompatibilitu kašlu (pochopitelně s podmínkami, že přechod na novou verzi bude mít minimální náklady, bude zajištěno přechodové opatření a bude to ohlášeno transparentně a dlouho dopředu) a nevidím moc výhod na tom si v jistém nejmenovaném OS pustit 20 let starý exáč a on fakt funguje, jenže s tím, že si ten OS táhne s sebou všechny možné quirky, aby to fungovalo.
Jinak přístup nic nerozbít taky znamená být zabetonovaný v minulosti. Tento mindset předpokládá, že tak jak se to udělalo napoprvé, je prostě správně a nikdo další v budoucnu už to nesmí rozbít. Málo co je uděláno dobře hned na poprvé. Proto je dobré to změnit.Oj, tak teď sis dovolil hodně.
Jinak přístup nic nerozbít taky znamená být zabetonovaný v minulosti.Tohle je prostě a jednoduše lež. Srovnejte si třeba vývoj systemd s vývojem kernelu.
Az na ten detail, ze o tyhle "drobny" zmene soudruh lennart nikoho neracil informovat (nebylo to uvedeny ani v zadnym changelogu)https://github.com/systemd/systemd/blob/master/NEWS CHANGES WITH 230, Fairfax, 2016-05-21
A o tom betonovani minulosti bez vypravet Linusovi, ten uz pakrat podobny lidi ktery neco nekde rozbili kopnul mezi pulky.No však já vím, ale toto přece podporuje argument zabetonování v minulosti. Někdo chtěl změnu a Linus řekl ne. Tj ten dotyčný se na to mohl buď vykašlat úplně a podpořit tím zabetonování, nebo se mohl zamyslet jak tu změnu udělat a nic nerozbít (na tom není nic špatného, jen to vyžaduje více času a prostředků), nebo vytvořit nové volání, kde implementovat tu danou věc (tj přidat víc práce s údržbou do budoucnosti). V praxi se používají asi všechny tři metody, každopádně dvě z nich vyžadují větší prostředky a jedna z nich více práce do budoucnosti.
Ve widlich si 20 let starej exac nepustis.Vytáhl jsem CD z časopisu CHIP 1999/2 a spustil na nejnovějších W10 nějaký exáč z roku 1998. Bez problémů. Moje programy z Delphi z roku 2000-2001 fungují též.
Ve widlich si 20 let starej exac nepustis. V linuxu kupodivu jo.Pokud to bude "exac" udělaný správně linux-way, tj. s maximálním využitím sdílených knihoven, a ne statický build, tak si každý snadno může zkusit, jak dopadne. U netriviální aplikace skončí už na libc. Na posledních Windows pro některé zákazníky provozujeme binárky z dob Windows NT (1997) bez úprav a funguje to.
systemd-networkd
prostě funguje. systemd-timesyncd
(timedatectl
) prostě funguje. Kdo potřebuje mít třeba lepší statistiky, jak dobře je čas synchronizovaný, může použít ntpd
. Krom speciálních případů napojení na státní etalon času toto není potřeba. Tj ano, u některých serverů máme ntpd s lepšími stats, ale na zbytku je timedatectl set-ntp true
a čas je synchronizován.
Místo psaní kravin do rc.local
(což mnozí dodnes radí - mimochodem, nedávno jsem narazil na případ, kdy někdo radil dát do rc.local
sérií příkazů sysctl
pro nastavení čehosi. Přitom sysctl
má vlastní nastavovací adresář /etc/sysctl.d/
- takže ta rada byla špatně nejen z pohledu systemd, ale dokonce i z pohledu toho, co chtěl dotyčný docílit) je lepší si napsat několik velmi jednoduchých unit typu oneshot service. A admin má okamžitě přehled, co konkrétně z původního "rc.local
" selhalo. Uživatelé si mohou psát své vlastní unity do své vlastní user instance systemd a mít tak vlastní služby po loginu.
Atd. Já neříkám, že systemd je nejúžasnější věc na světě, to rozhodně není, ale musím zcela objektivně uznat, že to co dělá, dělá často líp, než jiné řešení. Velmi často je to "jednooký mezi slepými," ale to spíš ukazuje, jak blbě jsou předchozí programy napsané.
Jinak já osobně jsem na serveru přešel na FreeBSD. Systemd není jediný důvod. Je to jen zástupný problém. Zkusím to ve stručnosti vysvětlit. S příchodem systemd mnozí říkali, že se konečně vyřeší bordel v rc skriptech služeb. Že konečně bude s programem distribuována jedna service unita a díky možnostem (simple, exec, forking) to konečně bude jednoduché a bude v tom pořádek. Samozřejmě, že se tak nestalo. Protože lidi, kteří neuměli psát rc skripty pro své služby, tak stejně tak neumějí psát unity. Problém vůbec není v initu nebo systemd. Takže dneska je v některých unitách podobný bordel, jako dříve v rc skriptech a někteří se vyžívají v ExecStartPre
, ExecStartPost
a volají tam sáhodlouhé skripty, které "cosi" nastaví pro běh služby. Nic se nevyřešilo, blbě napsaná služba má blbou unitu stejně jako dříve měla blbý rc skript. Ano, někdo může říct, že pro dobře napsanou službu je service unita jednoduchá (výchozí typ simple a jeden řádek s ExecStart
), což je pravda, ale rc skript nebyl o moc komplikovanější (jen template a nastavený jeden řádek pro start).
A při používání FreeBSD mám pocit, že u toho fakt někdo přemýšlel. Init system to má napsaný v bashi, ale není v tom bordel. Různé systémové příkazy jsou ve skutečnosti jen různá volání různých Makefile, ale není v tom bordel. Využívají se dávno napsané primitivní programy. Implementace nových funkcí (často uvádím za příklad jaily) jsou implementované i v tom bash init skriptu velmi jednoduše. Zkrátka ten base system je velmi unixový. Pochopitelně s programy "třetích stran" to tak slavné není. Spoustě portů chybí i základní závislosti na knihovnách a pro blbě napsanou službu je blbý rc skript (často jen ohnutý z linuxu). Takže ani tady se zázrak nekoná.
považován za systemd hatera.to mas pravdu a sam sem posledni dobu prekvapen, jakou promenou si prosel. Moc dobre si ty tvoje komentare jeste pamatuji a fakt me pri cteni tvych soucasnych komentaru k systemd napadlo, jestli nam Herona nevymenili
S příchodem systemd mnozí říkali, že se konečně vyřeší bordel v rc skriptech služeb. Že konečně bude s programem distribuována jedna service unita a díky možnostem (simple, exec, forking) to konečně bude jednoduché a bude v tom pořádek.Tak, o to presne jde. Ale inzenyri (ne lide jako Poettering) na tohle maji takove osvedcene reseni- rika se tomu 'normy'.
to mas pravdu a sam sem posledni dobu prekvapen, jakou promenou si proselTak proměnou. Hele, všechno, co jsem psal, byla ve své době pravda (resp asi ne všechno, jistě se mohl najít případ, že jsem měl chybné informace z nějakého článku - proto to teď taky píšu, mnoho článků o systemd (nejen) jsou zavádějící). Jurnal se rozbíjel naprosto pravidelně, verify neprošla většina souborů, bylo to extrémně pomalé (někdo místní tehdy poslal odkaz na opatchovaný journalctl, který byl mnohokrát rychlejší) apod. Sám jsem narazil na chybu, kdy se krátce běžící úlohy do logu nezapisovaly (resp ano, zapisovaly se, ale bez tagů _SYSTEMD_UNIT apod.) jen tato chyba mě stála cca jeden víkend ladění mého programu. Nakonec jsem přišel na to, že to v tom logu je, ale bez tagů. Dodnes to nemají vyřešeno. Ale snažím se být objektivní. Tj pokud se mě někdo zeptal na to, jak nastavit nějakou systemd věc, tak jsem mu poradil bez ohledu na filozofii. Tj sice nesouhlasím se směrem, kam se systemd v linuxu ubírá, ale to neznamená, že někomu neporadím, jak si nastavit unitu. Protože šířit chybné informace té věci stejně nepomůže. Takže pokud někdo chce, tak si může nastavit síť třeba i s pomocí mého návodu bez ohledu na můj názor. No a taky mám na uklidnění FreeBSD
Ale inzenyri (ne lide jako Poettering) na tohle maji takove osvedcene reseni- rika se tomu 'normy'.Tohle jsem asi nepochopil, podle mě jsou normy skvělá věc. Na tomhle vyrostl celý průmysl.
Moje zkušenost se Systemd je taková, ze nejvíce problémů bylo právě s init scripty a kompatibilitou se starým SysV initem. Jakmile se zpackaný initscript přepsal do systemd unit, tak to začlo fungovat a problémy přestaly. A hlavně je teď jasné, zda služba běží či nikoliv.Moje zkušenost je zcela stejná. Taky jsem pár unit musel napsat sám. Jenže admin tady není od toho, aby opravoval rc skripty nebo psal chybějící unity. Za distribuci nebo autora toho balíčku.
Například konfigurace sítě s dvěma WiFi kartami, dvěma instancemi hostapd a jedním bridgem je při čistě systemd + networkd řešení mnohem čistší a spolehlivější, než při použití init scriptů.Já sice nemám wifi karty, ale mám několik bridge pro kontejnery a nastavit nový bridge v systemd je hračka. Stejný ini like formát, jako pro všechno ostatní, konfigurace sítě na pár řádků.
teprve když jsem všechny rádby uzitečná udělátka (kteréa právě pomáhala s tím, co SysV initscripty nezvládaly)Opět stejná zkušenost. Když jsem z debianu vyházel většinu těch jejich "helperů" pro service a ifupdown a update-rc.d apod, tak to najednou začalo hladce fungovat. Ale tj x let zpět. Asi bylo lepší přejít na jiné distro (třeba arch) a nepárat se s debianními skripty na všechno.
Atd. Já neříkám, že systemd je nejúžasnější věc na světě, to rozhodně není, ale musím zcela objektivně uznat, že to co dělá, dělá často líp, než jiné řešení. Velmi často je to "jednooký mezi slepými," ale to spíš ukazuje, jak blbě jsou předchozí programy napsané.S timhle nesouhlasim. Ostatni inity jsou napsane dobre. Jen proste zastaraly. Nereflektuji nastup desktopu, kde se rozbiji klasicky pristup root vs. user. Stejne tak spousta sluzeb zeslozitelo. Systemd se s tim jako prvni pokusil neco poradne udelat. Ale logicky musel narazit, protoze spousta problemu ma puvod v jadre (resp. v navrhu OS). Takze misto silenych wrapper skriptu se objeuvuji silene konfiguracni volby unit, atp. FreeBSD si muze dovolit mit hezky init, protoze nemusi diky svemu nizkemu a vice specifickemu rozsireni resit spoustu problemu.
Velmi často je to "jednooký mezi slepými," ale to spíš ukazuje, jak blbě jsou předchozí programy napsané.Systemd umi byt taky hodne kreativni, jak veci udelat spatne. Existuje uz treba nejaky inteligentni zpusob, jak z journalu odstranit vybrane coredumpy bez toho, aniz bych musel odrolovat i zbytek logu?
Systemd umi byt taky hodne kreativni, jak veci udelat spatne.To zcela nepochybně.
Existuje uz treba nejaky inteligentni zpusob, jak z journalu odstranit vybrane coredumpy bez toho, aniz bych musel odrolovat i zbytek logu?Nevím.
journactl --help -S --since=DATE Show entries not older than the specified date -U --until=DATE Show entries not newer than the specified dateJestli je to reakce na muj dotaz:
Existuje uz treba nejaky inteligentni zpusob, jak z journalu odstranit vybrane coredumpy bez toho, aniz bych musel odrolovat i zbytek logu?Tak to nic neresi. Problem je, ze pokud mas segfaultujici sluzbu (napr. chyba v PHP) nebo proste jen vyvojarsky stroj, kde segfaulty jsou bezne, tak mas core dumpy ulozene v zurnalu. Z ceho plyne, ze bud ti brutalne narostou logy (gigabyty) nebo ti to vytesni uzitecne informace, pokud tam mas nastaveny limit na velikost zurnalu.
Logovanie, správa sietí, zavádzač, synchronizácia času - a to iste nie je koniec zoznamu (a koniec snáh o začleňovanie rôznych funkcionalít do init démona).Nevím jak na Archu, ale na Debianu z uvedeného ze systemd používám pouze logování, a to ještě dost omezeně (journal vlastně nečtu, všechno se hned přeposílá do rsyslogu). Uvedené věci (networkd, bootněco, timesyncd) jsou na Debianu dokonce defaultně vypnuté. Na Archu nejsou a nelze je jednoduše vypnout? A co se týče té správy uživatelů, tak pokud je pravda co psali v diskuzi na Rootu (osobně jsem to neověřoval), tak to též bude triviálně vypnutelné, resp. vůbec nezapnutelné.
Mimochodom - prečo? Prečo nemáme balíky ako systemd-core, systemd-journal, systemd-network, systemd-ntp... Jednoducho odinštalovateľné a nahraditeľné inými (bez závislostí jeden na druhom)?
Přesně tak, systemd chybí modulárnost a standardy. Už jsem se tu o tom rozepisoval několikrát (1, 2, …) Přitom systemd má i pár hezkých vlastností.
Je to dost zásadní vada, ale nemusí ho to nutně diskvalifikovat. Pokud umožníš lidem se zapojit, aniž by museli podepsat smlouvu s GitHubem (mít tam účet). Tzn. pokud půjde hlásit chyby, posílat patche, diskutovat atd. i jiným (svobodným) kanálem. Např. můžeš fungovat jako taková proxy a propisovat příspěvky od těchto uživatelů a vývojářů do GitHubu.
Pokud je GitHub jedinou cestou, jak lze přispět do kódu nebo třeba nahlásit chybu, tak ano, není to příčetné.
Dost projektů vyvíjených v rámci GNU nebo pod Apache Foundation nebo různé nezávislé projekty…
Přijde mi, že z toho děláte moc velkou vědu – přitom to jsou celkem základní doporučení a dobré praktiky.
V diskusi na Rootu se třeba někdo pohoršoval nad povinností veřejně vystavit verzovací systém (tzn. ukázat historii – kdo, kdy, co, proč) a divil se, že nestačí jen občas zveřejnit zazipované zdrojáky (snapshot). :-)
Tady se zase někteří děsí toho, že by měli elektronicky podepsat vydanou verzi – přitom je to věc, kterou zralé projekty běžně dělají a nic divného jim na tom nepřijde, je to samozřejmost.
modulárnostNa jaké úrovni si to představuješ? Systemd je projekt obsahující řadu nástrojů (init, networkd, timesyncd, journald, resolvd, ...). Většinu z nich lze nepoužívat a případně ani nekompilovat a neinstalovat. Autoři se rozhodli vše spravovat v jednom git repository, ale to IMHO není proti modulárnosti, má to nějaké nevýhody ale i výhody, a mě jako uživatele systemd na úrovni správce vlastní embedded distribude to nijak nepohoršuje. Modulárnost systemd v tomto ohledu využíváme. Že se mainstream distribuce rozhodly balit vše najednou není problém na straně systemd projektu.
Ano, rozdělit to do více repozitářů a mít mezi těmi moduly dobře definované rozhraní. Což následně umožňuje nahrazování jednotlivých modulů vlastní implementací a nebo použití vybraných modulů nebo funkcionalit i s jiným jádrem (jiným init systémem).
Autoři se rozhodli vše spravovat v jednom git repository, ale to IMHO není proti modulárnosti
Je to asi jako když píšeš v Javě a členíš si aplikaci do javovských balíčků1 a myslíš si, jak to máš modulární – a pak se rozhodneš to přepsat do OSGi nebo do Java Platform Module System nebo to jen rozdělit do více Maveních projektů (více JARů) a najednou zjišťuješ, že jsi to psal vlastně špagetově a že se ti hranice mezi moduly jaksi rozmazaly a různé třídy a metody používáš napříč moduly bez nějakého řádu.
Dá se tedy říct, že pokud přechod na systém vynucující2 izolaci modulů je pro tebe obtížný a musíš toho dost přepisovat, tak to znamená, že jsi nebyl dostatečně disciplinovaný a reálně nedělal modulární aplikaci.
[1] package, což jsou vlastně jen jmenné prostory (sice existuje package protected, ale pro izolaci modulů je to nedostatečné)
[2] tzn. není to jen nějaké doporučení nebo varování, ale porušení těch pravidel znamená, že to nejde zkompilovat
Fascinace standardizací a dobře definovaným rozhraním je fajn, ale v reálu to může mnohonásobně zvýšit náklady na vývoj a údržbu a garance kompatibility.
Zrovna u softwaru, který má ambice být klíčovou součástí mnoha distribucí, si myslím, že by se z kvality a dobrých zvyků nemělo slevovat. Naopak – takovýto software by měl být to nejlepší, co jsme schopní vyvinout – a ne dělat nějaké kompromisy v zájmu zlevnění vývoje.
V aplikacích ať si lidi prasí a dělají kompromisy, jak chtějí, ale základní systémové komponenty by měly být napsané čistě a minimalisticky.
Ty se snažíš prosazovat určitou architekturu, po které zřejmě není až tak reálná poptávka.
A čím si potom vysvětluješ to, že tolik lidí má se systemd problém a snaží se hledat cestu, jak z toho ven? Viz třeba ta diskuse v gnu-system-discuss.
Chybějící specifikace/standard je reálný problém. Kdyby ze systemd vyčlenili to jádro (init systém) a všechno ostatní nechali bokem + stabilizovali a zdokumentovali API, tak si myslím, že by to i lidi celkem rádi používali. A byl by to software řádově s nižšími desítkami tisíc řádků kódu (dokonce i v C).
Falešná dichotomie… Dobře navržený a transparentní systém nevylučuje dobrou použitelnost.
V KDE to jde naklikat v nastavení. Ale ani si už nevzpomínám, kdy jsem si naposledy nastavoval kurzor – asi někdy v dobách KDE 2.0, kdy jsem si s tím různě hrál (v té době jsem střídavě používal i Gnome).
Stejna tak se muzem bavit dal o tom, proc Windows umi naskalovat kazdy monitor zvlast, tak aby na nem bylo GUI stejne velke, zatimco Plasma ne.IIRC Plasma tohle umí a naopak to neumí Gnome, resp. pouze umí celočíselné násobky.
[...]Rozumej vice systemd. Pokud ho chces zavratit, pak zacni manzelku ucit, jak se pouziva prikaz mount/umount u USB flashek, a jak nastavit v Xorg.conf monitory.mount/umount USBFlash kliknutim na plose nebo v spravci souboru i automaticke nastaveni xorg.conf fungovalo davno pred systemd...
Kdyby ze systemd vyčlenili to jádro (init systém) a všechno ostatní nechali bokemOtázkou je, co je zrovna v případě systemd to init jádro. Systemd není jen init, který spustí servicu a jde od toho. Už třeba jen to, že služba může mít závislost na mount unitě znamená, že ještě před spuštěním služby je potřeba namountovat nějaký fs. Nevím, zda je možné mít podobné závislost na nějaké síti (tj nahodit nějaký inface, zapnout tunel apod.), ale bylo by to logické rozšíření. Ta service vůbec nemusí startovat automaticky, může být socket activated, nebo spouštěná přes dbus. Najednou ti ten core init zasahuje do správy mountů, možná do správy sítě, dejme tomu do kontejnerů, určitě do systémové sběrnice apod. Tj to core je hodně velké. A ano, jistě by se to dalo rozdělit a propojit nějakým API, ale je otázka, nakolik by to rozdělení bylo umělé. V tomto nelze nezmínit snahy udělat pomocí MD, LVM, XFS něco jako btrfs, ale bez btrfs. Tedy, podle autorů, stačí pouze jen to, kdyby ty vrstvy více a oboustranně komunikovali a dá se dosáhnout téhož. No jenže je otázkou, zda to rozdělení na vrstvy nebude už jen čistě formální, protože pro danou funkci bude potřeba tam mít přítomné všechny "vrstvy" a musí mezi sebou masivně komunikovat.
V tomto nelze nezmínit snahy udělat pomocí MD, LVM, XFS něco jako btrfs, ale bez btrfs.To vypadá velmi cool, díky za odkaz. Mít něco jako btrfs, ale od lidí, kteří umí napsat robustní FS by bylo super.
No jenže je otázkou, zda to rozdělení na vrstvy nebude už jen čistě formálníNo tak jistěže by to bylo víceméně pouze formální, ale to takové ty "všechno musí za každou cenu být modulární" nadšence moc nezajímá...
To vypadá velmi cool, díky za odkaz. Mít něco jako btrfs, ale od lidí, kteří umí napsat robustní FS by bylo super.Není zač. K tomu dalšímu, btrfs můžeš se všemi funkcemi používat od roku 2011. Tento výtvor postavený na fs z roku 1994, lvm z roku 2002 a md taky tak nějak nemůžeš používat ještě ani v roce 2019. Ale to si musí každý vybrat, zda bude používat dostupný fs, nebo si počká a bude roky bez těch funkcí. Ono se to dá zkombinovat, používat to co je a potom přejít na něco lepšího. I to btrfs se časem vylepšuje, takže to je soutěž různých přístupů.
Ale to si musí každý vybrat, zda bude používat dostupný fs, nebo si počká a bude roky bez těch funkcí.Neříkám, že to obecně tak není, ale osobně to vidím tak, že si budu muset počkat tak jako tak - u btrfs na to, až bude důvěryhodný (jestli se to někdy stane) a u XFS, až bude mít ty fíčury (jestli se to někdy stane). Co se týče LVM a MD, IMO to docela dává smysl, protože třeba btrfs a ZFS taky mají v sobě něco jako LVM/MD, žejo (ale tu přednášku jsem, pravda, ještě neskoukl)... Kdo má s btrfs dobré zkušenosti / věří mu se svými daty, tak to samozřejmě má jinak...
u btrfs na to, až bude důvěryhodnýA to přesně znamená co? Pro mě je btrfs důvěryhodný od 2011, od kdy jej používám. Osobně si myslím, že to je více než cokoliv jiného věcí psychologie a na některé projekty se nabalilo tolik "pověr" (nálepek, předsudků), že se toho jen těžko zbaví.
protože třeba btrfs a ZFS taky mají v sobě něco jako LVM/MDNo to právě nemají. V nejvyšší úrovni abstrakce lze disky chápat jen jako pooly bloků. Každý soubor rozdělíš na bloky a tyto bloky uložíš na disky. Pokud každý blok uložíš na více disků, máš redundanci. Tedy vůbec tam nemusíš mít nic jako MD (do kterého vstupují bloková zařízení a které vytváří další blokové zařízení), prostě máš jen skladiště bloků. Přidáš další disk a začneš na něj ukládat další bloky. Odebereš disk a jeho bloky se naházejí na zbývající disky. Zatímco při přidání disků do MD musíš čekat, až se ti to celé přepočítá (což může trvat dny), tak přidání disku do btrfs je hned. S LVM je to v bledě modrém. Do LVM vstupují bloková zařízení (PV) a LVM exportuje bloková zařízení (LV). Ale není potřeba pracovat na úrovni blokových zařízení. Prostě "subvolume" bude jen podmnožinou bloků v daném storage poolu. Pokud máme COW, tak můžeme některé bloky sdílet přes více subvolume (a tím máme snapshoty). Tím chci říct, že v btrfs fakt nikde není okopírované a dobře schované MD a LVM. Prostě to dělá od počátku jinak. A tento přístup není nový nebo osamocený, začínají se (konečně) prosazovat objektové storage (CEPH apod.) které toto mají na úrovni objektů. Disky jsou jen sklady pro objekty nebo nějaké fragmenty a fs může redundanci řešit třeba tak, že ty fragmenty uloží současně na 5 serverů. Přidat / odebrat disk nebo celý server je hračka. Taky tam nikde není zakuklené LVM a MD.
A to přesně znamená co? Pro mě je btrfs důvěryhodný od 2011, od kdy jej používám. Osobně si myslím, že to je více než cokoliv jiného věcí psychologie a na některé projekty se nabalilo tolik "pověr" (nálepek, předsudků), že se toho jen těžko zbaví.IMO to nejsou jenom pověry. Když jsem btrfs zkoušel, rozsypával se mi. Je pravda, že to už je pár let a že to nekontroluju moc pravidelně, ale lidé mi tu zkušenosti potvrzují. Viz nedávný blog tady na abc a také shodou okolností zrovna dnes mi jeden kolega říkal, že se mu nedávno na laptopu rozsypal btrfs root filesystém. Mně ty fíčury popravdě (aktálně, pro moje použití) nezajímají natolik, abych to nějak extra řešil a hlavně ne natolik, abych jim dal větší prioritu než spolehlivosti/robustnosti.
No to právě nemají. (...)Ok, já tím měl na mysli spíš uživatelské rozhraní, než vnitřní fungování, a tam je pravda, že domain specific znalost fs může asi být benefit. Máš v tomhle zřejmě lepší znalosti než já, takže o tohle se nechci hádat
Viz nedávný blog tady na abc a také shodou okolností zrovna dnes mi jeden kolega říkal, že se mu nedávno na laptopu rozsypal btrfs root filesystém.Nedávno jsem dostal jeden disk na obnovu dat. S BTRFS, asi jsem to dostal za trest, nebo nevím. Uživatel není v IT rozhodně nováčkem. Přesto jsem se několikrát nestačil divit. Dostal jsem rotační disk s tím, že je to dd z toho rozbitého disku. O tom rozbitém disku mi neřekl ani slovo, tak jsem předpokládal (naivně), že je to obyč 3.5 interní rotační disk. Začal jsem to řešit a byla mi hromada věcí podivná, takto se FS nerozbije. Data se mi částečně podařilo obnovit a tak jsem napsal tomu majiteli zprávu o tom, že ten fs je fakt rozbitý strašně divně, že mi to nesedí na rotační disk. Už z labelu mi to mohlo být jasné (NTB-něco), ale v první chvíli mi to nedošlo (protože přestože v NTB mám SSD, tak NTB prakticky nepoužívám). Tak samozřejmě, že disk byl SSD a FS byl poškozený trimem. A jednalo se o disk s vadnou implementací NCQ trim. Prostě trim smazal bloky, které neměl, včetně půlky stromu metadat. Takže je super, že dostanete HDD (kde by jinak byla přirozeně zachována i smazaná data), ale je to bloková kopie SSD. NCQ Trim Widle nepoužívají, takže se nikdo neráčil to implementovat správně, výrobce disku na to házel bobek, majoritní fs se tomu nějak dokázali vyhnout, ale ne vždy. V Linuxu i ve FreeBSD vidím blacklist těchto Samsung SSD (viz poslední řádek):
ada0: <Samsung SSD 850 EVO 250GB EMT02B6Q> ACS-2 ATA SATA 3.x device ada0: Serial Number ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 512bytes) ada0: Command Queueing enabled ada0: 238475MB (488397168 512 byte sectors) ada0: quirks=0x3<4K,NCQ_TRIM_BROKEN>Takže tolik k některým chybám FS. Neříkám, že za všechno může někdo jiný, ale bohužel u některých výrobců stále platí, že to musí fungovat ve widlích a konec, a zejména u méně používaných voláních nebo příkazech se mohou dít věci. Kámoš takto řešil NVMe od Intelu a v RedHatu potom storage experti zjistili hned několik bugů v tom HW. Už nevím, jaký model to byl, ale bylo to rozbité tak, že pro danou úlohu md-cache mu to padalo prakticky neustále.
Takže tolik k některým chybám FS. Neříkám, že za všechno může někdo jiný, ale bohužel u některých výrobců stále platí, že to musí fungovat ve widlích a konec, a zejména u méně používaných voláních nebo příkazech se mohou dít věci.Tenhle člověk je poměrně znalý (píše drivery), takže bych nečekal nějaké špatné použití SSD + Trimu. Ale zaručit to nemůžu. Jinak ten problém by se projevil i s jiným FS, ne? Nebo je btrfs nějak specifický a škodí mu tohle víc?
Jinak ten problém by se projevil i s jiným FS, ne?Však se projevoval. Ale tj přece jedno, když je chyba v implementaci něčeho, tak i kdyby to něco používal jen jeden projekt na světě, pořád je to chyba toho něčeho, nikoliv toho jednoho projektu.
Nebo je btrfs nějak specifický a škodí mu tohle víc?AFAIK btrfs bude volat trim mnohem častěji, protože je to cow fs. Tedy při každé změně libovolného bloku (včetně stromu metadat) se vytvoří kopie daného bloku a do ní se zapíšou změny. Což umožňuje atomicky přepnout mezi starým a novým blokem (tj soubor je buď ve stavu před zápisem nebo po zápisu, ale nikdy mezi, což se může stát u FS, které zapisují přímo do datových bloků). Takže je potřeba uklízet ty staré kopie bloků, tj asi bude volat trim mnohem častěji a možná mimo běžný pattern ostatních fs. Jako já neříkám, že btrfs nemá cbyby. Má je. Ale většina internetových povídaček jsou naprosto neurčité kecy "prostě se mi to rozbilo, nevím proč" nebo ještě lépe, "znám někoho, komu se to rozbilo". Já to používám kontinuálně od roku 2011 na celkem už desítkách disků a nic se tomu nikdy nestalo, krom případu, kdy zahaproval řadič. Ale to je chyba HW, btrfs fakt nemůže za to, že mu 3 ze 4 disků v R10 zmizelo a řadič na ně zapsal nebo nezapsal něco, co měl. btrfs přesto dokázal přečíst všechna data za hlasitého psaní do dmesgu "error recovered" nebo co tam píše. Data jsem pochopitelně raději vytáhl ze zálohy. Ale jak jsem psal. To si musí zvolit každý admin. Mě se koncept, na kterém je btrfs postaven, velmi líbí a tak jej používám. Až bude koncept slepení vrstev MD+LVM+FS dotažen do konce, tak mu dám šanci také. Storage systému není nikdy dost.
AFAIK btrfs bude volat trim mnohem častěji, protože je to cow fs. Tedy při každé změně libovolného bloku (včetně stromu metadat) se vytvoří kopie daného bloku a do ní se zapíšou změny.Já bych docela očekával, že tam bude nějaký mechanismus na připisování změn metadat do bloku, kdy nebude potřeba kopírovat celý blok, jen se čas od času uklidí staré nepoužívané záznamy a ty používané sesypou k sobě, aby se uvolnilo místo.
A tento přístup není nový nebo osamocený, začínají se (konečně) prosazovat objektové storage (CEPH apod.) které toto mají na úrovni objektů. Disky jsou jen sklady pro objekty nebo nějaké fragmenty a fs může redundanci řešit třeba tak, že ty fragmenty uloží současně na 5 serverů.Sheepdog. Je ideální v kombinaci s btrfs. A nevyžaduje nic extra, na rozdíl od Cephu.
Tohle všechno lze právě zobecnit a pracovat s abstraktními koncepty jako služba, zdroj, závislost atd. Potom úkolem toho, o čem mluvím jako o jádru nebo init systému, je vyhodnocovat závislosti a spouštět služby ve správnou chvíli, mít přehled, zda běží, a poskytovat jednotné rozhraní pro změny jejich stavu (povolit, zapnout atd.).
I to síťové rozhraní nebo připojený disk je vlastně služba (na které může záviset jiná služba) a jsme schopní u ní sledovat stavy (běží = disk je připojen atd.).
Tzn. init systém sám o sobě nemusí umět připojovat disky nebo nastavovat síť – musí jen vědět, kdy to má udělat, a komu o to má říct.
Ono se pak může zdát, že by z toho init systému nic nezbylo a že by byl triviální, ale není tomu tak – vyřešit precizně ty základní věci je kus pořádné a smysluplné práce. A nad tím se pak dá stavět dál.
Je samozřejmě otázka, kam až s tou abstrakcí jít. Přeci jen se pohybujeme v rámci POSIX kompatibilních systémů, takže se dá předpokládat, že pro spuštění služby budeme volat nějakou tu exec()
funkci a že tomu spouštěnému procesu budeme nějak připravovat prostředí (práva, zděděné FD, různé kontejnery, proměnné prostředí atd.). Samozřejmě se dá diskutovat o tom, zda to má být přenositelné i na jiné unixové/posixové systémy/jádra nebo zda to může být specifické pro Linux. Ono i tohle by šlo zobecnit a mít např. spouštění POSIXových procesů (+ práva, proměnné atd.) v tom základu a specifika (jako různé kontejnery, AppArmor, SELinux atd.) mít ve volitelných modulech. Jak říkám, tohle je k diskusi, a nemám ani problém s init systémem, který bude běhat jen nad jedním unixovým jádrem (Linux). Nemusí se ta abstrakce hnát do extrému. Ovšem i tato neextrémní úroveň abstrakce (specifická pro Linux) je stále velmi vzdálená současnému stavu systemd – je tam obrovský prostor pro zjednodušení a zobecnění toho init systému a přesunutí jiných funkcionalit do volitelných modulů.
A mimochodem, taky je potřeba rozlišovat mezi softwarem a jeho konkrétním nasazení (parametrizací). Když např. někdo programuje nástroj typu cat
, sed
nebo grep
, tak píše software a abstrahuje od konkrétních doménově specifických požadavků. A když někdo tento software nasazuje, např. tím, že napíše nějaký skript, který tyto nástroje používá, tak tam už ta doménová specifika patří.
Tzn. init systém sám o sobě nemusí umět připojovat disky nebo nastavovat síť – musí jen vědět, kdy to má udělat, a komu o to má říct.Tomuhle já rozumím, dokonce bych očekával, že něco takového v systemd je. Vzhledem k tomu, že "vše je unita", tak tam někde bude core, co bude umět jen unity. Ale co potom? Když si někdo systemd zkompiluje bez podpory mount unit, tak to má zařvat chybu v případě, kdy tam někdo umístí .mount? Ano, tady je vadou chybějící specifikace, o které píšeš (ty to asi bereš z pohledu softwarového inženýrství, mě chybí nějaká technická specifikace pro admina a nějaká stránka o filozofii toho projektu - jaký je celkový koncept a kam to má směrovat, což mi vadí od počátku).
je tam obrovský prostor pro zjednodušení a zobecnění toho init systému a přesunutí jiných funkcionalit do volitelných modulů.Tohle tvrdíš na základě čeho? Ty jsi studoval ty zdrojáky? Mě přijde, že na toto nelze odpovědět, pokud nemáme v ruce kompletní specifikaci. A mě třeba vadí, že se distribuce před x lety rozhodly vyčlenit
systemd-nspawn
do samostatného balíčku (systemd-container
). Toto považuju za chybu, protože snadno dostupné a integrované kontejnery mohly být jednou z killer featur systemd. Dřív mi stačilo někomu říct jen "udělej snapshot systému do nějakého adresáře, nastav si jeden konfig v /etc/systemd/nspawn
a pomocí machinectl to ovládej". Po oddělení to ti lidé začali vnímat jako něco externího a moc se jim do toho nechtělo. Já osobně beru nspawn jako neoddělitelnou součást systemd. Nikoliv ze softwarově inženýrského pohledu (nspawn jistě není potřeba na běžnou init-like činnost), ale z pohledu systémového administrátora.
Tohle tvrdíš na základě čeho? Ty jsi studoval ty zdrojáky? Mě přijde, že na toto nelze odpovědět, pokud nemáme v ruce kompletní specifikaci.
Ta chybějící specifikace je právě ten problém… ale v té úvaze se dá pokračovat i bez ní, jen na základě pozorování a srovnávání různých implementací. Pro představu:
╭───────────────────┬────────────────╮ │ software (string) │ LOC (integer) │ ├───────────────────┼────────────────┤ │ systemd │ 480 000 │ │ OpenRC │ 16 000 │ │ GNU Shepherd │ 5 900 │ │ Upstart │ 76 000 │ │ procd │ 7 000 │ │ initng │ 38 500 │ │ launchd │ 21 200 │ │ xinetd │ 31 500 │ │ Lua │ 32 000 │ │ GNU Guile │ 272 000 │ │ Rakudo Perl │ 21 700 │ ╰───────────────────┴────────────────╯
Vážně toho systemd přináší tolik navíc, aby to opodstatnilo takový nárůst komplexity? A pokud přináší užitečné věci navíc, musí být nutně v jednom repozitáři a těžko použitelné samostatně a těžko vyměnitelné za něco jiného? (tím se opět dostáváme k tomu chybějícímu standardu a API)
Pak je taky otázka, v jakém jazyce by to mělo být napsané. Jasně že na úplném začátku spouštění OS (psaného v céčku) je céčko celkem jasná volba, stejně tak asi i pro volání těch exec() funkcí (i když tam už je to trochu sporné). Ale vážně v něm musí být napsané i všechno okolo? Proč nepoužít raději nějakou minimalistickou VM nebo interpret nebo kompilátor vyššího programovacího jazyka do nativního kódu? Vždyť už i v samotném jádře (Linuxu) určitou VM máme (eBPF).
Když se podíváš na ta čísla výše, tak si lze představit variantu, kde vezmeš nějaký základ psaný v C (nižší desítky tisíc řádků kódu nebo i jen tisíce), přibalíš k tomu VM/interpret/kompilátor a zbytek napíšeš ve vyšším programovacím jazyce… a pořád bude celková komplexita nižší, než u toho systemd.
A neměl by to být problém ani z hlediska výkonu (init nedělá žádnou těžkou práci – jsou to jednorázové operace, kde něco připraví, nastaví, a pak zase dlouho jen čeká) ani z hlediska bezpečnosti/spolehlivosti (je vyšší pravděpodobnost, že uděláš chybu v těch stovkách tisíc řádků céčkového kódu, než v menším množství kódu psaného ve vyšším a bezpečnějším programovacím jazyce).
systemctl restart <TAB> <TAB>je vrchol zoufalství.
Pěkné, koukám, že je to patch z roku 2017 a vyřešené v systemd to asi pořád není.
Vážně toho systemd přináší tolik navíc, aby to opodstatnilo takový nárůst komplexity?Na toto neumím odpovědět, protože příliš neznám ty ostatní projekty, ale třeba jen xinetd funkcionalita je součástí systemd také (socket activation) a pochybuju, že některé z těch jiných uvedených initů umí třeba kontejnery nebo nastavit síť. Jinými slovy se srovnává nesrovnatelné. Co s tím mají společného ty programovací jazyky už vůbec nechápu. Ty jazyky jsou dost jednoduché (Lua) a asi je to bez knihoven a sám jsem si kdysi napsal interpretr scheme asi a 200 řádek v C. Pochopitelně kompletně bez knihoven, pouze se základními funkcemi a aritmetikou (takže k ničemu).
A pokud přináší užitečné věci navíc, musí být nutně v jednom repozitáři a těžko použitelné samostatně a těžko vyměnitelné za něco jiného? (tím se opět dostáváme k tomu chybějícímu standardu a API)No já hlavně nevím, jak těžko vyměnitelné to ve skutečnosti je. Nevím o žádném pokusu přepsat nějakou část systemd třeba v jiném jazyku. Jít by to mělo, je to OSS. K té samostatné použitelnosti, myslím si, že kdyby se třeba z
systemd-networkd
vyjmula jen ta část čtoucí konfigurační soubory a nastavující síť, tak by to mohla být samostatně funkční utilita. (Přičemž nepochybně ten parsing ini-like konfigů bude někde napsán obecně.)
Když se podíváš na ta čísla výše, tak si lze představit variantu, kde vezmeš nějaký základ psaný v C (nižší desítky tisíc řádků kódu nebo i jen tisíce), přibalíš k tomu VM/interpret/kompilátor a zbytek napíšeš ve vyšším programovacím jazyce… a pořád bude celková komplexita nižší, než u toho systemd.Do výběru jazyka nikomu kecat nebudu. Pokud jim to funguje v C, tak ať to píšou v C. Osobně bych raději viděl nějaké bezpečné jazyky typy rust nebo go, ale nezdá se, že by zrovna C bylo tím kamenem úrazu. Akorát nevím, co by to mělo přinést navíc. Ok, budeš tam mít init jako binárku napsanou v C, potom tam budeš mít "vše nad tím" napsané v nějakém interpretovaném jazyky. Takže kromě systemxkfc tam budeš mít ještě interpretr. Jak se to liší od stavu, kdy byl init v C a zbytek v shellu?
kterou bych přerazil tu z balíku.To je tak trosku problem te distribuce kterou pouzivas ne?
Že se mainstream distribuce rozhodly balit vše najednou není problém na straně systemd projektu.Možno súhlasiť s tým, že by malo byť na rozhodnutí distribútora, ako systemd zabalí. Ale ako je možné, že sa všetky mainstream distrá rozhodli zabaliť to dokopy? Robí to vôbec niekto ináč (hoci aj nie-úplne-mainstream)? O tom som písal. Ak by aj systemd bol modulárny, používateľom je z toho prd, keď sa to v praxi nedá veľmi použiť.
Nevím, jakou má přesně představu figliar0, a budu rád, když ji sem rozepíše, ale za mě:
Z definice potrebuje prece vedet, co ktera ta sluzba znamena, a potrebuje chapat rozdily v pozadavcich jednotlivych sluzeb.
Tohle právě není pravda. Init systém nepotřebuje znát specifika jednotlivých služeb. Viz #228 a zejména poslední odstavec. Konkrétní instance/parametrizace init systému nasazená na nějakém konkrétním stroji (nebo její šablona obsažená v určité distribuci) tato specifika znát musí (např. vědět, že potřebuji síťové rozhraní s IP adresou 192.168.1.4, a až teprve potom můžu startovat Apache, nebo že pro spuštění PostgreSQL je potřeba mít připojený oddíl /var/lib/postgresql/
), ale software, na kterém je to postavené, je znát nemusí – ba dokonce by je ani znát neměl a měl by od nich abstrahovat.
A mimochodem: nebyl jsi to ty, kdo tu psal o tom, že by se měl rozlišovat vývoj těch stavebních kamenů a vývoj aplikací z nich postavených a že to jsou odlišné role?
Je samozřejmě dobré mít nějaké návrhové vzory a doporučení pro distribuce, jak z těch základních stavebních kamenů poskládat operační systém a držet tak nějakou úroveň kompatibility/podobnosti napříč distribucemi. A klidně se ta sada doporučení může jmenovat „systemd“. Ale mělo by to být primárně doporučení nebo standard – zatímco softwarová implementace je něco jiného. Implementace by podle mého měla spočívat v malých samostatně použitelných komponentách a malém jádře.
Ja jako chapu, ze maji lidi se systemd prakticke problemy
Abych se přiznal, tak já s ním zase tolik praktických problémů nemám – a jak jsem tu psal, některé věci se mi na něm líbí a dokáži je ocenit. Přistupuji k tomu podobně jako Heron tzn. když používám distribuci se systemd, tak bych se měl naučit ho používat, a ne předstírat, že tam systemd není a bastlit si to nějak bokem.
spis mi neni jasne, jestli to lze vubec udelat jinak.
Můžeš to trochu rozvést?
a) Co od systemd čekáš?
b) Kterou tuto funkcionalitu (nad rámec jiných init systémů) nelze vyčlenit do volitelných modulů?
Kterou tuto funkcionalitu (nad rámec jiných init systémů) nelze vyčlenit do volitelných modulů?Pravděpodobně jakákoli funkcionalita lze vyčlenit do volitelných modulů. Mohl bys klidně dát dokupy brutálně modulární init systém + utility nad brutálně modulárním mikrokernelem a v tom mít samé brutálně modulární programy. Byl by z toho modulární ráj (nebo peklo, záleží na úhlu pohledu).
JS1 psal:
spis mi neni jasne, jestli to lze vubec udelat jinak.
Tak jsem se těšil, že se dozvím o něčem, co skutečně nejde – ne jen o něčem, co je obtížné.
Jinak je tedy běžné dělat při vývoji kompromisy a mít na různých projektech různě nastavené priority (což zahrnuje i vzdát se věcí, které jsou moc obtížné, byť proveditelné). Takové kompromisy dělám v podstatě pořád a kdybych např. vyvíjel jednorázový web, který má pár měsíců sloužit nějaké kampani, a pak se zahodí, tak bych tam patrně těch kompromisů a prasáren udělal spoustu, protože investovat do toho víc práce nemá smysl. Ale pak tu je software s podstatně delším životním cyklem1, kde se naopak těch kompromisů má dělat méně a je na místě investovat více úsilí a přemýšlení. A zrovna init systém podle mého patří spíš do téhle kategorie než do té první.
[1] a musím říct, že takový software je mi bližší a zajímá mne víc
Ale pak tu je software s podstatně delším životním cyklem, kde se naopak těch kompromisů má dělat méně a je na místě investovat více úsilí a přemýšlení.Again - Platí toto i na (linux) kernel? (v reakci na #221 jsi mi neodpověděl) Stabilní API pro moduly by tam jistě technicky šlo udělat, je to software s velice dlouhým životním cyklem, ale nějak to k tomu nesměřuje. A pak sice existuje velmi stabilní userspace API, ale to je tak implementation-specific, že ho v plné šíři reálně těžko někdo bude reimplementovat. Microsoft to zkoušel s WSL, což je zajímavý výkon, ale nakonec to vzdali a WSL2 využívá nativní linux kernel implementaci.
Implementace by podle mého měla spočívat v malých samostatně použitelných komponentách a malém jádře.
a malém jádře.HURD!
Tzn. by to znamenalo takove API vytvorit a tudiz nahraditelnost tak nejak mizi tak ci onak.Nezmizí, protože zasedne komise plná moudrých lidí a ta schválí API standard a bude vydávat jeho sémantické verze. Každý modul se pak bude hlásit k nějaké verzi a vždycky si vyjedná se správcem a s ostatními moduly vzájemné kompatibility, a bude to celé super. (Dělám si srandu, samozřejmě...)
32ae763 BUG-3815: Removed J. Doe from the project (made a joke about trans people two decades ago)
Zajímavé je, že na desktopu se řada specifikací podařila dohodnout: Interoperability specifications. Kromě toho tu máme POSIX, máme standardy programovacích jazyků, datových formátů, máme standardní API pro přístup k souborovým systémům, k síťovým soketům, k hardwaru atd. Interoperabilita a standardizace je běžně součástí našeho oboru. Tak proč by to zrovna v případě init systému měl být problém?
Jinak ano, je možné, že se to časem standardizuje, ale spíš bych čekal, že se standardizuje třeba formát unit apod.,
Ale vždyť o tom tu už dva dny mluvíme, Mlho! Viz #213 a ta diskuse v gnu-system-discuss:
Convert – or even load at runtime – the systemd declarative configuration files. This also requires a stable standard.
A když jsem tam psal o standardizaci API, tak jsem explicitně zmiňoval tu socket activation. To rozhraní může být úplně triviální, stačí si např. dohodnout názvy proměnných prostředí, přes které se předá informace o zděděných FD. To může být specifikace na jednu A4. A jde o to, že tohle je velmi užitečná funkcionalita a kdyby byla standardizovaná, mohly by ji implementovat jiné init systémy (nebo i takový xinetd nebo různé zavaděče) a aplikace by ji mohly využívat nejen v systemd.
Jenže modul je v tomhle případě většinou nějaký démon a tam žádné složité rozhraní vymýšlet nemusíš – prostě spouštíš proces. Maximálně by tam bylo nějaké obecné rozhraní na posílání zpráv o dostupnosti těch zdrojů.
Spravce sluzeb potrebuje umet sluzbu na pozadani zapnout a vypnout. Pokud sluzba vyzaduje jine sluzby, tak je musi zapnout driv, nez zapne tu danou sluzbu. Pokud sluzbu vypina, ci restartuje, tak by mel nejdriv povypinat vse, co na ni zalezi (a pripadne pak zase pozapinat). A to je asi tak vsechno, co potrebuje vedet a ty sluzby k tomu zadne zvlastni API ani nepotrebujou (krome klasickeho exit kodu, kterym daji najevo, zda se je podarilo nastartovat).
+1
Nicméně i kdyby tam nějaká komunikace nad rámec toho návratového kódu měla být, tak to právě má řešit ten standard/API. Není to nic, nad čím by se nějaká komise musela scházet dva roky. Může se použít např. D-Bus nebo ten proces může zdědit FD, do kterého pak posílá zprávy v nějakém dohodnutém formátu…
Tak to si opravdu nemyslím. Viz srovnání různých systémů v #234 v té komplexitě je tam obrovské rozpětí a systemd je o řád až o dva složitější než ostatní. Tzn. je nesmysl tvrdit, že to bude buď a) primitivní init s pár řádky v C a hromadou bordelu v různých skriptech nebo b) systemd se 480 000 řádky kódu a celkem hezkými konfiguráky. Mezi těmito extrémy je celá škála dalších možností resp. spíš to ani není jednorozměrná osa.
Dobře napsaný software tohoto typu by měl jít použít rekurzivně tzn. zanořovat víc jeho instancí do sebe – kde jedna instance je třeba ten systémové init a další třeba správce nějaké komplexnější aplikace nebo správce desktopových služeb jednoho konkrétního uživatele…
Resp. mluvím o znovupoužitelnosti – pokud se jednotlivé komponenty/moduly izolují do samostatně funkčních celků (tzn. to klasické: program má dělat jednu věc a má ji dělat pořádně), tak je jde opakovaně používat v různých rolích.
To není úplně fér.
To není můj problém, ale autorů. Celé dohromady je to jeden produkt se společným verzováním, celé dohromady se to jmenuje systemd a je to v jednom repozitáři.
Kdyby autoři chtěli, aby to lidi vnímali jako sadu1 malých samostatně použitelných nástrojů, tak to měli zřetelně oddělit, vhodně pojmenovat a ukazovat, jak lze jednotlivé části používat samostatně nebo je nahrazovat jiným již existujícím softwarem. Tohle ale zjevně není jejich/jeho záměr.
[1] podporující nějaké společné paradigma, filosofii
To není můj problém, ale autorů.Tvůj problém je, že z metriky "LOC v repository celého projektu" a porovnání s jinými projekty zcela jiného typu děláš nějaké závěry. Ale ano, vize autorů je jiná, než desítky modulů s různými verzemi propojené dokonalým sémanticky verzovaným API. Z mé zkušenosti to na use cases, na které se systemd od začátku zaměřuje, funguje velmi dobře, a celý tento projekt, platforma beyond linux kernel, nám přinesl řešení řady dlouhodobých problémů. Systemd projekt je dost flexibilní co se týká způsobu nasazení, ale nikomu to necpe a není to preferovaný způsob použití. Je pravda, že řada věcí je zdokumentována jen povrchně / technicky, a chybí nějaké oficiální best practices. Místo toho se po webu povalují hromady návodů jak co udělat se systemd, velmi často plné nesmyslů a nefunkčních hacků. Ale jakým způsobem to bude zabaleno a integrováno je starost správců distribucí.
[...] systemd [...] nám přinesl řešení řady dlouhodobých problémů [...]asi jak komu, me prijde ze resi problemy ktere sem nemel a prinesl problemy ktere sem taky nemel
Viz #234:
Když se podíváš na ta čísla výše, tak si lze představit variantu, kde vezmeš nějaký základ psaný v C (nižší desítky tisíc řádků kódu nebo i jen tisíce), přibalíš k tomu VM/interpret/kompilátor a zbytek napíšeš ve vyšším programovacím jazyce… a pořád bude celková komplexita nižší, než u toho systemd.
Kromě toho VM/interpret/kompilátor je znovupoužitelný kus kódu a i když ho používáš opakovaně, jeho komplexitu máš v systému jen jednou (na rozdíl od řádků aplikačního kódu, který je jednoúčelový).
Viz GNU Shepherd – ten používá je nejen „skutečný skriptovací jazyk“ ale rovnou „skutečný programovací jazyk“ – je to postavené na Guile (Scheme). Nicméně pro průměrného admina bude stravitelnější ten Bash, se kterým pracuje každý den, než nějaký dialekt Lispu s kopou kulatých závorek.
Výhoda psaní i toho jádra v Bashi je v tom, že z něj přímo můžeš volat jiné Bashové funkce – nevoláš je jako systémové příkazy (nové procesy), ale tvoří to jeden program psaný v jednom jazyce.1 A Bash je rozšiřitelný, můžeš si do něj dopsat modul (dynamickou knihovnu), která přidá nové příkazy – tento modul píšeš v C, ale přes něj můžeš volat cokoli dalšího, takže klidně i interpret nějakého jiného jazyka. To jádro init systému bys tudíž mohl napsat v čemkoli a integrovat to s Bashem a zároveň z toho přímo volat funkce definované v těch init skriptech.
Neříkám, že tohle považuji za ideální způsob, ale schůdné to je – fakt to nemusí vypadat jako hromada hnoje a být nějak extra složité. Osobně mi přijde lepší mít ty konfiguráky služeb deklarativní, v podobném stylu jako systemd, akorát to jádro init systému implementovat jinak, jednodušeji, abstraktněji a nepřibalovat k němu hromadu nesouvisejících programů.
[1] i když tedy jak kde – já znám spíše init skripty, které se volají jako příkazy s parametrem start
, stop
atd. než že by se jejich zdroják vložil přes .
nebo source
a volaly se jeho funkce přímo
Nicméně pro průměrného admina bude stravitelnější ten Bash, se kterým pracuje každý den, než nějaký dialekt Lispu s kopou kulatých závorek.Určitě existují i jiné, familiérnější možnosti než bash a guile.
Výhoda psaní i toho jádra v Bashi je v tom, že z něj přímo můžeš volat jiné Bashové funkceTo považuju za nevýhody - tímhle způsobem vznikají prasárny.
nevoláš je jako systémové příkazy (nové procesy), ale tvoří to jeden program psaný v jednom jazyce.Meh, bash vytváří subprocesy celkem často, např. když použiješ pajpu apod... A lidi z toho stejně volají různé další věci jako sed, awk, perl, python, ...
No, ja rozhodne davam prednost jednoduchemu initu, kde mam jednoduche bashove skriptyJá taky, proto jsem přešel na FreeBSD. Jak už jsem psal mnohokrát, nepovažuji za hlavní problém to, v jakém jazyku je to či ono napsané, ale spíš kdo a jak to píše. V rc skriptech v linuxu byl bordel, po přechodu na systemd začíná být bordel v unitách. Evidentně není problém v shellu a ani v systemd.
Coz vede k takovym komickym workaroundum v onech programech, jako ze B, kdyz nenajde socket, shmem, nebo tak, tak to zkousi tupe znovu. Pokud je B napsany tak, ze exitne, pak se obali bash scriptem. Nekdo pridava magicke delay constanty, atp.
Viz #266. V dobrém init systému by služby mohly informovat ostatní o dostupnosti zdrojů (např. soketu nebo té sdílené paměti) v průběhu svého života. A init systém by na základě těchto událostí a nakonfigurovaných pravidel prováděl různé akce (např. spouštěl jiné služby).
Pretože trebárs ten NTP démon je tiež len systémová služba a správca takej služby ju má spravovať, nie suplovať.Dejme tomu, že provozujeme nějakou službu, u které se nesmí rozjet čas a v podmínkách provozu té služby je uvedeno, že pokud není možné synchronizovat čas (nebo synchronizaci ověřit), tak je nutné službu odstavit. Pokud je to služba systemd-like, dovedu si představit závislost na
NTP synchronized
. Tj když se správce služeb dozví od timesyncd
, že nelze dosáhnout / ověřit sync, tak tu závislou službu vypne. (Upřímně řečeno, nevím, zda tam teď taková možnost je a překvapily by mě vlastně obě možnosti, tj že to tam není i že to tam je. Vlastně bych to tam očekával.)
A ano, stejné funkcionality lze dosáhnout dneska. Nějaký skript může očuchávat statistiky ntpd
a když se mu nelíbí, tak tu službu vypnout (voláním systemctl
nebo přes dbus
). Jenže nebylo by lepší to psát deklarativně? Jako jasnou podmínku pro běh dané služby? Tak jak se píší ostatní podmínky pro systemd .service?
Což se ale nevylučuje s modularitou. Může existovat API, které pro ntp definuje rozhraní pro ověřování stavu a tato služba bude připuštěna jakou součást správce služeb. Opět si dovedu představit ten řev, který by vnikl u zprávičky "všechny NTP démoni musejí definovat api".
No ja zadnou takovou sluzbu (tedy sluzbu, kterou by bylo nutno systemem sestrelit kdykoli si nebude ntpd jisty jzda je synchronizovany) neprovozuju, takze nepotrebuju mit soucasti initu ntpd.Gratuluji. Třeba my něco takového provozujeme (nikoliv přesně tak jak bylo popsáno výše). O tom ovšem komentář nebyl. Pokud už máme deklarativní popis, tak je logické do toho deklarativního popisu přidat vše potřebné. A tedy i odchylku od etalonu času.
ktera se spokoji s minutamaZa to by měl být admin automaticky zastřelen. Před lety mi jeden známý řekl, že on má čas správně a to, že se rozcházíme o 3 minuty znamená jen to, že on se synchronizuje s jiným serverem. Netuším, v jakém vesmíru žije, ale ten jeho server musel být patrně někde blízko horizontu černé díry.
Tak to ma cron teda blby :) (aspon v zadnem jsem nevidel presnejsi zadavani udalosti, nez na minuty - a to jeste vetsina z toho byla typu "tady nekde by se to asi tak melo udelat, jen to nechceme nahnacat vsechno naraz" nebo "tak jednou za hodinu ...")ktera se spokoji s minutamaZa to by měl být admin automaticky zastřelen.
ktera se spokoji s minutama api NTP not-so-nearly-synchronisedNeodváděj pozornost jinam, řeč je o synchronizaci času a nikoliv o tom, jak přesně se musí spouštět daná služba. V předchozím komentáři jsi napsal NTP nearly-synchronised a NTP not-so-nearly-synchronised z čehož to jasně plyne. Jinak nikomu nebrání si i na stroji s mikrosekundovou přesností času nastavit AccuracySec= klidně na hodiny. Nebo třeba na To get best accuracy, set this option to 1us.
kdyz neni uplne totalne mimoProblém je, že to se musí vždy určit nějakou konstantou. Čas mezi různými událostmi nelze synchronizovat přesně ani podle STR a podle OTR už záleží i na poloze v gravitačním potenciálu. Takže za "synchronizovaný" čas se musí vždy určit konkrétní odchylka (100us, 1ms, 1s apod.) A to jsem psal už v předchozím komentáři:
A tedy i odchylku od etalonu času.Tj deklarativní popis něco jako NTPTimeOffsetOK=10min. (Za což by admina opět měli zastřelit.)
kdyz je nesynchronizovan prilis mocAkorát nevím, jak by se to určovalo, protože bez funkčního autoritativního NTP serveru nelze zjistit, jak moc je ten čas mimo. Takže pokud je ntp sync, tak je to pár us, pokud není, tak to stejně není možno dlouhodobě určit. (HW zdroje času v PC jsou notoricky známé svou výraznou nepřesností.)
Ostatne, kdyz uz nemame odbihat od tematu - jak to teda bude s tema licencema?Doporučoval bych používat svobodné licence a tento problém neřešit. Jinými slovy mě to vůbec nezajímá. Správný čas je legitimní požadavek v provozu serverů. Proprietární licence nikoliv.
Navazuji na #262 …ta zpráva (posílaná v průběhu života služby, ne nutně až při jejím ukončení) může obsahovat např. informaci, že zdroj XYZ přestal existovat. Přičemž XYZ bude nějaký globální identifikátor (může to být libovolné URI, prostě textový řetězec) a v tomhle případě tím „zdrojem“ může být synchronizace NTP. Když se nám hodiny rozsynchronizují nad nějakou mez, tak tento zdroj ztratíme, služba o tom dá vědět init systému (skrze jednoduché standardní API) a init systém dá vědět ostatním službám, které tento zdroj zajímá nebo na něm přímo závisí, případně je může ukončit, zapnout, restartovat atd. na základě deklarativní konfigurace. A pointa je v tom, že init systém nemusí vědět, co to XYZ znamená – pro něj je to pouze identifikátor a init systém pracuje pouze s abstraktním konceptem „zdroje“. Tyto zdroje se mohou objevovat a mizet kdykoli v průběhu životního cyklu služeb (přičemž služba je sama implicitně taky zdrojem, na kterém může něco dalšího záviset a odebírat o tom události). Init systém pak jen drží konfiguraci, koordinuje služby a přeposílá zprávy, ale nemusí rozumět tomu, co a proč se děje – pouze plní příkazy a pracuje na základě deklarovaných pravidel. Autor distribuce + správce daného systému jsou ti, kdo by měli vědět (a rozhodovat), proč se co děje a kdy – nikoli init systém.
Výhodou abstraktně navržených systémů je to, že mnohem lépe škálují. Jako jejich autor nemusíš rozumět všemu a nemusíš všechno implementovat1 – jen vytvoříš prostředí a ostatní ho používají.
[1] viz také kapitola The great parts
ta zpráva (posílaná v průběhu života službyPosílaná kým?
služba o tom dá vědět init systémuKterá služba? To má posílat ta "obalová service", nebo přímo (v tomto případě) ten ntp démon? Tu obalovou funkci řeší systemd o hodně lépe než předchozí inity (Ale fakt už, nechce to nějaký
systemd-lover
vzít za mě? Už je mi to trapné.) a o tom, že by přímo nějaká konkretní implementace dané služby ochotně implementovala nějaké API si můžeme nechat jen zdát.
skrze jednoduché standardní APITakže všechny ntp démoni se mají upravit, aby podporovaly toto api? Resp. úplně všechny služby?
A pointa je v tom, že init systém nemusí vědět, co to XYZ znamená – pro něj je to pouze identifikátor a init systém pracuje pouze s abstraktním konceptem „zdroje“.Tomu já rozumím, ale je to přenášení odpovědnosti na ty zdroje. Tj všichni ntp démoni musejí implementovat api, aby dokázali říct init systému, "pozor, ztratil jsem kontakt s GPS, ale jinak ještě žiju a čas je ok, sleduju frekvenci cpu a ta za posledních 14 dnů nevykazovala žádné mimořádnosti takže se tomu času dá ještě tak hodinu věřit do 100us.".
Výhodou abstraktně navržených systémů je to, že mnohem lépe škálují. Jako jejich autor nemusíš rozumět všemu a nemusíš všechno implementovat.Ano. Jen ti zbývá naimplementovat ty služby / zdroje. A to ještě v několika různých implementacích, aby bylo na výběr. Vlastně se to dá otočit.
timesyncd
nebo networkd
a cokolivd
jsou vlastně první implementace tohoto standardu. Nevím, za jak dlouho se k nim přidá ntpd
nebo chronyd
.
Init systém pak jen drží konfiguraci, koordinuje služby a přeposílá zprávyInit systém nemusí přeposílat zprávy, systémová sběrnice může být zcela nezávislá. Init tam může být připojen a jen reagovat na start / stop zprávy, přičemž se řídí konfigurací.
Autor distribuce + správce daného systému jsou ti, kdo by měli vědět (a rozhodovat), proč se co děje a kdy – nikoli init systém.Nerozumím, proč jsi zvýraznil ten init systém. Přece i dnes i autor distribuce a jeho admin rozhoduje o tom, co se kdy stane bez ohledu na zvolený init systém. Jedná se o deterministický software, takže si jej stačí řádně nastavit a používat. (Ne, to není ironie.)
Výhodou abstraktně navržených systémů je to, že mnohem lépe škálují. Jako jejich autor nemusíš rozumět všemu a nemusíš všechno implementovat1 – jen vytvoříš prostředí a ostatní ho používají.V tom se 100% shodneme, jen je otázkou, zda se dožijeme té implementace. Tvůj koncept jde dál než systemd. Systemd alespoň obaluje stávající služby a snaží se hlídat jejich stav (a je toho schopen pouze tak dobře, jak dobře jsou napsané). Tvůj koncept spočívá v tom, že služby budou aktivně informovat o všech důležitých změnách ve svých stavech. Což je super koncept (opravdu), akorát to má drobnou vadu, že je potřeba upravit všechny služby. Za mě, myslím si, že mnohem dříve přijdou alespoň binární stavy.
ntpd-gps
se prostě ukončí, když přijde o signál z gps. Nemusí nic posílat na systémovou sběrnici, init systém uvidí, že se mu služba ukončila. Dle deklarace v konfigu jí může zkusit nahodit s určitým počtem pokusů a potom jí prohlásit za mrtvou a podle toho stopnout závislé service. Přičemž se může pokoušet ji nahodit. A tak dále. I toto je hudba velmi vzdálené budoucnosti. Zatím si každá služba žije na svém písečku, pokud má api, tak to není standard a tak dále. Takže teoretický koncept je super, ale rád bych se ho taky dožil.
Posílaná kým?
Tou službou.
Takže všechny ntp démoni se mají upravit, aby podporovaly toto api? Resp. úplně všechny služby?
Pokud chceš informace o změně stavu nebo dostupnosti zdrojů poskytovat dynamicky v průběhu života služby, tak jde o funkcionalitu navíc, kterou nikdy jiný nenabízí. Je tedy zřejmé, že k tomu nějaké API a zásah do kódu budeš potřebovat. Ale není to samoúčelný zbytečný zásah – získáš díky němu nějakou užitečnou funkcionalitu navíc.
Nicméně to nebrání službám fungovat klasicky postaru a žádné takové API nepoužívat. Pak se pomocí jednoduché deklarativní konfigurace init systému (tzn. bez zásahu do té služby) dá alespoň říct třeba: pokud jsme spustili službu X, je dostupný zdroj Y – a pokud služba X spadla, zdroj Y přestal být dostupný. Případně by init systém mohl kontrolovat, zda služba naslouchá na nějakém portu nebo vytvořila nějaký soubor či adresář a z toho odvodit dostupnost nějakého zdroje, o které informuje ostatní služby. I toto lze řešit deklarativně konfigurací a bez zásahu do existujícího softwaru. Nicméně lepší je použít to API (ale jak říkám, používal bys ho dobrovolně, protože ti to přinese nějaký užitek).
o tom, že by přímo nějaká konkretní implementace dané služby ochotně implementovala nějaké API si můžeme nechat jen zdát
Pokud by to bylo „proprietární“ API nějakého konkrétního init systému, tak ano (i když zrovna v případě systemd se to bohužel děje a vznikají programy/služby se závislostí na systemd).
Já ale mluvím o standardu, otevřeném API. Stejně jako máme standardní API pro přístup k proměnným prostředí nebo k posílání signálů mezi procesy nebo k soketové komunikaci atd. stejně tak bychom mohli mít standardní API pro komunikaci s rodičovským procesem, který dohlíží na službu a chce být informován o nějakých jejích vnitřních stavech.
Autoři softwaru běžně a ochotně implementují standardní protokoly, souborové formáty, API, SPI… je to běžná součást softwarového inženýrství a spolupráce.
Je mi jedno, jestli to vznikne v rámci POSIXu, GNU, FreeDesktopu, Linuxu, nebo jestli to třeba za víkend napíše Lennart Poettering – může to udělat kdokoli – ale jde o to, aby to byl otevřený implementačně nezávislý standard, který deklaruje dlouhodobou stabilitu a rozvoj kompatibilním způsobem.
Tomu já rozumím, ale je to přenášení odpovědnosti na ty zdroje. Tj všichni ntp démoni musejí implementovat api, aby dokázali říct init systému, "pozor, ztratil jsem kontakt s GPS, ale jinak ještě žiju a čas je ok, sleduju frekvenci cpu a ta za posledních 14 dnů nevykazovala žádné mimořádnosti takže se tomu času dá ještě tak hodinu věřit do 100us.".
Jako autor služby bys měl vědět, jaké zdroje poskytuješ a měl bys být schopný ostatním říct (přes to API), zda ten který zdroj je dostupný nebo ne. Pokud toho služba není schopná, tak je potřeba nějaké náhradní řešení, např. v konfiguraci init systému nadeklarovat, že když daná služba běží, předpokládáme, že takové a takové zdroje jsou dostupné. Ale pořád je to lepší než současný stav.
Tzn. místo toho, abys jen napsal novou implementaci démona s proprietárním rozhraním, bys definoval obecné API a dal ostatním šanci ho implementovat taky. Tvůj démon by byl první, který by to API implementoval a přinášel by oproti ostatním něco nového navíc, ale zároveň by autoři těch jiných démonů měli možnost udělat totéž a taky poskytovat informaci o dostupných zdrojích. Chápu, že se tenhle přístup nepoužívá ve světě proprietárního softwaru, kde jsou mezi implementátory nepřátelské vztahy, ale ve světě svobodného softwaru by to snad mělo fungovat jinak, ne? Pak je otázka, do jakého světa systemd patří. V diskusích se setkávám i s názory, že systemd buduje vendor lock-in. S tímto názorem nesouhlasím1, ale svým způsobem lidi, kteří toto říkají, chápu.
Ano. Jen ti zbývá naimplementovat ty služby / zdroje. A to ještě v několika různých implementacích, aby bylo na výběr. Vlastně se to dá otočit. timesyncd nebo networkd a cokolivd jsou vlastně první implementace tohoto standardu. Nevím, za jak dlouho se k nim přidá ntpd nebo chronyd.
Jakého standardu? Kde je definovaný? Jak je verzovaný? Jak bude vypadat jeho evoluce? Bude zpětně kompatibilní?
Tohle je právě ten problém – standard neexistuje. Pokud by existoval, není vůbec žádný problém, pokud v první fázi bude existovat jen jedna2 jeho implementace a ostatní se dobrovolně přidají či nepřidají později.
Init systém nemusí přeposílat zprávy, systémová sběrnice může být zcela nezávislá. Init tam může být připojen a jen reagovat na start / stop zprávy, přičemž se řídí konfigurací.
Ano, tak by to klidně mohlo vypadat, je to implementační detail. Když zde mluvím o init systému, tak nemluvím jen o PID 1.
Tvůj koncept jde dál než systemd. Systemd alespoň obaluje stávající služby a snaží se hlídat jejich stav (a je toho schopen pouze tak dobře, jak dobře jsou napsané). Tvůj koncept spočívá v tom, že služby budou aktivně informovat o všech důležitých změnách ve svých stavech. Což je super koncept (opravdu), akorát to má drobnou vadu, že je potřeba upravit všechny služby.
Viz začátek tohoto komentáře. Použití toho API je volitelné a nic ti nebrání to dělat postaru a nebo na úrovni systemd. To API bys implementoval dobrovolně, protože by ti to přineslo nějaký užitek (a kdybys v tom jako autor služby užitek neviděl, tak bys ho implementovat nemusel).
Je to trochu jako s D-Bus rozhraním – nikdo tě nenutí ho implementovat, ale pokud to uděláš, získá tím tvůj software určitou výhodu a ostatní ho budou moci používat standardním způsobem přes API.3
ntpd-gps se prostě ukončí, když přijde o signál z gps. Nemusí nic posílat na systémovou sběrnici, init systém uvidí, že se mu služba ukončila.
Tohle v tom mnou navrhovaném systému jde udělat taky. Prostě bys v konfiguraci namapoval 1:1, že: služba běží = zdroj je dostupný. Ale byla by tam otevřená cesta k tomu, aby to postupnou evolucí dospělo k něčemu chytřejšímu tzn. postupně by mohly jednotlivé služby začít používat to API a mohly by o dostupnosti zdrojů informovat dynamicky.
A tak dále. I toto je hudba velmi vzdálené budoucnosti. Zatím si každá služba žije na svém písečku, pokud má api, tak to není standard a tak dále. Takže teoretický koncept je super, ale rád bych se ho taky dožil.
Já to snad budu muset implementovat nebo aspoň sepsat jako návrh (ne jen jako komentáře roztroušené po diskusích a e-mailových konferencích) :-) Přijde mi trochu smutné, že máme nějakých dvacet implementací init systémů, nebo že systemd reimplementuje spoustu již existujících služeb a nástrojů, takže práce se již odvedlo obrovské množství, ale dosud si nikdo nenašel čas na tu standardizaci. To mají vážně všichni takový strach z paralýzy analýzou, že místo přemýšlení radši rovnou sednou a začnou něco kódovat?
[1] protože systemd je svobodný software, takže už z definice závislost na jednom konkrétním dodavateli nemůže vzniknout
[2] i když často se při tvorbě standardů vyžaduje, aby existovaly aspoň dvě nezávislé implementace – což se používá jako takový test, že standard je rozumně napsaný a je schůdné ho nezávisle implementovat
[3] např. v hudebním přehrávači přepínat skladby nebo hrát či pozastavit přehrávání; nebo mít upozornění na nové e-maily, odesílat e-maily bez ohledu na použitý program…)
Pokud chceš informace o změně stavu nebo dostupnosti zdrojů poskytovat dynamicky v průběhu života služby, tak jde o funkcionalitu navíc, kterou nikdy jiný nenabízí. Je tedy zřejmé, že k tomu nějaké API a zásah do kódu budeš potřebovat. Ale není to samoúčelný zbytečný zásah – získáš díky němu nějakou užitečnou funkcionalitu navíc.Ano. Já jenom, než budu reagovat na některé další věci, tak malý reality check. Vem si, jaký řev byl kolem toho, když
tmux
chtěl implementovat nějakou knihovnu, aby mohl fungovat jako před tím. A to je jedna malá drobná změna. Ty navrhuješ systém, ve kterém (jistě že ne všechny) služby budou muset implementovat daleko větší změny. Já si fakt nejsem jistý, jestli bychom se alespoň částečného výsledku dožili.
IT je, nevím proč, strašně konzervativní obor. UNIX má 50let, něco si stále taháme s sebou (nemyslím myšlenky a filozofie, spíše konkrétní implementace), systemd je tu asi 10 let a zatím v praxi vidíme spíše workaroundy, než skutečná systemd řešení a silný odpor ke změnám. (Ano, souvisí to zejména s přístupem těch protagonistů.) (O FS ani nemluvě, někdo si raději počká, než FS z roku 1994 něco naimplementuje, než aby používat aktuální dostupné řešení.)
Skoro si myslím, že by bylo jednodušší napsat nový OS na základě tvých myšlenek a naimplementovat všechno znovu podle tvého konceptu. Toto je, myslím si, i příčina toho, proč systemd implementuje některé věci po svém a nečeká na okolí.
Já ale mluvím o standardu, otevřeném API.Jo já vím, tobě chybí API, mě u systemd chybí nějaký popis co to vlastně chce být a kam to chce směřovat, což je pro systémového inženýra dost důležité.
Autoři softwaru běžně a ochotně implementují...... cokoliv, co je potřeba pro jejich business (ne nutně přímo komerční). Před pár lety jsem se jako
systemd-hater
pravidelně hádal s lidmi, kteří mi argumentovali, "že potom bude stačit dodat jednu unitu a ne psát rc skripty pro 5 initů". Mimochodem úplně stejná argumentace je i proč to není zabalené v nějakém standardním balíčku - prostě "nebudeme to balit pro rpm, deb, zbytečný." Jinými slovy ochota udělat cokoliv nad rámec nutného extrémně rychle klesá. Prostě dost pochybuju o tom, někdo bude implementovat nějaké api, které je pro něj zbytečné, stejně jako dneska je pro něj zbytečné dělat řádné balíčky.
Jako autor služby bys měl vědět, jaké zdroje poskytuješ a měl bys být schopný ostatním říct (přes to API), zda ten který zdroj je dostupný nebo ne.Viz výše. Jedna věc je to vědět a druhá je to ochota implementovat.
Pokud toho služba není schopná, tak je potřeba nějaké náhradní řešení, např. v konfiguraci init systému nadeklarovat, že když daná služba běží, předpokládáme, že takové a takové zdroje jsou dostupné. Ale pořád je to lepší než současný stav.Což je právě to, co na dnešní úrovni umožňuje systemd docela dobře. Lepší lepidlo pro horší služby. (Pochopitelně neumí implementovat zdroje ve tvém smyslu slova.)
ale ve světě svobodného softwaru by to snad mělo fungovat jinak, ne?Mělo. A funguje? (Jenom disclaimer na tu tvou větu před tím, já se zabývám jen oss, proprietární software v rámci této diskuse vůbec neuvažuju.)
Jakého standardu? Kde je definovaný? Jak je verzovaný? Jak bude vypadat jeho evoluce? Bude zpětně kompatibilní?V tom odstavci jsem se zaměřoval především na to, že pro systemd bylo asi jednodušší si ty věci implementovat znovu, než řešit API a roky čekat na to, až to napíše někdo jinej. Viz první část tohoto komentáře. O chybějící specifikaci už znovu psát netřeba.
Tohle v tom mnou navrhovaném systému jde udělat taky.No to jsem nerozporoval, jen jsem psal, že tento čistě binární stav některých služeb nebo jejich podčástí přijde IMO dřív, než koncept založený na definici a dostupnosti zdrojů. Protože naimplementovat službu, která se ukončí, když něco nemá, je o mnoho snadnější než službu, která implementuje jakési API a posílá komplenxní zprávy.
Já to snad budu muset implementovat nebo aspoň sepsat jako návrh (ne jen jako komentáře roztroušené po diskusích a e-mailových konferencích)To mi trochu připomíná ten vtip (zkrátím): "ok, takže teď máme N+1 standardů"Přijde mi trochu smutné, že máme nějakých dvacet implementací init systémů, nebo že systemd reimplementuje spoustu již existujících služeb a nástrojů, takže práce se již odvedlo obrovské množství, ale dosud si nikdo nenašel čas na tu standardizaci.
Já jenom, než budu reagovat na některé další věci, tak malý reality check.
Obecně díky za komentář, v lecčems souhlasím.
Ty navrhuješ systém, ve kterém (jistě že ne všechny) služby budou muset implementovat daleko větší změny. Já si fakt nejsem jistý, jestli bychom se alespoň částečného výsledku dožili.
Já si právě myslím, že podobnou změnu lze zavést evolučně. Tzn. nabídnout API, které můžeš volitelně použít a tím získat nějaké výhody a novou funkcionalitu. V podobné roli je ten D-Bus – ten taky nemusíš používat, ale autoři si do svých programů dobrovolně přidávají D-Bus rozhraní, aby umožnili ostatním s tím programem pracovat přes API. Nebo tu máš třeba System Tray Protocol Specification – to mnou navrhované API by mohlo mít podobný rozsah a složitost, není to nic velkého (řádově jednodušší než D-Bus – případně by to šlo nad D-Busem postavit a pak by se ta specifikace smrskla na jeden krátký XML soubor s definicí toho rozhraní; i když samozřejmě D-Bus sám o sobě nějakou netriviální komplexitu představuje).
systemd je tu asi 10 let a zatím v praxi vidíme spíše workaroundy, než skutečná systemd řešení a silný odpor ke změnám. (Ano, souvisí to zejména s přístupem těch protagonistů.)
Tím to asi bude – systemd má dost špatnou pověst a lidi si často stěžují na problémy ve spolupráci, když hlásí chyby nebo chtějí navrhnout nějakou vlastní změnu. Osobní zkušenost s tím nemám, ale už takhle na základě pozorování to nevypadá moc přátelsky. Řada lidí to ani nepovažuje za svobodný software (resp. jen formálně – licencí) a mluví o budování vendor lock-inu.
Úplně chápu neochotu lidí implementovat rozhraní nějakého konkrétního jednoho init systému, ve který navíc nemají velkou důvěru. Kdyby se ale autoři třeba dvou tří init systémů dohodli na společném standardu třeba pro tu socket activation nebo pro informování o dostupných zdrojích, tak si myslím, že by to bylo přijato mnohem lépe, než systemd. Totéž třeba formát deklarativních konfiguráků popisujících služby – klidně by se dalo vyjít z toho, co má systemd, jen by se to muselo dobře popsat a stabilizovat – a pak by se klidně tyhle konfiguráky mohly načítat i v jiných init systémech nebo by mohly existovat nástroje na konverzi do jiných formátů.
Skoro si myslím, že by bylo jednodušší napsat nový OS na základě tvých myšlenek a naimplementovat všechno znovu podle tvého konceptu.
Tak to samozřejmě někdy je – spolupráce s jinými lidmi má nezanedbatelnou režii a někdy je lepší si vše udělat sám. Na druhou stranu, že bych napsal vlastní operační systém, považuji za celkem nereálné – tolik času se mi do toho investovat nechce a nevidím v tom takový smysl. Ale napsat vlastní init systém pro POSIXové OS, to už reálné je – byť i to je velký objem práce.
Jo já vím, tobě chybí API, mě u systemd chybí nějaký popis co to vlastně chce být a kam to chce směřovat…
Souhlas, tohle je taky důležité.
což je pro systémového inženýra dost důležité
Já si myslím, že z pragmatického pohledu člověka v téhle roli je to jednodušší – vybíráš si distribuci jako celek (a tam je mnohem víc kritérií než jen init systém), a když už si ji vybereš, tak pracuješ s tím, co máš, a držíš se doporučených postupů. Nemluvě o případech, kdy za tebe tu distribuci vybral někdo jiný – tam už vůbec není, co řešit.
Prostě dost pochybuju o tom, někdo bude implementovat nějaké api, které je pro něj zbytečné, stejně jako dneska je pro něj zbytečné dělat řádné balíčky.
Tak ho nebude implementovat, jeho škoda. Ten init systém může fungovat i bez toho a jen spouštět procesy, které ani neví, že běží pod nějakým initem. Ale pak takový program může zaostávat za ostatními, které to API používají a díky němu nabízejí nějakou funkcionalitu navíc. Opět je to jako s tím D-Busem – implementovat ho nemusíš, ale když to uděláš (třeba tam přidáš D-Bus modul), tak tím získáš u uživatelů nějaké body navíc a třeba si díky tomu vyberou raději tvůj program než jiný.
Nebo ještě starší příklad – když půjde nějaký síťový prvek monitorovat přes SNMP, tak bude oblíbenější, než prvky, které nejdou monitorovat vůbec nebo které používají nějakou proprietární technologii, nebo které lze monitorovat jen přes nějaké hnusné webové GUI napsané ve Flashi.
Což je právě to, co na dnešní úrovni umožňuje systemd docela dobře. Lepší lepidlo pro horší služby.
S tím souhlasím, systemd představuje určitý pokrok oproti starším initům (alespoň z toho uživatelského hlediska a pokud se zrovna při upgradu něco nerozbilo). Však taky se mi systemd po funkční stránce v lecčems líbí. Ale nelíbí se mi ta architektura a způsob vedení vývoje.
Proto mne mrzí, že jiné init systémy trochu zaspaly a nedotáhli včas náskok systemd. Jak jsem psal do gnu-system-discuss:
It would be a great „selling point“ if we can say: „we can provide same useful features as systemd but with just a fraction of its complexity and in a modular way (so you install only features, you need)“.
Nevím, jestli to jde ještě napravit, ale kdyby se s tím začalo včas, tak by to vytvořilo tlak na autory systemd, aby se nechovali tak samolibě a byli ochotnější k dohodě na nějakém společném standardu.
Mělo. A funguje?
Nějaký „konkurenční boj“ se tu vyskytuje taky – ať už je důvodem ješitnost a touha po slávě, nebo třeba snaha získat sponzory. Nicméně si myslím, že i tak ta spolupráce funguje lépe, a že pokud se lidi neshodnou na společném standardu, není za tím tak často zlý úmysl nebo snaha potopit konkurenci, jako spíš fakt, že ty lidi baví spíš programování, než psaní specifikací, a že se jim nechce předělávat to, co už mají hotové a k čemu mají osobní vztah.
pro systemd bylo asi jednodušší si ty věci implementovat znovu, než řešit API a roky čekat na to, až to napíše někdo jinej
Standard můžeš vytvořit i sám a nemusíš na nikoho čekat a s nikým se domlouvat. Ano, riskuješ, že na něco zapomeneš, nezohledníš potřeby a scénáře, které tě nenapadly atd. Ale pořád je to lepší než nic – pořád je tam šance, že to ostatní přijmou a začnou používat. Jde vlastně jen o to, abys to vhodně pojmenoval, dobře zdokumentoval a zavázal se k tomu, že to budeš rozvíjet zpětně kompatibilním způsobem a ideálně sémanticky verzovat, aby ostatní už z čísla verze viděli, co od toho můžou čekat.
Výše jsi psal: „mě u systemd chybí nějaký popis … kam to chce směřovat“ – a to je vlastně ono. Klidně by se to dalo pojmout stylem: Teď děláme na verzi 0.* a nejsme schopni zaručit zpětnou kompatibilitu, ale máme hrubou představu, že tehdy a tehdy se dopracujeme k 1.0 a od té doby budeme zpětnou kompatibilitu držet a budeme to mít dobře zdokumentované a části té dokumentace budou otevřené standardy, které může implementovat i někdo další. Jenže systemd je teď ve verzi 243 a stále vlastně nikdo neví, co se od toho dá do budoucna čekat.
No to jsem nerozporoval, jen jsem psal, že tento čistě binární stav některých služeb nebo jejich podčástí přijde IMO dřív, než koncept založený na definici a dostupnosti zdrojů. Protože naimplementovat službu, která se ukončí, když něco nemá, je o mnoho snadnější než službu, která implementuje jakési API a posílá komplenxní zprávy.
Jednodušší to je, ale ne o moc. Jestli v nějakém IFu vyhodíš výjimku, zavoláš exit(1)
nebo zavoláš jinou funkci, která někam pošle zprávu, je už celkem jedno.
implementuje jakési API a posílá komplenxní zprávy
Nemám to ještě úplně promyšlené, ale ten zdroj by měl být identifikovaný prostým textovým řetězcem, nejspíš URI (tzn. byl by to globálně unikátní identifikátor). A ty zprávy by vlastně obsahovaly jen tento řetězec a typ události (zdroj se objevil, zdroj zmizel). A opačným směrem (z initu k aplikaci) by chodily podobné notifikace.
Dnes běžně používané technologie (D-Bus, SNMP, JMX atd.) jsou výrazně komplexnější. Jedna z možností je implementovat to nad některou z nich nebo použít třeba podmnožinu jejího kódování – pak by stačilo specifikovat sémantiku zpráv a daly by se použít existující knihovny (které jsou tedy ale kanón na vrabce, takže tady je otázka, jestli použít něco většího a hotového, nebo raději menšího a nového).
To mi trochu připomíná ten vtip (zkrátím): "ok, takže teď máme N+1 standardů"
Tak je to vždycky :-)
Ale vážně, tady jde spíš o to, jestli bych si na to našel čas a dal tomu prioritu… jinak si ale myslím, že by to úspěch mít mohlo, protože reálný užitek to přináší a averze spousty lidí k systemd je dost velká.