Here We Go Again, en annen Linux Init: å Intro systemd

I gamle dager hadde vi en System V (SysV) skriver init daemon å administrere Linux systemet starter opp, og det var bra. Det ble konfigurert med enkle tekstfiler lett forstås av dødelige, og det var en vennlig konstant blant de belastende hav av endringen. Så kom systemd, og nok en gang vi Linux-brukere ble kastet i drift i ukjent farvann. Hvorfor all denne endringen? Kan ikke Linux holder fortsatt for bare et minutt?

Ch Ch Ch Endringer

Linux har blitt tilfreds bruker sysvinit (System V initialisering) å administrere systemet startups for aldri så mange år nå, bortsett for distribusjoner som Slackware som bruker BSD-stil init. SysV og BSD init er like nok til at det er lett å bruke det ene uten mye oppstyr

Så kom to nye init systemer for Linux. Ubuntu oppkomling, først utgitt i 2006, og systemd, født i 2009. Den systemd kode ble skrevet primært av Leonard Poettering. Oppkomling har vært standard i Ubuntu siden 6.10 Edgy Eft og er tilgjengelig i de fleste distroer. systemd er standard init i Fedora 15 og senere, og er også i de fleste distro repos for alle som ønsker å prøve det på deres favoritt Linux.

Overhaling viktige delsystemer tendens til å gi brukerne jitters, fordi det betyr å være tvunget til å lære nye måter å administrere våre systemer og endre vår arbeidsflyt, og utsiktene til viktige tjenester som lider voksesmerter og blir mindre enn pålitelig er ikke happy-making. Så hva er det med denne nye systemd thingy, og hvilke fordeler bringer det til oss bare Linux-brukere?

Raskere Startups

Formålet med sysvinit er å lansere userspace. Ved oppstart kjernen lanserer PID en, til den aller første prosessen kjøre ved oppstart. (Kjør pstree kommandoen for å se en fin kunstnerisk ASCII diagram av prosessen treet.) Det pleide å være at BIOS og sysvinit var like lovbrytere i å dra oppstarttid ut til et minutt eller mer. Begge har satt fart, men sysvinit er alltid kommer til å være treg fordi det begynner behandler en om gangen, utfører avhengighets sjekker på hver enkelt, og venter på daemons å starte slik at flere daemons kan starte.

Så hvorfor ikke starte prosesser i parallell? Det er en måte å gjøre dette uten alle slags kompleksitet, og det er å dra nytte av måten Unix-type daemons fungere. Kunder av Unix daemons ikke trenger å vite om de daemons de er avhengige av er faktisk kjører – alt de trenger er de riktige Unix domene sockets å være tilgjengelig. Hva pokker er disse kontaktene? De er inter-prosess kommunikasjon stikkontakter (IPC), og de er hvordan prosesser på det lokale systemet snakke med hverandre. Du kan se disse med netstat:


 $ netstat -a --protocol = unixActive UNIX domene sockets (bare servere) Proto RefCnt Flags Type State I-Node Pathunix 2 [ACC] STREAM LYTTE 4836 /var /run /dbus /system_bus_socketunix 9 [] dgram 4584 /dev /logunix 3 [] STREAM KOBLET 489456 /tmp /bane-carla /Linc-aaa-0-476044c676da9unix 3 [] STREAM KOBLET 489455 unix 3 [] STREAM KOBLET 489452 /tmp /bane-carla /Linc-8BA-0-45fe9270a46b2 [...] 


Som du kan se kontaktene har inodes, følger tradisjonen med " alt i Unix er en fil . " Så du kan utføre ulike operasjoner på dem med standard Linux-fil verktøy, som er et morsomt tema for en annen dag.

Så alle stikkontakter for alle nisser kan lages i ett trinn, og deretter alle nisser i et andre trinn . Eventuelle klient forespørsler om daemons som ennå ikke kjører vil bli lagret i socket buffer, og deretter fylt når daemons er oppe og går. Jeg er ingen kernel hacker så kanskje jeg er for lett imponert, men dette virker som en genial og effektiv bruk av noe som har eksistert i flere tiår, og å foretrekke fremfor å prøve å finne på noe helt nytt.

hotplugging og On-Demand tjenester

sysvinit har en statisk konfigurasjon og lanseringer behandler en om gangen, i rekkefølge. Når vi konfigurerer sysvinit har vi alltid måtte være oppmerksom på å lansere dem i riktig rekkefølge, som å huske å starte nettverk før du starter nettverkstjenester. Og vi må være oppmerksomme på at alt vi trenger er lansert ved oppstart, eller annet vi blir nødt til å starte den manuelt, fordi etter oppstart sysvinit går i dvale og ikke gjør noe mer.

Dette kan være tilstrekkelig for enkle servere, men ikke for stasjonære og mobile systemer. Brukere streife mellom ulike nettverk, feste og fjerne alle slags enheter som tastaturer og hodetelefoner, audio grensesnitt, lagringsmedier, filmer og musikk – takket være Bluetooth og USB vi endelig har universell portene, og hotplugging enheter er rutine i stedet for en eksotisk opplevelse. Husk hvordan, helt tilbake i eldre tider, ble vi advart om å aldri hotplug PS /2-tastatur, mus eller IDE disker på grunn av risikoen for fysisk skade? Selv om ingenting fikk stekt de ble oppdaget bare ved oppstart.

Auto-deteksjon og auto-montering flyttbare enheter har gått gjennom en rekke faser i Linux. Husk de morsomme gamle dager med manuelt montering og demontering CDer og USB-pinner? Og gjør narr av Windows- og Mac-flyktninger som trodde det var rart og dumt? Vel, det var rart og dumt. Men Linux fortsatt var en baby, så vi måtte håndtere det.

Så er nettverkstjenester som kan være on-demand som fildelinger, skrivere, VNC, SSH, og så videre. Poenget er i disse moderne tider måte flere ting skjer etter oppstart, så i stedet for å prøve å forutse alt du trenger og starter det hele ved oppstart, hvorfor ikke bygge et system som starter og stopper prosesser på forespørsel? Som en hverdag praktisk sak dette synes å løse en av mine kjæledyr peeves, og det er hvor mange distroer lansere avahi og Bluetooth daemons ved oppstart. Jeg har ikke bruk for heller, så jeg har alltid deaktivere dem. En liten sak for å være sikker, men jeg liker tanken på datamaskinen håndtere disse typer husarbeid fordi jeg har fast arbeid å gjøre.

Det har vært mange forsøk på delsystemer til å håndtere dynamisk håndtering av maskinvare og programvare: HAL (Hardware Abstraction Layer), autofs, devfs, og alle slags andre som jeg har glemt. Nå har vi D-Bus for avanserte interprosesskommunikasjon og ledelse, for eksempel prosess livssyklusadministrasjon. D-Bus bruker Unix domene sockets som sin transportmekanisme, og det synes å være kommet for å bli (for eksempel KDE og Gnome kjøre på D-Bus). Så med ekstra funksjonalitet i D-Bus det synes en naturlig utvidelse av plikter for systemd, som PID en, til å fungere som heltids Linux prosess barnevakt, og bringe effektiviteten av parallellisering og dynamisk ressursstyring til et kjørende system, snarere enn bare å starte systemet og deretter gå i dvale til neste omstart.

Dette er et nakent introduksjon til vanskelighetene med systemd og Linux prosessledelse. Den systemd hjemmesiden er et flott utgangspunkt for å lære mer. Komme tilbake neste uke for å lære å administrere og feilsøke systemd på dine egne systemer. Anmeldelser