El Proceso init en el System V
Esta sección es una breve descripción sobre las interioridades del proceso de Arranque. Básicamente cubre en detalle el proceso de arranque de la máquina usando el Sistem V, y las diferencias entre éste el proceso Init original de las antiguas versiones de Linux.
El proceso Init es un programa que el núcleo ejecuta cuando arranca el sistema. Se encarga de inicializar todos los procesos normales que se necesiten ejecutar en el momento de arrancar; incluyendo los terminales que le permiten acceder al sistema, los demonnios NFS, FTP, y cualquier proceso que quiera ejecutar cuando su máquina arranque.
El proceso Init del SysV (Sistema V) se está convirtiendo rápidamente en el estándard del mundo de Linux para manejar la puesta en marcha del software en el momento de arranque. Esto se debe a que es más facil su uso, y más potente y flexible, que el proceso Init del tradicional BSD.
El proceso Init del SysV también difiere del BSD en que los ficheros de configuración se localizan dentro de un subdirectorio de
/etc en lugar de estar directamente en
/etc. Este subdirectoio se llama
rc.d, y en él puede encontrar el fichero
rc.sysinit y los siguientes directorios:
init.d
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
El directorio
init.d contiene una colección de escripts. Básicamente, se necesita un escript por cada servicio que pueda necesitar inicializar en el momento de arranque o cuando entra en otro nivel de ejecución. Los servicios incluyen procesos como networking, nfs, sendmail, httpd, etc. Los servicios no incluyen procesos como el de inicialización de los puertos serie, que únicamente se ejecuta una vez y finaliza. Procesos como este deberían estar en
rc.local o en
rc.serial.
Si desea un
rc.local, debería localizarse en
/etc/rc.d. La mayoría de los sistemas incluyen uno aunque no haga mucho. Puede incluir un
rc.serial en
/etc/rc.d si necesita realizar algo específico con el puerto serie en el momento de arrancar.
Veamos como es la sucesión de eventos:
- El nucleo busca el proceso init en diferentes partes y ejecuta el primero que encuentre.
- El proceso init ejecuta /etc/rc.d/rc.sysinit
- rc.sysinit realiza unas cuantas cosas necesarias y luego ejecuta rc.serial (si existe).
- init ejecuta todos los escripts del nivel de ejecución por defecto.
- init ejecuta rc.local
El nivel de ejecución por defecto se decide en
/etc/inittab. Debe tener una linea al principo del fichero parecida a:
id:3:initdefault:
Desde este, se puede ver en la segunda columna que por defecto el nivel de ejecución será el 3, como debiera ser el caso en la mayoría de sistemas. Si lo desea cambiar, tiene que editar
/etc/inittab y modificar el 3. Tenga cuidado cuando manipule el fichero
inittab. Si lo echa a perder, puede arreglarlo si rearranca y hace:
LILO boot: linux single
Esto
debiera permitirle arrancar en la modalidad de monousuario
Ahora, ¿Como hacer para que se ejecuten correctamente todos los escripts?. Si teclea
ls -l en el directorio
rc3.d, debería ver algo como esto:
lrwxrwxrwx 1 root root 17 3:11 S10network -> ../init.d/network
lrwxrwxrwx 1 root root 16 3:11 S30syslog -> ../init.d/syslog
lrwxrwxrwx 1 root root 14 3:32 S40cron -> ../init.d/cron
lrwxrwxrwx 1 root root 14 3:11 S50inet -> ../init.d/inet
lrwxrwxrwx 1 root root 13 3:11 S60nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 15 3:11 S70nfsfs -> ../init.d/nfsfs
lrwxrwxrwx 1 root root 18 3:11 S90lpd -> ../init.d/lpd.init
lrwxrwxrwx 1 root root 11 3:11 S99local -> ../rc.local
Como puede observar, no hay ``ficheros
reales en el directorio. Todo lo que hay son enlaces a escripts del directorio init.d. Los enlaces tienen una ``S y un número al principio. La ``S
significa iniciar este escript particular y la ``K significaría pararlo. El número únicamente tiene el propósito de establecer el orden de ejecución. EL proceso Init arrancará todos los servicios en el orden en el que se encuentran. Puede duplicar los números, pero con esto sólo provocará mayor confusión. Necesita únicamente usar un número de dos dígitos, precedido de una ``S
o una ``K en mayúsculas para iniciar o parar el servicio que se necesite.
¿Como hace el proceso Init para arrancar y parar los servicios? Sencillo. Cada uno de los escripts se escribe para aceptar un argumento qué puede ser, ``start
o ``stop. De hecho, puede ejecutar a mano los escripts, con un comando como el siguiente:
/etc/rc.d/init.d/httpd.init stop
para parar el servidor httpd. El proceso Init únicamente lee el nombre y si tiene una ``K
, llama al escript con el argumento ``stop. Por el contrario si tiene una ``S
llama al escript con el argumento ``start. ¿Por qué existen todos estos niveles de ejecución.? Algunas personas necesitan una forma sencilla para configurar las máquinas con carácter multi-propósito. Podría tener por un lado, un nivel de ejecución de ``servidor
que tan sólo ejecutara httpd, sendmail, networking, etc. Y por otro, tener un nivel de ejecución de ``usuario ejecutando xdm, networking, etc.
Niveles de ejecución del proceso init
Generalmente, Linux Red Hat se ejecuta en el nivel 3
modo multiusuario completo. En Linux Red Hat se usan los siguientes niveles de ejecución:
Halt.
1 Modo de monousuario.
2 Modo Multiusuario, sin NFS.
3 Modo multiusuario completo.
6 Rearranque.
Si su máquina entra en un estado en el qué es imposible arrancar, como consecuencia de un fichero
/etc/inittab defectuoso, o no le permite registrarse por tener corrupto el fichero
/etc/passwd o simplemente por haber olvidado su contraseña, deberá arrancar con un Modo de usuario simple, tecleando en el prompt de arranque de LILO,
linux 1. Aparecerá un sistema muy simple, con un intérprete de comandos desde el que podrá arreglar las cosas.
Cerrando el sistema
Para cerrar Linux Red Hat Linux, envíe el siguiente comando
shutdown. Ud. puede leer la página man de shutdown para completar los detalles, los dos usos mas comunes son:
shutdown -h now
shutdown -r now
Ambos cierran el sistema limpiamente. Después de cerrar todos los procesos, el primero parará la máquina, y el segundo la reinicia.
Nunca ejecute los comandos
reboot o
halt directamente si quiere prevenir daños al sistema de ficheros.