Loading




Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
[guía] init y inittab
 
14-02-2007, 11:00 PM
Mensaje: #1
[guía] init y inittab
Init es el "padre" de todos lo procesos, cuya función es inicializar una serie de procesos, los cuales están especificados en el archivo inittab.
El archivo inittab, que por lo general encontramos en el directorio /etc/, describe qué procesos se inician al cargar el sistema.

Niveles de ejecución:
Un nivel de ejecución es una configuración de software del sistema que permite existir sólo a un grupo de procesos seleccionados. Dichos niveles son un total de 11 (documentados), los números del 0 al 6, S o s y A, B, C para niveles bajo demanda. Por lo general el nivel 0 se utiliza para detener el sistema, el nivel 6 para reiniciar el sistema y el nivel 1 para utilizar el sistema en modo monousuario. El nivel S o s lleva directamente al sistema a modo monousuario y no requiere del archivo inittab, en este modo se llama a /sbin/sulogin.

En el archivo inittab, que es llamdo por init luego de la carga del kernel, se definen entradas, para realizar acciones en los niveles deseados, de la siguiente forma:
Código:
id:nivels_de_ejecución:acción:proceso
id: una secuencia de hasta 4 caracteres que identifica la entrada.
nivels_de_ejecución: detalla los niveles para los cuales se van a ejecutar las acciones correspondientes a la entrada.
acción: detalla la acción que se llevará a cabo cunado se ejecute la entrada.
proceso: detalla el proceso que se va a ejecutar

Un ejemplo sería:
Código:
# El caracter # es para comentarios....

t1:12345:respawn:/sbin/getty 9600 tty1 linux #Ejecuta getty tty1 en los niveles 12345
t2:2345:respawn:/sbin/getty 9600 tty2 linux #Ejecuta getty tty2 en los niveles 2345
t3:2345:respawn:/sbin/getty 9600 tty3 linux #Ejecuta getty tty3 en los niveles 2345
t4:2345:respawn:/sbin/getty 9600 tty4 linux #Ejecuta getty tty4 en los niveles 2345
Para realizar cambios de niveles debemos tener los provilegios necesarios para ejecutar telinit. (ver Cambio de Niveles de esta guía)

Lista de Acciones válidas para el campo acción:
respawn: El proceso se reiniciará cuando termine (v.g. getty).
wait: El proceso se iniciará una vez cuando se entre en el nivel de ejecución específico e init esperará a su terminación.
once: El proceso se ejecutará una vez cuando se entre en el nivel de ejecución especificado.
boot: El proceso se ejecutará durante el arranque del sistema.
bootwait: El proceso se ejecutará durante el arranque del sistema, mientras init espera su terminación (v.g. /etc/rc).
off:Esto no realiza ninguna acción.
ondemand: Un proceso marcado con un nivel de ejecución ondemand se ejecutará cuando se llame al nivel de ejecución especificado ondemand. Sin embargo, no se produce cambio de nivel de ejecución.
initdefault: Una entrada initdefault especifica el nivel de ejecución en el cual se entrará tras el arranque del sistema. Si no existe ninguno, init pedirá un nivel de ejecución en la consola. El campo proceso se ignora.
sysinit: El proceso se ejecutará durante el arranque del sistema. Se ejecutará antes de cualquier entrada boot o bootwait.
powerwait: El proceso se ejecutará cuando init reciba la señal SIGPWR, indicando que hay algún problema con la alimentación eléctrica. Init esperará que el proceso termine antes de continuar.
powerfail: Como en powerwait, excepto que init no espera que el proceso se complete.
powerokwait: El proceso se ejecutará cuando init reciba la señal SIGPWR, con la condición de que haya un fichero llamado /etc/powerstatus que contenga la palabra OK. Esto significa que la alimentación eléctrica ha vuelto.
ctrlaltdel: El proceso se ejecutará cuando init reciba la señal SIGINT. Esto significa que alguien en la consola del sistema ha pulsado la combinación de teclas CTRL-ALT-DEL. Normalmente uno quiere ejecutar algún tipo de shutdown bien para entrar en modo monousuario o reiniciar la máquina.
kbrequest: El proceso se ejecutará cuando init reciba una señal del gestor de teclado que se ha pulsado una combinación especial de teclas en el teclado de la consola. (ver man)

Tips:
> Para las acciones sysinit, boot y bootwait la definición de niveles no es necesaria, de hecho se ignoran de existir.
> Si el campo proceso comienza con un signo + (más), init no registrará utmp y wtmp. (no recomendado para gettys)


Cambios de Nivels y diagnostico:
Luego de entrar en un nivel de ejecución, y ejecutar todos los procesos específicos del mismo, init espera a que alguno de estos muera, o hasta que se le indique a telinit que se desea cambiar de nivel, para luego examinar el archivo inittab y realizar las acciones que correspondan. En el momento que se le solicita a init que cambie de nivel, se emite una señal del tipo SIGTERM, a todos los procesos que no estén definidos para el nuevo nivel; init espera hasta 5 segundos para luego forzar la terminación de estos procesos, mediante la señal SIGKILL.
Cabe destacar que se pueden agregar entradas al archivo inittab en cualquier momento, pero debe ejecutarse telinit Q, para que init haga un refresh al archivo inittab.

Si init encuantra que se está intentando levantar continuamente una entrada (más de 10 veces en dos minutos), supondrá que es un error en la cedena del mandato, genera un mensaje de error en la consola del sistema y rehusará levantar esta entrada hasta que hayan pasado 5 minutos o reciba una señal.

>Advertencia< Init supone que procesos y descendientes de procesos permanecen en el mismo grupo de procesos que se creó originalmente para ellos. Si los procesos cambian su grupo, init no puede matarlo!!!!

Ejemplo:
Les dejo el inittab de gentoo 2006.1, luego ampliaré esta guía realizando un script para agregar y borrar procesos a los niveles, y ampliaré más sobre el tema

Código:
#
# /etc/inittab:  This file describes how the INIT process should set up
#                the system in a certain run-level.
#
# Author:  Miquel van Smoorenburg, <miquels@cistron.nl>
# Modified by:  Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
# Modified by:  Daniel Robbins, <drobbins@gentoo.org>
# Modified by:  Martin Schlemmer, <azarah@gentoo.org>
#
# $Header: /var/cvsroot/gentoo-x86/sys-apps/sysvinit/files/inittab,v 1.5 2005/12/22 02:03:23 vapier Exp $

# Default runlevel.
id:3:initdefault:

# System initialization, mount local filesystems, etc.
si::sysinit:/sbin/rc sysinit

# Further system initialization, brings up the boot runlevel.
rc::bootwait:/sbin/rc boot

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
#z6:6:respawn:/sbin/sulogin

# TERMINALS
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:2345:respawn:/sbin/agetty 38400 tty2 linux
c3:2345:respawn:/sbin/agetty 38400 tty3 linux
c4:2345:respawn:/sbin/agetty 38400 tty4 linux
c5:2345:respawn:/sbin/agetty 38400 tty5 linux
c6:2345:respawn:/sbin/agetty 38400 tty6 linux

# SERIAL CONSOLES
#s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
#s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100

# What to do at the "Three Finger Salute".
ca:12345:ctrlaltdel:/sbin/shutdown -r now

# Used by /etc/init.d/xdm to control DM startup.
# Read the comments in /etc/init.d/xdm for more
# info. Do NOT remove, as this will start nothing
# extra at boot if /etc/init.d/xdm is not added
# to the "default" runlevel.
x:a:once:/etc/X11/startDM.sh

para más info visiten las man pages de:
-> init
-> inittab
-> initscript
-> utmp
-> shutdown
-> kill
-> runlevel
-> login
-> telinit
-> boot

Saludos, espero que les sirva...
Visita su sitio web Encuentra todos sus mensajes
Cita este mensaje en tu respuesta
Enviar respuesta 


Salto de foro:


Usuario(s) navegando en este tema: 1 invitado(s)
Contáctanos | Portal de Noticias | Volver arriba | Volver al contenido | Archivo (Modo simple) | Sindicación RSS