DPD Niveles de Ejecucion

De Gleducar, http://www.gleducar.org.ar

Yes check.svg Esta página fue revisada y cumple los estándares de Gleduwiki.

Contenido

Comprendiendo los Niveles de ejecución

A diferencia de la mayoría de los sistemas No-Unix que solo tienen dos modos de funcionalidad (encendido y apagado), los sistemas tipo Unix, incluyendo a GNU/Linux, tienen diferentes niveles de ejecución como el nivel "Mantenimiento" o el nivel "Multiusuario", etc..

Los niveles de ejecución están numerados desde 0 hasta 6 y varían de una distribución de GNU/Linux a la otra. La descripción para cada nivel de ejecución está a menudo comentada en /etc/inittab.

Ejemplos de niveles de ejecución en GNU/Linux:

Nivel 0 Detiene de forma de segura el sistema operativo e intenta apagar el equipo.
Nivel 1 En el modo "usuario único" (single user mode), una sola terminal está habilitada para el (úni) superusuario, el resto de los usuarios están deslogueados.
Nivel 2 Es un modo multiusuario, pero no se inician los servicios de red como NFS, servidor de mail o servidor web.
Nivel 3 Es el modo multiusuario completo, todos los servicios de red están habilitados.
Nivel 4 No está definido y generalmente no se usa.
Nivel 5 Es como el nivel 3, modo multiusuario completo, pero agrega el Gestor de Ventanas (X System)
Nivel 6 Reinicia la máquina de forma segura.

Los niveles 0, 1 y 6 cumplen la misma función en todos los sabores GNU/Linux

Controles de niveles de ejecución INIT

Ambos init y telinit son usados para cambiar de un nivel de ejecución a otro. Recuerda que init es el primer programa lanzado luego de que el kernel a accedido al dispositivo maestro.

En el tiempo de carga se le indica a init cual es el nivel de ejecución que debe alcanzar, esto se define en /etc/inittab en la línea:

id:5:initdefault:

Cuando el sistema se inicia es posible cambiar el nivel de ejecución invocando init (o telinit que es un enlace simbólico apuntando al primero).

Por ejemplo, para cambiar al nivel de ejecución 4 podemos usar alguno de los siguientes comandos:

init 4

o

telinit 4

El PID para init es siempre '1'. Es posible averiguar que nivel de ejecución esta corriendo el sistema con el comando runlevel.

runlevel
N 5

El primer número es el nivel de ejecución previo (o N si no es aplicable) y el segundo número es es el nivel de ejecución actual.

Servicios y scripts de control en tiempo de ejecución

Cada nivel de ejecución esta compuesto por una serie de servicios que pueden ser iniciados o detenidos. Los servicios son controlados por los scripts de control del nivel de ejecución que encontramos dentro de /etc/rc.d/init.d o /etc/init.d (varia según la distribución, el primero para las distribuciones basadas en Red Hat y el segundo para las basadas en Debian). Cada rc-script controla, usando un argumento, el demonio asociado con el servicio.

Ejemplo: reiniciando el servidor Apache:

/etc/rc.d/init.d/httpd restart

o

/etc/init.d/httpd restart

Argumentos contemplados

restart reinicia el servicio
stop detiene el demonio asociado al servicio
inicio inicia el servicio
status retorna el estado del servicio (corriendo o detenido)

Servicios típicos dentro de /etc/rc.d/init.d/

ls /etc/rc.d/init.d/
anacron   cups       identd    kadmin     krb5kdc    mcserv    nscd    random      smb      xfs
apmd      dhcpd      innd      kdcrotate  kudzu      named     ntpd    rawdevices  snmpd    xinetd
arpwatch  functions  ipchains  keytable   ldap       netfs     pcmcia  rhnsd       squid 	
atd       gpm        iptables  killall    linuxconf  network   portmp  rwhod       sshd 	
autofs    halt       irda      kprop      lpd        nfs       pgsql   sendmail    syslog 	
crond     httpd      isdn      krb524     marsrv     nfslock   pppoe   single      tux

Cuando un servicio es iniciado se ejecutará hasta que un nueveo nivel de ejecución es iniciado.

Seleccionando servicios por nivel de ejecución

Veamos que sucede cuando cambiamos de un nivel de ejecución a otro.

Digamos que querés pasar al nivel de ejecución 2, entonces escribirías:

/sbin/init 2

Esto fuerza a init a leer el archivo de configuración /etc/inittab. Nosotros vamos a mirar el archivo en detalle en la siguiente sección. Por ahora nos limitaremos a observar una sola línea dentro de /etc/inittab que iniciará todos los servicios de ese nivel:

L2:2:wait:/etc/rc.d/rc 2

El comando /etc/rc.d/rc 2 iniciará en /etc/rc.d/rc2.d se iniciara con una S y detendrá los servicios conla letra K. La siguiente lista de ejemplo muestra que el demonio httpd será detenido mientras el demonio syslogd esté en ejecución:

ls /etc/rc.d/rc2.d/ -l | egrep "httpd|syslog"
lrwxrwxrwx  1 root root 15 Mar 23 21:01 /etc/rc.d/rc2.d/K15httpd -> ../init.d/httpd
lrwxrwxrwx  1 root root 16 Mar 20 20:03 /etc/rc.d/rc2.d/S12syslog -> ../init.d/syslog

Se puede observar que los los scripts son enlaces simbólicos a los rc-scripts en /etc/rc.d/init.d.

Por lo tanto, si no querés que un proceso se ejecute en un determinado nivel de ejecución podés eleminar su enlace simbólico correspondiente en /etc/rc.d/rN.d.

Editores en tiempo de ejecución

Un editor de tiempo real manejará automáticamente los enlaces simbólicos permitiendo al administrador del sistema cambiar el estado de un servicio como lo necesite. Una vez más, las distintas distribuciones ofrecen diferentes herramientas para estos fines.

Lo bueno de inittab

Como prometimos, a continuación echaremos un vistazo más de cerca a /etc/inttab.

El archivo tiene la siguiente estructura:

id : runlevel : action : command

El archivo /etc/inittab

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
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# Run gettys in standard runlevels
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

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm –nodaemon

El campo id puede ser cualquiera. Si un nivel de ejecución es especificado entonces el comando y la acción requerida se desarrollara solamente en el nivel de ejecuciòn especifico. Si ningún número es especificado entonces la linea sera ejecutada en cualquier nivel de ejecución.

Características reconocidas en el archivo /etc/inittab:

El nivel de ejecución por defecto
está establecido al comienzo del archivo con el id y con la acción initdefault. Nótese que no se dado ningún comando. Esta linea simplemente le dice a init cual es el nivel de ejecución default.
Primer programa llamado por init
/etc/rc.d/rc.sysinit. Este script establece el sistema por defecto asi como la variable PATH, determina si la red esta permitida, el nombre del host, etc ...
Servicios de nivel de ejecución default
Si el nivel de ejecución default es 3, entonces solamente la linea "l3" va a ser ejecutada. La acción es "wait", ningún otro programa es lanzado hasta que todos los servicios en el nivel de ejecución tres esten corriendo.
Las terminales getty
Las lineas con id de 1 a 6, lanzan la terminal virtual. Aqui es donde usted puede alterar el número de terminales virtuales.
Nivel de ejecución 5
La linea final de inittab lanza el manejador de Xwindow sí el nivel de ejecución 5 es rechazado.
Comentarios
1. Puede poner un modem para que escuche conexiones en inittab. Si su modem esta enlazado a /dev/ttyS1 entonces la siguiente linea va a permitir conexión de datos (no fax) despues de dos tonos de llamada:
S1:12345:respawn:/sbin/mgetty -D -x 2 /dev/ttyS1
2. Cuando hace cambios en /etc/inittab necesita forzar a init para que vuelva a leer esta configuración del archivo. Esto es más fácil hacerlo usando:
/sbin/init q

LILO y GRUB

Durante el arranque, el cargador necesita saber dónde está el kernel (generalmente en /boot/) y cual dispositivo es el root-device.

BOOTLOADER  ---->  KERNEL ---->    /   ----> /sbin/init

Alternativamente, un cargador de arranque puede cargar un RAM disk en la memoria conteniendo scripts y módulos del kernel necesarios para acceder al root device. Esto puede ser el caso del root device es manejado por un módulo no residente (también llamado dinámico).

BOOTLOADER  -----> INITRD ---->  KERNEL ---->    /   ----> /sbin/init

Common dynamic modules

ext3 Tipo de sistema de archivos extendido y con journaling
lvm Adminstrador de volumenes lógicos
raidx raid por software con soporte nivel x
scsi Soporte SCSI

Instalando LILO

El cargador de arranque LILO es instalado por /sbin/lilo que lee las opciones configuradas del archivo /etc/lilo.conf

LILO no lee sistemas de archivos, solo agregados (MBR) en discos físicos. Por lo tanto el mapeador lee información del archivo /etc/lilo.conf (por ejemplo, cual cargador de segunda etapa usar, cual kernel o RAM disk inicial) y traduce esta información usando un sistema de mapeo propio de LILO al arranque.

Las opciones principales en /etc/lilo.conf son:

boot* Dónde debe ser instalado LILO (/dev/hda es el MBR)
install Dónde instalar la segunda etapa (boot.b por defecto)
prompt Da al usuario la posibilidad de elegir el SO a arrancar
default Nombre de la imagen que arrancará por defecto
timeout Usada con prompt, causa una espera de LILO (la unidad es 1/10 de segundo)
image* Ruta al kernel a arrancar (se puede usar other para cargar una cadena)
label* Nombre de la imagen. Es la etiqueta que aparece en la lista de arranque
root* El nombre del dispositivo donde está el sistema de archivos /
read-only* Monta el sistema de archivos principal en modo solo lectura para que fsck trabaje correctamente
append Le da parámetros al kernel de módulos compilados estáticamente
linear/lba3 Estas opciones son excluyentes entre si. Ambas le dicen a LILO si leer el disco usando: direccionamiento lineal de bloques (tipicamente usado para discos muy grandes), lba32 es usado para disponer acceso a datos más allá de los primeros 1024 cilindros.

Instalando GRUB

El cargador GRUB es instalado con el comando grub-install. Las opciones de configuración son guardadas en el archivo /boot/grub/menu.lst o /boot/grub/grub.conf. Tal como LILO, GRUB es un pequeño shell que puede leer ciertos sistemas de archivos. Esto permite a GRUB leer la información del grub.conf o menu.lst

Principales secciones de /boot/grub/menu.lst o /boot/grub/grub.conf

1. General/Global

default Imagen que arrancará por defecto (la primer entrada es 0)
timeout Tiempo para elegir SO en segundos

2. Image

title Nombre de la imagen
root Donde está la segunda etapa del cargador y el kernel (hd0,0 es el /dev/hda)
kernel Ruta para el kernel comenzando desde el raiz, por ejemplo /vmlinuz
ro solo lectura
root La raiz del sistema de archivos
initrd Ruta al disco principal

Opciones de arranque

En el momento de arranque del sistema, se pueden pasar parámetros a los programas LILO o GRUB. Estos tienen una interfaz limitada para leer entradas del usuario.

Pasando parámetros al prompt de LILO:

boot: linux s

Pasando parámetros al prompt de GRUB:

Una vez que GRUB ha arrancado correctamente, puede ver el menú principal con una lista de títulos. Haga lo siguiente:

  1. presione 'e' para editar un título del menú
  2. recorra hacia abajo hasta la línea que contiene 'kernel' y presione 'e' nuevamente.
  3. puede agregar algunas opciones aquí.
  4. para arrancar con estas opciones, escriba 'b'. En caso contrario apretar la tecla Return para salir sin cambiar nada.

Presionando la tecla ESC puede ir hacia atrás. Puede navegar al menú principal de esta forma.

Alternativamente, el archivo de configuración del cargador de arranque (lilo.conf o grub.conf) puede ser usado para guardar estas opciones.

Pasando parámetros al init

Los cargadores de arranque pueden pasar parámetros de nivel de ejecución al init. Primero el kernel es cargado, esto arrancará /sbin/init por defecto, el cual toma el control del proceso de arranque.

Los niveles de ejecución comunes son: s, single, S, 1, 2, 3, 4, 5, 6

Si no se indican parámetros, init lanzará el nivel de ejecución especificado en /etc/inittab.

Pasando parámetros al Kernel

Las opciones del kernel tienen el formato item=valor

Parámetros comunes del kernel
acpi= activa/desactiva ACPI
init= le dice al kernel cual programa arrancar del dispositivo principal
mem= especifica la cantidad de RAM a usar
root= especifica el dispositivo principal

Cuidado! El cargador de arranque le pasa parámetros a los módulos del kernel residentes solamente.

En /etc/lilo.conf los parámetros del kernel son declarados con la opción append.

Ejemplos:

append= "pci=bisoirq"
append=�?ram=16M�?
append=�?/dev/hdc=ide-scsi�? (for CD writers)

Durante el arranque, todos los mensajes del kernel son guardados en /var/log/dmesg por defecto. Este archivo puede ser leído o enviado al stdout con el comando /bin/dmesg.

Del arranque al bash

Trataremos ahora de ir a través de cada etapa del proceso de arranque.

  1. Etapa del cargador de arranque
    Si el cargador de arranque tiene éxito, podrá comenzar la segunda etapa mostrando un prompt o una imagen de fondo con una lista de sistemas operativos o kernels para arrancar. Si se especificó un RAM disk inicial, se cargará aquí.
  2. Etapa del kernel
    El kernel es cargado desde el medio especificado en el lilo.conf o grub.conf. Es cargado y descomprimido. Si se carga un RAM disk inicial, los módulos extras son cargados acá.
    El kernel buscará el hardware existentes en el sistema: CPU, RAM, bus PCI, etc.
    El kernel entonces monta el dispositivo principal como de solo lectura.
    Por último, el kernel carga /sbin/init, el primer proceso en el espacio del usuario.
  3. Etapa INIT
    El INIT lee /etc/inittab y sigue las instrucciones.
    El nivel de ejecución por defecto es leído
    Pone en funcionamiento el rc.sysinit
    Todos los sistemas de archivos locales son montados o (si es necesario) se ejecuta la verificación de integridad (fsck), de acuerdo con las entradas del /etc/fstab
    Se inician las quotas, etc.
    El INIT llega al nivel de ejecución por defecto y ejecuta /etc/rc.d/rc N
    Se inician las getty y finaliza el proceso de arranque.

El prompt de acceso es ahora administrado por las gettys en las terminales. Después de que el usuario haya escrito el nombre de usuario y contraseña...

/bin/login ha comenzado.

La contraseña del usuario es comparada con la que está en /etc/passwd o /etc/shadow

Copyright © 2002-2010 Asociación Civil Gleducar
Todo los contenidos de este sitio se encuentran bajo una licencia libre del tipo Copyleft
Este sitio ha sido desarrollado usando Software Libre y respeta los estándares web.
Además ha sido diseñado para verse correctamente usando cualquier navegador, en cualquier resolución de pantalla.