Proceso init: SystemV, Upstart, Systemd

El proceso init es el primer proceso ejecutado por el kernel durante el inicio del sistema y es el encargado de iniciar todos los demás servicios que el SO requiere.

Hay tres importantes managers de inicio en actualmente los cuales son descritos a continuación:

SysVinit

Es el administrador más antiguo y fué basado en Unix. Si bien viene siendo reemplazado por otros aún hay distribuciones (como Red Hat) que lo usan en producción. Además viene bien conocerlo porque sus reemplazos ofrecen cierta retrocompatibilidad para algunos de sus comandos más útiles.

Para conocer el runlevel actual:

El primer dígito indica en nivel previo. N significa desconocido.

Para cambiar de runlevel:
sudo /sbin/telinit 5

El proceso /sbin/init lee inicialmente su configuración de /etc/inittab.

En /etc/rc.d/ se almacena enlaces simbólicos de los scripts que serán ejecutados en cada runlevel. Los scripts originales se encuentran en /etc/init.d/.
Los nombres de los scripts son como este:
S10network
S: Inicio
K: Detención
El número luego del prefijo indica el orden de ejecución.

chkconfig es una utilidad que permite gestionar estos scripts ordenadamente.

Listado de servicios configurados para correr al reiniciar
chkconfig --list [service names]
Consultar si un servicio esta configurado para correr en el proximo reinicio
chkconfig some_service
Configurar un servicio para que se ejecute en el proximo reinicio
sudo chkconfig some_service on
Y para que NO se vuelva a ejecutar al reiniciar
sudo chkconfig some_service off

Para registrar un nuevo servicio se usa el comando
chkconfig --add
Se coloca el script que se desea ejecutar en /etc/init.d y se declarar lo siguiente en la 1ra línea:

Leyenda:
col1: Runlevels en donde ejecutarse por defecto
col2: Prefijo numérico del script de inicio.
col3: Prefijo numerico del script de detención. En el ejemplo son S10 y K90.
Para eliminar un servicio se usa
chkconfig --del

Para gestionar los servicios se usa el comando service.
Ver el estado de todos los servicios
sudo service --status-all

En sistemas basados en Debian, incluyendo Ubuntu, las utilidades anteriores funcionarán solamente si se han instalado los paquetes sysvinit-utils y chkconfig, como se muestra aquí:

Sin embargo, las versiones recientes de Ubuntu ya no tienen el paquete chkconfig; tendrá que utilizar la utilidad update-rc.d que se describe más abajo.
Como alternativa, puede utilizar los comandos nativos en estos sistemas. Por ejemplo, el equivalente de la utilidad service es:

para visualizar o cambiar el estado de cups. El comando status es más reciente y es preferido sobre invoke-rc.d.
Del mismo modo el equivalente de chkconfig sería:

Upstart

Es manejado por eventos, en lugar de ser un conjunto de procedimientos en forma serial. Las notificaciones de eventos son enviadas al proceso init para ejecutar ciertos comandos en el momento justo después de que han cumplido los requisitos previos.

Archivos de configuración:

  1. /etc/init/rcS.conf
  2. /etc/rc-sysinit.conf (iniciar LVM, montar unidades)
  3. /etc/inittab (aqui está espeficicado el runlevel por defecto)
  4. /etc/init/rc.conf
  5. /etc/rc[0-6].d

Finalmente, scripts adicionales como prefdm.conf son ejecutados (para el runlevel 5 solamente).
inittab está obsoleto. Ahora solo se utiliza para configurar el runlevel predeterminado.
En general, Upstart se encontrará en el directorio /etc/event.d.

El número de consolas tty activas ahora se establece mediante la variable ACTIVE_CONSOLES  en /etc/sysconfig/init, la que es leída por /etc/init/start-ttys.conf. El valor predeterminado es ACTIVE_CONSOLES=/dev/tty [1-6] , el cual inicia un proceso getty desde tty1 hasta tty6.

Para ver el estado, detener, iniciar, etc de un servicio se puede utilizar el comando:

Funciona de forma similar a service.
Más doc de upstart en http://upstart.ubuntu.com/cookbook.

systemd

Usa targets de nivel de ejecución en vez de runlevels. Es compatible con los scripts SysVinit. Usa socket y activación D-Bus para iniciar servicios. Reemplaza scripts de shell scripts con programas. Realiza seguimiento de los procesos usando cgroups. El comando telinit es emulado para trabajar con runlevels.
En vez de utilizar scripts bash, systemd usa archivos .service. Adicionalmente, systemd clasifica todos los demonios en su propio cgroups del núcleo Linux (grupos de control).

Algunos archivos de configuración:

  • /etc/vconsole.conf: mapa de teclado por defecto y fuente de consola.
  • /etc/sysctl.d/*.conf: directorio para los parámetros sysctl del kernel.
  • /etc/os-release: archivo de ID de la distribución.

Los servicios son administrados con el comando systemctl.

Para ver el estado de todo lo que controla systemd:

Para ver todos los servicios disponibles:

Para mostrar los servicios activos solamente:

Para iniciar (activar) una o más unidades (una unidad puede ser un servicio o un socket):

Para detener (desactivar):

Para habilitar/deshabilitar un servicio:

Deja un comentario