Jednotweetová chyba v systemd
Ať už vůči systemd namítal kdo chtěl, co chtěl, v uplynulých dvou letech jej jako výchozí init system začaly používat všechny rozšířenější distribuce a následně i distribuce od nich odvozené, distribuce odvozené od distribucí odvozených atd. Odolávajících mohykánů je poskrovnu, takže když se tedy objeví chyba, je jí ovlivněno relativně velké množství linuxových instalací. A chyba, která se objevila na konci září, je opravdu vypečená.
NOTIFY_SOCKET=/run/systemd/notify systemd-notify ""
Pokud tento příkaz (který se pohodlně vejde do 140 znaků omezujících jeden příspěvek na Twitteru, odtud název) spustíte pod libovolným uživatelem, dojde k zaseknutí PID 1 (= systemd) ve stavu pause. Příkaz odesílá zprávu nulové délky do /run/systemd/notify, aserce na řádku 1666 ve zdrojovém kódu manager.c, ale nulovou délku nepřipouští a systemd se s ní nevyrovná. Nadále tak nelze spouštět a zastavovat systémové démony, přijímat spojení, čistě rebootovat systém a i další součásti závislé na systemd se chovají nestabilně.
Systemd chybu obsahuje zhruba dva roky, od verze 219 je běžně reprodukovatelná (některé bugreporty uvádějí nutnost zabalení příkazu do while cyklu), verze starší než 209 chybu neobsahují, ve verzích mezi těmito dvěma je dopad méně závažný.
Oprava je už na světě (verze 231-9) a netrvala ani příliš dlouho, chyba samotná ovšem opět rozvířila debaty, které poslední dobou trochu polevily: Zda je systemd opravdu tak dobrá náhrada sysvinit, jak o něm autoři tvrdí. Zda je v pořádku, do jakých rozměrů narostly závislosti ostatních částí systému na systemd. Zda by neškodila trocha diverzity a možnosti volby u jednotlivých distribucí. Vzduchem zase létají slovní spojení jako "defective by design", avšak osobně nepředpokládám, že by s pozicí systemd tato aférka nějak výrazně otřásla.
Co myslíte vy?