El proceso init.

El proceso de arranque init de Sys V es el primer proceso que se ejecuta en el sistema, es el más importante, del que dependen el resto de todos los demás
procesos. En el arranque de GNULinux, el núcleo ejecuta init. Este programa, ahora como proceso, cargará los subprocesos necesarios para la puesta en marcha
del sistema. Cuando init

haya terminado de cargarse vaciará el subdirectorio /tmp y lanzará a getty que es el encargado de permitir a los usuarios hacer login en el sistema.

Los niveles de ejecución (también generalmente conocidos por su nombre en inglés, runlevel) determinan los servicios que tendremos disponibles en cada uno
de ellos. Es una forma de tener diferentes modos de trabajo,

cada uno de ellos con distintas características bien definidas, en función del tipo de tarea a que estén orientados.

Existen ocho niveles de ejecución: los nombres de los siete primeros son los números que van del 0 al 6, más un octavo cuyo nombre es la letra S (tiene
un alias con la letra s para evitar problemas con la sensibilidad al caso), este runlevel, en realidad, es igual a el nº 1.

Los niveles de ejecución son tal como siguen:

0: (Detener el sistema).

1: (modo en Mono usuario, sin soporte de red).

2: (modo en Multiusuario, sin soporte de red).

3: (Modo multiusuario completo).

4: (Sin uso. Recomendado para pruebas).

5: (Multiusuario completo en entorno gráfico).

6: (Reinicio del sistema).

Los niveles 0, 1 y 6 son comunes en todas las distribuciones, el resto puede cambiar dependiendo de cada una de las que estemos usando.

Init necesita un fichero de configuración para saber exactamente lo que tiene que hacer. Este fichero es /etc/inittab y contiene información sobre el runlevel
a ejecutar por defecto, previsión sobre lo que hacer ante determinadas situaciones, así como una descripción de qué procesos se han de iniciar en la carga
y durante la operación normal del sistema operativo.

Las entradas del fichero /etc/inittab tienen el siguiente formato:

id:niveles_ejecución:acción:proceso

id: Es la secuencia única de 1 a 4 caracteres que identifican la entrada de inittab.

niveles_ejecución: Lista de niveles de ejecución para los que se llevarán a cabo las acciones definidas a continuación en la misma línea.

acción: La acción que será llevada a cabo.

proceso: El proceso a ejecutar.

Para que una línea sirva para varios niveles de ejecución, el campo niveles_ejecución tiene que incluirlos. Por ejemplo, 135 indica que el proceso se iniciará
en los niveles 1, 3 y 5. Cuando se cambia de un nivel de ejecución a otro, los procesos en ejecución que no estén definidos en el nuevo nivel se matan.
Para ver un ejemplo de esta sintaxis edita el fichero initab con nano o vi tal cual vimos como se hacía en capítulos pasados y examina su contenido cuidadosamente.
Mientras no tengas claro el sistema de runlevel y necesites modificar algo, mi consejo es que no lo toques, simplemente examínalo por curiosidad y para
tu información; este proceso casi nunca será necesario hacerlo.

Las acciones que podemos definir, más habitualmente, en el campo acción son:

initdefault: Especifica el nivel de ejecución por defecto al arrancar el sistema. El campo proceso se ignora.

Respawn: El proceso se reiniciará cuando termine.

once: El proceso se ejecutará una sola vez cuando se entre en el nivel de ejecución especificado.

wait: El proceso se iniciará una vez cuando se entre en el nivel de ejecución e init esperará a su terminación.

boot: El proceso se ejecutará durante el arranque del sistema. El campo niveles_ejecución se ignora.

bootwait: El proceso se ejecutará durante el arranque del sistema, mientras init espera su terminación. El campo niveles_ejecución se ignora.

sysinit: El proceso se ejecutará durante el arranque del sistema, antes que cualquier entrada boot o bootwait. El campo niveles_ejecución se ignora.

powerwait: El proceso se ejecutará si init recibe una señal SIGPWR, que indica algún problema con la alimentación eléctrica. Init esperará que el proceso

termine.

powerfail: Como powerwait, excepto que init no espera a que termine el proceso.

powerokwait: El proceso se ejecutará si init recibe la señal SIGPWR, con la condición de que haya un fichero llamado /etc/powerstatus que contenga la palabra

OK. Esto significará que se ha restablecido la alimentación eléctrica.

ctrlaltdel: Especifica qué proceso se ejecutará al pulsar la combinación de teclas Control+Alt+Suprimir. que normalmente será reiniciar la máquina.

Hay un directorio para cada nivel de ejecución. En cada uno de los directorios figuran las aplicaciones que se inician o se paran con ese nivel de ejecución.
En realidad no están las aplicaciones como tales, sino que tenemos allí enlaces simbólicos hacia ellas. Por ejemplo, para el nivel de ejecución 2, las
aplicaciones están contenidas en el directorio: /etc/rc2.d, y así para todos los demás niveles. Si queremos, por tanto, que una aplicación se inicie al
arrancar en un nivel determinado, hay que crear un enlace simbólico en el directorio correspondiente al nivel de ejecución deseado que apunte al script
encargado de arrancar la aplicación que estará en /etc/init.d que, como supongo acabaréis de recordar, es el directorio donde se situaban los scripts lanzadores
de los daemons o demonios.

Si Observamos atentamente el nombre de los enlaces simbólicos de cada uno de los directorios de nivel de ejecución, Podremos advertir que cada uno de ellos
tendrá el nombre del script al que está asociado. Los que empiecen con una S (S

de start) están indicando que el servicio se iniciará, y los que comiencen con una K (K de kill), están indicando que el servicio se detendrá. El número
que suele aparecer es simplemente una facilidad para poder ordenarlos y que no tiene mayor relevancia.

Lo bueno de este sistema es que, en primer lugar, no se han de repetir los scripts en cada directorio de runlevel, si no que permanecerán en un único lugar
bien definido, el directorio init.d, y en segundo lugar, la modificación a realizar si lanzamos un servicio o no, en un runlevel determinado, es tan sencilla
como cambiar el nombre del enlace al servicio en cuestión. Si queremos que se inicie, por tanto, bastará con asegurarse de que su nombre comience por una
S y en caso contrario, osea que en ese nivel de ejecución no se ofrezca el servicio, pondremos el nombre empezando por una K. Asimismo, otra ventaja resultante
de este método de funcionamiento es el control que tenemos sobre los servicios del sistema, que es independiente del estado en el que estén. Podremos lanzarlos,
detenerlos, reiniciarlos, etc. sobre la marcha, sin necesidad de reiniciar la máquina.

Veamos un ejemplo: si deseásemos lanzar la línea braille en el arranque, imaginando que en nuestro ejemplo El arranque por omisión estuviera en el nivel
2, y lanzar al demonio BRLTTY que controla las líneas braille en el sistema:

Primero decidiremos qué nivel de ejecución queremos utilizar para ello. Si fuera el nivel 2 habría que crear el enlace simbólico en rc2.d el enlace podría
ser algo parecido a lo siguiente: sXbrltty donde la X deberemos substituirla por el número de órden que queramos.

Desde el directorio /etc/rc2.d la orden sería: ln -s ../init.d/brltty sXbrltty

Uno de los scripts más importantes en el arranque del sistema es /etc/rc.d/rc.sysinit. y es el primer script que init ejecuta. En él están definidas funciones
importantes como pueden ser: el inicio y activación del espacio de intercambio. (swap), la configuración de la red, la especificación de las variables
del sistema, la comprobación y montaje de los sistemas de archivos, la inicialización de puertos serie, la carga de los módulos del kernel, el establecimiento
de las cuotas para cada usuario, el ajuste del reloj del sistema, etc.

El último script en ejecutarse es /etc/rc.d/rc.local. En este fichero se podrán poner inicializaciones especificas del sistema, aunque su propósito inicial
es controlar los servicios de red.

init como orden:

Además de todo lo que hemos visto con respecto al proceso init, también podremos ejecutarlo como una orden desde línea de comandos con alguna de las siguientes
opciones:

0, 1, 2, 3, 4, 5, 6: Para cambiar al nivel de ejecución especificado tal cual lo explicamos un poco más arriba.

q: Si queremos que init relea el fichero /etc/inittab.

s: Entra en modo monousuario.

u: Reejecuta init respetando el estado actual. No se relee el fichero /etc/inittab.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.