Dlaczego systemd Linuksa nadal dzieli po tych wszystkich latach
Opublikowany: 2022-01-29systemd ma 10 lat, ale uczucia w społeczności Linuksa nie złagodniały — jest teraz tak samo dzielący jak kiedyś. Chociaż jest używany przez wiele głównych dystrybucji Linuksa, zatwardziali opozycja nie ustąpiła.
Sekwencja rozruchowa Linuksa
Po włączeniu komputera sprzęt uruchamia się, a następnie (w zależności od typu sektora rozruchowego używanego przez komputer) uruchamiany jest główny rekord rozruchowy (MBR) lub uruchamiany jest interfejs Unified Extensible Firmware Interface (UEFI). Ostatnim działaniem obu z nich jest odpalenie jądra Linuksa.
Jądro jest ładowane do pamięci, dekompresowane i inicjowane. Tymczasowy system plików jest tworzony w pamięci RAM, zwykle przez narzędzie o nazwie initramfs
lub initrd
. Pozwala to na określenie i załadowanie wymaganych sterowników. To z kolei pozwala systemowi plików przestrzeni użytkownika załadować i przygotować się do ustanowienia środowiska przestrzeni użytkownika.
Tworzenie środowiska przestrzeni użytkownika jest obsługiwane przez proces init, który jest pierwszym procesem uruchamianym przez jądro w przestrzeni użytkownika. Ma identyfikator procesu (PID) równy 1. Wszystkie inne procesy są albo bezpośrednimi, albo pośrednimi dziećmi procesu init.
Przed systemd
, głównym nurtem domyślnym procesu init była przeróbka init z Unix System V. Dostępne były inne opcje, ale init System V był standardową opcją w większości dystrybucji innych niż Berkeley Software Distribution (BSD). Ponieważ pochodzi bezpośrednio od Systemu V Unix — duchowego przodka Linuksa — wiele osób uważa to za „oficjalny sposób” na zrobienie tego.
Proces inicjowania uruchamia wszystkie demony i usługi wymagane do działania systemu operacyjnego w sensowny, interaktywny sposób. Te demony obsługują takie rzeczy, jak stos sieciowy, włączają inny sprzęt wewnątrz komputera i zapewniają ekran rozruchowy.
Wiele z tych procesów działających w tle nadal działa po ich uruchomieniu. Robią takie rzeczy, jak rejestrowanie informacji o zdarzeniach, obserwowanie zmian sprzętu podczas wkładania lub wyjmowania urządzeń oraz zarządzanie logowaniem użytkowników. Nic dziwnego, że system init zawiera również funkcje do zarządzania usługami.
Możemy użyć ps
, aby zobaczyć proces, który ma PID 1. Użyjemy opcji f
(lista pełnoformatowa) i p
(PID):
ps -fp 1
Widzimy, że proces z PID 1 jest systemd
. Uruchomienie tego samego polecenia w systemie Manjaro Linux dało inny wynik. Proces z PID 1 został zidentyfikowany jako /sbin/init
. Szybkie spojrzenie na ten plik pokazuje, że jest to dowiązanie symboliczne do systemd
:
ps -fp 1
ls -hl /sbin/init
Używając opcji ppid
(identyfikator procesu nadrzędnego) z ps
, możemy zobaczyć, które procesy zostały bezpośrednio uruchomione przez systemd
:
ps -f --ppid 1
To dość długa lista, jak widać na poniższym obrazku.
Alternatywy
Kilka projektów próbowało stworzyć alternatywę dla tradycyjnego init z Systemu V. Jednym z głównych problemów jest to, że przy init z Systemu V wszystkie procesy są uruchamiane szeregowo, jeden po drugim. Aby poprawić wydajność sekwencji rozruchowej, wiele alternatywnych projektów wykorzystuje równoległość do jednoczesnego i asynchronicznego uruchamiania procesów.
Oto kilka informacji na temat niektórych z nich:
- Upstart: Opracowany przez Canonical, był używany w Ubuntu 9.10, Red Hat, Red Hat Enterprise Linux (RHEL) 6, CentOS 6 i Fedora 9.
- Runit: Działa na FreeBSD i innych pochodnych BSD, macOS i Solaris, a także na systemach Linux. Jest to również domyślny system init w Void Linux.
- s6-linux-init: Ten zamiennik dla System V init został zaprojektowany, aby ściśle podążać za filozofią Uniksa, która często sprowadza się do ugryzienia dźwiękowego „zrób jedną rzecz i rób to dobrze”.
Istnieje wiele innych, różniących się funkcjonalnością i wyglądem. Jednak żaden z nich nie stworzył systemu systemd
.
Systemd sposób
systemd
został wydany w 2010 roku i był używany w Fedorze w 2011 roku. Od tego czasu został przyjęty przez wiele dystrybucji. Został opracowany przez Lennarta Poetteringa i Kay Sievers, dwóch inżynierów oprogramowania w RedHat.
systemd
to znacznie więcej niż zamiennik init. Jest to raczej zestaw około 70 plików binarnych, które obsługują inicjalizację systemu, demony i usługi, logowanie i księgowanie oraz wiele innych funkcji, które były już obsługiwane przez dedykowane moduły w Linuksie. Większość z nich nie ma nic wspólnego z inicjalizacją systemu.
Niektóre demony dostarczane przez systemd
to:
- systemd-udevd: zarządza urządzeniami fizycznymi.
- systemd-login: Zarządza loginami użytkowników.
- systemd-resolved: zapewnia rozpoznawanie nazw sieciowych aplikacjom lokalnym.
- systemd-networkd : Zarządza i wykrywa urządzenia sieciowe oraz zarządza konfiguracjami sieci.
- systemd-tmpfiles: Tworzy, usuwa i czyści nietrwałe i tymczasowe pliki i katalogi.
- systemd-localed: zarządza ustawieniami regionalnymi systemu.
- systemd-machined: Wykrywa i monitoruje maszyny wirtualne i kontenery.
- systemd-nspawn: Potrafi uruchomić polecenie lub inny proces w lekkim kontenerze przestrzeni nazw, dając funkcjonalność podobną do chroot.
A to tylko wierzchołek góry lodowej, który jest również sednem sprawy. systemd
już dawno przewyższył to, co jest wymagane od systemu init, który według jego przeciwników jest samą definicją pełzania zakresu.
"Jest za duze. To za dużo.
Przeciwnicy systemd
zwracają uwagę na dużą, ciekawą mieszankę funkcjonalności, które zawiera. Wszystkie te funkcje istniały już w Linuksie i być może niektóre z nich wymagały odświeżenia lub nowego podejścia. Jednak połączenie wszystkich tych funkcji w system, który ma być systemem init, jest architektonicznie zagadkowe.
systemd
został nazwany pojedynczym punktem awarii dla zbyt wielu krytycznych funkcji, ale nie wydaje się to być uzasadnione. Trzeba przyznać, że odrzuca filozofię Uniksa tworzenia małych narzędzi, które współpracują ze sobą zamiast dużych programów, które robią wszystko przez okno. Chociaż systemd
nie jest ściśle monolityczny (składa się z wielu plików binarnych, a nie jednego ogromnego), zawiera wiele różnych narzędzi do zarządzania i poleceń pod jednym parasolem.
Chociaż może nie być monolityczny, jest duży. Aby zorientować się w skali, policzyliśmy wiersze tekstu w bazie kodu jądra 5.6.15 i głównej gałęzi systemd
repozytorium GitHub.
To był stosunkowo surowy wskaźnik. Liczył linijki tekstu, a nie tylko linijki kodu. Zawierało to komentarze, dokumentację i wszystko inne. Było to jednak porównanie podobne do podobnego i dało nam prostą miarę:
( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc-l
Jądro miało prawie 28 milionów (dokładnie 27 784 340) wierszy tekstu. Natomiast systemd
miał 1 349 969, czyli prawie 1,4 miliona. Z naszym szczęśliwym szczęściem systemd
ma około 5 procent rozmiaru jądra, co jest szalone!
Jako kolejne porównanie, liczba linii dla nowoczesnej implementacji init System V dla dystrybucji Arch Linux wyniosła 1721 linii.
Poettering wyraźnie nie bierze pod uwagę Towarzystwa Komputerowego Instytutu Inżynierów Elektryków i Elektroników (IEEE), ani standardu Portable Operating System Interface (POSIX). W rzeczywistości zachęcał programistów do ignorowania POSIX:
„Tak więc zdobądź kopię interfejsu programowania Linux, zignoruj wszystko, co mówi o zgodności z POSIX i zhakuj swoje niesamowite oprogramowanie dla systemu Linux. To całkiem odprężające!”
Pojawiły się oskarżenia, że systemd
jest projektem Red Hata, który przynosi tylko korzyści Red Hatowi, a jednak jest na siłę wpychany do szerszego świata Linuksa. Tak, narodził się w Red Hat i jest przez nią zarządzany i kierowany. Jednak z 1321 współtwórców tylko ułamek pracuje dla Red Hata.
Jakie są więc korzyści dla Red Hata?
Jim Whitehurst, prezes IBM, który kiedyś był dyrektorem generalnym Red Hat, powiedział:
„Red Hat rozważył wiele dostępnych opcji, a nawet użył programu Upstart firmy Canonical dla Red Hat Enterprise Linux 6. Ostatecznie wybraliśmy systemd, ponieważ jest to najlepsza architektura, która zapewnia rozszerzalność, prostotę, skalowalność i dobrze zdefiniowane interfejsy, aby rozwiązać problemy, które widzimy. dziś i przewiduj przyszłość”.
Whitehurst powiedział również, że widzi korzyści również w systemach wbudowanych. Red Hat współpracuje z „największymi dostawcami rozwiązań wbudowanych na świecie, szczególnie w branży telekomunikacyjnej i motoryzacyjnej, gdzie stabilność i niezawodność są najważniejszym problemem”.
Wydaje się, że są to uzasadnione technicznie powody. Możesz zrozumieć potrzebę niezawodności firmy i nie jest nierozsądne, aby Red Hat dbał o własne interesy, ale czy wszyscy inni powinni pójść w ich ślady?
Pijesz systemd Kool-Aid?
Niektórzy przeciwnicy systemd
twierdzą, że dystrybucje i ludzie po prostu ślepo podążają za przykładem Red Hata i go przyjmują.
Jednak, podobnie jak w przypadku wyrażenia „picie Kool-Aid”, nie jest to do końca właściwe. Ukuty w 1978 r. po tym, jak przywódca sekty, Jim Jones, zmusił ponad 900 wyznawców do popełnienia samobójstwa, wypijając wino o smaku winogronowym z dodatkiem cyjanku. To zdanie błędnie zawstydza Kool-Aid. Grupa faktycznie piła Flavour Aid, ale od tamtej pory Kool-Aid jest smołowany przez ten pędzel.
Ponadto dystrybucje Linuksa nie podążają ślepo za Red Hatem; przyjmują systemd
po poważnych rozważaniach. Debata szalała na listach dyskusyjnych Debiana przez długi czas. Jednak w 2014 r. społeczność głosowała za przyjęciem systemd
jako domyślnego systemu init, ale także za wspieraniem alternatyw.
Debian jest ważnym przykładem, ponieważ nie wywodzi się z RedHata, Fedory ani CentOS. Red Hat nie stosuje sterowania w Debianie. A Debian, podobnie jak PID 1, ma wielu potomków, w tym Ubuntu i jego wiele spin-offów.
Decyzje podejmowane przez społeczność Debiana są dalekosiężne. Są również energicznie dyskutowani i głosowali za pomocą metody głosowania Condorcet. Społeczność też nie podejmuje takich wyborów pochopnie.
Głosował ponownie w grudniu 2019 r., aby nadal koncentrować się na systemd
i nadal badać alternatywy. W przeciwieństwie do ślepego podążania, jest to w rzeczywistości podręcznikowy przykład demokracji i wolności wyboru w pracy.
Ograniczenia wyboru
Generalnie nie masz wyboru, czy użyć systemd
z konkretną dystrybucją Linuksa. Raczej same dystrybucje wybierają, czy chcą z niego korzystać, i możesz wybrać preferowaną dystrybucję Linuksa. Być może dystrybucja Linuksa, którą kochasz, przeszła na systemd
. Jak ulubiony muzyk, który zmienia gatunki, może to być wstrząsające.
Ludzie, którzy używają Debiana, Fedory, CentOS, Ubuntu, Arch, Solus i openSUSE i sprzeciwiają się adopcji systemd
, mogą czuć się wypierani z korzystania z wybranej przez siebie dystrybucji. Jeśli czują się wystarczająco mocno co do wyboru architektury, rozszerzania zakresu lub lekceważenia POSIX, mogą uznać, że dalsze korzystanie z tej dystrybucji jest nie do utrzymania.
Oczywiście istnieje spektrum. Z jednej strony masz ludzi, którzy nie rozumieją problemów (a nawet się nimi nie przejmują), a z drugiej masz zagorzałych przeciwników. Gdzieś pośrodku są ci, którzy nie lubią zmian, ale nie przejmują się tym na tyle, by wskoczyć na statek. Ale co z uchodźcami dystrybucyjnymi, którzy nie mogą pozostać na wybranej przez siebie dystrybucji ze względu na swoje preferencje lub zasady?
Niestety, nie jest to tak proste, jak po prostu zainstalowanie dowolnego systemu init. Nie każdy ma techniczne możliwości, aby to zrobić, nie wspominając o trudnościach, które pojawiają się, gdy aplikacje lub środowiska graficzne, takie jak GNOME, są zależne od systemd
.
A co z przejściem do innej dystrybucji? Niektóre, jak systemd
, pojawiły się jako niesystemowe widełki dystrybucji (w tym przypadku Debian), które zaadoptowały systemd
. Używanie Devuana powinno być podobne do dystrybucji nadrzędnej, ale nie dotyczy to wszystkich niesystemowych systemd
. Na przykład, jeśli opuścisz Fedorę i przejdziesz na AntiX, Gentoo lub Slackware, doświadczysz zupełnie innych doświadczeń.
To nigdzie nie prowadzi
Podoba mi się część tego, co robi systemd
(proste i ustandaryzowane mechanizmy kontroli procesów). Nie rozumiem uzasadnienia niektórych tego, co robi (dzienniki binarne). Nie podoba mi się też to, co robi (przerabianie folderów domowych — kto o to prosił?).
Dystrybucje takie jak Debian robią mądre rzeczy i badają alternatywy, aby zachować otwarte opcje. Jednak systemd
jest w tym na dłuższą metę.
Jeśli administrujesz maszynami z Linuksem dla innych, naucz się systemd
tak dobrze, jak znasz init System V. W ten sposób bez względu na to, z czym się spotkasz, będziesz w stanie wykonywać swoje obowiązki.
Po prostu używasz Linuksa w domu? Jeśli tak, wybierz dystrybucję, która zarówno spełnia Twoje potrzeby techniczne, jak i uzupełnia Twoją ideologię Linuksa.
POWIĄZANE: Systemd zmieni sposób działania katalogu domowego systemu Linux