systemd - systemd

systemd
Systemd-logo.svg
Systemd-on-fedora.png
spuštění systému na Fedora 17
Původní autoři Lennart Poettering
Vývojáři Red Hat (Lennart Poettering, Kay Sievers , Harald Hoyer , Daniel Mack, Tom Gundersen, David Herrmann) 345 různých autorů v roce 2018 a 1317 různých autorů celkem
První vydání 30. března 2010 ; Před 11 lety ( 2010-03-30 )
Stabilní uvolnění 249 (7. července 2021 ; před 3 měsíci ) [±] ( 2021-07-07 )
Úložiště
Napsáno C
Operační systém Linux
Typ Systémový software
Vedoucí procesu
Licence LGPLv2.1+
webová stránka systemd.io

systemd je softwarová sada, která poskytuje řadu systémových komponent pro operační systémy Linux . Jeho hlavním cílem je sjednotit konfiguraci služby a chování napříč distribucemi Linuxu ; primární komponentou systemd je „správce systému a služeb“ - počáteční systém používaný ke spouštění uživatelského prostoru a správě uživatelských procesů . Poskytuje také náhradu za různé démony a nástroje, včetně správy zařízení, správy přihlášení, správy síťového připojení a protokolování událostí. Název systemd dodržuje unixovou konvenci pojmenování démonů připojením písmene d . Hraje také na výrazu „ Systém D “, který označuje schopnost člověka rychle se přizpůsobit a improvizovat při řešení problémů.

Od roku 2015 přijala většina distribucí Linuxu systemd, který nahradil jiné systémy, jako jsou inicializační systémy UNIX System V a BSD . Systemd se setkal se smíšeným příjmem od uživatelů Linuxu, s argumenty, že systemd trpí dotvarováním a nadýmáním , a také kritikou softwaru (například desktopu GNOME ) přidáním závislostí na systemd-komplikuje kompatibilitu s jinými operačními systémy podobnými Unixu a vytváří je těžké se vzdálit od systemd. Byly také vzneseny obavy ohledně Red Hat a její mateřské společnosti IBM, která ovládá scénu inicializačních systémů v Linuxu . Ještě důležitější je, že složitost systemd má za následek značně zvětšenou útočnou plochu, která snižuje celkové zabezpečení platformy.

Dějiny

Lennart Poettering a Kay Sievers , softwaroví inženýři pracující pro Red Hat, kteří původně vyvinuli systemd, zahájili projekt vývoje systemd v roce 2010. Snažili se překonat účinnost inicializačního démona několika způsoby. Chtěli zlepšení rámce software pro vyjádření závislostí, aby další zpracování, který má být provedeno současně nebo souběžně během systému zavádění , a pro snížení výpočetní režii z pláště .

V květnu 2011 se Fedora stala první hlavní distribucí Linuxu, která ve výchozím nastavení povoluje systemd. Mezi říjnem 2013 a únorem 2014 proběhla na mailing listu Debianu dlouhá debata mezi technickým výborem Debianu , která diskutovala o tom, jaký inicializační systém použít jako výchozí v Debianu 8 „jessie“, a která vyvrcholila rozhodnutím ve prospěch systemd. Debata byla široce propagována a v návaznosti na rozhodnutí debata pokračuje na konferenci Debianu. V únoru 2014, poté, co bylo rozhodnuto o Debianu, Mark Shuttleworth na svém blogu oznámil, že Ubuntu bude následovat při implementaci systemd.

V listopadu 2014 vývojář Debianu Joey Hess, členové technického výboru Debianu Russ Allbery a Ian Jackson a správce systémových balíčků Tollef Fog Heen odstoupili ze svých pozic. Všichni čtyři odůvodnili své rozhodnutí o veřejném seznamu adresátů Debianu a v osobních blozích vystavením mimořádným úrovním stresu souvisejícím s probíhajícími spory o integraci systemd v rámci komunity Debian a FOSS , díky čemuž byla pravidelná údržba prakticky nemožná.

V srpnu 2015 začal systemd poskytovat přihlašovací shell, který lze volat pomocí shellu machinectl .

V září 2016 byla objevena bezpečnostní chyba, která umožnila každému neprivilegovanému uživateli provést útok typu odmítnutí služby proti systemd. Rich Felker, vývojář musl , uvedl, že tato chyba odhaluje hlavní „chybu ve vývoji vývoje systému“. V roce 2017 byla v systemd objevena další bezpečnostní chyba, CVE - 2017-9445 , která „umožňuje narušení služby“ „škodlivým serverem DNS“. Později v roce 2017 udělily ceny Pwnie autorovi Lennartu Poetteringovi ocenění „nejchudší reakce dodavatele“ kvůli jeho zvládnutí zranitelností.

Design

Architektura systemd, jak ji používá Tizen . Několik systemd cíle, včetně telephony, bootmode, dlog, a tizen servicejsou z Tizen a nejsou součástí systemd.
Unified-hierarchie cgroups bude přístupná výhradně systemd throughsystemd-nspawn

Poettering popisuje vývoj systému jako „nikdy nedokončený, nikdy nedokončený, ale sledování pokroku technologie“. V květnu 2014 Poettering dále popsal systemd jako sjednocující „nesmyslné rozdíly mezi distribucemi“ poskytnutím následujících tří obecných funkcí:

  • Správce systému a služeb (spravuje jak systém pomocí různých konfigurací, tak jeho služby)
  • Softwarová platforma (slouží jako základ pro vytvoření dalšího softwaru)
  • Lepidlo mezi aplikacemi a jádrem (poskytuje různá rozhraní, která odhalují funkce poskytované jádrem)

Systemd obsahuje funkce, jako je spouštění démonů na vyžádání, podpora snímků, sledování procesů a blokování blokování. Není to jen název inicializačního démona, ale také odkazuje na celý softwarový balíček kolem něj, který kromě démona systemd init zahrnuje démony journald , logind a networkd a mnoho dalších komponent nízké úrovně. V lednu 2013 Poettering popsal systemd ne jako jeden program, ale spíše velkou softwarovou sadu, která obsahuje 69 jednotlivých binárních souborů. Systemd jako integrovaná softwarová sada nahrazuje spouštěcí sekvence a úrovně běhu ovládané tradičním démonem init spolu se skripty prostředí spuštěnými pod jeho kontrolou. systemd také integruje mnoho dalších služeb, které jsou běžné v systémech Linux, zpracováním přihlášení uživatelů, systémové konzoly , připojování za provozu zařízení (viz udev ), plánovaného spouštění (nahrazování cron ), protokolování, názvů hostitelů a národních prostředí.

Stejně jako démon init je systemd démon, který spravuje další démony, což jsou procesy na pozadí , včetně samotného systemd . systemd je první démon, který se spustí během spouštění, a poslední démon, který se ukončí během vypnutí . Systemd démon slouží jako kořen uživatelského prostoru v procesu stromu ; první proces ( PID 1) má v unixových systémech zvláštní roli, protože nahrazuje rodiče procesu, když původní nadřízený končí. První proces je proto zvláště vhodný pro účely monitorování démonů.

systemd provádí prvky své spouštěcí sekvence souběžně, což je teoreticky rychlejší než tradiční přístup spouštěcí posloupnosti. Pro meziprocesovou komunikaci (IPC) systemd zpřístupňuje běžícím démonům sokety domény Unix a D-Bus . Stav samotného systemd lze také zachovat ve snímku pro budoucí vyvolání.

Základní komponenty a knihovny

Podle svého integrovaného přístupu poskytuje systemd také náhradu za různé démony a nástroje, včetně skriptů pro spuštění, pm-utils, inetd , acpid , syslog , watchdog, cron a atd . Mezi hlavní součásti systemd patří následující:

  • systemd je správce systému a služeb pro operační systémy Linux.
  • systemctl je příkaz k prozkoumání a řízení stavu systému a správce služeb systemd. Nesmí být zaměňována s sysctl .
  • systemd-analyze lze použít ke stanovení statistik výkonu spouštění systému a získání dalších informací o stavu a trasování ze systému a správce služeb.

systemd sleduje procesy pomocí subsystému cgroups jádra Linuxu namísto použití identifikátorů procesů (PID); démoni tedy nemohou "uniknout" systemd , dokonce ani dvojitým rozvětvením . systemd nejen používá cgroups, ale také je rozšiřuje o systemd-nspawn a machinectl , dva obslužné programy, které usnadňují vytváření a správu kontejnerů Linux . Od verze 205 nabízí systemd také ControlGroupInterface, což je API pro cgroups jádra Linuxu. Skupiny jádra Linuxu jsou přizpůsobeny pro podporu kernfs a jsou upravovány tak, aby podporovaly jednotnou hierarchii.

Pomocné komponenty

Kromě svého primárního účelu poskytnutí systému Linux init může sada systemd poskytovat další funkce, včetně následujících komponent:

Snímek obrazovky systemd-boot
Snímek obrazovky timedatectl
journald
systemd-journald je démon zodpovědný za protokolování událostí , přičemž binární soubory sloužící pouze k připojení slouží jako jeho soubory protokolu . Správce systému se může rozhodnout, zda bude protokolovat systémové události pomocí systemd-journald , syslog-ng nebo rsyslog . Potenciál korupce binárního formátu vedl k hodně vášnivé debatě.
libudev
libudev je standardní knihovna pro využití udev, která umožňuje aplikacím třetích stran dotazovat se na zdroje udev.
lokalizovaný
přihlásit se
systemd-logind je démon, který spravuje přihlašovací údaje uživatelů a počet míst různými způsoby. Jedná se o integrovaný login manažer, který nabízí MultiSeat vylepšení a nahrazuje ConsoleKit , který již není zachována. U správců zobrazení X11 vyžaduje přepnutí na logind minimální množství portování. Byla integrována do systemd verze 30.
síťd
networkd je démon, který se stará o konfiguraci síťových rozhraní; ve verzi 209, kdy byla poprvé integrována, byla podpora omezena na staticky přiřazené adresy a základní podporu pro přemosťovací konfiguraci. V červenci 2014 byla vydána verze systemd 215 s přidáním nových funkcí, jako je server DHCP pro hostitele IPv4 a podpora VXLAN . networkctllze použít ke kontrole stavu síťových odkazů, jak je vidí systemd-networkd. Konfiguraci nových rozhraní je třeba přidat pod/lib/systemd/network/jako nový soubor končící příponou .network.
vyřešeno
systemd-boot
systemd-boot je správce spouštění, dříve známý jako gummiboot . Kay Sievers to spojil do systemd s rev 220.
načasované
systemd-timedated je démon, který lze použít k ovládání nastavení souvisejících s časem, jako je systémový čas, systémové časové pásmo nebo výběr mezi UTC a systémovými hodinami místního časového pásma. Je přístupný přes D-Bus. Byla integrována do systemd verze 30.
timesyncd
tmpfiles
systemd-tmpfiles je nástroj, který se stará o vytváření a čištění dočasných souborů a adresářů. Obvykle se spouští jednou při spuštění a poté v určených intervalech.
udevd
udev je správce zařízení pro jádro Linuxu , který zpracovává adresář /dev a všechny akce v uživatelském prostoru při přidávání /odebírání zařízení, včetně načítání firmwaru . V dubnu 2012 byl zdrojový strom pro udev sloučen do zdrojového stromu systemd.
Dne 29. května 2014 byla podpora pro načítání firmwaru přes udev zrušena ze systemd, protože bylo rozhodnuto, že za načítání firmwaru by mělo být zodpovědné jádro.

Konfigurace systemd

systemd-manager, nástroj pro konfiguraci systemd

systemd je konfigurován výhradně přes plain - textové soubory .

systemd zaznamenává pokyny pro inicializaci pro každého démona v konfiguračním souboru (označovaném jako "soubor jednotky"), který používá deklarativní jazyk , nahrazující tradičně používané skripty prostředí shell při spuštění démona . Syntaxe jazyka je inspirována .ini soubory .

Mezi typy souborů jednotek patří:

  • .servis
  • .zásuvka
  • .device (automaticky spuštěno systemd)
  • .montovat
  • .automat
  • .vyměnit
  • .cílová
  • .cesta
  • .timer (který lze použít jako plánovač úloh podobný cronu )
  • .momentka
  • .slice (slouží ke seskupování a správě procesů a zdrojů)
  • .scope (používá se ke seskupení pracovních procesů, není určen ke konfiguraci pomocí souborů jednotek)

Hierarchie konfiguračních souborů

man systemd.unit vysvětluje hierarchii konfiguračních souborů. Jejich cesty jsou definovány během kompilace. Výchozí hodnota je (příklad však není úplný):

UNIT LOAD PATH
          Unit files are loaded from a set of paths determined during
          compilation, described in the two tables below. Unit files found
          in directories listed earlier override files with the same name
          in directories lower in the list.

           Table 1.  Load path when running in system mode (--system).
           ┌────────────────────────┬─────────────────────────────┐
           │Path                    │ Description                 │
           ├────────────────────────┼─────────────────────────────┤
           │/etc/systemd/system     │ Local configuration         │
           ├────────────────────────┼─────────────────────────────┤
           │/run/systemd/system     │ Runtime units               │
           ├────────────────────────┼─────────────────────────────┤
           │/usr/lib/systemd/system │ Units of installed packages │
           └────────────────────────┴─────────────────────────────┘

Přijetí

Distribuce Linuxu Datum přidáno do úložiště softwaru Ve výchozím nastavení povoleno? Datum vydání jako výchozí Běží bez?
Alpine Linux Není k dispozici (není v úložišti) Ne N/A Ano
Android Není k dispozici (není v úložišti) Ne N/A Ano
Arch Linux Leden 2012 Ano Říjen 2012 Ne
antiX Linux Není k dispozici (není v úložišti) Ne N/A Ano
Artix Linux Není k dispozici (není v úložišti) Ne N/A Ano
CentOS Červenec 2014 Ano Červenec 2014 (v7.0) Ne
CoreOS červenec 2013 Ano Říjen 2013 (v94.0.0) Ne
Debian Duben 2012 Ano Duben 2015 (v8.0) Ano
Devuan Není k dispozici (není v úložišti) Ne N/A Ano
Fedora Listopad 2010 (v14) Ano Květen 2011 (v15) Ne
Gentoo Linux Červenec 2011 Ne N/A Ano
Knoppix N/A Ne N/A Ano
Linuxová mincovna Červen 2016 (v18.0) Ano N/A Ano
Mageia Leden 2011 (v1.0) Ano Květen 2012 (v2.0) Ne
Manjaro Linux listopad 2013 Ano listopad 2013 Ne
openSUSE Březen 2011 (v11.4) Ano Září 2012 (v12.2) Ne
Parabola GNU/Linux-libre Leden 2012 Volitelný N/A Ano
Red Hat Enterprise Linux Červen 2014 (v7.0) Ano Červen 2014 (v7.0) Ne
Slackware Není k dispozici (není v úložišti) Ne N/A Ano
Solus N/A Ano N/A Ne
Zdroj Mág Červen 2011 Ne N/A Ano
SUSE Linux Enterprise Server Říjen 2014 (v12) Ano Říjen 2014 (v12) Ne
Ubuntu Duben 2013 (v13.04) Ano Duben 2015 (v15.04) Možnost upstart odstraněna v Yaketty (16.10)
Zrušen Linux Červen 2011 , odstraněn červen 2015 Ne N/A Ano

Zatímco mnoho distribucí standardně zavádí systemd, některé umožňují použití jiných inicializačních systémů; v tomto případě je přepnutí systému init možné instalací příslušných balíčků. Vidlice Debianu nazývá Devuan byla vyvinuta, aby se zabránilo systemd a dosáhl verze 3.1 pro stabilní použití. V prosinci 2019 projekt Debian hlasoval pro zachování systemd jako výchozího inicializačního systému pro distribuci, ale s podporou „prozkoumávání alternativ“.

Integrace s dalším softwarem

V zájmu zvýšení interoperability mezi systemd a GNOME desktopové prostředí, systemd spoluautor Lennart Poettering požádal projekt GNOME , aby zvážily systemd externí závislost GNOME 3.2.

V listopadu 2012 dospěl projekt GNOME k závěru, že základní funkce GNOME by se neměly spoléhat na systemd. GNOME 3.8 však zavedl volbu v době kompilace mezi logind a ConsoleKit API, přičemž první z nich v té době poskytoval pouze systemd. Ubuntu poskytlo samostatný binární logind, ale systemd se stal de facto závislostí GNOME pro většinu distribucí Linuxu , zejména proto, že ConsoleKit již není aktivně udržován a upstream doporučuje místo toho použít systemd-logind . Vývojáři Gentoo Linux se také pokusili přizpůsobit tyto změny v OpenRC , ale implementace obsahovala příliš mnoho chyb, což způsobilo, že distribuce označila systemd jako závislost na GNOME.

GNOME má dále integrovaný logind . Od verze Mutter 3.13.2 je logind závislostí pro relace Wayland .

Recepce

Design systemd vyvolal v komunitě svobodného softwaru kontroverze . Kritici považují systemd za příliš složitý a trpí pokračujícím tečením funkcí , přičemž tvrdí, že jeho architektura porušuje unixovou filozofii . Existuje také obava, že tvoří systém vzájemně propojených závislostí, což dává správcům distribuce malou možnost volby, než přijmout systemd, protože více softwaru v uživatelském prostoru závisí na jeho komponentách, což je podobné problémům, které vytvořil PulseAudio , další projekt, který byl vyvinul také Lennart Poettering.

V rozhovoru pro rok 2012 vyjádřil vedoucí Slackware Patrick Volkerding výhrady k architektuře systemd a prohlásil, že je přesvědčen, že její design je v rozporu s unixovou filozofií propojených nástrojů s úzce definovanými funkcemi. V srpnu 2018 Slackware nepodporuje ani nepoužívá systemd, ale Volkerding nevyloučil možnost přechodu na něj.

V lednu 2013 se Lennart Poettering pokusil vyřešit obavy ohledně systemd v příspěvku na blogu s názvem Největší mýty .

V únoru 2014 se Musl 's Rich Felker domníval, že PID 1 je příliš zvláštní na to, aby byl osedlán dalšími povinnostmi. PID 1 by měl být zodpovědný pouze za spuštění zbytku systému init a sklízení zombie procesů. Další funkce přidané systemd mohou být poskytovány jinde a zbytečně zvyšují složitost a útočnou plochu PID 1.

V březnu 2014 Eric S. Raymond vyslovil názor, že konstrukční cíle Systemd byly náchylné k dotvarování mise a nadýmání softwaru . V dubnu 2014 vyjádřil Linus Torvalds výhrady k postoji Kay Sievers , klíčového vývojáře systému, k uživatelům a hlášení chyb ohledně úprav jádra Linuxu předložených Sievers. Na konci dubna 2014 byla zahájena kampaň za bojkot systému, přičemž webová stránka obsahovala různé důvody proti jeho přijetí.

V článku publikovaném v InfoWorld ze srpna 2014 Paul Venezia psal o systematické kontroverzi a kontroverzi připisoval porušení unixové filozofie a „obrovskému egu, které pevně věří, že nemohou udělat nic špatného“. Tento článek také charakterizuje architekturu systemd jako podobnou architektuře svchost.exe , kritické systémové součásti systému Microsoft Windows se širokým funkčním rozsahem.

V rozhovoru pro ZDNet ze září 2014 prominentní vývojář linuxových jader Theodore Ts'o vyjádřil svůj názor, že spor o filozofii centralizovaného designu systému Systemd, více než technické starosti, naznačuje nebezpečný obecný trend směřující ke sjednocování Linuxového ekosystému, odcizení a marginalizaci částí otevřených -komunita zdrojů a ponechání malého prostoru pro alternativní projekty. Citoval podobnosti s postojem, který našel v projektu GNOME k nestandardním konfiguracím. Na sociálních médiích Ts'o také později srovnal postoje Sieversa a jeho spolu-vývojáře Lennarta Poetteringa s postoji vývojářů GNOME.

Vidlice a alternativní implementace

Vidlice systemd jsou úzce spjaty s kritikou, která je popsána ve výše uvedené části. Forks se obecně snaží zlepšit alespoň jednu z přenositelnosti (do jiných systémů libcs ​​a unixových systémů), modularity nebo velikosti. Několik vidliček spolupracovalo pod hlavičkou FreeInit.

Vidlice komponent

eudev

V roce 2012 vytvořil projekt Gentoo Linux vidlici udev, aby se vyhnul závislosti na architektuře systemd. Výsledná vidlice se nazývá eudev a díky tomu je funkce udev dostupná bez systemd. Uvedeným cílem projektu je udržet eudev nezávislý na jakékoli distribuční nebo inicializační linuxové verzi systému.

elogind

Elogind je „logind“ projektu systemd, extrahovaný jako samostatný démon. Integruje se s PAM, aby poznal skupinu uživatelů, kteří jsou přihlášeni do systému a zda jsou přihlášeni graficky, na konzole nebo vzdáleně. Elogind zpřístupňuje tyto informace prostřednictvím standardního rozhraní D-Bus org.freedesktop.login1 , jakož i prostřednictvím systému souborů pomocí standardního /run /systemd rozvržení systemd . Elogind také poskytuje „libelogind“, což je podmnožina zařízení nabízených „libsystemd“. Existuje také soubor "libelogind.pc" pkg-config .

consolekit2

ConsoleKit byl v říjnu 2014 vidlicován vývojáři Xfce, kteří chtěli, aby jeho funkce byly stále zachovány a dostupné v jiných operačních systémech než Linux. Přestože hlavní vývojář nevylučuje možnost dlouhodobého oživení původního úložiště, považuje ConsoleKit2 za dočasnou nutnost, dokud nevyroste systembsd. Vývoj byl zastaven v prosinci 2017 a projekt může být zaniklý.

Přihlašovací sada

LoginKit byl pokus zavést logind (systemd-logind) podložky , který by umožnil balíčky, které jsou závislé na systemd-logind pracovat bez závislosti na konkrétní init systému. Projekt je od února 2015 zaniklý.

systembsd

V roce 2014 byl zahájen projekt Google Summer of Code s názvem „systembsd“ s cílem poskytnout alternativní implementace těchto API pro OpenBSD . Původní vývojář projektu jej zahájil, aby usnadnil jeho přechod z Linuxu na OpenBSD. Vývoj projektu se zastavil v červenci 2016.

Projekt systembsd neposkytl inicializační náhradu, ale měl za cíl poskytnout OpenBSD kompatibilní démony pro hostnamed , timedated , localed a logind . Projekt nevytvořil nové funkce podobné systemd a měl pouze fungovat jako obálka nativního systému OpenBSD. Vývojář usiloval o to, aby byl systembsd instalovatelný jako součást kolekce portů , nikoli jako součást základního systému, a uvedl, že „systemd a *BSD se zásadně liší ve filozofii a postupech vývoje“.

notsystemd

Notsystemd má v úmyslu implementovat všechny funkce systemd fungující na jakémkoli systému init. Bylo vidlicový pomocí Parabola GNU / Linux-Libre vývojářům vytvářet balíčky s jejich vývojových nástrojů bez nutnosti mít systemd instalována na spuštění systemd-nspawn.

Vidlice včetně systému init

zbytečný

V roce 2014 byl uselessd vytvořen jako odlehčená vidlice systemd. Projekt se snažil odstranit funkce a programy, které jsou pro systém init považovány za nepotřebné, a také řešit další vnímané chyby. Vývoj projektu se zastavil v lednu 2015.

uselessd podporoval knihovny musl a µClibc , takže mohl být použit na vestavěných systémech , zatímco systemd podporuje pouze glibc . Projekt zbytečný měl v plánu další vylepšení kompatibility napříč platformami a také generální opravy a refaktoring pro Linux build do budoucna.

s6

s6 je malá sada programů pro UNIX, navržená tak, aby umožňovala dohled nad procesy (aka dohled nad službami), v řadě daemontools a runit, stejně jako různé operace nad procesy a démony. Má to být sada nástrojů pro správu procesů a služeb na nízké úrovni, která poskytuje různé sady nezávislých nástrojů, které lze použít v rámci nebo bez něj a které lze sestavit dohromady, aby bylo možné dosáhnout výkonných funkcí s velmi malým množstvím kódu.

InitWare

InitWare je modulární refaktor systému systemd, který přenáší systém na platformy BSD bez systémových volání specifických pro glibc nebo Linux. Je známo, že funguje na DragonFly BSD, FreeBSD, NetBSD a GNU/Linux. Součásti považované za nepotřebné jsou vyřazeny.

Viz také

Poznámky

Reference

externí odkazy