HTMLWeb
manuales - recursos - gráficos - programación...

Home - Linux -  Redes en Linux -  1 -  2 - 3  - 4 - 5  - 6 - 7  - 8 - 9  - 10 - 11  - 12 - 13  - 14

Redes en Linux (IX)
por Narciso Cerro, de Piensa en Linux.


Arranque del Sistema Operativo.-

Otra tarea que de la que se hace cargo el administrador es arrancar y detener el sistema, controlando los servicios que se inician. Linux utiliza el proceso de arranque init de Sys V; init es el primer proceso que se ejecuta en el sistema, es el más importante, del que dependen el resto de procesos del sistema.

Inicio del sistema. El proceso Init.-

El núcleo ejecuta init al arrancar. Este programa, ahora como proceso, cargará los subprocesos necesarios para la puesta en marcha del sistema. Cuando init ha terminado de cargarse vacia el subdirectorio /tmp y lanza getty que se encarga de permitir hacer login en el sistema a los usuarios.

Los niveles de ejecución (runlevel) determinan los servicios que tendremos disponibles en cada uno de ellos. Es una forma de tener diferentes modos de trabajo, cada uno de ellos con características bien definidas, en función del tipo de tarea a que estén orientados.

Existen ocho niveles de ejecución, que están numerados del cero al seis, más otro denominado con la letra «S» (tiene un alias con la letra «s», que realmente es igual a el nº 1).
Los niveles de ejecución de ejecución que manejaremos y una descripción de para qué están definidos se puede ver en la siguiente tabla:

Nivel de ejecución Modo
0 Detener el sistema
1 Mono usuario, sin soporte de red
2 Multiusuario, sin soporte de red
3 Modo multiusuario completo
4 Sin uso. Recomendado para pruebas
5 Multiusuario completo en entorno gráfico
6 Reiniciar el sistema


Init necesita un fichero de configuración para saber exactamente lo que tiene que hacer. Este fichero es /etc/inittab y contiene información sobre el nivel a ejecutar por defecto, previsión sobre lo que hacer ante determinadas situaciones, describe qué procesos se inician en la carga y durante la operación normal.

Las entradas del fichero /etc/inittab tienen el siguiente formato:

id:niveles_ejecución:acción:proceso

• id: Una secuencia única de 1 a 4 caracteres que identifican la entrada de inittab
• niveles_ejecución: Lista de niveles de ejecución para los que se llevarán a cabo las acciones definidas a continuación en la línea.
• acción: La acción se llevará a cabo.
• proceso: El proceso a ejecutar.

Para que una línea sirva para varios niveles de ejecución, el campo niveles_ejecución tiene que incluirlos. Por ejemplo, 135 indica que el proceso se iniciará en los niveles 1, 3 y 5. Cuando se cambia de un nivel de ejecución a otro, los procesos en ejecución que no estén definidos en el nuevo nivel se matan.

Las acciones que podemos definir, más habitualmente, en el campo acción son:

initdefault: Especifica el nivel de ejecución por defecto al arrancar el sistema. El campo proceso se ignora.

Respawn: El proceso se reiniciará cuando termine.

once: El proceso se ejecutará una sola vez cuando se entre en el nivel de ejecución especificado.

wait: El proceso se iniciará una vez cuando se entre en el nivel de ejecución e init esperará a su terminación.

boot: El proceso se ejecutará durante el arranque del sistema. El campo niveles_ejecución se ignora.

bootwait: El proceso se ejecutará durante el arranque del sistema, mientras init espera su terminación. El campo niveles_ejección se ignora.

sysinit: El proceso se ejecutará durante el arranque del sistema, antes que cualquier entrada boot o bootwait. El campo niveles_ejecución se ignora.

powerwait: El proceso se ejecutará si init recibe una señal SIGPWR, que indica algún  problema con la alimentación eléctrica. Init esperará que el proceso termine.

powerfail: Como powerwait, excepto que init no espera a que termine el proceso.

powerokwait: El proceso se ejecutará si init recibe la señal SIGPWR, con la condición de que haya un fichero llamado /etc/powerstatus que contenga la palabra OK. Esto significa que se ha restablecido la alimentación eléctrica.

ctrlaltdel: Especifica qué proceso se ejecutará al pulsar la combinación de teclas [Ctrl+Alt+Supr]. Normalmente, reiniciar la máquina.

El fichero /etc/inittab de mi máquina es el siguiente:

#
# inittab Este fichero describe como arrancará el sistema el proceso INIT
# en cada nivel de ejecución.
#
# Autor: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#
# Nivel de ejecución por defecto. Los niveles que usa Esware Linux son:
# 0 - Detener. (NO ponga initdefault a 0 !)
# 1 - Mono Usuario
# 2 - Multiusuario, sin NFS (Es igual que 3, si no dispone de red.)
# 3 - Multiusuario, con soporte de red.
# 4 - Sin uso.
# 5 - X11, entorno gráfico.
# 6 - Reiniciar. (NO ponga initdefault a 6 !)
#
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Cosas a hacer en cada Run-Level
ud::once:/sbin/update
# Al pulsar [Ctrl+Alt+Supr]
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
# Cuando la SAI informe de una caída de tensión, dispone de varios minutos antes
# de que el sistema se apague. Se han programado 2 minutos.
# Esto solo funcionará, si tiene una SAI conectada y funcionando correctamente.
pf::powerfail:/sbin/shutdown -f -h +2 «Fallo Eléctrico; El sistema se apagará en 2 minutos»
# Si vuelve la alimentación eléctrica antes de que el sistema se apague, se cancelará.
pr:12345:powerokwait:/sbin/shutdown -c «Alimentación correcta; Sigan trabajando»
# Ejecuta « getty» en run-levels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
# Ejecuta» xdm» en run-level 5
x:5:respawn:/etc/X11/prefdm -nodaemon

Fichero /ETC/INITTAB.-

Uno de los scripts más importantes en el arranque del sistema es /etc/rc.d/rc.sysinit. Es el primer script que init encuentra y ejecuta. En él están definidas funciones como:

Inicio y activación del espacio de intercambio. (swap)

Configuración de la red.

Especificación de variables del sistema.

Comprobación y montaje de los sistemas de archivos.

Inicialización de puertos serie.

Carga los módulos del kernel.

Establecimiento de cuotas de usuarios.

Ajuste del reloj del sistema.

El último script en ejecutarse es /etc/rc.d/rc.local. En este fichero podremos poner inicializaciones especificas del sistema, aunque su propósito inicial es controlar los servicios de red.

Directorios diréctamente implicados.-

El directorio rc.d es de vital importancia para el arranque del sistema. Tiene una estructura bien definida ya que existe un directorio para cada nivel de ejecución, identificado con el mismo número que el nivel, y en cada uno de estos directorios se indican qué servicios se iniciarán o detendrán al entrar en ese nivel de ejecución.

El directorio init.d contiene los scripts que lanzarán o detendrán los servicios que tengamos disponibles en nuestro equipo. La normalmente es suficiente invocar al servicio por su nombre y pasarle uno de los siguientes argumentos: start, stop, status, restart o reload.

Los directorios numerados para cada runlevel contienen enlaces simbólicos que apuntan a los scripts del directorio init.d. Veamos un muestra, esto es parte del directorio rc3.d:

lrwxrwxrwx 1 root root 17 jun 20 17:47 K92anacron ->../init.d/anacron
lrwxrwxrwx 1 root root 18 jun 20 17:47 K92ipchains ->../init.d/ipchains
lrwxrwxrwx 1 root root 18 jun 20 17:47 K95reconfig ->../init.d/reconfig
lrwxrwxrwx 1 root root 14 jun 20 17:47 K96irda ->../init.d/irda
lrwxrwxrwx 1 root root 16 jun 20 17:47 K96pcmcia ->../init.d/pcmcia
lrwxrwxrwx 1 root root 15 abr 18 18:42 K98mysql ->../init.d/mysql
lrwxrwxrwx 1 root root 23 abr 26 13:41 K99webmin_1->/etc/rc.d/init.d/webmin
lrwxrwxrwx 1 root root 17 jun 20 17:47 S10network ->../init.d/network
lrwxrwxrwx 1 root root 16 jun 20 17:47 S20random ->../init.d/random
lrwxrwxrwx 1 root root 16 jun 20 17:47 S30syslog ->../init.d/syslog
lrwxrwxrwx 1 root root 13 jun 20 17:47 S40atd ->../init.d/atd
lrwxrwxrwx 1 root root 15 jun 20 17:47 S40crond ->../init.d/crond
lrwxrwxrwx 1 root root 14 jun 20 17:47 S50inet ->../init.d/in et
lrwxrwxrwx 1 root root 13 jun 20 17:47 S60lpd ->../init.d/lpd

Observemos con atención como se llaman los enlaces, cada uno de ellos tiene el nombre del script al que están asociados. Los que empiezan con una «S» («S» de start) define si el servicio se inicia, y otros con una «K»define si el servicio se detiene («K» de kill). El número que lucen es simplemente una facilidad para ordenar y que no tiene mayor relevancia.

Lo realmente ventajoso de este sistema es que, en primer lugar, no se repiten los scripts en cada directorio de runlevel, si no que permanecen en un único lugar bien definido, el directorio init.d, y en segundo lugar, la modificación a realizar si lanzamos un servicio o no, en un runlevel determinado, es tan sencilla como cambiar el nombre del enlace a el servicio en cuestión.

Si queremos que se inicie bastará con asegurarse de que su nombre empieza por una «S» y en caso contrario, osea que en ese nivel de ejecución no se ofrezca el servicio, pon-dremos el nombre empezando por una «K». Así de sencillo.

Vuelva a mirar el fichero /etc/inittab de más arriba. Hay una línea para cada nivel de ejecución que tiene como proceso «rc» con los números de los runlevels como parámetro. El script rc se encarga de reinicializar el sistema en un nivel de ejecución distinto.

Otra ventaja es el control que tenemos sobre los servicios del sistema. Independiente del estado en el que estén, los podemos lanzar, detener, reiniciar, etc. sobre la marcha, sin necesidad de reiniciar la máquina, ni nada parecido.

El comando Init.-

Podemos ejecutar init desde línea de comandos con alguno de los siguientes argumentos:

0, 1, 2, 3, 4, 5, 6: Para cambiar al nivel de ejecución especificado.

Q, q: Si queremos que init relea el fichero /etc/inittab.

S, s: Entra en modo monousuario.

U, u: Reejecuta init respetando el estado actual. No se relee el fichero /etc/inittab.

Creación de discos de arranque del sistema: CAT, DD, MKBOOTDISK.-

Para crear discos de arranque del sistema, necesitamos tener las imágenes de los discos para poderlos volcar a los diskettes.

Una imagen de disco es una copia binaria exacta del soporte físico del cual se ha hecho la copia.

Cat

Para crear una imagen con el comando cat hay que redirecionar la salida estandar hacia el dispositivo en el cual vamos a volcar la imagen.

[Crispin@Globus /Crispin]$ cat imagendisco >/dev/fd0

dd

dd copia un fichero de la entrada estándar a la salida estándar, por omisión con  un tamaño de bloque seleccionable por el usuario.

[Crispin@Globus /Crispin]$ dd if=/ruta/imagendisco of=/dev/fd0

mkbootdisk

Crea un diskette de arranque apropiado al sistema que tenemos instalado.

[Crispin@Globus /Crispin]$ mkbootdisk -device /dev/fd0 <kernel>

En <kernel> hay que poner lo que nos devuleve el comando unamae -r.

 

anterior
siguiente

Home - Linux -  Redes en Linux -  1 -  2 - 3  - 4 - 5  - 6 - 7  - 8 - 9  - 10 - 11  - 12 - 13  - 14