systemd a Fons: Arquitectura Modular, Integració amb el Kernel i els Motius de la Gran Polèmica UNIX
Introducció
systemd és el sistema init predeterminat de la majoria de distribucions Linux actualment, però aquest sistema ha generat molta polèmica. En aquest post repassarem la història d’aquest sistema, en què consisteix i què el diferencia d’altres alternatives i els motius dels debats que ha provocat.
D’on ve systemd?
El primer init d’Unix era molt simple, les seves funcions eren:
-
Arrencar processos
-
Algunes funcions de housekeeping (muntar FS)
-
Llançar dimonis bàsics
SysV init i els scripts
Amb el temps va arribar System V init(SysV):
-
Basat en shellscripts
-
Seqüencial
-
Lent i limitat en paral·lelisme
-
Sense supervisió real de serveis
Per a l’època funcionava prou bé.
inetd
Més endavant es va evolucionar cap a inetd, un dimoni que escoltava connexions i llençava el servei al rebre una connexió. Aquest sistema era molt eficient fins que Internet va créixer massa.
Serveis
En aquest punt van aparèixer els serveis com a tal: programes que han de ser persistents i supervisats.
En aquest punt existia SysV però no gestionava bé els serveis, ja que no tenia gestió sobre els serveis, no podia reiniciar-lo ni saber per què havia caigut.
Upstart
Ubuntu va desenvolupar Upstart per modernitzar el sistema init. Aquest nou sistema oferia:
-
Comportament basat en esdeveniments
-
Scripts més flexibles
-
Paral·lelisme
Però encara tenia limitacions, depenia molt dels scripts i encara no manejava del tot bé els serveis.
launchd de macOS
Apple per la seva banda va desenvolupar launchd, que a més de sistema d’init, substituïa diferents dimonis.
systemd té forta inspiració de launchd.
La idea rere systemd
systemd neix amb la idea de:
-
Arrencar més serveis en paral·lel
-
Iniciar serveis sota demanda
-
Supervisar els serveis
-
Integrar-se amb característiques modernes del kernel
-
Arrencar més ràpid
Per més informació, Lennart Poettering va publicar aquest post.
Arquitectura
systemd no és només init, és un ecosistema d’eines que col·laboren entre si.
PID 1
-
Arrenca serveis
-
Controla dependències
-
Controla l’ordre de boot
-
Gestiona el cicle de vida dels serveis
-
Supervisa errors i reinicis.
-
Gestiona processos òrfens.
Supervisa els serveis amb cgroups.
Units
A systemd, l’element bàsic és la Unit, i tot són units. Tenim diferents tipus:
-
service (serveis)
-
socket (activació per sockets)
-
timer (equivalent a cron jobs)
-
device (dispositius)
-
mount/automount
-
target (agrupacions tipus multi-user.target)
-
path (monitoritzar canvis en directoris)
-
snapshot
I cada unit pot tenir:
-
Dependències
-
Directives com Before i After
-
Condicions
-
Reinicis automàtics
-
Entorns sandbox
Activació per esdeveniments
Systemd pot activar serveis quan:
-
Hi ha una connexió a un socket
-
Un fitxer canvia
-
Un dispositiu s’afegeix
-
S’arriba a una condició de temps (timers)
-
Un altre servei ho requereix
Integració amb el kernel
systemd utilitza els cgroups per controlar recursos, supervisar processos, detectar si un servei cau i assegurar que els processos es tanquin realment.
Aquest punt SysV init no el pot replicar, i és en part per això pel que no és portable a altres sistemes UNIX.
systemd i els seus components
Una de les crítiques a systemd és la quantitat de components que té:
-
resolved (DNS)
-
journalctl (sistema de logs)
-
networkd (xarxa)
-
timesyncd (temps)
-
udevd (gestor de dispositius)
-
logind (inici de sessions)
-
systemd-boot (bootloader)
-
timers (alternativa a cron)
I sovint aquests components no són utilitzats (per xarxa s’utilitza bastant NetworkManager, com a bootloader se sol utilitzar GRUB,…).
Però també és cert que són binaris separats i es poden desactivar.
Polèmica
systemd ha generat debat des de l’inici, sobretot degut a la seva arquitectura, però quins punts són els que es critiquen?
Filosofia UNIX
La filosofia UNIX es basa en fer una cosa i fer-la bé (“Do one thing and do it well.”). Els seus detractors precisament l’ataquen per la quantitat de funcions que té, però els defensors argumenten que cada component és independent i systemd és modular.
És monolític i amb bloat
També hi ha detractors dient que systemd és monolític i té bloat. Si bé és cert que systemd és gran, el seu diseny és el d’un ecosistema modular. Però la part de bloat és un altre tema, pot ser cert que un init no necessiti tantes coses, però proporciona una integració molt bona.
No és portable
Aquesta és totalment encertada: systemd està orientat 100% a Linux i no és compatible amb altres sistemes basats en UNIX, ja que utilitza cgroups, namespaces, entre altres API pròpies del kernel de Linux.
És massa complex
Aquí tornem a tenir una dicotomia: per un usuari final, no ha d’entendre’l massa, però per un administrador si que pot tenir certa corba d’aprenentatge, tot i que ofereix molt de poder.
Logs en binari
Principalment els aventatges que dona és la indexació i cerca ràpida i la integritat de les dades, però també té punts en contra: dependència de systemd per llegir els logs (pot donar problemes en un entorn que no arrenca) i no és “Unix-like” com els logs normals, aqui no pots utilitzar comandes grep o altres eines per l’estil.
Distros que no l’utilitzen
Hi ha distribucions que s’han negat a utilitzar systemd, com són:
-
Void Linux (runit)
-
Devuan (fork de Debian sense systemd)
-
Alpine Linux (OpenRC)
-
Artix Linux (Arch Linux sense systemd)
Conclusió
Si bé systemd és polèmic, és un sistema útil i ben plantejat; tot i que potser amb algun component de més, és molt potent, ràpid i integrat.
Des de la seva aparició ha canviat com inicien els sistemes Linux, fent-los evolucionar amb la tecnologia, i la prova és la gran adopció que té.
I fins aquí el post d’avui. Si t’ha semblat útil pots deixar un comentari i compartir-lo. Ens veiem al següent!



