Comprendiendo SystemD

Secuencia de inicio de un equipo.

Dado lo extenso de este tema, voy a resumir de manera muy acotada cuál es el proceso de arranque del sistema. También voy a dejarles material en caso de que quieran ahondar en estos procesos.

Cuando el dispositivo se enciende, ejecuta un código que hará correr el programa de autodiagnósito (POST) almacenado en la ROM. Este programa de autodiagnóstico comprueba la CPU, la memoria RAM y componentes vitales de la placa madre que son necesarios para el funcionamiento correcto del equipo, como así también, la tensión y la corriente recibidas en lugares específicos de la placa madre.
A continuación, y si el hardware funciona correctamente, se ejecuta el software del cargador de arrannque, mejor conocido como BIOS, que se encuentra almacenado en la ROM.
Este software se encarga de cargar el kernel del sistema operativo, que a su vez, este último cargara el primer programa de espacio de usuario, también conocido como INIT. Un programa que corre por fuera del kernel.

¿Qué es SystemD?

Para empezar, SystemD es un INIT system que actúa como un administrador del sistema. Esto significa que se encarga de administrar servicios y procesos en segundo plano, también conocidos como daemons.
Administrar servicios incluye iniciar, detener, recargar, reiniciar, monitorizar e iniciar al momento de booteo estos servicios y procesos en segundo plano.
Por poner ejemplos de estos servicios, podemos nombrar a ssh, que es el software de administración remota de equipos, como así también Apache, Nginx, MariaDB, entre muchos más.
Es el primer proceso en ejecutarse y es el que iniciará el resto de procesos o subprocesos.

(Acá podemos ver cómo es el primero de todos los procesos, con el ID de proceso más bajo y también cómo el resto de servicios son subprocesos del init system).

Como se puede observar, desde SystemD se invocan el resto de procesos. Si suena esto familiar, es porque su estructura de funcionamiento es similar a la estructura de directorios en GNU, en donde cada directorio se encuentra dentro del directorio raíz.

¿Cómo funciona SystemD en la práctica?

Si ejecutamos el siguiente comando, podremos ver los servicios en ejecución dentro del sistema.

Podemos ver que aparecen listados algunos como bluetooth, ssh o NetworkManager. No importa que estés familiarizado/a con todos esos servicios, lo que necesitas comprender es que SystemD los está administrando.
Para lograr esto, utiliza una utilidad llamada systemctl. Cuando necesites operar con alguno de los servicios, esta utilidad es el programa que vas a utilizar como parte principal del comando para poder hacerlo.

Vamos a hacerlo con un ejemplo. Supongamos que necesito utilizar Tailscale para conectarnos a nuestra red Tailscale, donde también se encuentra uno de nuestros servidores y así poder administrarlo de manera remota. Para hacer esto, vamos a necesitar iniciar el servicio de ssh con el siguiente comando.

Como podrás observar, el comando arrojó un error y esto se debe a que necesitamos utilizar el nombre correcto del servicio, el cual es tailscaled, con una d al final que indica que se trata de un daemon. Esto es algo muy común dentro de los nombres de los servicios, por lo que deberemos tener cuidado y estar atentos a la documentación de cada programa que necesitemos.
Al ingresar el comando correcto, el servicio iniciará sin dar un mensaje de confirmación.

Lo que sigue es poder ver la información de estado de los procesos, como por ejemplo si se encuentra activo y corriendo, desde cuándo lo está haciendo, el número de ID del mismo.
Esto es importante porque en caso de que existan errores que impidan el correcto funcionamiento de un programa que requiera de un proceso, podemos hacer seguimiento de la información registrada en el estado para poder ver dónde se encuentra el problema.

Otro punto a tener en cuenta es que al comienzo dice “disable” en amarillo y luego “enabled” en verde. Esto es porque hay una diferencia entre “activo” y “habilitado”.
Activo significa que el proceso está siendo ejecutado en este mismo momento, mientras que habilitado significa que inicia cuando el sistema arranca.

Si necesitamos que el servicio inicie al arrancar el equipo, vamos a ingresar el siguiente comando.

También podemos deshabilitarlo con el parámetro disable.
8

De la misma forma, podemos detener un servicio con el parámetro stop.
9

Ahora vamos a ver dos parámetros que pueden resultar confusos; reload y restart.
reload es utilizado para cargar la configuración nueva de un proceso sin tener que reiniciarlo completamente, mientras que restart lo detiene e inicia de nuevo.


(Como podemos ver, algunos procesos no tienen disponible la opción de reload. Un ejemplo de los que sí tienen disponible esta función es Apache, en donde podemos cambiar la configuración del servidor web y luego recargar el proceso sin tener que reiniciarlo completamente).

En caso de no estar seguro/a de qué parámetro debes utilizar, podés simplemente utilizar sudo systemctl reload-or-restart [nombre-del-proceso]. Esto aplica el parámetro correcto para ese proceso automáticamente.

UNITS (Unidades).

Ahora que ya vimos una vista general básica sobre cómo podemos operar con SystemD, es necesario aclarar qué son las UNITS.
Anteriormente hemos estado utilizando el nombre completo del servicio, terminando el mismo con un .service al final. Estos comandos pueden ser ingresados sin esa última parte, ya que SystemD sólo se fija en la parte inicial, antes del punto que divide el nombre completo. Esta última parte determina el tipo de unidad, ya que SystemD no sólo administra servicios, si no que también estas famosas unidades.
Para dejarlo más claro, las unidades son tipos de objetos con los que SystemD interactúa, siendo los servicios uno de estos.
Otras de estas unidades pueden ser .mount, .timer, .socket y .target.
11

Cada unidad contiene lo que se denomina unit file, un archivo que describe a la unidad, contiene información sobre esa unidad en particular y sigue a un formato específico.
Para ver el contenido de una unidad podemos utilizar el siguiente comando.

El primer encabezado con el que nos encontramos se denomina [Unit], el cual contiene información básica sobre la unidad y una descripción de lo que esta hace.
El segundo encabezado es específico de la unidad y contiene información relevante para ese tipo de unidad. El nombre de este encabezado cambiará dependiendo del tipo de unidad, pudiendo llamarse [Service], [Socket], [Timer], etcétera.
El tercer encabezado se denomina [Install] que especifica las dependencias a las cuales deberá ser enlazado el proceso al encontrarse en estado habilitado.

Todos estos archivos se encuentran almacenados en el directorio /usr/lib/systemd/system/, siendo esta la ubicación principal.
También tenemos el directorio /run/systemd/system/ donde se encuentran los archivos de unidad utilizados de manera temporal y luego tenemos el directorio /etc/systemd/system/ que es donde los administradores colocan sus propios archivos de unidad personalizados.

Como esta publicación está dedicada a principiantes, no van a necesitar como crear sus propios archivos de unidad, por lo que queda descartado en este tema.

El rechazo a SystemD.

Si bien, este sistema INIT es el más utilizado de entre todas las opciones (runt y OpenRC son alternativas), una buena parte de la comunidad de GNU+Linux siente rechazo por este. Algunos grupos simplemente sienten un verdadero odio.
Estos grupos tienen motivos más que justificados para rechazar a SystemD y la lista detallada de los motivos pueden leerse en ihatesystemcd.com y nosystemd.org (Esta última con un detalle más técnico al respecto).
El motivo principal por el que se produce este choque es debido a que SystemD no está suscrito a la filosofía Unix, que sigue principios como:

  • Escribir programas que realicen una sola cosa y lo hagan bien.
  • Escribir programas que trabajen juntos.
  • Escribir programas que manejen flujos de texto, porque esa es una interfáz universal.

Esta sección se encuentra dentro de la publicación porque ya sea por un momento mientras se incian en el mundo de GNU+Linux o por el resto de sus vidas como usuarios del sistema, van a encontrarse con SystemD, van a necesitar comprenderlo e inevitablemente se van a encontrar con otros usuarios que rechazan a este sistema. Por todo esto es que necesitan comprender el aspecto básico del “conflicto”. Tambie muy común cuando se trabaja con servidores o redes.

Fuentes.

Esta publicación fue elaborada en base al video del canal Zeroes&Oes que se encuentra en inglés y me pareció apropiado transmitir esta información en castellano, siendo este un tema útil y necesario para quienes recién comienzan.
Pueden encontrar muchísima información al respecto en caso de que quieran ahondar aún más.

10 Me gusta

meme slop, gran aporte sr sombra!

1 me gusta

Exelente publicación! Yo se que es sistemd que porcierto, tambien puede ser un bootloader como grub, tal vez este comentario le sirva a un carajito nuevo en arch o que se sho

1 me gusta

El Grub se ejecuta entre la BIOS y el kernel. No sé cómo podría SystemD funcionar como grup.
Saludos.

creo que se refiere a systemd-boot, pero creo que tuvo que detallar mas el post que solo decir que systemd es también un bootloader.

1 me gusta

Gracias por la aclaración. No estaba entendiendo nada :joy:

oro puro, le dedicare mi día libre

1 me gusta

Por favor, tené en cuenta de que la publicación es para quienes recién se pasan en Linux y explico de manera sencilla las operaciones básicas con procesos. No tiene nada avanzado para usuarios que ya saben iniciar, detener, reiniciar, recargar o habilitar servicios.

Se me ocurrió adaptar el video al español siguiendo el objetivo del foro, que es el de acercar información del inglés a los usuarios de habla hispana. Aunque sea un poquito.

2 Me gusta

Excelente, muchas gracias 5ombr4, muy buen aporte de contenido

1 me gusta