7.3. ¿Cómo funcionan los guiones de arranque?

Linux utiliza como sistema de inicio SysVinit, que se basa en el concepto de niveles de ejecución. Este sistema de inicio puede variar ampliamente de un sistema a otro, por lo tanto no se debe asumir que porque las cosas funcionen en una distribución en concreeto tengan que funcionar en LFS también. LFS tiene su propia manera de hacer las cosas, la cual suele respetar los estándares aceptados.

SysVinit (al que llamaremos “init” a partir de este momento) se basa en un esquema de niveles de ejecución. Hay 7 (numerados del 0 al 6) niveles de ejecución (en realidad existen más, pero son para casos especiales y es raro utilizarlos. Mira init(8) para más detalles) y cada uno de ellos indica lo que debe hacer el sistema durante el arranque. El nivel de ejecución por omisión es el 3. He aquí una breve descripción de los distintos niveles de ejecución como suelen implementarse:

0: parada del sistema
1: modo monousuario
2: modo multiusuario sin red
3: modo multiusuario con red
4: reservado para personalizar, si no, hace lo mismo que el 3
5: Igual que el 4. Normalmente se utiliza para iniciar el entorno
    gráfico (mediante  xdm de X o kdm de KDE)
6: reinicio del sistema

Para cambiar el nivel de ejecución se utiliza el comando init [nivel de ejecución] donde [nivel de ejecución] representa el nivel de ejecución que se desea arrancar. Por ejemplo, para reiniciar el sistema se utilizaría el comando init 6. El comando reboot no es más que un alias de dicho comando, al igual que el comando halt lo es de init 0.

Debajo de /etc/rc.d existe una serie de directorios rc?.d (donde ? representa el número del nivel de ejecución), más el directorio rcsysinit.d, que contienen un conjunto de enlaces simbólicos. Los nombres de estos enlaces simbólicos empiezan con K o con S seguidos de 2 cifras. Los enlaces que comienzan por una K indican la parada (kill) de un servicio, mientras que la S indica su inicio (start). Las dos cifras determinan el orden de ejecución, desde 00 hasta 99; cuanto menor sea el número, antes se ejecutará. Cuando init cambia a otro nivel de ejecución, los servicios apropiados son iniciados o parados, dependiendo del nivel de ejecución elegido.

Los guiones reales se enuentran en /etc/rc.d/init.d. Ellos son los que hacen el trabajo y todos los enlaces simbólicos apuntan a ellos. Los enlaces de parada e inicio apuntan al mismo guión en /etc/rc.d/init.d. Esto se debe a que los guiones pueden invocarse con parámetros diferentes como start, stop, restart, reload y status. Cuando se encuentra un enlace K, se ejecuta el guión apropiado con el argumento stop. Cuando se encuentra un enlace S, se ejecuta el guión apropiado con el argumento start.

Hay una excepción a esta explicación. Los enlaces que comienzan por S en los directorios rc0.d y rc6.d no inician nada. Estos guiones se invocan siempre con el parámetro stop para parar algo. La lógica tras esto es que cuando el usuario va a parar o reiniciar el sistema no es necesario iniciar nada. El sistema sólo necesita ser detenido.

He aquí una descripción de lo que hace cada parámetro:

start

Inicia el servicio.

stop

Para el servicio.

restart

El servicio se para y se vuelve a iniciar.

reload

Se actualiza la configuración del servicio. Este parámetro se utiliza tras la modificación del fichero de configuración cuando no es necesario reiniciar el servicio.

status

Dice si el servicio se está ejecutando y con qué identificador de proceso (PID).

Eres libre de modificar la forma en que funciona el proceso de arranque (después de todo es tu propio sistema LFS). Los ficheros aquí mostrados son un ejemplo de cómo puede hacerse.