Siguiente Anterior Contenido

6. Init

Sólo hablaré del init estilo "System V" que es el que usan mayoritariamente los sistemas Linux. Hay alternativas. En realidad, puedes poner cualquier programa que quieras en /sbin/init, y el núcleo lo ejecutará cuando haya terminado de cargar.

La tarea de init es poner todo a funcionar como debe hacerlo. Comprueba que los sistemas de archivos están bien y los monta. Arranca "demonios" para registrar mensajes del sistema, gestionar las redes, servir páginas web, escuchar a tu ratón y todo eso. También arranca los procesos getty que ponen el indicador de login en tus terminales virtuales.

Hay una historia muy complicada acerca de conmutar "niveles de ejecución", pero me la voy a saltar en gran parte, y hablaré simplemente del arranque del sistema.

Init lee el archivo /etc/inittab, que le dice qué hacer. Típicamente lo primero que se le dice hacer es ejecutar un guión de inicialización. El programa que ejecuta (o interpreta) este guión es bash, el mismo programa que te presenta el cursor de órdenes. En los sistemas Debian, el guión de inicialización es /etc/init.d/rcS, en Red Hat, /etc/rc.d/rc.sysinit. Aquí es donde se comprueban y montan los sistemas de ficheros, se ajusta el reloj, se habilita el intercambio de espacios, se ajusta el nombre del host, etc.

Después se llama a otro guión para llevarnos al nivel de ejecución por defecto. Esto sólo siginifica arrancar un conjunto de subsistemas. Hay un grupo de directorios /etc/rc.d/rc0.d, /etc/rc.d/rc1.d, ..., /etc/rc.d/rc6.d en Red Hat, o /etc/rc0.d, /etc/rc1.d, ..., /etc/rc6.d en Debian, que se corresponden con los niveles de ejecución. Si vamos al nivel de ejecución 3 de un sistema Debian, entonces el guión ejecuta todos los guiones que haya en /etc/rc3.d que empiecen por 'S' (de start). Estos guiones son sólo enlaces a otros guiones que están en otro directorio normalmente llamado init.d.

De modo que nuestro a guión de nivel de ejecución lo llama init, y está buscando guiones que comiencen por 'S' en un directorio. Puede encontrar primero S10syslog. Los números le dicen al guión de nivel de ejecución en qué orden ejecutarlos. Así que en este caso S10syslog se ejecuta el primero, ya que no hay guiones que comiencen con S00 ... S09. Pero S10syslog es en realidad un enlace a /etc/init.d/syslog, el cual es un guión para arrancar y parar el logger del sistema. El guión de nivel de ejecución sabe que debe ejecutar el guión syslog con un parámetro "start" porque el enlace comienza con 'S'. Hay enlaces que se corresponded con éste que comienzan con 'K' (por kill), que especifican qué apagar y en qué orden cuando salimos del nivel de ejecición.

Para cambiar lo que los sistemas arrancan por defecto, debes ajustar estos enlaces en el directorio rcN.d, donde N es el nivel de ejecución por defecto ajustado en tu inittab.

La última cosa importante que hace init es arrancar varios getty. Estos se "regeneran", lo que significa que si se paran, init los rearranca. La mayoría de las distribuciones viene con seis terminales virtuales. Puedes querer menos para ahorrar memoria, o más para poder tener montones de cosas ejecutándose y echarles un vistazo rápido cuando lo necesitas. También puede que quieras ejecutar un getty para un terminal de texto o un marcador de modem. En este caso tendrás que editar el archivo inittab.

6.1 Configuración

/etc/inittab es el archivo de configuración de más alto nivel para init.

Los directorioes rcN.d, donde N = 0, 1, ..., 6 determinan qué susbistemas se arrancan.

En algún lugar de uno de los scripts ivocados por init, aparecerá el comando mount -a ESto significa montar todos los sistemas de archivos que se supone que deben montarse. El archivo /etc/fstab define lo que se supone que debe montarse. Si quieres cambiar lo que se monta cuando arrancas el sistema, este es el archivo que debes editar. Hay una página de man para fstab.

6.2 Ejercicios

Encuentra el directorio rcN.d del nivel de ejecución por defecto de tu sistema y haz un ls -l para ver a qué vinculan los archivos.

Cambia el número de gettys que se ejecutan en tu sistema.

Quita cualquier subsistema que no necesites para tu nivel de ejecución por defecto.

Mira cuánto puedes reducir para arrancar.

Prepara un diskette con lilo, un núcleo y un programa "hola mundo" vinculado estáticamente que se llame /sbin/init y mira cómo arranca y dice hola.

Mira atentamente mientras tu sistema arranca y toma notas sobre lo que te dice que está sucediendo. O imprime una sección del registro de sistema /var/log/messages desde el momento del arranque. Entonces, comenzando desde inittab, recorre todos los scripts y fíjate en qué código hace qué cosa. También puedes poner mensajes de arranque extra, como

        echo "Hola, soy rc.sysinit"

Este es además un buen ejercicio para aprender a escribir scripts de Bash, algunos de ellos son bastante complicados. Ten a mano una buen manual de Bash.

6.3 Más información


Siguiente Anterior Contenido