systemd (sí, todo en minúsculas, incluso al comienzo de una oración) es el reemplazo moderno de los scripts init y SystemV init. También es mucho más.
Como la mayoría de los administradores de sistemas, cuando pienso en el programa init y SystemV, pienso en el inicio y apagado de Linux y no en mucho más, como administrar servicios una vez que están en funcionamiento. Al igual que init, systemd es la madre de todos los procesos y es responsable de llevar el host de Linux a un estado en el que se pueda realizar un trabajo productivo. Algunas de las funciones asumidas por systemd, que es mucho más extensa que el antiguo programa init, son administrar muchos aspectos de un host Linux en ejecución, incluido el montaje de sistemas de archivos, la administración de hardware, el manejo de temporizadores y el inicio y la administración de los servicios del sistema que se requieren. tener un host Linux productivo.
Esta serie de artículos, que se basa en parte en extractos de mi curso de capacitación de Linux de tres volúmenes, Uso y administración de Linux:de cero a administrador de sistemas , explora las funciones de systemd tanto al inicio como después de que finaliza el inicio.
Inicio de Linux
El proceso completo que lleva a un host Linux de un estado apagado a un estado de ejecución es complejo, pero está abierto y se puede conocer. Antes de entrar en detalles, daré una descripción general rápida desde cuando se enciende el hardware host hasta que el sistema está listo para que un usuario inicie sesión. La mayoría de las veces, "el proceso de arranque" se analiza como una sola entidad, pero eso no es exacto. De hecho, hay tres partes principales en el proceso completo de arranque e inicio:
- Arranque de hardware: Inicializa el hardware del sistema
- arranque de Linux: Carga el kernel de Linux y luego systemd
- Inicio de Linux: Donde systemd prepara el host para el trabajo productivo
La secuencia de inicio de Linux comienza después de que el kernel haya cargado init o systemd, dependiendo de si la distribución usa el inicio antiguo o el nuevo, respectivamente. Los programas init y systemd inician y administran todos los demás procesos y ambos se conocen como la "madre de todos los procesos" en sus respectivos sistemas.
Es importante separar el inicio del hardware del inicio de Linux del inicio de Linux y definir explícitamente los puntos de demarcación entre ellos. Comprender estas diferencias y qué papel juega cada una para llevar un sistema Linux a un estado en el que pueda ser productivo hace posible administrar estos procesos y determinar mejor dónde se produce un problema durante lo que la mayoría de la gente llama "arranque".
El proceso de inicio sigue el proceso de inicio de tres pasos y lleva la computadora Linux a un estado operativo en el que se puede utilizar para el trabajo productivo. El proceso de inicio comienza cuando el kernel transfiere el control del host a systemd.
controversia systemd
systemd puede evocar una amplia gama de reacciones de los administradores de sistemas y otros responsables de mantener los sistemas Linux en funcionamiento. El hecho de que systemd se haga cargo de tantas tareas en muchos sistemas Linux ha generado rechazo y discordia entre ciertos grupos de desarrolladores y administradores de sistemas.
SystemV y systemd son dos métodos diferentes para realizar la secuencia de inicio de Linux. Los scripts de inicio de SystemV y el programa init son los métodos antiguos, y systemd usando objetivos es el nuevo método. Aunque la mayoría de las distribuciones de Linux modernas utilizan el systemd más nuevo para el inicio, el apagado y la gestión de procesos, todavía hay algunas que no lo hacen. Una de las razones es que algunos mantenedores de distribución y algunos administradores de sistemas prefieren el antiguo método SystemV al más nuevo systemd.
Creo que ambos tienen ventajas.
Por que prefiero SystemV
Prefiero SystemV porque es más abierto. El inicio se logra mediante scripts de Bash. Después de que el kernel inicie el programa init, que es un binario compilado, init inicia el rc.sysinit script, que realiza muchas tareas de inicialización del sistema. Después de rc.sysinit completa, init lanza el /etc/rc.d/rc secuencia de comandos, que a su vez inicia los diversos servicios definidos por las secuencias de comandos de inicio de SystemV en /etc/rc.d/rcX.d , donde "X" es el número del nivel de ejecución que se está iniciando.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Excepto por el propio programa init, todos estos programas son scripts abiertos y fáciles de conocer. Es posible leer estos scripts y aprender exactamente lo que está ocurriendo durante todo el proceso de inicio, pero no creo que muchos administradores de sistemas realmente hagan eso. Cada secuencia de comandos de inicio está numerada para que inicie su servicio previsto en una secuencia específica. Los servicios se inician en serie y solo se inicia un servicio a la vez.
systemd, desarrollado por Lennart Poettering y Kay Sievers de Red Hat, es un sistema complejo de grandes ejecutables binarios compilados que no son comprensibles sin acceso al código fuente. Es de código abierto, por lo que "acceder al código fuente" no es difícil, solo menos conveniente. systemd parece representar una refutación significativa de múltiples principios de la filosofía de Linux. Como binario, systemd no está abierto directamente para que el administrador del sistema lo vea o realice cambios fáciles. systemd intenta hacer todo, como administrar los servicios en ejecución, al tiempo que proporciona mucha más información de estado que SystemV. También administra hardware, procesos y grupos de procesos, montajes de sistemas de archivos y mucho más. systemd está presente en casi todos los aspectos del host Linux moderno, lo que lo convierte en la herramienta integral para la administración del sistema. Todo esto es una clara violación de los principios de que los programas deben ser pequeños y que cada programa debe hacer una cosa y hacerlo bien.
Por que prefiero systemd
Prefiero systemd como mi mecanismo de inicio porque inicia tantos servicios como sea posible en paralelo, dependiendo de la etapa actual en el proceso de inicio. Esto acelera el inicio general y lleva el sistema host a una pantalla de inicio de sesión más rápido que SystemV.
systemd administra casi todos los aspectos de un sistema Linux en ejecución. Puede administrar los servicios en ejecución mientras proporciona mucha más información de estado que SystemV. También administra hardware, procesos y grupos de procesos, montajes de sistemas de archivos y mucho más. systemd está presente en casi todos los aspectos del sistema operativo Linux moderno, lo que lo convierte en la herramienta integral para la administración del sistema. (¿Te suena familiar?)
Las herramientas systemd son binarios compilados, pero el conjunto de herramientas está abierto porque todos los archivos de configuración son archivos de texto ASCII. La configuración de inicio se puede modificar a través de varias GUI y herramientas de línea de comandos, además de agregar o modificar varios archivos de configuración para satisfacer las necesidades del entorno informático local específico.
El problema real
¿Creías que no me podían gustar ambos sistemas de inicio? Yo sí, y puedo trabajar con cualquiera de los dos.
En mi opinión, el problema real y la causa raíz de la mayor parte de la controversia entre SystemV y systemd es que no hay elección en el nivel de administrador de sistemas. Los desarrolladores, mantenedores y empaquetadores de las diversas distribuciones ya han tomado la decisión de usar SystemV o systemd, pero por una buena razón. Sacar y reemplazar un sistema init, por su naturaleza extrema e invasiva, tiene muchas consecuencias que serían difíciles de abordar fuera del proceso de diseño de distribución.
A pesar de que esta elección está hecha por mí, mis hosts de Linux se inician y funcionan, que es lo que más me importa. Como usuario final e incluso como administrador de sistemas, mi principal preocupación es si puedo hacer mi trabajo, como escribir mis libros y este artículo, instalar actualizaciones y escribir scripts para automatizar todo. Mientras pueda hacer mi trabajo, realmente no me importa la secuencia de inicio utilizada en mi distribución.
Me importa cuando hay un problema durante el inicio o la gestión del servicio. Independientemente del sistema de inicio que se use en un host, sé lo suficiente como para seguir la secuencia de eventos para encontrar la falla y solucionarla.
Reemplazo de SystemV
Ha habido intentos anteriores de reemplazar SystemV con algo un poco más moderno. Durante aproximadamente dos lanzamientos, Fedora usó una cosa llamada Upstart para reemplazar el antiguo SystemV, pero no reemplazó a init y no proporcionó cambios que noté. Debido a que Upstart no proporcionó cambios significativos a los problemas relacionados con SystemV, los esfuerzos en esta dirección se abandonaron rápidamente a favor de systemd.
A pesar de que la mayoría de los desarrolladores de Linux están de acuerdo en que reemplazar el antiguo inicio de SystemV es una buena idea, a muchos desarrolladores y administradores de sistemas no les gusta systemd por eso. En lugar de repetir todos los llamados problemas que la gente tiene, o tuvo, con systemd, lo referiré a dos artículos buenos, aunque algo antiguos, que deberían cubrir casi todo. Linus Torvalds, el creador del kernel de Linux, parece desinteresado. En un artículo de ZDNet de 2014, Linus Torvalds y otros en systemd de Linux , Linus tiene claros sus sentimientos.
"En realidad, no tengo opiniones particularmente sólidas sobre systemd en sí. He tenido problemas con algunos de los principales desarrolladores que creo que son demasiado arrogantes con respecto a los errores y la compatibilidad, y creo que algunos de los detalles de diseño son una locura (yo no me gustan los registros binarios, por ejemplo), pero esos son detalles, no grandes problemas".
Por si no sabes mucho de Linus, te puedo decir que si algo no le gusta, es muy franco, explícito y bastante claro sobre ese disgusto. Se ha vuelto más aceptable socialmente en su forma de abordar su disgusto por las cosas.
En 2013, Poettering escribió una larga publicación de blog en la que desacredita los mitos sobre systemd y proporciona información sobre algunas de las razones para crearlo. Esta es una lectura muy buena y la recomiendo mucho.
tareas systemd
Dependiendo de las opciones utilizadas durante el proceso de compilación (que no se consideran en esta serie), systemd puede tener hasta 69 ejecutables binarios que realizan las siguientes tareas, entre otras:
- El programa systemd se ejecuta como PID 1 y proporciona el inicio del sistema de tantos servicios en paralelo como sea posible, lo que, como efecto secundario, acelera los tiempos de inicio generales. También gestiona la secuencia de apagado.
- El programa systemctl proporciona una interfaz de usuario para la gestión de servicios.
- Se ofrece soporte para scripts de inicio SystemV y LSB para compatibilidad con versiones anteriores.
- La gestión de servicios y los informes proporcionan más datos sobre el estado del servicio que SystemV.
- Incluye herramientas para la configuración básica del sistema, como nombre de host, fecha, configuración regional, listas de usuarios registrados, contenedores y máquinas virtuales en ejecución, cuentas del sistema, directorios y configuraciones de tiempo de ejecución, demonios para administrar la configuración de red simple, sincronización de tiempo de red , reenvío de registros y resolución de nombres.
- Ofrece administración de sockets.
- Los temporizadores de systemd brindan capacidades similares a las de cron para incluir la ejecución de un script en momentos relacionados con el inicio del sistema, el inicio de systemd, la última vez que se inició el temporizador y más.
- Proporciona una herramienta para analizar fechas y horas utilizadas en las especificaciones del temporizador.
- El montaje y desmontaje de sistemas de archivos con conciencia jerárquica permite una cascada más segura de sistemas de archivos montados.
- Permite la creación y gestión positiva de archivos temporales, incluida la eliminación.
- Una interfaz para D-Bus proporciona la capacidad de ejecutar secuencias de comandos cuando los dispositivos se conectan o desconectan. Esto permite que todos los dispositivos, ya sean enchufables o no, se traten como plug-and-play, lo que simplifica considerablemente el manejo del dispositivo.
- Su herramienta para analizar la secuencia de inicio se puede utilizar para localizar los servicios que toman más tiempo.
- Incluye diarios para almacenar mensajes de registro del sistema y herramientas para administrar los diarios.
Arquitectura
Esas tareas y más son compatibles con una serie de demonios, programas de control y archivos de configuración. La Figura 1 muestra muchos de los componentes que pertenecen a systemd. Este es un diagrama simplificado diseñado para proporcionar una descripción general de alto nivel, por lo que no incluye todos los programas o archivos individuales. Tampoco proporciona información sobre el flujo de datos, que es tan complejo que sería un ejercicio inútil en el contexto de esta serie de artículos.
Una exposición completa de systemd tomaría un libro por sí solo. No necesita comprender los detalles de cómo encajan los componentes de systemd en la Figura 1; es suficiente conocer los programas y componentes que permiten administrar varios servicios de Linux y manejar archivos de registro y diarios. Pero está claro que systemd no es la monstruosidad monolítica que pretenden ser algunos de sus críticos.
systemd como PID 1
systemd es PID 1. Algunas de sus funciones, que son mucho más extensas que el antiguo programa init SystemV3, son administrar muchos aspectos de un host Linux en ejecución, incluido el montaje de sistemas de archivos y el inicio y la administración de los servicios del sistema necesarios para tener un host Linux productivo. Cualquiera de las tareas de systemd que no están relacionadas con la secuencia de inicio están fuera del alcance de este artículo (pero algunas se explorarán más adelante en esta serie).
Primero, systemd monta los sistemas de archivos definidos por /etc/fstab , incluidos los archivos de intercambio o las particiones. En este punto, puede acceder a los archivos de configuración ubicados en /etc , incluido el propio. Utiliza su enlace de configuración, /etc/systemd/system/default.target , para determinar en qué estado u objetivo debe iniciar el host. El objetivo.predeterminado El archivo es un enlace simbólico al verdadero archivo de destino. Para una estación de trabajo de escritorio, normalmente será el graphical.target , que es equivalente al nivel de ejecución 5 en SystemV. Para un servidor, es más probable que el valor predeterminado sea multi-user.target , que es como el nivel de ejecución 3 en SystemV. El objetivo.de.emergencia es similar al modo de usuario único. Los objetivos y los servicios son unidades systemd.
La siguiente tabla (Figura 2) compara los objetivos de systemd con los niveles de ejecución de inicio de SystemV anteriores. systemd proporciona los alias de destino de systemd para la compatibilidad con versiones anteriores. Los alias de destino permiten que los scripts, y muchos administradores de sistemas, usen comandos de SystemV como init 3 para cambiar los niveles de ejecución. Por supuesto, los comandos de SystemV se reenvían a systemd para su interpretación y ejecución.
objetivos systemd | Nivel de ejecución de SystemV | alias de destino | Descripción |
predeterminado.objetivo | Este objetivo siempre tiene un alias con un enlace simbólico a cualquiera de multi-user.target o objetivo.gráfico . systemd siempre usa el default.target para iniciar el sistema. El objetivo.predeterminado nunca debe tener un alias para halt.target , apagar.objetivo o reboot.target . | ||
objetivo.gráfico | 5 | runlevel5.objetivo | Objetivo.multiusuario con una GUI |
4 | runlevel4.objetivo | Sin usar. El nivel de ejecución 4 era idéntico al nivel de ejecución 3 en el mundo SystemV. Este objetivo podría crearse y personalizarse para iniciar servicios locales sin cambiar el multi-user.target predeterminado. . | |
multiusuario.objetivo | 3 | runlevel3.objetivo | Todos los servicios en ejecución, pero solo la interfaz de línea de comandos (CLI) |
2 | runlevel2.objetivo | Multiusuario, sin NFS, pero todos los demás servicios no GUI en ejecución | |
objetivo.rescate | 1 | nivel de ejecución1.objetivo | Un sistema básico, incluido el montaje de los sistemas de archivos con solo los servicios más básicos ejecutándose y un shell de rescate en la consola principal |
objetivo.de.emergencia | S | Modo de usuario único:no hay servicios en ejecución; los sistemas de archivos no están montados. Este es el nivel de operación más básico con solo un shell de emergencia ejecutándose en la consola principal para que el usuario interactúe con el sistema. | |
detener.objetivo | Detiene el sistema sin apagarlo | ||
reiniciar.objetivo | 6 | runlevel6.objetivo | Reiniciar |
apagar.objetivo | 0 | runlevel0.objetivo | Detiene el sistema y apaga la alimentación |