Portál AbcLinuxu, 5. května 2025 15:17
Lennart Poettering na Google+ potvrdil, že gummiboot, jednoduchý UEFI boot manager, bude začleněn do systemd. Další připravované novinky, stručný přepis přednášky Lennarta Poetteringa na konferenci Fosdem 2015, na blogu Mattiase Geniara. [Slashdot]
Tiskni
Sdílej:
Chápem to správne, že podpora sa týka bezpečného zavádzania modulov pod uefi aby náhodou kernel neloadol keylogger alebo niečo podobné?
Jedná sa o voliteľnú podporu pri ktorej SystemD overí či nebol naštartovaný OS do kompromitovaného stavu.Prosim pekne, ako to moze userspace proces (init) spravit? Ved kernel ma plnu moc nad tym co sa bude diat s userspace procesom...
Podle toho by se vsechny systemd zavislosti mely stat soucasti systemd (asi uvazuji takhle, jinak si to nedokazu vysvetlit).Minimalizaci externích závislostí dělají všechny možné projekty. Skoro bych řekl, že se to po nich přímo požaduje. Že se něco stalo součástí systemd, za to se za rok za dva zapomene, ale kdyby to bylo potřeba k jeho buildu, budou si na to lidi stěžovat pořád. Slučování projektů do jednoho zdrojového balíku tvořícího základní systém je proces, který by u systemd už neměl nikoho překvapovat. A svým způsobem je to odpověď na to, co všichni chtěli, nainstalovat si pár balíků a mít funkční systém :).
http://fedoraproject.org/wiki/Packaging:No_Bundled_LibrariesJestliže se ty projekty sloučí, tak toto pravidlo nelze vůbec aplikovat.
$ zcat /proc/config.gz | grep SYSTEMD CONFIG_GENTOO_LINUX_INIT_SYSTEMD=y
Jedná sa o voliteľnú podporu pri ktorej SystemD overí či nebol naštartovaný OS do kompromitovaného stavu.Tou dobou už je trochu pozdě řešit nějaký bezpečný boot, ne? :)
Mozna nastal cas, aby zacal ochutnavat vlastni medicinu
Co by asi hosan rikal na to, kdyz se kdbus patch nakonec neprijme a u cgroups by se co tri mesice prekopavalo API nebo se kompletne opustily ? Porad by tvrdil ze Linux je jen implementacni detail ?Myslím, že ano.
Potrebujou prece nejak nastartovat ten systemd-dhcpd-serverPokud vím, žádný
systemd-dhcpd
neexistuje, jen systemd-networkd
a libsystemd-dhcp
. Stavět na něm vtipy vyžaduje dost fantazie :).
+Lennart Poettering Is there a reason for not creating a "systemd project" as umbrella project like "Mozilla", with the goal to provide the complete Linux plumbing layer? By doing that, most of the optional bits could be provided in separate repositories with independent releases, and still be seen as part of "one solution". This might make bootstrapping a system using systemd easier, and also would maybe reduce some of the criticism that systemd is pulling in too much stuff. In any case, I like the newest addition, and as long as it is optional, nobody should have a problem with itLennart Poettering
+Matthias Klumpp I don't see how splitting up repos does any good. I don't see how this makes anything easier for anyone. It certainly makes things a lot more complex for downstreams, since they would have to package 20 packages, instead of just one. And more importantly, for myself: it would make hacking systemd a ton more difficult. Our internal C helpers in src/shared/*.c make hacking on systemd relatively easy. This extensive set of helper functions is one of the reasons we are so productive... If we wanted to make use of that in external projects we'd have to stabilize their API, but that would mean dealing with API breakages, and we couldn't just sed through our tree to fix things up. People learnt to accept that the Linux kernel is a single repo, too, including the core kernel, but also all subsystems, drivers, and now even client side tools. People also learnt to accept that glibc includes libm, libc, libresolv, libpthread and so on. Things aren't that different for systemd here...Mít účet na G+ tak tam snad něco i napíšu, protože to je akorát smradlavý alibismus tohle. Nic z toho co jmenuje absolutně není problém. Knihovna C utilit pro interní účely by klidně mohla mít nestabilní API - koho to zajímá. To samý balíčky - 20 balíčků je jakože nějaký velký číslo? Viděl ten člověk někdy KDE4? IMHO naopak většina dister by měla radost, že si to můžou rozškatulkovat dle libosti. Tohle mě fakt vysírá.
Nic z toho co jmenuje absolutně není problém.Vytvaret nekolik repozitaru aniz by se castecne rozdelil projekt a alespon trochu stabilizovaly interfacy nema skutecne smysl.
Vytvaret nekolik repozitaru aniz by se castecne rozdelil projekt a alespon trochu stabilizovaly interfacy nema skutecne smysl.No právě!
Tech projektu, kdy se naopak vsechny 'nezavisle' komponenty a moduly nakonec nacpaly do jednoho repositare, aby se to cele trochu stabilizovalo, a vyvoj a testing synchronizoval, jsem zazil uz pomerne dost.Jo? Tak to mně přijde, že trend je ve většině případů přesně opačný. (Ačkoli výjimky určitě existujou.)
Jo? Tak to mně přijde, že trend je ve většině případů přesně opačný. (Ačkoli výjimky určitě existujou.)Mozna u opensource, a jeste jen nektereho - viz. kernel. Kdyz na jedne strane tlaci deadliny a na strane druhe nerealisticke sliby obchodniku, je casto jedna repozitory s CI cesta. Pokusy mit nezavisle vyvijene verzovane moduly, ze kterych se neco sklada na zakazku, mi v praxi mimo vylozene high level bloky moc nefugovaly, prace spojena s narazovou integraci zabila vetsinu moznych benefitu.
OSS se na žádné termíny nebo stupidní sliby obchodníků ohlížet nemusíHa ha ha.
Mít účet na G+ tak tam snad něco i napíšu, protože to je akorát smradlavý alibismus tohle.Hmm, tak jsem to nakonec udělal a bylo mi odpovězeno, že - TL;DR - větší modularita zkrátka nebude.
Tím může být klidně systemd samotný, spouštějíc jednotlivé "systémy" přes systemd-nspawn.
Historie se na detaily neptá :).V 2050 bude povazovan za vynalezce zarovky, a v 2070 za mirotvorce od Stalingradu
Spravoval Lennart nejake servery?
To by mě taky zajímalo. Systemd na ostrých serverech ještě nemám (to bohužel přijde s nasazením RHEL7), hraju si s tím na soukromých serverech a to včetně úžasného journalctl
. Kromě toho, že se 50% souborů journálu pokazilo (což LP nijak netanktuje), tak se s tím hlavně vůbec nedá pracovat, jak je to pomalé. Aktuálně mám 3GB v journalu (journalctl --disk-usage
) a úplně obyčejné journalctl -b
(last boot) a stisk END (tj. dostat se na konec, práce v obyč less
) je mnohaminutové čekání.
A to se na tom serveru dohromady nic neděje, nic se neloguje. Nejvíc hlášek v logu (co do počtu) je od postfixe, přičemž na ten server přijde tak 200 emailů za hodinu ve špičce. Jako tohle nasadit na ostrý emailový server s provozem 200 tis. za den, tak to můžu logovat rovnou do /dev/null
, protože v journalu bych se k těm logům stejně nikdy nedostal.
A to běžně přes less
prohlížím 6GB textové logy, takže přibližně vím, jak by se to mělo chovat. (less 6GB log, END, do 1s jsem na konci).
Teď mi jistě kde kdo napíše, že journalctl
používám špatně, že když chci na konec, tak potřebuju přepínač xy. To si rovnou odpusťte, standardní nástroje s logy nemají nejmenší problém.
# time journalctl -b -u postfix.service | wc -l 60560 real 1m20.408s user 0m25.304s sys 0m57.636s
Jen pro srovnání (cca 6GB, ale hlavně 200x víc řádků):
# time cat postgresql-9.4-main.log.1 | wc -l 10077588 real 0m51.807s user 0m0.744s sys 0m8.368s
Má někdo vysvětlení pro to, co journalct dělá 57s v kernelu (SYS)?
Má někdo vysvětlení pro to, co journalct dělá 57s v kernelu ?Tuším, ale nechci být sprostý :)
Zkus jim k tomu napsat bugreport. Jo vím, to nebylo moc vtipný…
time journalctl -b | wc -l
?
# time journalctl -b | wc -l 348880 real 1m7.021s user 0m29.372s sys 0m30.804s
Ještě jsem hned po té (když soubory journalu už jsou 100% v IO cache), spustil znovu:
# time journalctl -b -u postfix.service | wc -l 60819 real 1m33.287s user 0m25.048s sys 0m58.940s
V DB žargonu bych řekl, že prováděcí plán není úplně ideální, když full table scan bez omezení je rychlejší, než možný index scan s omezením na 17% záznamů.
Jako průtokový ohřívač logů?
(omlouvám se za komentář bez přidané hodnoty)
time ./journalctl -b | wc -l 359191 real 0m26.820s user 0m22.904s sys 0m1.348shned potom:
time ./journalctl -b -u postfix.service | wc -l 61982 real 0m10.631s user 0m4.612s sys 0m0.556sTakže zrychlení je značné. Pokud je to tvoje práce, tak ti patří velký dík.
Problém. Když jsem zkompiloval tag v218, tak ./journalctl
logy našel.
Teď po kompilaci dab2bce81ed3e97d059d56e66f560aa25d9c2d63 to píše
./journalctl No journal files were found.
a to ani když jsem mu nastavil cestu (-D).
Já už se tomu dál nechci věnovat, už tak jsem tomu dal víc času než jsem chtěl. Podstatné je, že už 218 vypadá docela použitelně a jestli se to bude ještě zlepšovat, tak je to jen dobře.
Chtělo by to opustit bláznivou myšlenku, že jde o nějaké altruisty, kterým jde o nějaké obecné blaho v oblasti Open source a že svoje investice nechtějí a nebudou chtít kapitalizovat.
Až budeš mít neřešitelný komplikace s provozem serverů, se kterými sis dřív dokázal poradit než sis zavlík systemd, tak budeš nucenej platit si jejich support nebo si to komplet pronajmš. A plať.Těch věcí za co se začne platit a který byly doteď zadarmo asi bude přibejvat.read ahead implementation dropped: in the age of SSDs the benefit is not big enough to have this. All systemd developers have SSDs and no more spinning disks, nobody could/wanted to support this anymore. The idea was to read-ahead the bits needed during the boot process and remember it next time, for faster boots. But with SSDs, this support is droppedSoudruzi z Red Hat jedou na SSD a tak jsou rotační HDD pasé. To už ani není vtipný
Tak ja jsem to pouzival a opravdu to ten boot (v mem pripade) trochu zrychlilo. Nadruhou stranu je to jedna z funkcionalit, kterou klidne ozelim. Ono to hlavne nemuselo pomoct vzdy. Takze udrzovat neco takoveho opravdu v dnesni dobe nedava moc smysl. Nehlede na to ze i ja uz mam skoro vsude SSD pro system.
Jen jsem poukázal s jakým (dis)respektem ke skutečným i potenciálním uživatelům uvažují. Pokud si to někdo nedokáže přebrat nebo vědomě ignoruje, jeho věc že padá do pasti.
Nevím proč tak obšírná obhajoba.To ale vůbec není obhajoba, i když to tak z vnějšího pohledu může vypadat. Jsou to jen moje zkušenosti s tím, jak open source vývoj obecně funguje.
Jen jsem poukázal s jakým (dis)respektem ke skutečným i potenciálním uživatelům uvažují.Můj názor je, že sis na to vybral špatný příklad. Jednak se jedná o naprostou prkotinu, jednak je v podstatě celkem dobře zdůvodněná a jednak zrušili podprojekt, který byl podle mě od začátku omyl a vůbec neměl vzniknout.
Pokud si to někdo nedokáže přebrat nebo vědomě ignoruje, jeho věc že padá do pasti.Obecně bych s tebou i souhlasil, ale v tomhle případě se obávám, že jsi se vyhnul pasti jen proto, abys spadl do té o kousek vedle a ještě stáhl další s sebou. Slabá kritika je jedna z věcí, na které je úspěch systemd kabal vystavěn. Stačí si zajít na pár přednášek nebo sledovat propagandu šířenou po internetu. Jednou z možností jak se vyhnout reakci na kvalitní kritiku je neustále reagovat na tu nekvalitní.
Komentář nebyl ale ani tak read ahead ale o jejich přístupu a sebestřednosti.
systemd-readahead-collect.service is a service that collects disk usage patterns at boot time. systemd-readahead-replay.service is a service that replays this access data collected at the subsequent boot.
Pokud se nebojíte ukroucení hlavy, doporučuji podívat se na tento bug.Vzdal jsem to. Pokud někdo diskutuje ve 150 komentářích bug, který existuje jen díky "Lennartware" vylepšení "koncepce", je to prostě ztracené. Nějak jsem si nevšiml, že by před existencí Lennartova clusterfucku někdo masivně volal po tom, aby se cups spouštěl přes (x)initd, protože jinak běží zbytečně. Čím to asi tak bude.
vidím to podobně
systemctl disable cups.socket systemctl enable cups.serviceJá mám cups nastaven na socket activation, loguji se do KDE a dokud nechci tisknout, tak se mi cups nespouští. Co se týče té chyby, tak jsem ji letmo prolítnul a jestli jsem to správně pochopil, je to chyba v konfiguraci cups a nejde o chybu systemd.
Tuhle logiku miluju: jako úžasná výhoda systemd se prezentuje, že se systemd všichni dostanou prefabrikované unit files perfektně se hodící do všech distribucí. Jakmile je s nimi ale sebemenší problém, hned je to "chyba v konfiguraci cupsu". (Když budou fungovat dobře, bude to zásluha systemd.)
Ale abych stručně shrnul ten bug. Původní problém byl v tom, že při socket based activation ten socket musí vytvořit a nabindovat už systemd, který nečte konfiguraci cupsu, takže vždy poslouchá na wildcard adrese, což není ani zdaleka žádoucí. První pokus o řešení bylo, že tedy ten socket necháme defaultně poslouchat jen na 127.0.0.1, jenže, ouha, pak nefunguje announcing, protože ten potřebuje broadcast. V tu chvíli Johannes došel k tomu, že nejlepší řešení je se na celou slavnou socket based activation vykašlat, protože víc problémů přináší než řeší a pro tento typ služby se prostě nehodí; tak se prostě cupsd spustí normálně jako vždycky a bude klid. To neprošlo, protože socket based activation je killer feature, která se prostě použít musí, to by tak hrálo, aby se cupsd spustil dřív, než někdo bude tisknout. Tenhle problém se nakonec podařilo obejít pomocí nějakých generátorů, které z konfigurace cupsu vygenerují konfiguraci pro systemd (super, hlavně že jsme se před časem s velkou slávou zbavili SuSEconfigu, protože jsme přišli na to, že generovat z jednoho konfiguráku druhý není nejšťastnější řešení).
Pak ale vyvstal další problém: dokud se cupsd nespustí, nejdou v KDE vylistovat tiskárny. Hm, co s tím? Ne, opět nebudeme spouštět démona normálně, to by bylo moc oldschool. Takže se dostáváme k tomu "geniálnímu" nápadu, o kterém jsem se zmínil výše: démona budeme sice spouštět přes socket based activation, ale jakmile se někdo naloguje, spustíme "lpstat -a
", který zařídí, že… ano, modří už vědí… Že bych byl jediný, kdo z toho celého má pocit, že v Kocourkově byli žabaři?
Jinak jak je to s s tou aktivací cupsu při loginu, nevím. Mně se cups při loginu nespouští, spustí se mi až ve chvíli, kdy dám v něčem "soubor->tisk".Můžu se zeptat, na kterou tiskárnu tiskneš, když není žádná vidět, protože holt jaksi cups neběží? (Bavím se o prinserveru a tisku přes síť. To je něco, co desítky let fungoval, než přišel Lennartware s NIH syndromem a jeho socket kokotinama.)
CUPS browsing works by periodically broadcasting information about printers that are being shared to client systems on the same subnet. Each client maintains its own list of shared printers, and when more than one server shares the same printer (or the same kind of printer) the client uses all of the servers and printers to provide high-availability and failsafe printing. To configure printers on the same subnet, do nothing. Each client should see the available printers within 30 seconds automatically. The printer and class lists are updated automatically as printers and servers are added or removed.
Pokud zdrojem těchto informací má být konfigurační soubor cupsu, pak se prostě musí napsat generátor
A tohle má být ta výhoda systemd? Že místo "zastaralých, složitých, těžkopádných" (a já nevím jak se ještě nálepkujou původní RC scripty) se vyrobí generátory (na každou službu zvlášť), které to potom naservírují systemd? Opravdu máš pocit, že tohle je vylepšení?
se vyrobí generátory (na každou službu zvlášť), které to potom naservírují systemdA ještě se musí systemd říct, že se má reloadovat, aby si vůbec ty generované konfiguráky vzalo.
Samozřejmě je vždycky možnost socketovou aktivaci nepoužít. Pokud by se to mělo stát pravidlem, pak ovšem systemd ztrácí kus svého kouzla, že.Já v tom žádné kouzlo nespatřuji. Prostě jsou služby, které musejí stále běžet a spustit se při startu systému, aby plnily svou funkci. Mailserver taky nikdo příčetný nespouští on-demand, aby přijal přes SMTP mail, že. No a pak přijde systemd blb, který k tomu sdělí, že to je insane, že stále běžící služba je hrozná pitomost a pokud to správce balíčku nechápe, tak je nutné ho vyrazit, protože v 21. století používáme sockety a přes to nejede vlak.
Za jakých okolností že se to nespustí cups.service, pokud je enabled (a cups.socket je disabled)?Nespustí to, pokud to není navázáno na jakousi multi-user.target vopičárnu. Po opravě to pro změnu nedetekuje lokální tiskárny. Ne, vopravdu, není nad to rozmrdat naprosto triviální léta funkční věc Lennartovým clusterfuckem a nadšeně hýkat o pokroku 21. století.
cups-browsed
v tomhle vlákně asi zjevně nikdo neslyšel...
že do toho vzniklého bordelu narvu další mezivrstvu (Avahi/mDNS/DNS-SD)Až na to, že mDNS/DNS-SD nejsou žádné mezivrstvy, ale protokoly pro objevování služeb na síti, pomocí kterých se dají mnohé tiskárny najít. Avahi je jedna z implementací. On měl někdy CUPS implementaci vlastní?
On měl někdy CUPS implementaci vlastní?https://www.cups.org/documentation.php/doc-1.5/spec-browsing.html Tahle zprzněnina, používající bonjour křáp od Applu, je novinkou od verze 1.6. Samozřejmě to funguje nahovno jako všechno, co vylezlo z dílny nakousnutého jablka.
Tak ideální je to vyslat ze stroje, který bude tvořit gateway sítě. Protože po RA si všechny stroje nastaví jednak IPv6 adresy (autokonfigurací) a také default gateway právě na link local adresu stroje, který RA vyslal.
Jinak to samozřejmě jde poslat odkudkoliv.
Já používám radvd
, je to asi v kažým distru, minimální konfigurace je pak:
interface eth0 { AdvSendAdvert on; prefix 2001:xxxx:xxx:xxx::/64; };
(prefix samozřejmně podle ISP)
Potom normálně start služby nebo prostě jen radvd -n
.
Samozřejmě to funguje nahovno ...Co přesně ti na tom nefunguje? Zkoušels to?
... jako všechno, co vylezlo z dílny nakousnutého jablka.V tom případě nevim, proč se vůbec zabýváš CUPSem jako takovým, ten vůbec nevyvíjí už řadu lez Apple, že
Ano. Přesně mi na tom s výjimkou produktů nakousnutého jablka nefunguje vůbec nic. (Používám Xfce, kde tyhle krávoviny nejsou zadrátovaný.) Pod Windows je to rovněž zcela na <|>. Je to věc, kterou naprosto na nic nepotřebuju a nehodlám ztrácet čas jakýmkoliv jejím nastavováním. Ostatně, co se týče konkrétně Avahi, určitě není náhodou, že v tom je opět namočenej ten pošuk Lennart.Samozřejmě to funguje nahovno ...Co přesně ti na tom nefunguje? Zkoušels to?
emerge --ask --verbose sarcasm
Abych se na něj mohl dívat jako na konfigurační, tak by (1) měl být pod /etc
a (2) označen jako %config(noreplace)
. Konfigurační soubor, který po každém updatu budu muset znovu upravit a který nebude v zazálohovaném /etc
, je poněkud na draka.
/etc/systemd/system
.
# This service should not be bus activated if systemd isn't running, # so that activation won't conflict with the init script startup. Exec=/bin/falseAch ta elegance 21. století! Nádhera! Děkujeme, Lennarte, za ten moderní init!
Z mého pohledu tohle jsou v podstatě blbě napsané výchozí service files, protože pokud vim, když se ze service file vyhodí ten D-Bus alias, tak to funguje jako normální démon, ne?A přestane se to při startu synchronizovat a vyběhne na nás Lennart. Nemysli si, že jsem tento postup nezkoušel v kombinaci s tím, že bych zavedl onboot connections a že by NM ohlásil, že je hotový až po jejich dokončení.
Pokud si dobře pamatuju, tak nic podobného nefungovalo.Exec=/bin/false
Chtít vypnout automaticky aktivovanou službu snad není problém specifický pro systemd, ne?Evidentně je.
Exec=/bin/false
, služba se sama od sebe nikdy nespustí a administrátor tedy nemusí dělat vůbec nic.
Chtít vypnout automaticky aktivovanou službu snad není problém specifický pro systemd, ne?Samozřejmě, že je, jestliže je ta služba automaticky aktivovaná pouze kvůli systemd.
Jenže tady nejsme mateřská školka.I když to tak může někdy vypadat :).
Tak tedy konkrétně: Jakým příkazem (na systému bez systemd) zastavíš polkit a jeho automatické spouštění? Protože z upstreamu je nastaven tak, aby se spouštěl automaticky.Mám Gentoo, které je stavěné na to aby fungovalo se systemd i s openrc. Když se podívám do seznamu souborů, které se s tímto balíkem nainstalují, není tam ani systemd služba ani initskript. Balík tedy neinstaluje standardní systémovou službu (systemd unit, initscript, ...), ale pouze službu aktivovanou dbusem, což zajišťuje následující soubor.
/usr/share/dbus-1/system-services/org.freedesktop.PolicyKit1.service: [D-BUS Service] Name=org.freedesktop.PolicyKit1 Exec=/usr/lib/polkit-1/polkitd --no-debug User=root SystemdService=polkit.serviceMimochodem dbusovou aktivaci považuju za takový první krok k nadělání bordelu ve startování služeb, systemd na to pouze navazuje. Příkaz na zastavení služby pokud vím dbus nenabízí a tak je víceméně nutné systém překonfigurovat (smazat, přejmenovat či přebít soubor, který ji definuje, případně sebrat execute práva příslušné binárce) a službu sestřelit, bez ohledu na to, zda se používá systemd nebo ne. Naštěstí to u polkitu není tak zásadní jako u toho NetworkManageru, a to z následujících důvodů. 1) Dočasné zastavení polkitu za běhu systému mi nic nepřináší a tedy nevidím důvod ho provádět. Oproti tomu zastavení NetworkManageru považuju za klíčovou funkcionalitu, které mi umožňuje dočasně konfigurovat síť ručně v případě, že potřebuju konfiguraci, která se s NetworkManagerem neslučuje. To se stává každému, kdo si trochu víc hraje se sítěmi. 2) Ještě by bylo dobré zmínit, že polkit je čistě dbusovou službou zjevně z vůle upstreamu a ani distributor na tom v mém případě nic nemění. Oproti tom NetworkManager je dle upstreamu klasická systémová služba a jediný důvod pro dbusovou aktivaci jsou požadavky systemd. Jinak řečeno, polkit je v tomto ohledu problematický i bez systemd, ale s minimálními důsledky. Oproti tomu NetworkManager je v tomto ohledu problematický kvůli systemd a především na žádost vývojářů systemd. Problém by ovšem nastal, kdyby se upstream rozhodl polkit opravit a udělat z něj standardní systémovou službu, ovšem opět kvůli systemd nadále aktivovanou dbusem. Narazili by na ten stejný problém jako u networkmanageru, tedy na špatnou integraci systemd a dbusu, tedy by nakonec k řešení nedošlo, tentokrát ovšem kvůli systemd.
Jinak řečeno, žadné z těch dvou prostředí neposkytuje elegantní způsob, jak DBus aktivaci konkrétní služby zakázat.Těmi dvěma prostředími máš doufám namysli systemd a dbus. OpenRC se žádnou integrací s dbusem nechlubí a jeho vývojáři pokud vím nikoho nežádají, aby dbusovou aktivaci používal.
O jaký problém šlo v souvislosti s tím NetworkManagerem?Ten, že se na systemd po
systemctl stop NetworkManager
nebo service NetworkManager stop
znovu samovolně spouštěl jen na základě pokusu o přístup k jeho API ze strany jiných (dokonce neprivilegovaných) procesů.
Těmi dvěma prostředími máš doufám namysli systemd a dbus.Ne, ale to teď nechme asi plavat.
Ten, že se na systemd poAno, musí se zadat ještěsystemctl stop NetworkManager
neboservice NetworkManager stop
znovu samovolně spouštěl jen na základě pokusu o přístup k jeho API ze strany jiných (dokonce neprivilegovaných) procesů.
systemctl disable NetworkManager
, aby se přestal samovolně spouštět před DBus. Což souvisí s tím, že nejde DBusu říct, aby tu službu teď (dočasně) automaticky nespouštěl a řeší se to tím workaroundem s aliasy. Myslím, že by bylo fajn, kdyby bylo v moci systemd zastavovat DBus aktivaci stejným způsobem, jako může manipulovat se socket aktivací. Protože tak, jak je to teď, to opravdu není moc pěkné řešení.
Ano, musí se zadat ještě systemctl disable NetworkManagerZkus si přečíst dokumentaci systemd a zkus trochu pogooglit po internetu, případně si znovu přečti diskuzi, ať nemusíš dokola opakovat stejné nesmysly. 1) Příkaz disable ruší startování NM při bootu. 2) K zastavení služeb slouží příkaz stop, jen už nefunguje na 100%. 3) Workaround k tomu, že stop už nefunguje na 100% byl známý už před započetím diskuze.
systemctl --runtime mask NetworkManager systemctl stop NetworkManagerTakže zkus prosím přestat plácat nesmysly. Je možné, že tebou navrhovaný příkaz zablokuje start NetworkManageru (nechce se mi to testovat ani dolovat, zda tomu tak bylo vždycky), ale má velmi nepříjemný vedlejší efekt na konfiguraci systému.
Což souvisí s tím, že nejde DBusu říct, aby tu službu teď (dočasně) automaticky nespouštěl a řeší se to tím workaroundem s aliasy.Který pokud vím nikdy nefungoval a nejsem si vědom toho, že by někdo posílal patch, který by to opravoval.
Myslím, že by bylo fajn, kdyby bylo v moci systemd zastavovat DBus aktivaci stejným způsobem, jako může manipulovat se socket aktivací.Pokud vím, tak se s tím čekalo na kdbus.
Protože tak, jak je to teď, to opravdu není moc pěkné řešení.Je to jen jeden střípek z rozbitého zrcadla, jak je vidět i v dalších komentářích a diskuzích.
dbus-org.freedesktop.NetworkManager.service
, skrz který startuje DBus ten NetworkManager. Takže po systemctl disable NetworkManager
už NetworkManager nemůže být přes DBus startován.
#systemctl disable NetworkManager Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service. Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
systemd stop NetworkManager.dbus
, podobně jako to umí u socketů.
systemctl disable
(stejně jako systemctl mask
) má vedlejší efekt a zasahuje do uložené systémové konfigurace, což jde zcela proti sysmu systemctl stop
, který do uložené konfigurace vůbec nezasahuje. Obávám se, že ti vůbec nedochází, jak špatné je zasahovat do uložené konfigurace, zvláště když se jedná o vedlejší efekt. Ale to je asi otázka zkušeností a ty jsou bohužel nepřenositelné.
Zatím nejlepší workaround je ten, který jsem uvedl výše. Nemá smysl vymýšlet horší.
Příkaz disable ruší startování NetworkManageru při bootuTudíž to má nepříjemný vedlejší efekt, který působí destruktivně vůči systémové konfiguraci. Tudíž to rozhodně není korektní workaround na nefunkční
systemctl stop
. Navíc je korektní workaround (bez toho vedlejšího efektu) už delší dobu známý. Navrhovat tento workaround tudíž považuju za nesmysl. Navrhovat ho opakovaně i po upozornění považuju za donebevolající nesmysl. Na tom bohužel musím trvat.
Automatická aktivace služeb DBusem bez možnosti dočasného zákazu je problém, který existuje i pod OpenRC a který systemd podědil/neřeší.Ve skutečnosti dbusová aktivace s OpenRC nesouvisí, zatímco se systemd ano, ale to v podstatě popisuješ níže. Ten problém podědil systemd od dbusu, nikoli od jakéhokoli RC řešení a už vůbec ne od OpenRC. Nepřímo se dá říct, že ho podědil od Gnome.
U systemd to však může častěji způsobovat problémy, protože automaticky přes DBus spouští i služby, které OpenRC spouští pouze přímo (anebo vůbec).Není to přesné, ale podstatu problému to celkem vystihuje.
Takže je chybou systemd, že se hodně spoléhá na aktivaci DBusem, ale nedořešil vypínání tohoto způsobu aktivace. Souhlas?Dá se to tak říct. Ovšem ta vlastnost se netýká jen systemd jako kódu, ale i jako ekosystému a komunity. Nicméně se na ten problém nejspíš za chvilku zapomene a budou se řešit jenom stovky jiných :).
systemctl --runtime mask NetworkManager systemctl stop NetworkManagerMimochodem jsem jen tak z legrace zkusil následující, protože se jedná o hybrid mezi oběma přístupy a to selhává na plné čáře.
systemctl --runtime disable NetworkManagerTenhle příkaz totiž nedělá v dané situaci vůbec nic. On se jenom podívá, zda není služba runtime enabled a v případě toto zruší. Nejspíš to ani není bug, jen chování, které potvrzuje, že je mask ten správný přístup, protože služba jde maskovat jak trvale (v uložené konfiguraci), tak runtime (v /run), podle potřeby administrátora.
1) Nic není jistější než masking.Tedy kromě zásahu do samotné binárky, ale tam se opět uplatní bod #2.
Pokud jsem to správně pochopil, tak DBus si to startování dělá sám (i v prostředí bez systemd).Implementační detail, leč zjevně nezvládnutý.
Pokud tedy chceme, aby při nastavení systemd service jako disabled nebylo možné, aby si ji DBbus aktivoval, tak se to dělá (dle toho návodu) tak, že místo skutečného názvu service souboru (avahi-daemon.service) se tam uvede odkaz pouze alias (dbus-org.freedesktop.Avahi.service) a do skutečného service souboru se přidá definice aliasu (Alias=dbus-org.freedesktop.Avahi.service).Tak to NetworkManager měl a zjevně to nefungovalo. Dívalo se na to několik systemd expertů a po velmi dlouhé době dokázali přijít s řešením pomocí maskování.
Pokud je service file disabled, alias není nastaven a DBus by neměl službu sám spouštět.Správná terminologie je stopped neboli zastaven. Nebavíme se o naplánování služby na příští boot, ale o tom, zda služba má nebo nemá běžet teď. A to rozhodně nefunguje a lidi od systemd dosud nepřišli na to, jak to opravit. Takže časem nabídli nějaký ten workaround (michich) a odložili řešení minimálně dokud nebude dbus začleněný do systemd (dokonce ve smyslu pid 1, pokud vím).
Myslím, že ten "implementační detail" je dán tím, že dbus aktivace tu byla ještě před systemd.Před systemd byla spousta software. Jenže dbus a aktivace dbusem jsou trochu jiná kategorie a byly vždy prezentovány jako preferovaný způsob integrace se systemd.
Proto je ta integrace systemd taková nepěkná.To ovšem platí obecně, nejen o dbusu.
Pokud jsem to správně pochopil, tak DBus si to startování dělá sám (i v prostředí bez systemd).Ještě jedna designová drobnost. Bavíme se o software, který nepotřebuje být aktivován dbusem a v prostředí bez systemd by nikoho nenapadlo, že bude. Jediný důvod pro aktivaci dbusem je systemd a jediná chvíle, kdy se ta aktivace má uplatnit je při startu NetworkManageru a jiných služeb, kdy se tím zajistí, že ty služby se na tom dbusu zablokují a počkají, až bude NetworkManager připravený.
Exec=/bin/false
bez systemd funguje bez problémů.
Ten generátor není vůbec potřebaKdo ho tedy v diskuzi navrhoval?
V kocourkove zili a ziji odjakziva velice inteligenni lide, kteri pilne pracuji na tom, aby se meli dobre a jeste lepe.To se pokud vím Lennartovi daří. Je významným členem linuxové komunity, nemá problém si kdykoli sehnat zaměstnání u kterékoli větší firmy z oblasti a tedy si pravděpodobně může dost diktovat ohledně platu. To stejné bude zjevně platit pro kohokoli, kdo si v této oblasti udělá jméno, takže přinejmenším zbytek systemd kabal a v omezenější míře i další významní přispěvatelé do systemd.
Mr lennart by v kocourkove byl povazovan za magora/saska/obecniho blazna.Stejně dobře jako šaškem by mohl být třeba králem :).
Hlavně readahead v systemd je v podstatě klon "preload" daemona, který jsem zkoušel na Debianu Lennym několik let zpátky. Nakonec šel do háje, protože svým těžkým I/O mi blokoval getty / textový login na pár sekund.
(a taky ne vždy jsem startoval X, firefox, ...)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.