Wygląda na to, że systemd to nowy, gorący system inicjujący w bloku, podobnie jak Upstart kilka lat temu. Jakie są zalety / wady dla każdego z nich? Ponadto, jak każdy z nich porównuje się do innych systemów inicjujących?
Wygląda na to, że systemd to nowy, gorący system inicjujący w bloku, podobnie jak Upstart kilka lat temu. Jakie są zalety / wady dla każdego z nich? Ponadto, jak każdy z nich porównuje się do innych systemów inicjujących?
Odpowiedzi:
Większość odpowiedzi tutaj ma pięć lat, więc czas na kilka aktualizacji.
Ubuntu używało domyślnie upstartu, ale porzuciło go w zeszłym roku na rzecz systemd - patrz:
Z tego powodu istnieje ciekawy artykuł Systemd dla użytkowników Upstart na wiki Ubuntu - bardzo szczegółowe porównanie między upstart i systemd oraz przewodnik przejścia od upstart do systemd.
(Należy pamiętać, że zgodnie z wiki Ubuntu nadal można domyślnie uruchomić aktualizację na bieżących wersjach Ubuntu, instalując upstart-sysv
i działając, sudo update-initramfs -u
ale biorąc pod uwagę zakres projektu systemowego, nie wiem, jak to działa w praktyce, ani czy systemd jest możliwe do odinstalowania).
Większość informacji w poniższych sekcjach Polecenia i skrypty została zaadaptowana z niektórych przykładów użytych w tym artykule (które są wygodnie licencjonowane, podobnie jak wkłady użytkowników Stack Exchange w ramach licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 3.0 ).
Oto szybkie porównanie popularnych poleceń i prostych skryptów, szczegółowe wyjaśnienia znajdują się w poniższych sekcjach. Ta odpowiedź porównuje stare zachowanie systemów opartych na Upstart z nowym zachowaniem systemów opartych na systemie, zgodnie z pytaniem, ale należy pamiętać, że polecenia oznaczone jako „Upstart” niekoniecznie są specyficzne dla Upstart - często są to polecenia, które są wspólne dla każdego niesystemowego systemu Linux i Unix.
su
machinectl shell
(patrz sekcja „zamiana komendy su” poniżej)
screen
systemd-run --user --scope screen
(patrz sekcja „Nieoczekiwane zabijanie procesów w tle” poniżej)
tmux
systemd-run --user --scope tmux
(patrz sekcja „Nieoczekiwane zabijanie procesów w tle” poniżej)
start foo
systemctl start foo
stop foo
systemctl stop foo
restart foo
systemctl restart foo
initctl list
systemctl status
init-checkconf /etc/init/foo.conf
systemd-analyze verify /lib/systemd/system/foo.service
initctl list-env
systemctl show-environment
initctl set-env foo=bar
systemctl set-environment foo=bar
initctl unset-env foo
systemctl unset-environment foo
W fazie upstart dzienniki są normalnymi plikami tekstowymi w katalogu / var / log / upstart, więc możesz je przetwarzać jak zwykle:
cat /var/log/upstart/foo.log
tail -f /var/log/upstart/foo.log
W logach systemowych przechowywane są w wewnętrznym formacie binarnym (nie jako pliki tekstowe), więc musisz użyć journalctl
polecenia, aby uzyskać do nich dostęp:
sudo journalctl -u foo
sudo journalctl -u foo -f
Przykładowy skrypt wstępny napisany w /etc/init/foo.conf
:
description "Job that runs the foo daemon"
start on runlevel [2345]
stop on runlevel [016]
env statedir=/var/cache/foo
pre-start exec mkdir -p $statedir
exec /usr/bin/foo-daemon --arg1 "hello world" --statedir $statedir
Przykładowy skrypt systemowy napisany w /lib/systemd/system/foo.service
:
[Unit]
Description=Job that runs the foo daemon
Documentation=man:foo(1)
[Service]
Type=forking
Environment=statedir=/var/cache/foo
ExecStartPre=/usr/bin/mkdir -p ${statedir}
ExecStart=/usr/bin/foo-daemon --arg1 "hello world" --statedir ${statedir}
[Install]
WantedBy=multi-user.target
su
Wymiana polecenie zostało połączone w Systemd w rozkładaną żądanie # 1022:
ponieważ według Lennarta Poetteringa „su to naprawdę zepsuta koncepcja” .
Wyjaśnia, że „możesz używać su i sudo jak poprzednio, ale nie oczekuj, że zadziała w pełni ” .
Oficjalny sposób na su
zachowanie podobne do tego jest teraz:
machinectl shell
Zostało to dalej wyjaśnione przez Lennarta Poetteringa w dyskusji do wydania # 825:
„No cóż, wiele się na ten temat dyskutuje, ale problem polega na tym, że to, co powinien zrobić su, jest bardzo niejasne. [...] Krótko mówiąc: su jest naprawdę zepsutą koncepcją. Daje ci to rodzaj skorupy i można z niego korzystać, ale nie jest to pełny login i nie należy go mylić z jednym z nich ”. - Lennart Poettering
Zobacz też:
Polecenia takie jak:
nie działa już zgodnie z oczekiwaniami . Na przykład nohup
jest poleceniem POSIX, aby upewnić się, że proces będzie kontynuowany po wylogowaniu z sesji. To już nie działa na systemd. Również programy takie jak screen
i tmux
muszą być wywoływane w specjalny sposób, w przeciwnym razie procesy, które uruchamiasz za ich pomocą, zostaną zabite (chociaż nie zabicie tych procesów jest zwykle głównym powodem uruchomienia screena lub tmuxa).
To nie pomyłka, to celowa decyzja, więc prawdopodobnie nie zostanie naprawiona w przyszłości. Oto, co Lennart Poettering powiedział na ten temat:
Moim zdaniem, w rzeczywistości UNIX był dość dziwny, że domyślnie pozwalał na swobodny dostęp dowolnego kodu użytkownika po wylogowaniu. Od wielu lat dyskutuje się wśród wielu osób z OS, że powinno to być możliwe, ale z pewnością nie powinno być domyślnym, ale nikt nie śmiał do tej pory przesunąć przełącznika, aby zmienić go z domyślnego na opcję. Brak czyszczenia sesji użytkownika po wylogowaniu jest nie tylko brzydki i nieco hackerski, ale także stanowi problem bezpieczeństwa. systemd 230 teraz w końcu przestawił przełącznik i wreszcie domyślnie czyści wszystko poprawnie po wylogowaniu użytkownika.
Aby uzyskać więcej informacji zobacz:
W sposób systemd działa wstecz - w zadaniach upstart zaczynają się tak szybko, jak to możliwe, a w zadaniach systemd rozpoczynają się, kiedy muszą. Na koniec dnia te same zadania mogą być uruchomione przez oba systemy i w prawie tej samej kolejności, ale myślicie o tym, patrząc z przeciwnej strony, że tak powiem.
Oto, w jaki sposób wyjaśnia to Systemd for Upstart Users :
Model Upstart dla uruchamiania procesów (zadań) jest oparty na „zachłannym zdarzeniu”, tzn. Wszystkie dostępne zadania, których zdarzenia startowe są uruchamiane, są uruchamiane jak najwcześniej. Podczas rozruchu upstart syntetyzuje niektóre zdarzenia początkowe, takie jak start lub rcS jako „root drzewa”, wczesne usługi zaczynają się na nich, a później usługi uruchamiają się, gdy te pierwsze są uruchomione. Nowe zadanie musi jedynie zainstalować plik konfiguracyjny w / etc / init /, aby stać się aktywnym.
model systemd dla uruchamiania procesów (jednostek) jest „oparty na leniwej zależności”, tzn. jednostka uruchomi się tylko wtedy, gdy i od niej zależy jakaś inna jednostka początkowa. Podczas rozruchu systemd uruchamia „jednostkę główną” (default.target, można zastąpić w grub), która następnie w sposób tranzytowy rozwija się i uruchamia swoje zależności. Nowa jednostka musi dodać się jako zależność jednostki sekwencji rozruchowej (zwykle multi-user.target), aby stać się aktywną.
Teraz niektóre najnowsze dane według Wikipedii:
(Zobacz Wikipedia , aby uzyskać aktualne informacje)
W przeszłości Proponowano rozwidlenie Debiana, aby uniknąć systemd . Devuan GNU + Linux został stworzony - widelec Debiana bez Systemd (dzięki fpmurphy1 za wskazanie go w komentarzach).
Aby uzyskać więcej informacji na temat tej kontrowersji, zobacz:
Deklaracja Exodus Debiana w 2014 roku :
Jak wielu z was może już wiedzieć, głosowanie Init GR Debian promowane przez Iana Jacksona nie było przydatne do ochrony dziedzictwa Debiana i jego użytkowników przed lawiną systemową.
Sytuacja ta przewiduje blokadę systemowych zależności, która de facto zagraża wolności rozwoju i ma poważne konsekwencje dla Debiana, jego wyższego i niższego szczebla.
CTTE udało się zamienić zależność i zyskać czas na subtelną instalację systemd nad sysvinit, ale nawet ten proces był wyczerpujący i pełen dramatyzmu. Ostatecznie tydzień temu Ian Jackson zrezygnował. [...]
Rezygnuję ze stanowiska komitetu technicznego ze skutkiem natychmiastowym.
Chociaż ważne jest, aby poglądy 30–40% projektu, które się ze mną zgadzają, były nadal reprezentowane w TC, ja osobiście jestem zdecydowanie zbyt kontrowersyjny w tym miejscu, aby to zrobić. Powinienem odsunąć się na bok, aby ograniczyć zakres personalizacji rozmów na temat zarządzania projektem. [...]
Devuan narodził się z kontrowersji związanych z decyzją o użyciu domyślnego systemu init dla Debiana. Oficjalne stanowisko Debian na Systemd jest pełen twierdzi, że inni zdemaskowana . Zainteresowani czytelnicy mogą kontynuować dyskusję na ten gorący temat w kontrowersji Systemd . Zachęcamy jednak do zachowania chłodu i uprzejmości w głosie. W Devuan jesteśmy bardziej zainteresowani błędnym programowaniem niż oglądaniem się za siebie. [...]
Powstały niektóre strony i artykuły poświęcone systematycznej kontrowersji:
W Hacker News jest wiele interesujących dyskusji:
Podobne tendencje można zaobserwować również w innych dystrybucjach:
upstart podąża za uniksową filozofią DOTADIW - „Zrób jedną rzecz i zrób to dobrze”. Jest to zamiennik tradycyjnego demona init. Nie robi nic poza uruchamianiem i zatrzymywaniem usług. Inne zadania są przekazywane innym specjalistycznym podsystemom.
systemd robi znacznie więcej. Oprócz uruchamiania i zatrzymywania usług zarządza także hasłami, loginami, terminalami, zarządzaniem energią, resetami fabrycznymi, przetwarzaniem logów, punktami montowania systemu plików, obsługą sieci i wiele więcej - niektóre z funkcji można znaleźć w pliku NEWS .
Zgodnie z prezentacją „Perspektywy dla systemd Co zostało osiągnięte” i „Co nas czeka” Lennarta Poetteringa w 2014 roku na GNOME.asia, oto główne cele systemd, obszary, które zostały już uwzględnione i te, które wciąż były w toku:
Nasze cele
- Przekształcanie Linuksa z worka bitów w konkurencyjny system operacyjny ogólnego zastosowania.
- Budowanie internetowego systemu operacyjnego nowej generacji Ujednolicanie bezcelowych różnic między dystrybucjami
Przywracanie innowacji do podstawowego systemu operacyjnego
Desktop, Server, Container, Embedded, Mobile, Cloud, Cluster,. . . Te obszary są bliżej siebie niż mogłoby się wydawać
- Zmniejszenie złożoności administratora, niezawodność bez nadzoru
- Wszystko introspekcyjne
- Kluczem jest automatyczne wykrywanie, plug and play
- Naprawiamy rzeczy tam, gdzie są zepsute, nigdy nie nakładaj na nie taśmy
Co już obejmuje:
system init, rejestrowanie dziennika, zarządzanie logowaniem, zarządzanie urządzeniem, zarządzanie plikami tymczasowymi i lotnymi, rejestracja formatu binarnego, zapisywanie / przywracanie podświetlenia, zapisywanie / przywracanie rfkill, bootchart, readahead, konfiguracja pamięci szyfrowanej, wykrywanie partycji EFI / GPT, maszyna wirtualna / kontener rejestracja, zarządzanie minimalnymi kontenerami, zarządzanie nazwami hostów, zarządzanie ustawieniami lokalnymi, zarządzanie czasem, zarządzanie losowymi nasionami, zarządzanie zmiennymi sysctl, zarządzanie konsolą,. . .
Nad czym pracujemy:
- zarządzanie siecią
- systemd-networkd
- Lokalna pamięć podręczna DNS, odpowiadający mDNS, odpowiadający LLMNR, weryfikacja DNSSEC
- IPC w jądrze
- kdbus, sd-bus
- Synchronizacja czasu z NTP
- systemd-timesyncd
- Większa integracja z kontenerami
- Piaskownica usług
- Piaskownica aplikacji
- Format obrazu systemu operacyjnego
- Format obrazu kontenera
- Format obrazu aplikacji
- GPT z automatycznym wykrywaniem
- Systemy bezstanowe, systemy z możliwością aktualizacji, przywracanie ustawień fabrycznych
- / usr to system operacyjny
- / etc jest konfiguracją (opcjonalną)
- / var jest stanem (opcjonalnym)
- Inicjalizacja i aktualizacje węzłów atomowych
- Integracja z chmurą
- Zarządzanie usługami między węzłami
- Weryfikowalne obrazy systemu operacyjnego
- Aż do oprogramowania wewnętrznego
- Ładowanie rozruchu
Jak zauważył fpmurphy1 w komentarzach: „Należy zauważyć, że systemd rozszerzył zakres swojej pracy na przestrzeni lat daleko poza zwykłe uruchamianie systemu”.
Próbowałem zawrzeć tutaj większość istotnych informacji. W tym miejscu porównuję typowe funkcje Upstart i systemd, gdy są używane jako systemy init, jak podano w pytaniu, i wspominam tylko o cechach systemd, które wykraczają poza zakres systemu init, ponieważ nie można ich porównać do uruchamiania, ale ich obecność jest ważna zrozumieć różnicę między tymi dwoma projektami. Odpowiednią dokumentację należy sprawdzić, aby uzyskać więcej informacji.
Więcej informacji można znaleźć na stronie:
Zespół LinOxide stworzył zestaw plików Systemd vs. SysV Init Linux .
service <foo> start/stop/restart/status
nadal działa dobrze. Podobnie jak większość oprogramowania uniksowego, systemd zapewnia zgodność poleceń z dobrze znanymi ustawieniami domyślnymi.
Zarówno upstart, jak i systemd są próbami rozwiązania niektórych problemów z ograniczeniami tradycyjnego systemu inicjującego SysV. Na przykład niektóre usługi muszą zostać uruchomione po innych usługach (na przykład nie można montować systemów plików NFS, dopóki sieć nie uruchomi się), ale jedynym sposobem obsługi SysV jest skonfigurowanie łączy w katalogu rc # .d tak, że jedno jest przed drugim. Dodaj do tego, może być konieczne ponumerowanie wszystkiego później, gdy zależności zostaną dodane lub zmienione. Upstart i Systemd mają bardziej inteligentne ustawienia do definiowania wymagań. Problemem jest również to, że wszystko jest pewnego rodzaju skryptem powłoki i nie wszyscy piszą najlepsze skrypty inicjujące. Wpływa to również na szybkość uruchamiania.
Niektóre zalety systemd widzę:
Jedną z wad, o których wiem, jest to, że aby skorzystać z prealokacji gniazda systemd / FH, wiele demonów będzie musiało zostać załatanych, aby FH przekazał im systemd.
Piła systemd
wspomniana dziś w Arch General ML . Więc czytaj dalej. H Online jak zawsze jest doskonałym źródłem technologii Linux i właśnie tam znalazłem swoje miejsce, aby rozpocząć badania Systemd jako alternatywy SysV Init i Upstart . Jednak artykuł H Online (w tym przypadku) nie jest zbyt przydatną lekturą, a prawdziwym zastosowaniem jest to, że zawiera linki do przydatnych lektur.
Prawdziwa odpowiedź znajduje się w ogłoszeniu systemd . Co daje pewne kluczowe punkty na temat tego, co jest nie tak z zainicjowanym SysV i jakie nowe systemy muszą zrobić
Zacząć mniej.
I zacząć więcej równolegle.
Wydaje się, że jego głównym planem jest uruchamianie usług tylko wtedy, gdy są potrzebne, i uruchamianie gniazda dla tej usługi, aby usługa, która tego potrzebuje, mogła połączyć się z utworzonym gniazdem na długo przed pełnym połączeniem demona z siecią. Najwyraźniej gniazdo zachowa niewielką ilość buforowanych danych, co oznacza, że żadne dane nie zostaną utracone podczas opóźnienia, zostaną one obsłużone, gdy tylko demon będzie w trybie online.
Kolejną częścią planu wydaje się nie serializować systemów plików, ale zamiast tego montować je również na żądanie, w ten sposób nie czekasz na /home/
itp. (Nie mylić /etc
) na montowanie i / lub fsck
kiedy możesz być uruchamiane demony jako /
i /var/
itp. są już zamontowane. Powiedział, że w tym celu użyje autofs.
Ma również na celu tworzenie .desktop
stylowych deskryptorów inicjujących jako zamiennik skryptów. Pozwoli to uniknąć ton powolnych sh
procesów, a nawet więcej widły procesów od rzeczy, jak sed
i grep
które są często wykorzystywane w skryptach powłoki.
Planują również nie uruchamiać niektórych usług, dopóki nie zostaną o to poproszone, a może nawet je wyłączyć, jeśli nie będą już potrzebne, moduł bluetooth i demon są potrzebne tylko wtedy, gdy używasz urządzenia Bluetooth. Innym podanym przykładem jest demon ssh. Do tego jest zdolny inetd. Osobiście nie jestem pewien, czy mi się to podoba, ponieważ może to oznaczać opóźnienie, gdy ich potrzebuję, aw przypadku ssh myślę, że oznacza to możliwą lukę w zabezpieczeniach, gdyby mój inetd został zagrożony, cały system byłby zagrożony. Zostałem jednak poinformowany, że użycie tego do złamania tego systemu jest niewykonalne i że jeśli chcę, mogę wyłączyć tę funkcję dla każdej usługi i na inne sposoby.
Kolejną funkcją będzie prawdopodobnie możliwość uruchomienia na podstawie zdarzeń czasowych, w regularnych odstępach czasu lub o określonej godzinie. Jest to podobne do tego, co crond
i atd
teraz. Chociaż powiedziano mi, że nie będzie obsługiwał użytkownika „cron”. Osobiście brzmi to jak najbardziej bezcelowa rzecz. Myślę, że to zostało napisane / wymyślone przez ludzi, którzy nie pracują w środowiskach dla wielu użytkowników, nie ma większego celu dla użytkownika crona, jeśli jesteś jedynym użytkownikiem w systemie, oprócz tego, że nie działa jako root. Codziennie pracuję na systemach wieloużytkownikowych, a regułą jest zawsze uruchamianie skryptów użytkownika jako użytkownik. Ale może nie mam na tyle przewidujący, co robią, a to w żaden sposób nie zrobić go tak, że nie można uruchomić crond
albo atd
, więc nie zaszkodzi nikomu ale programiści sądzę.
Dużą wadą systemd jest to, że niektóre demony będą musiały zostać zmodyfikowane, aby w pełni je wykorzystać. Będą działać teraz, ale działałyby lepiej, gdyby zostały napisane specjalnie dla jego modelu gniazda.
Wydaje się, że w większości problemem systemstów z upstartem jest system zdarzeń i wierzą, że nie ma to sensu lub jest niepotrzebne. Być może ich słowa najlepiej to wyrażają.
Mówiąc prościej: fakt, że użytkownik właśnie uruchomił D-Bus, w żaden sposób nie wskazuje na to, że NetworkManager powinien zostać uruchomiony (ale tak postąpiłby Upstart). Jest odwrotnie: kiedy użytkownik pyta o NetworkManager, jest to zdecydowanie wskazanie, że D-Bus również powinien zostać uruchomiony (czego z pewnością oczekiwałby większość użytkowników, prawda?).
Dobry system inicjujący powinien uruchamiać tylko to, co jest potrzebne, i to na żądanie. Albo leniwie, albo równolegle iz wyprzedzeniem. Jednak nie powinno się uruchamiać więcej niż to konieczne, szczególnie nie wszystko zainstalowane, które mogłoby korzystać z tej usługi.
Jak już powiedziałem, jest to omawiane znacznie bardziej kompleksowo w ogłoszeniu systemd .
Cóż, jedna z rzeczy, o których większość z was zapomniała, to organizacja procesów w grupach .
Więc jeśli systemd coś uruchomił, umieści to w swojej własnej grupie cg i nie ma (nieuprzywilejowanego) sposobu na ucieczkę od tej grupy. Oto konsekwencje tego:
Aby uzyskać bardzo szczegółowe spojrzenie na systemd, zaczynając od pierwszych szkiców projektowych (i szczegółową krytykę istniejących systemów init, w tym na początku i jak systemd proponuje je naprawić), przejdź do jego strony głównej . Z czasem w LWN opublikowano kilka artykułów na temat uruchamiania . Pamiętaj tylko, że każda wzmianka o systemd (lub pulseaudio) powoduje niekończące się flamewars.
IMVHO (i jako użytkownik Fedory) jestem z tego bardzo zadowolony. Coś w tej linii było dawno spóźnione, aby poradzić sobie ze złożonością obecnych systemów Linux. Fedora przez jakiś czas korzystała z upstartu, ale nigdy nie wyszła ze sceny bycia wymyślnym zamiennikiem sysvinit, uruchamiającym głównie niezmienione skrypty inicjujące. Obietnica uproszczenia konfiguracji rozruchu kosztuje ponownieręczne konfigurowanie współzależności, a to po prostu nie działa. usystematyzowane dane zależą od siebie (lub po prostu pozwalają na uruchamianie rzeczy bez względu na zależności, same się rozwiązują). Inną dużą zaletą (niektórzy twierdzą, że jest to poważna wada) jest to, że wykorzystuje funkcje specyficzne dla Linuksa do samego końca (szczególnie grupy c pozwalają na izolowanie demona i wszystkich jego potomków, więc łatwo jest monitorować, ograniczać zasoby lub zabijać je, ponieważ grupa; jest wiele innych).
Kronikowanie - Systemd jest dosłownie podobny do folderu WinSXS, jeśli chodzi o rejestrowanie rzeczy, tworzy kopie kopii, chyba że ręcznie usuniesz lub zmniejszysz rozmiar pliku, który będzie zjadał na twoim dysku. Nazywam to plikami cookie boot loader.