systemd - újabb FLOSS sikertörténet

Van egy jó ötlet az OSX-ben? Koppintsuk le! (azaz innováljunk free/open software szellemben).

A végeredmény borítékolható: a fő funkciók csak hellyel/közzel működnek. Elkezd burjánzani mint a rák. Már minden faszsághoz ez kell, és ez is mindent átsző, és 99999 felesleges featureje van, de a fő funkcióit képtelen ellátni rendesen.

Leszögezem, hogy a launchd/upstart/Windows SCM vagy akár a systemd (lopott) alapkoncepciója szerintem nem rossz. Feltéve presze, hogy a kivitelezés sem lesz rossz. Ha azonban Lennart Poettering fejleszt valamit, akkor ott sok jóra nem lehet számítani.

A továbbiak elolvasásához aláfestésként javaslom a következő “klasszikus" dal  elindítását:

A systemd sajnos szánalmasan megbukott. Szokásos C-ben taknyolt, alultesztelt FLOSS szar. (pedig Business Critical szolgáltatást nyújt). A C-ben fejlesztett (FLOSS) szoftverek tipikus rákfenéjét is hordozza: könnyen korruptálódik az állapot egy programozói hibától. A systemd ezután tovább fut, ahelyett, hogy fail-fast szemlélettel a minimális károkozás reményében gyorsan leállna, és újraindulna a rendszer. Persze, méghogy "kékhalál” vagy “Uncaught Exception” Linuxxon!

2015-02-22T04:57:27.480367+01:00 machine kernel: [119445.546580] systemd[1]: segfault at 40 ip 0000000000463b15 sp 00007fff44bf4420 error 4 in systemd[400000+ed000]
2015-02-22T04:57:27.700746+01:00 machine systemd[1]: Caught <SEGV>, dumped core as pid 9237.
2015-02-22T04:57:27.701457+01:00 machine systemd[1]: Freezing execution.

Mi is történt itt?

https://github.com/systemd/systemd/blob/0377e373d1b4973effe14ca19e21f0c10740085d/src/core/main.c#L189

https://github.com/systemd/systemd/blob/0377e373d1b4973effe14ca19e21f0c10740085d/src/core/main.c#L222

https://github.com/systemd/systemd/blob/ac49d36faef5739d0e9db5742b780c4fb88e68bf/src/shared/util.c#L3827

A kínaiak persze próbálnak beloginonli password authhal, ami tiltva van, de az sshd amikor fogadja a csatlakozásukat (amit elutasít), spawnol egy child processt, amit megörököl az init, majd ez a login után elhal, amit a systemd (init) dolga (lenne) eltakarítani (az exit status info kiolvasásával).

Végeredmény: belassult gép, millió zombie orphan ssh process nem eltakarítva.

# ps axj
PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
[...]
    1  9358  9357  9357 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9363  9362  9362 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9368  9367  9367 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9373  9372  9372 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9378  9377  9377 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9383  9382  9382 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9388  9387  9387 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9393  9392  9392 ?           -1 Z      498   0:00 [sshd] <defunct>
   1  9398  9397  9397 ?           -1 Z      498   0:00 [sshd] <defunct>
[...]
#

Mit csinál jómukásember? Amit a systemd-nek magától is kellett volna: rebootol egyet, fail fast szellemben… Azaz rebootolna, ha tudna, mivel azt is a systemd intézni :).

sudo /sbin/shutdown -r now
Failed to open /dev/initctl: No such device or address
Failed to talk to init daemon.

Ilyenkor persze mindig kéznél van egy kis “Magic SysReq” (aminek már a neve mutatja mekkora ordas tákolás az egész, hogy ez szemelőtt van és a napi eszköztár része)

echo 1 > /proc/sys/kernel/sysrq
echo s > /proc/sysrq-triggerecho b > /proc/sysrq-trigger

Enterprise. Linux. Minőség.

Oké, vannak, akik nem örülnének, ha a futó rendzser alól kidőlne a systemd, és rebootolna. Akár ez a freezes megoldás is jó lenne a korruptálódás terjedésének megállítására, ha a systemd jól lenne megírva. Kis, hibatűrű komponensekből állna. A legkritikusabbak olyan szinten tesztelve és auditálva lennének, hogy közel hibamentesnek tekinthetőek lennének, a többi pedig failfast, respawn módszerrel működne. Az oprendszer a processzek legyakásánál biztosítaná a korruptálódott állapot megszüntetését, és a processek izolációja meggátolná a hibaterjedést. De legyen monolitkus nagy böszme cucc, mert csak… Köszönjük Lennart. Sikerült olyan problémát létrehoznod, ami eddig nem létezett, és a korábban létező problémákat sem oldottad meg, hisz most egy rendes működő init implementáció sincs a rendszeren…

Ha valahol tárgyi tévedést vétettem, akkor ki lehet javítani, de a kurva anyját annak, aki a gyűlöletembe beleszól.