Diferencia entre revisiones de «Descripción del proceso init»
Contenido eliminado Contenido añadido
Sin resumen de edición |
m Miscelánea ortográfica |
||
Línea 1:
Titulo: INIT e
Fecha: Mayo 26 2007.
Categoria: Software Libre/Linux
El presente documento ilustra y explica el funcionamiento de init, el proceso padre al cual el kernel da paso
Línea 10:
El proceso de arranque del nucleo Linux tiene
Desde su primera version y al ser un OS tipo Unix cuando el kernel 'termina' su ejecucion (realmente no lo hace, solo cede el control a un proceso padre [init] aunque continuara ejecutandose, planificando procesos, etc) hace una busqueda de un programa llamado init, mas adelante veremos que es y para que sirve init pero para ir dando un seguimiento correcto mostremos a continuacion lo que ejecuta el kernel para encontrar el ejecutable init.
Línea 52:
</pre>
Estos segmentos de
Línea 78:
</pre>
Claramente se puede observar desde donde provienen cada uno de los procesos y los procesos ejecutados a traves de otros procesos por ejemplo en este caso la siguiente
|-bash---startx---xinit-+-X
Línea 87:
Init crea los procesos leyendo un fichero de configuracion que se puede decir que es global ya que siempre se encuentra en la misma ruta, el fichero /etc/inittab es leido e interpretado por init para la inicializacion de los procesos en los denominados run-leves o niveles de ejecucion. En inittab entre otras cosas se definen varias entradas que causan que init expanda gettys
getty, agetty comunmente usado en linux para abrir un puerto tty pidiendo login e invoca al ejecutable /bin/login. en cada
Runlevels o Niveles de Ejecucion.
Línea 94:
Un runlevel es una configuracion del sistema que permite solo a un grupo de procesos existir. Los procesos que ha sido expandidos por init para cada runlevel son definidos en /etc/inittab. Init puede estar en uno de 8 runlevels: 0 al 6 y S, s. El runlevel puede ser cambiado corriendo como usuario privilegiado y corriendo el comando telinit, el cual envia senales apropiadas a init, indicandole a que runlevele cambiar.
Los runlevels 0, 1 y 6
En algunas
id:runlevels:accion:proceso
Línea 107:
En resumen el id
Conociendo ya
id:3:initdefault:
Línea 140:
id:3:initdefault:
Como se mencionaba anteriormente la entrada initdefault establece el runlevel por defecto que init va a leer posteriormente en el inicio del sistema o con el comando telinit RUNLEVEL donde RUNLEVEL es un
si::sysinit:/etc/rc.d/init.d/rc sysinit
Esta
Entre otras cosas estas
for i in $( ls -v ${rc_base}/rc${runlevel}.d/S* 2> /dev/null)
Línea 203:
Donde bootwait define que sera ejecutado al arranque del sistema, mientras que init espera a que termine, el campo de los runlevels sera ignorado.
En la parte final de toda esta ejecucion init lee las entradas de aggety o getty y es cuando se nos presenta el prompt de login que todos conocemos (en
========================================
Línea 214:
Con las bases de todo lo mencionado en el tema anterior veamos como, porque y cuando seran ejecutados scripts de arranque mas comunmente llamados shells init o scripts de runlevels.
Para comenzar hay que mencionar el directorio que contiene CASI TODOS los scripts de inicio los cuales seran iniciados en el runlevel al que pertenezcan es el dir /etc/init.d, comunmente usado en distribuciones como Debian no siendo
Se mencionaba CASI TODOS pues hay scripts que son 'fijos', esos shells son los que se encargan de montar el sistema de ficheros, chequearlo, iniciar Udev, Limpiar el FS, establecer la consola de linux, activar la swap, entre otras, por ejemplo en una distribucion GNU/Linux con estilo de arranque System V al estilo BSD el directorio /etc/init.d no existe propiamente en ese lugar sino que se encuentra en /etc/rc.d/init por lo que los scripts fijos de arranque se encuentran normalmente en el directorio /etc/rc.d/init.d/rcsysinit y los leidos por init antes que
Volviendo a los scripts de runlevel NORMALES estos se alojan en /etc/rc.d/init.d o en /etc/init.d habiendo enlaces simbolicos desde cada directorio que es identificado por el
Quedando
En los directorios /etc/ o /etc/rc.d
Línea 232:
Como se
/etc/rc.d/init.d/bind
Línea 249:
../init.d/bind
La norma o sintaxis es muy facil de comprender, los enlaces que comienzen con S (de START) seran iniciados dependiendo del
Ejemplo de Enlazar un script a un runlevel para que sea detenido.
Como es logico, los servicios que son iniciados
cd /etc/rc.d/rc6.d
Línea 260:
ln -sv ../init.d/bind K12bind
Aqui la norma es la misma aunque con una diferencia los que comienzen con K (KILL) seran detenidos de igual manera que lo antes explicado ( la prioridad la tiene el
Línea 304:
/etc/rc.d/init.d/bind stop
Por el contrario si comenzara con S seria
/etc/rc.d/init.d/bind start
Esto da la medida de como funcionan al nivel mas
La
Los parametros admitidos en este script son start, stop, restart, reload, ( el parametro start es obligatorio al igual que stop si deseamos tener un script que sea un autentico shell de runlevel, el parametro start es enviado al script al arranque del sistema,
Referencias Importantes:
|