systemd je 10 let starý, ale pocity z něj v linuxové komunitě nepolevily – nyní je stejně rozdělující jako kdykoli předtím. Přestože jej používá mnoho hlavních linuxových distribucí, tvrdá opozice neustoupila.
Table of Contents
Spouštěcí sekvence Linuxu
Když zapnete počítač, hardware se spustí a poté (podle typu boot sektor váš počítač používá) buď hlavní spouštěcí záznam (MBR) provede nebo Unified Extensible Firmware Interface (UEFI) běží. Poslední akcí obou je zapálení Linuxové jádro.
Jádro se nahraje do paměti, samo se dekomprimuje a inicializuje. A dočasný souborový systém je vytvořen v paměti RAM, obvykle pomocí nástroje zvaného initramfs nebo initrd. To umožňuje určit a načíst požadované ovladače. To zase umožňuje souborovému systému v uživatelském prostoru načíst a připravit se na vytvoření prostředí v uživatelském prostoru.
Vytvoření prostředí uživatelského prostoru je řešeno procesem init, což je první proces spuštěný jádrem v uživatelském prostoru. Má to ID procesu (PID) 1. Všechny ostatní procesy jsou buď přímé nebo nepřímé potomky procesu init.
Před systemd bylo hlavním výchozím nastavením procesu init přepracování Init Unix System V. K dispozici byly i další možnosti, ale System V init byl standardní možností ve většině jinýchDistribuce softwaru Berkeley (BSD) odvozené distribuce. Protože to přišlo přímo ze System V Unix – duchovního předka Linuxu – mnoho lidí to považuje za „oficiální způsob“, jak to udělat.
Proces init spustí všechny démoni a služby potřebné k tomu, aby operační systém fungoval smysluplným a interaktivním způsobem. Tito démoni se starají o věci, jako je síťový zásobník, aktivují další hardware uvnitř vašeho počítače a poskytují spouštěcí obrazovku.
Mnoho z těchto procesů na pozadí běží i po svém spuštění. Dělají věci, jako je protokolování informací o událostech, sledují změny hardwaru při vkládání nebo odebírání zařízení a spravují přihlášení uživatelů. Není překvapením, že init systém obsahuje také funkce pro správu služeb.
Můžeme použít ps abyste viděli proces, který má PID 1. Použijeme možnosti f (úplný formát výpisu) a p (PID):
ps -fp 1
Vidíme, že proces s PID 1 je systemd. Spuštění stejného příkazu na Manjaro Linux přineslo jiný výsledek. Proces s PID 1 byl identifikován jako /sbin/init. Rychlý pohled na tento soubor ukazuje, že jde o symbolický odkaz na systemd:
ps -fp 1
ls -hl /sbin/init
Pomocí možnosti ppid (ID rodičovského procesu) s ps můžeme vidět, které procesy byly přímo spuštěny systemd:
ps -f --ppid 1
Je to docela dlouhý seznam, jak můžete vidět na obrázku níže.
Alternativy
Několik projektů se pokusilo vytvořit alternativu k tradičnímu System V init. Jedním z hlavních problémů je, že u System V init jsou všechny procesy spouštěny sériově, jeden po druhém. Ke zlepšení efektivity zaváděcí sekvence používá mnoho alternativních projektů paralelismus ke spouštění procesů souběžně a asynchronně.
Zde je několik informací o některých z nich:
Povýšenec: Vyvinuto společností Kanonický, byl použit v Ubuntu 9.10, červená čepice, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 a Fedora 9.
Spusť to: Běží dál FreeBSD a další deriváty BSD, macOS a Solaris, stejně jako systémy Linux. Je to také výchozí inicializační systém zapnutý Neplatné Linux.
s6-linux-init: Tato náhrada za System V init byla navržena tak, aby přesně dodržovala Unixová filozofie, který je často redukován na zvuk „udělej jednu věc a udělej to dobře“.
Existuje mnoho dalších s různou funkčností a designem. Nicméně žádný z nich vytvořil rozruch systemd udělal.
Systémová cesta
systemd byl vydán v roce 2010 a byl použit ve Fedoře v roce 2011. Od té doby byl přijat mnoha distribucemi. Byl vyvinut společností Lennart Poettering a Kay Sieversová, dva softwaroví inženýři ve společnosti RedHat.
systemd je mnohem víc než jen náhrada init. Spíše je to sada přibližně 70 binárních souborů, které se starají o inicializaci systému, démony a služby, protokolování a žurnálování a mnoho dalších funkcí, které již zvládaly vyhrazené moduly v Linuxu. Většina z nich nemá nic společného s inicializací systému.
Některé z démonů poskytovaných systemd jsou:
systemd-udevd: Spravuje fyzická zařízení.
systemd-logind: Spravuje přihlášení uživatelů.
systemd-resolved: Poskytuje překlad síťových názvů pro místní aplikace.
systemd-networkd: Spravuje a detekuje síťová zařízení a spravuje síťové konfigurace.
systemd-tmpfiles: Vytváří, odstraňuje a čistí nestálé a dočasné soubory a adresáře.
systemd-localed: Spravuje nastavení národního prostředí systému.
systemd-machined: Detekuje a monitoruje virtuální stroje a kontejnery.
systemd-nspawn: Může spustit příkaz nebo jiný proces v odlehčeném kontejneru jmenného prostoru, který poskytuje funkci podobnou jako chroot.
A to je jen špička ledovce, která je také jádrem věci. systemd již dávno překonal to, co se vyžaduje od systému init, což je podle jeho odpůrců samotná definice rozsahu creep.
„Je to moc velké. Dělá to příliš mnoho.”
Odpůrci systemd poukazují na velkou a zvláštní kombinaci funkcí, které zahrnuje. Všechny tyto funkce již v Linuxu existovaly a některé z nich možná potřebovaly aktualizaci nebo nový přístup. Nicméně spojit všechny tyto funkce do toho, co by měl být init systém, je architektonicky záhadné.
systemd byl nazýván jediným bodem selhání pro příliš mnoho kritických funkcí, ale nezdá se, že by to bylo ospravedlnitelné. Je pravda, že to hází Unixová filozofie vytváření malých nástrojů, které spolupracují namísto velkých kusů softwaru, které dělají vše z okna. I když systemd není striktně monolitický (skládá se spíše z mnoha binárních souborů než z jednoho velkého), zahrnuje mnoho různých nástrojů a příkazů pro správu pod jednou deštníkem.
I když nemusí být monolitický, je velký. Abychom získali představu o měřítku, spočítali jsme řádky textu v kódové základně jádra 5.6.15 a hlavní větvi systemd úložiště GitHub.
To byla poměrně hrubá metrika. Počítal řádky textu, nejen řádky kódu. Takže to zahrnovalo komentáře, dokumentaci a vše ostatní. Bylo to však podobné srovnání a dalo nám jednoduché měřítko:
( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l
Jádro mělo téměř 28 milionů (přesněji 27 784 340) řádků textu. Naproti tomu systemd jich měl 1 349 969, tedy téměř 1,4 milionu. S naší metrikou happy-go-lucky vychází systemd na přibližně 5 procent velikosti jádra, což je šílené!
Pro další srovnání, počet řádků pro moderní implementaci System V init pro distribuci Arch Linux vyšel na 1 721 řádků.
Poetering zjevně nemá žádný ohled na Ústav elektrotechnických a elektronických inženýrů (IEEE) Computer Society, ani Přenosné rozhraní operačního systému (POSIX) standard. Ve skutečnosti on povzbudil vývojáře, aby ignorovali POSIX:
„Takže si pořiďte kopii The Linux Programming Interface, ignorujte vše, co říká o kompatibilitě POSIX, a hackněte svůj úžasný linuxový software. Je to docela úlevné!“
Objevila se obvinění, že systemd je projekt Red Hatu, který Red Hatu pouze prospívá, a přesto je vnucován širšímu linuxovému světu. Ano, zrodil se v Red Hatu a je jím řízen a řízen. Z 1321 přispěvatelů však pro Red Hat pracuje jen zlomek.
Jaké jsou tedy výhody Red Hatu?
Jim Whitehurst, prezident IBM, který byl kdysi generální ředitel společnosti Red Hat řekl:
„Red Hat zvažoval mnoho dostupných možností a dokonce použil Canonical Upstart pro Red Hat Enterprise Linux 6. Nakonec jsme zvolili systemd, protože je to nejlepší architektura, která poskytuje rozšiřitelnost, jednoduchost, škálovatelnost a dobře definovaná rozhraní pro řešení problémů, které vidíme. dnes a předvídat v budoucnu.“
Whitehurst také řekl, že vidí výhody ve vestavěných systémech. Red Hat spolupracuje s „největšími embedded prodejci na světě, zejména v telekomunikačním a automobilovém průmyslu, kde je stabilita a spolehlivost prioritou číslo jedna.
To se jeví jako technicky správné důvody. Dokážete pochopit, že společnost potřebuje spolehlivost, a není nerozumné, aby Red Hat hleděl na své vlastní zájmy, ale měli by se toho řídit všichni ostatní?
Pijete systemd Kool-Aid?
Někteří odpůrci systemd říkají, že distribuce a lidé jen slepě následují příklad Red Hatu a osvojují si ho.
Nicméně, stejně jako fráze „pití Kool-Aid“, to není tak docela správné. Vytvořeno v roce 1978 poté vůdce kultu, Jim Jones, donutil svých více než 900 stoupenců, aby spáchali sebevraždu pitím tekutiny s hroznovou příchutí doplněnou kyanidem, tato fráze nesprávně zahanbuje Kool-Aid. Skupina skutečně vypila Flavour Aid, ale Kool-Aid je od té doby dehtován tím kartáčem.
Navíc linuxové distribuce nenásledují slepě Red Hat; přijímají systemd po vážné úvaze. Debata zuřila na Debian e-mailové konference na dlouhou dobu. V roce 2014 však komunita hlasovala pro přijetí systemd jako výchozí init systém, ale také podporovat alternativy.
Debian je důležitým příkladem, protože není odvozen z RedHat, Fedora nebo CentOS. Red Hat nemá na Debian žádné řízení. A Debian, stejně jako PID 1, má mnoho potomků, včetně Ubuntu a jeho mnoha vedlejších produktů.
Rozhodnutí učiněná komunitou Debianu jsou dalekosáhlá. O nich se také intenzivně diskutuje a hlasuje se o jejich použití Condorcetův způsob hlasování. Komunita také nečiní taková rozhodnutí lehkovážně.
Hlasovalo se znovu v prosinci 2019 se nadále soustředit systemd a pokračovat v hledání alternativ. Opak slepého následování, to je vlastně učebnicový příklad demokracie a svobody volby v práci.
Omezení volby
Obecně si nemůžete vybrat, zda použít systemd s konkrétní distribucí Linuxu. Spíše si distribuce samy vyberou, zda to chtějí používat, a vy si můžete vybrat, které linuxové distro preferujete. Možná, že vaše oblíbená linuxová distribuce přešla na systemd. Jako oblíbený hudebník, který mění žánry, to může být nepříjemné.
Lidé, kteří používají Debian, Fedora, CentOS, Ubuntu, Oblouk, Solus, a openSUSEa mají námitky proti přijetí systemd, mohou mít pocit, že jsou vytlačováni z používání jejich distribuce. Pokud se dostatečně silně zajímají o kteroukoli z architektonických voleb, creep nebo přehlížení POSIX, může jim připadat neudržitelné tuto distribuci nadále používat.
Samozřejmě existuje spektrum. Na jednom konci máte lidi, kteří problémům nerozumí (nebo je to dokonce zajímá), a na druhé straně máte vášnivé odpůrce. Někde uprostřed jsou ti, kteří nemají rádi změny, ale netrápí je to natolik, aby skočili z lodi. Ale co distribuční uprchlíci, kteří kvůli svým preferencím nebo zásadám nemohou zůstat na své vybrané distribuci?
Bohužel to není tak snadné, jako jen nainstalovat jakýkoli init systém, který chcete. Ne každý má na to technické schopnosti, nehledě na potíže, které nastanou, když aplikace nebo desktopová prostředí, jako je GNOME, mít závislosti na systemd.
Co takhle přejít na jinou distribuci? Některé, jako Devuan, se objevily jako nesystémové vidlice distribucí (v tomto případě Debian), které přijaly systemd. Použití Devuan by mělo být podobné jako u rodičovské distribuce, ale to neplatí pro všechny nesystémové forky. Pokud například opustíte Fedoru a přesunete se do AntiX, Gentoo, nebo Slackware, budete mít úplně jinou zkušenost.
Nikam to nevede
Líbí se mi něco z toho, co systemd dělá (jednoduché a standardizované kontrolní mechanismy pro procesy). Nerozumím zdůvodnění některých z toho, co to dělá (binární protokoly). Také se mi nelíbí některé z toho, co dělá (předělání domovských složek – kdo o to požádal?).
Distribuce jako Debian to dělají chytře a zkoumají alternativy, aby zůstaly otevřené možnosti. Systemd je v tom však na dlouhou trať.
Pokud spravujete linuxové stroje pro ostatní, naučte se systemd stejně jako System V init. Tímto způsobem, bez ohledu na to, na co narazíte, budete moci plnit své povinnosti.
Používáte Linux jen doma? Pokud ano, vyberte distribuci, která splňuje vaše technické potřeby a doplňuje vaši ideologii Linuxu.