Kernel, init y servicios en Linux
Tags: linux, devops, architecture, spanish
Published: 2020-06-25 14:35:36

Hace unos días tuve una entrevista, donde el tema de Linux se tocó a fondo. Interesante saber que para alguien interesado en DevOps ó SRE, uno de los temas PILARES a conocer es nuestro viejo y algunas veces no tan conocido: Linux.
Por lo tanto quiero compartir una serie de temas con ustedes, espero que les sea de provecho.

Una vez que el kernel ha configurado todo su hardware y montado el sistema de archivos raíz, el kernel ejecuta `/sbin/init`. Esto se convierte en el proceso inicial, que luego inicia otros procesos para que el sistema funcione. La mayoría de los otros procesos en el sistema rastrean su origen en última instancia hasta init. 

Además de iniciar el sistema, `init` es responsable de mantener el sistema en funcionamiento y de apagarlo limpiamente. Una de sus responsabilidades es actuar cuando sea necesario como gerente para todos los procesos que no sean del núcleo; tradicionalmente, este inicio de proceso se realizaba utilizando convenciones que se remontan a la década de 1980 y la variedad System V de UNIX. Este proceso en serie hace que el sistema pase por una secuencia de niveles de ejecución que contienen colecciones de scripts que inician y detienen los servicios. Cada nivel de ejecución admite un modo diferente de ejecutar el sistema. Dentro de cada nivel de ejecución, los servicios individuales se pueden configurar para ejecutarse o cerrarse si se están ejecutando.

Sin embargo, todas las distribuciones recientes más importantes se han alejado de este método de nivel de ejecución `secuencial` de inicialización del sistema, aunque por lo general admiten las convenciones del Sistema V por motivos de compatibilidad. A continuación, discutiré sobre el método más nuevo `systemd`.

Los sistemas con `systemd` se inician más rápido que aquellos con métodos `init` anteriores. Esto se debe principalmente a que reemplaza un conjunto de pasos `serializados` con técnicas de `paralelización` agresivas, lo que permite que se inicien múltiples servicios simultáneamente.

Los scripts de shell de inicio complicados se reemplazan con archivos de configuración más simples, que enumeran lo que se debe hacer antes de que se inicie un servicio, cómo ejecutar el inicio del servicio y qué condiciones el servicio debería indicar que se han cumplido cuando finaliza el inicio. Una cosa a tener en cuenta es que `/sbin /init` ahora solo apunta a `/lib/systemd/ systemd`; es decir, `systemd` se hace cargo del proceso de inicio.

Un comando que se utiliza para la mayoría de las tareas básicas es `systemd (systemctl)`. Si bien aún no hemos hablado de trabajar en la línea de comando, aquí hay una breve lista de su uso:

- Iniciar, detener y reiniciar un servicio (usando nfs como ejemplo) en un sistema actualmente en ejecución:
`$ sudo systemctl start | stop | restart nfs.service`

- Habilitar o deshabilitar el inicio de un servicio del sistema en el arranque del sistema:
`$ sudo systemctl enable | disable nfs.service`

En la mayoría de los casos, se puede omitir la extensión `service`. Hay muchas diferencias técnicas con los métodos más antiguos que están más allá del alcance de nuestra discusión.

Próximamente estaré hablando sobre el filesystem, etc... De momento no quiero abrumar con tanta teoría, gracias por leer y compartir.