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.