systemd - systemd

systemd
Systemd-logo.svg
Systemd-on-fedora.png
systemd opstart på Fedora 17
Originale forfattere Lennart Poettering
Udvikler (er) Red Hat (Lennart Poettering, Kay Sievers , Harald Hoyer , Daniel Mack, Tom Gundersen, David Herrmann) 345 forskellige forfattere i 2018 og 1.317 forskellige forfattere i alt
Første udgivelse 30. marts 2010 ; 11 år siden ( 2010-03-30 )
Stabil udgivelse 249 (7. juli 2021 ; for 3 måneder siden ) [±] ( 2021-07-07 )
Depot
Skrevet i C
Operativ system Linux
Type Systemsoftware
Procesvejleder
Licens LGPLv2.1+
Internet side systemd.io

systemd er en softwarepakke, der giver en vifte af systemkomponenter til Linux -operativsystemer. Dets hovedformål er at forene servicekonfiguration og adfærd på tværs af Linux -distributioner ; systemds primære komponent er en "system- og servicemanager" - et init -system, der bruges til at bootstrap brugerplads og administrere brugerprocesser . Det giver også udskiftninger til forskellige dæmoner og hjælpeprogrammer, herunder enhedsstyring, loginadministration, netværksforbindelsesstyring og hændelseslogning. Navnet systemd overholder Unix -konventionen om navngivning af dæmoner ved at tilføje bogstavet d . Det spiller også på udtrykket " System D ", som refererer til en persons evne til hurtigt at tilpasse sig og improvisere til at løse problemer.

Siden 2015 har størstedelen af ​​Linux -distributioner vedtaget systemd, der har erstattet andre systemer såsom UNIX System V og BSD init -systemer. Systemd har stået over for blandet modtagelse fra Linux-brugere med argumenter om, at systemd lider af missionskryp og oppustethed , samt kritik over software (f.eks. GNOME- skrivebordet), der tilføjer afhængigheder på systemd-hvilket komplicerer kompatibilitet med andre Unix-lignende operativsystemer og gør det er svært at bevæge sig væk fra systemd. Der er også rejst bekymring om, at Red Hat og dets moderselskab IBM kontrollerer scenen for init -systemer på Linux . Endnu vigtigere resulterer kompleksiteten af ​​systemd i en stærkt forstørret angrebsoverflade, der reducerer platformens overordnede sikkerhed.

Historie

Lennart Poettering og Kay Sievers , softwareingeniørerne, der arbejder for Red Hat, der oprindeligt udviklede systemd, startede projektet for at udvikle systemd i 2010. De forsøgte at overgå effektiviteten af init -dæmonen på flere måder. De ønskede at forbedre framework til at udtrykke afhængigheder, for at give mere behandling, der skal gøres samtidigt eller i parallel under systemets opstart , og for at reducere den beregningsmæssige hovedhøjde af skallen .

I maj 2011 blev Fedora den første store Linux -distribution, der muliggjorde systemd som standard. Mellem oktober 2013 og februar 2014 opstod der en lang debat mellem Debians tekniske udvalg på Debians mailingliste, hvor man diskuterede hvilket init -system der skulle bruges som standard i Debian 8 "jessie" og kulminerede i en beslutning til fordel for systemd. Debatten blev bredt omtalt, og i kølvandet på beslutningen fortsætter debatten på Debians mailingliste. I februar 2014, efter Debians beslutning var truffet, annoncerede Mark Shuttleworth på sin blog, at Ubuntu ville følge med i implementeringen af ​​systemd.

I november 2014 trådte Debian-udvikler Joey Hess, medlemmer af Debian Technical Committee-medlemmer Russ Allbery og Ian Jackson og systempakkeholder Tollef Fog Heen tilbage fra deres stillinger. Alle fire begrundede deres beslutning på den offentlige Debian-mailingliste og i personlige blogs med deres eksponering for ekstraordinære stressniveauer relateret til igangværende tvister om systemintegration i Debian- og FOSS- samfundet, der gjorde regelmæssig vedligeholdelse praktisk talt umulig.

I august 2015 begyndte systemd at levere en login -shell, der kan kaldes via machinectl shell .

I september 2016 blev der opdaget en sikkerhedsfejl, der tillod enhver privilegeret bruger at udføre et denial-of-service-angreb mod systemd. Rich Felker , musl -udvikler , udtalte, at denne fejl afslører en større "systemudviklingsdesignfejl". I 2017 blev en anden sikkerhedsfejl opdaget i systemd, CVE - 2017-9445 , som "tillader afbrydelse af tjenesten" af en "ondsindet DNS -server". Senere i 2017 gav Pwnie Awards forfatteren Lennart Poettering en 'lamest vendor response' -pris på grund af hans håndtering af sårbarhederne.

Design

Arkitekturen i systemd, som den bruges af Tizen . Adskillige systemd mål, herunder telephony, bootmode, dlog, og tizen serviceer fra Tizen og er ikke elementer af systemd.
Unified-hierarchy cgroups vil udelukkende være tilgængelige af systemd tilsystemd-nspawn

Poettering beskriver systemudvikling som "aldrig færdig, aldrig færdig, men sporing af teknologiens fremskridt". I maj 2014 beskrev Poettering yderligere systemd som samlende "meningsløse forskelle mellem distributioner" ved at tilvejebringe følgende tre generelle funktioner:

  • En system- og servicemanager (administrerer både systemet ved at anvende forskellige konfigurationer og dets tjenester)
  • En softwareplatform (fungerer som grundlag for udvikling af anden software)
  • Limen mellem applikationer og kernen (giver forskellige grænseflader, der afslører funktionaliteter fra kernen)

Systemd inkluderer funktioner som on-demand start af dæmoner, snapshot-understøttelse, processporing og hæmmerlåse. Det er ikke kun navnet på init-dæmonen, men refererer også til hele softwarebundtet omkring det, som ud over systemd init-dæmonen inkluderer daemons journald , logind og networkd og mange andre komponenter på lavt niveau. I januar 2013 beskrev Poettering systemd ikke som ét program, men snarere en stor softwarepakke, der indeholder 69 individuelle binære filer. Som en integreret softwarepakke erstatter systemd startsekvenserne og lønniveauerne, der kontrolleres af den traditionelle init -dæmon, sammen med shell -scripts udført under dens kontrol. systemd integrerer også mange andre tjenester, der er almindelige på Linux -systemer ved at håndtere brugerlogins, systemkonsollen , hotplugging (se udev ), planlagt udførelse (udskiftning af cron ), logning, værtsnavne og lokaliteter.

Ligesom init -dæmonen er systemd en dæmon, der administrerer andre dæmoner, som, herunder systemd selv, er baggrundsprocesser . systemd er den første dæmon, der starter under opstart, og den sidste dæmon, der afsluttes under nedlukning . Den systemd dæmonen tjener som roden af brugerens rums procestræ ; den første proces ( PID 1) har en særlig rolle på Unix -systemer, da den erstatter forælderen til en proces, når den oprindelige forælder afsluttes. Derfor er den første proces særligt velegnet til overvågning af dæmoner.

systemd udfører elementer i sin startsekvens parallelt, hvilket er teoretisk hurtigere end den traditionelle startsekvensmetode. Til kommunikation mellem processer (IPC) gør systemd Unix-domæne-sockets og D-Bus tilgængelige for de igangværende dæmoner. Selve systemd -tilstanden kan også bevares i et øjebliksbillede til fremtidig tilbagekaldelse.

Kernekomponenter og biblioteker

Efter sin integrerede tilgang giver systemd også erstatninger til forskellige dæmoner og hjælpeprogrammer, herunder opstarts shell-scripts, pm-utils, inetd , acpid , syslog , vagthund, cron og atd . systemds kernekomponenter omfatter følgende:

  • systemd er en system- og servicemanager til Linux -operativsystemer.
  • systemctl er en kommando til at introspektere og kontrollere tilstanden af ​​systemd system og servicemanager. For ikke at forveksle med sysctl .
  • systemd-analyse kan bruges til at bestemme ydeevne statistik for systemstart og hente andre tilstands- og sporingsoplysninger fra system- og servicemanageren.

systemd sporer processer ved hjælp af Linux -kernels cgroups -undersystem i stedet for at bruge proces -id'er (PID'er); således kan dæmoner ikke "undslippe" systemd , ikke engang ved dobbeltgaffel . systemd ikke kun bruger cgroups, men også øger dem med systemd-nspawn og machinectl , to hjælpeprogrammer, der letter oprettelse og forvaltning af Linux-containere . Siden version 205 tilbyder systemd også ControlGroupInterface, som er en API til Linux -kerne -cgroups. Linux -kerne -cgroups er tilpasset til at understøtte kernfs og ændres for at understøtte et samlet hierarki.

Hjælpekomponenter

Udover sit primære formål med at levere et Linux init -system kan systemd -pakken levere yderligere funktionalitet, herunder følgende komponenter:

Et skærmbillede af systemd-boot
Et skærmbillede af timedatectl
journald
systemd-journald er en dæmon ansvarlig for begivenhed logning , med Append kun for binære filer tjener som sine logfiler . Det Systemadministratoren kan vælge om der skal logges systemhændelser med systemd-journald , syslog-ng eller rsyslog . Potentialet for korruption af det binære format har ført til meget heftig debat.
libudev
libudev er standardbiblioteket til brug af udev, som tillader tredjepartsapplikationer at forespørge udev-ressourcer.
lokaliseret
logind
systemd-logind er en dæmon, der administrerer brugerlogins og pladser på forskellige måder. Det er en integreret login -manager, der tilbyder forbedringer på flere pladser og erstatter ConsoleKit , som ikke længere vedligeholdes. For X11 -skærmadministratorer kræver skiftet til logind en minimal portmængde . Det blev integreret i systemd version 30.
netværk d
networkd er en dæmon til at håndtere konfigurationen af ​​netværksgrænsefladerne; i version 209, da den først blev integreret, var support begrænset til statisk tildelte adresser og grundlæggende support til brokonfiguration . I juli 2014 blev systemd version 215 frigivet og tilføjede nye funktioner såsom en DHCP -server til IPv4 -værter og VXLAN -understøttelse. networkctlkan bruges til at gennemgå netværksforbindelsernes tilstand som set af systemd-networkd. Konfiguration af nye grænseflader skal tilføjes under/lib/systemd/network/som en ny fil, der slutter med .network -udvidelse.
løst
systemd-boot
systemd-boot er en boot manager, tidligere kendt som gummiboot . Kay Sievers fusionerede det til systemd med rev 220.
tidsbestemt
systemd-timed er en dæmon, der kan bruges til at styre tidsrelaterede indstillinger, f.eks. systemtid, systemets tidszone eller valg mellem UTC og lokal tidszone systemur. Det er tilgængeligt via D-Bus. Det blev integreret i systemd version 30.
timesyncd
tmpfiler
systemd-tmpfiles er et værktøj, der tager sig af oprettelse og oprydning af midlertidige filer og mapper. Det køres normalt en gang ved opstart og derefter i angivne intervaller.
udevd
udev er en enhedsadministrator for Linux -kernen , der håndterer /dev -biblioteket og alle brugerpladsaktioner, når der tilføjes /fjernes enheder, herunder indlæsning af firmware . I april 2012 blev kildetræet for udev fusioneret i systemd kildetræet.
Den 29. maj 2014 blev support til firmwareindlæsning via udev droppet fra systemd, da det blev besluttet, at kernen skulle være ansvarlig for indlæsning af firmware.

Konfiguration af systemd

systemd-manager, et værktøj til konfiguration af systemd

systemd udelukkende konfigureres via almindelig - tekstfiler .

systemd registrerer initialiseringsinstruktioner for hver dæmon i en konfigurationsfil (kaldet en "enhedsfil"), der bruger et deklarativt sprog og erstatter de traditionelt anvendte shell-scripts pr. dæmon . Sprogets syntaks er inspireret af .ini filerne .

Enhedens filtyper omfatter:

  • .service
  • .stik
  • .enhed (automatisk startet af systemd)
  • .montering
  • .automount
  • .bytte rundt
  • .mål
  • .sti
  • .timer (som kan bruges som en cron -lignende jobplanlægger )
  • .snapshot
  • .slice (bruges til at gruppere og administrere processer og ressourcer)
  • .scope (bruges til at gruppere arbejderprocesser, er ikke beregnet til at blive konfigureret via enhedsfiler)

Hierarki af konfigurationsfiler

man systemd.unit forklarer hierarkiet af konfigurationsfilerne. Deres veje er defineret under kompilering. Standarden er (eksemplet er dog ikke fuldstændigt):

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 │
           └────────────────────────┴─────────────────────────────┘

Adoption

Linux distribution Dato tilføjet til softwarelageret Aktiveret som standard? Dato udgivet som standard Kører uden?
Alpine Linux Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
Android Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
Arch Linux Januar 2012 Ja Oktober 2012 Ingen
antiX Linux Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
Artix Linux Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
CentOS Juli 2014 Ja Juli 2014 (v7.0) Ingen
CoreOS Juli 2013 Ja Oktober 2013 (v94.0.0) Ingen
Debian April 2012 Ja April 2015 (v8.0) Ja
Devuan Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
Fedora November 2010 (v14) Ja Maj 2011 (v15) Ingen
Gentoo Linux Juli 2011 Ingen Ikke relevant Ja
Knoppix Ikke relevant Ingen Ikke relevant Ja
Linux Mint Juni 2016 (v18.0) Ja Ikke relevant Ja
Mageia Januar 2011 (v1.0) Ja Maj 2012 (v2.0) Ingen
Manjaro Linux November 2013 Ja November 2013 Ingen
openSUSE Marts 2011 (v11.4) Ja September 2012 (v12.2) Ingen
Parabel GNU/Linux-libre Januar 2012 Valgfri Ikke relevant Ja
Red Hat Enterprise Linux Juni 2014 (v7.0) Ja Juni 2014 (v7.0) Ingen
Slackware Ikke relevant (ikke i depotet) Ingen Ikke relevant Ja
Solus Ikke relevant Ja Ikke relevant Ingen
Source Mage Juni 2011 Ingen Ikke relevant Ja
SUSE Linux Enterprise Server Oktober 2014 (v12) Ja Oktober 2014 (v12) Ingen
Ubuntu April 2013 (v13.04) Ja April 2015 (v15.04) Opstartsmulighed fjernet i Yaketty (16.10)
Ugyldig Linux Juni 2011 , fjernet juni 2015 Ingen Ikke relevant Ja

Mens mange distributioner starter systemd som standard, tillader nogle andre init -systemer at blive brugt; i dette tilfælde er det muligt at skifte init -system ved at installere de relevante pakker. En gaffel af Debian kaldet Devuan blev udviklet for at undgå systemd og har nået version 3.1 for stabil brug. I december 2019 stemte Debian -projektet for at beholde systemd som standard init -system til distributionen, men med støtte til "at undersøge alternativer".

Integration med anden software

For at øge interoperabiliteten mellem systemd og GNOME -skrivebordsmiljøet bad systemd -medforfatter Lennart Poettering GNOME -projektet om at overveje at gøre systemd til en ekstern afhængighed af GNOME 3.2.

I november 2012 konkluderede GNOME -projektet, at grundlæggende GNOME -funktionalitet ikke skulle stole på systemd. GNOME 3.8 introducerede imidlertid et kompileringstidsvalg mellem logind og ConsoleKit API, idet førstnævnte kun blev leveret på det tidspunkt af systemd. Ubuntu leverede en separat logind binær, men systemd blev en de facto afhængighed af GNOME for de fleste Linux-distributioner , især da ConsoleKit ikke længere vedligeholdes aktivt og upstream anbefaler brug af systemd-logind i stedet. Udviklerne af Gentoo Linux forsøgte også at tilpasse disse ændringer i OpenRC , men implementeringen indeholdt for mange fejl, hvilket fik distributionen til at markere systemd som en afhængighed af GNOME.

GNOME har yderligere integreret logind . Fra Mutter version 3.13.2 er logind en afhængighed for Wayland -sessioner.

Reception

Designet af systemd har antændt kontroverser inden for gratis software-fællesskabet . Kritikere betragter systemd som overdrevent komplekst og lider af fortsat funktionskryp og hævder, at dets arkitektur krænker Unix -filosofien . Der er også bekymring for, at det danner et system med sammenhængende afhængigheder og derved giver distributionsholdere lidt andet valg end at vedtage systemd, da mere brugerrumssoftware afhænger af dets komponenter, hvilket ligner de problemer, PulseAudio skabte , et andet projekt, der var også udviklet af Lennart Poettering.

I et interview fra 2012 udtrykte Slackware 's leder Patrick Volkerding forbehold over for systemets arkitektur og erklærede, at hans opfattelse var i modstrid med Unix -filosofien om sammenkoblede forsyningsselskaber med snævert definerede funktionaliteter. Fra august 2018 understøtter eller bruger Slackware ikke systemd, men Volkerding har ikke udelukket muligheden for at skifte til det.

I januar 2013 forsøgte Lennart Poettering at løse bekymringer om systemd i et blogindlæg kaldet The Biggest Myths .

I februar 2014 mente musl 's Rich Felker, at PID 1 er for speciel til at blive sadlet med yderligere ansvar. PID 1 bør kun være ansvarlig for at starte resten af ​​init -systemet og høste zombiprocesser. Den ekstra funktionalitet tilføjet af systemd kan leveres andre steder og øger unødigt kompleksiteten og angrebsoverfladen af ​​PID 1.

I marts 2014 udtalte Eric S. Raymond , at systemds designmål var tilbøjelige til missionskryp og softwareopblødning . I april 2014 udtrykte Linus Torvalds forbehold over for Kay Sievers , en vigtig systemudviklers holdning til brugere og fejlrapporter i forbindelse med ændringer af Linux -kernen indsendt af Sievers. I slutningen af ​​april 2014 blev der lanceret en kampagne for at boykotte systemd, med et websted med forskellige årsager til, at det blev vedtaget.

I en artikel fra august 2014, der blev offentliggjort i InfoWorld , skrev Paul Venezia om systemets kontrovers og tilskrev kontroversen til krænkelse af Unix -filosofien og til "enorme egoer, der bestemt tror, ​​at de ikke kan gøre noget forkert". Artiklen karakteriserer også arkitekturen for systemd som den der ligner svchost.exe , en kritisk systemkomponent i Microsoft Windows med et bredt funktionelt omfang.

I et ZDNet -interview fra september 2014 udtrykte den fremtrædende Linux -kerneudvikler Theodore Ts'o sin opfattelse af, at striden om systemds centraliserede designfilosofi, mere end tekniske bekymringer, indikerer en farlig generel tendens mod ensartethed af Linux -økosystemet, fremmedgørelse og marginalisering af dele af det åbne -kildefællesskab og efterlader lidt plads til alternative projekter. Han citerede ligheder med den holdning, han fandt i GNOME-projektet til ikke-standardkonfigurationer. På sociale medier sammenlignede Ts'o senere også holdningerne hos Sievers og hans medudvikler, Lennart Poettering, med GNOME's udviklere.

Gafler og alternative implementeringer

Systemgafler er tæt knyttet til kritik af det skitseret i ovenstående afsnit. Gafler forsøger generelt at forbedre mindst én af portabilitet (til andre libcs ​​og Unix-lignende systemer), modularitet eller størrelse. Et par gafler har samarbejdet under FreeInit -banneret.

Gaffel af komponenter

eudev

I 2012 skabte Gentoo Linux -projektet en gaffel udev for at undgå afhængighed af systemets arkitektur. Den resulterende gaffel kaldes eudev, og den gør udev -funktionalitet tilgængelig uden systemd. Et erklæret mål med projektet er at holde eudev uafhængig af enhver Linux -distribution eller init -system.

elogind

Elogind er systemd -projektets "logind", ekstraheret for at være en selvstændig dæmon. Det integreres med PAM for at kende det sæt brugere, der er logget ind i et system, og om de er logget ind grafisk, på konsollen eller eksternt. Elogind afslører disse oplysninger via standard org.freedesktop.login1 D-Bus- grænsefladen samt via filsystemet ved hjælp af systemd's standard /run /systemd layout. Elogind leverer også "libelogind", som er en delmængde af de faciliteter, der tilbydes af "libsystemd". Der er også en "libelogind.pc" pkg-config- fil.

konsolekit2

ConsoleKit blev forked i oktober 2014 af Xfce -udviklere, der ønskede, at dens funktioner stadig skulle vedligeholdes og er tilgængelige på andre operativsystemer end Linux. Selvom hovedudvikleren ikke udelukker muligheden for at genoplive det originale lager på lang sigt, anser ConsoleKit2 en midlertidig nødvendighed, indtil systembsd modnes. Udviklingen ophørte i december 2017, og projektet kan være nedlagt.

LoginKit

LoginKit var et forsøg på at implementere en logind (systemd-logind) shim , som ville tillade pakker, der er afhængige af systemd-logind, at fungere uden afhængighed af et specifikt init-system. Projektet har været nedlagt siden februar 2015.

systembsd

I 2014 blev et Google Summer of Code -projekt med navnet "systembsd" startet for at levere alternative implementeringer af disse API'er til OpenBSD . Den originale projektudvikler begyndte det for at lette overgangen fra Linux til OpenBSD. Projektudviklingen stoppede i juli 2016.

Systembsd -projektet gav ikke en init -erstatning, men havde til formål at give OpenBSD kompatible dæmoner til hostnavne , tidsbestemte , lokaliserede og logind . Projektet skabte ikke ny systemd-lignende funktionalitet og var kun beregnet til at fungere som en indpakning over det oprindelige OpenBSD-system. Udvikleren rettet til systembsd at være installeres som en del af havnene samling , ikke som en del af en base-system, med angivelse af, at "systemd og * BSD fundamentalt forskellige, hvad angår filosofi og udvikling praksis."

notsystemd

Notsystemd har til hensigt at implementere alle systemds funktioner, der arbejder på ethvert init -system. Det blev gafflet af Parabola GNU/Linux-libre- udviklerne til at bygge pakker med deres udviklingsværktøjer uden at det var nødvendigt at have systemd installeret for at køre systemd-nspawn.

Gaffel inklusive init -system

ubrugeligd

I 2014 blev uselessd skabt som en let gaffel af systemd. Projektet søgte at fjerne funktioner og programmer, der blev anset for unødvendige for et init -system, samt at løse andre opfattede fejl. Projektudviklingen stoppede i januar 2015.

uselessd understøttede musl- og µClibc -bibliotekerne, så det kan have været brugt på indlejrede systemer , mens systemd kun understøtter glibc . Det ubrugelige projekt havde planlagt yderligere forbedringer af kompatibilitet på tværs af platforme samt arkitektoniske eftersyn og ombygninger til Linux-bygningen i fremtiden.

s6

s6 er en lille pakke programmer til UNIX, designet til at tillade procesovervågning (også kaldet serviceovervågning), i rækken af ​​daemontools og runit, samt forskellige operationer med processer og dæmoner. Det er meningen, at det skal være en værktøjskasse til proces- og serviceadministration på lavt niveau, der giver forskellige sæt uafhængige værktøjer, der kan bruges inden for eller uden rammerne, og som kan samles for at opnå kraftfuld funktionalitet med en meget lille mængde kode.

InitWare

InitWare er en modulær refaktor af systemd, der overfører systemet til BSD-platforme uden glibc eller Linux-specifikke systemopkald. Det er kendt at arbejde på DragonFly BSD, FreeBSD, NetBSD og GNU/Linux. Komponenter, der anses for unødvendige, droppes.

Se også

Noter

Referencer

eksterne links