SysVinit (Español)

From ArchWiki
Revision as of 22:54, 26 October 2012 by Pedro (Talk | contribs)

Jump to: navigation, search

Init es el primer proceso que se ejecuta una vez que se carga el Kernel de Linux. Por defecto, en Arch, el programa que utiliza init es /sbin/init proporcionado por el paquete sysvinit. La palabra init siempre se refiere a sysvinit en este artículo.

inittab es el archivo de configuración inicial que encuentra init en /etc. Contiene las instrucciones de inicio de los programas y scripts que van a funcionar al iniciar el nivel de ejecución especificado.

Tip: Ver man 5 inittab y man 8 init para una descripción más formal y completa
Tip: A pesar de que Arch hace uso de init, la mayor parte del trabajo se delega en scripts de arranque. Este artículo se centra en init e inittab. Si usted está buscando una visión general del proceso de arranque de Arch, vea Arch Boot Process.

Descripción de init e inittab

init es siempre un proceso y, aparte de gestionar el espacio de intercambio, es el proceso padre a todos los demás procesos. Usted puede imaginar dónde se encuentra init en la jerarquía de procesos de su sistema con pstree:

$ pstree -Ap
init(1)-+-acpid(3432)
        |-crond(3423)
        |-dbus-daemon(3469)
        |-gpm(3485)
        |-mylogin(3536)
        |-ngetty(3535)---login(3954)---zsh(4043)---pstree(4326)
        |-polkitd(4033)---{polkitd}(4035)
        |-syslog-ng(3413)---syslog-ng(3414)
        `-udevd(643)-+-udevd(3194)
                     `-udevd(3218)

Además de la inicialización normal del sistema (como su nombre indica), init también se encarga de reiniciar, apagar y arrancar en modo de recuperación (single-user mode).

Para apoyar a ésto, inittab contiene grupos con diferentes niveles de ejecución .

Los niveles de ejecución usados por Arch son 0 para detener, 1 (S como alias) para el modo single-user, 3 para el arranque normal (modo multi-usuario), 5 para X y 6 para reiniciar el sistema. Otras distribuciones pueden adoptar otros convenios, pero los significados de 0, 1 y 6 son universales.

Tras la ejecución, init explora inittab y lleva a cabo las acciones oportunas. Una entrada en inittab toma la forma siguiente:

id:runlevels:action:process

Donde id es un identificador único para la entrada (sólo un nombre, sin efecto real en init), y runlevels es una cadena de los niveles de ejecución (no incluida). Si el nivel de ejecución de init está indicado en runlevels, la acción se llevará a cabo action , ejecutando process en su caso. Algunas acciones especiales de actions podrían hacer que init hiciese caso omiso de runlevels y adoptar un método de ejecución especial. Una explicación más detallada a continuación en la siguiente sección.

Cambiar runlevel (nivel de ejecución)

A través del Gestor de Arranque

Para cambiar el nivel de ejecución (runlevel) al iniciar el sistema, simplemente agregue el nivel de ejecución deseado n a la línea de configuración del gestor de arranque. Una solución similar a ésto se consigue con inittab. Para arrancar con el nivel de ejecución deseado, agregue su número a los parámetros del Kernel (por ejemplo, 3 para el runlevel 3).

El nivel de ejecución se añade al final, por lo que el kernel sabe el nivel de ejecución que debe iniciar. Para utilizar otro programa de inicio (por ejemplo, systemd), añada init=/bin/systemd o similar.

Nota: Si está usando un parámetro de init distinto de sysvinit, el valor de runlevel puede ser ignorado.

Después de Arrancar

Después de que el sistema ha arrancado, puede invocar telinit n para informar a init que cambie el nivel de ejecución a n. init lee el nivel de ejecución n de inittab y "diffs", cancela la ejecución del runlevel anterior, y permite llevar a cabo acciones que no están presentes en el nivel de ejecución anterior. Los procesos actuales en los dos niveles de ejecución se deja intacto. El procedimiento de cancelación es en realidad un poco complejo, de nuevo, los detalles técnicos se pueden encontrar en la página de init manpage.

init no revisa inittab. Será necesario recurrir a telinit explícitamente e introducir modificaciones en inittab. El comando telinit q hace que init re-examine inittab pero no cambia el nivel de ejecución.

Inittab

En esta sección se examinan las entradas comunes de inittab, en el mismo orden en que aparecen en el inittab por defecto utilizado por Arch. Después de ver algunos ejemplos le ayudarán a crear su propia entrada de inittab.

Advertencia: Siempre que modifique /etc/inittab pruébelo con telinit q antes de reiniciar, dado que un error de sintaxis pequeño puede evitar que su sistema arranque.

Runlevel por defecto

El nivel de ejecución (runlevel) predeterminado es 3. Coméntelo, y descomente la opción que sigue si prefiere arrancar en el nivel 5 (que se utiliza para X comunmente) por defecto:

id:5:initdefault:

Scripts Principales de Arranque

Se trata de la secuencia de comandos de inicio principal de Arch.

rc::sysinit:/etc/rc.sysinit
rs:S1:wait:/etc/rc.single
rm:2345:wait:/etc/rc.multi
rh:06:wait:/etc/rc.shutdown

Arranque en Usuario Único

A veces, su Kernel puede no arrancar del todo, debido a un disco duro dañado o un sistema de archivos corrupto, ausencia de claves de archivos, etc En este caso, su imagen de inicio puede entrar de forma automática en modo de usuario único, que sólo se permite el acceso como root y utiliza /sbin/sulogin en lugar de /sbin/login para controlar el proceso de inicio de sesión. Usted puede entrar en modo de usuario único mediante la adición de la letra S a la de línea de comandos del kernel en la configuración de GRUB, LILO, o syslinux. Si desea ejecutar algo que no sea sulogin, especifique ésto:

su:S:wait:/sbin/sulogin -p

Gettys e Inicio de Sesión

Estas son los elementos básicos que se están ejecutando en sus terminales gettys. La mayoría de las configuraciones por defecto tendrá gettys que se ejecutan en varios ttyS1-6, que hará visualizar en la pantalla el símbolo de login. Véase también openvt, chvt, stty, y ioctl.

c1:234:respawn:/sbin/agetty 9600 tty1 xterm-color
c5:5:respawn:/sbin/agetty 57600 tty2 xterm-256color

Ctrl + Alt + Del

Cuando se presiona la secuencia especial de teclas Template:Keypress, esta entrada determina la acción a realizar.

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Programas de X

Si usted está interesado en la depuración, puede lanzar cualquier aplicación que utilice inittab. Un programa útil a ejecutar es el gestor de login cuando el nivel de ejecución es 5, multi-user-x-mode. En el siguiente ejemplo se puede ver cómo empezar SLiM al entrar en el nivel de ejecución 5.

x:5:respawn:/usr/bin/slim >/dev/null 2>&1
#x:5:respawn:/usr/bin/xdm -nodaemon -confi /etc/X11/xdm/archlinux/xdm-config

Power-Sensing Scripts

Init puede comunicarse con el dispositivo UPS y ejecutar procesos basados ​​en el status de UPS. He aquí algunos ejemplos:

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"

Solicitud de teclado personalizado

La línea siguiente agrega una función personalizada para cuando una secuencia especial de teclas se pulsa. Usted puede modificar esta secuencia de teclas especial como quiera, siguiendo la sintexis de ctrl+alt+del.

kb::kbrequest:/usr/bin/wall "Keyboard Request -- edit /etc/inittab to customize"

Lanzar kbrequest

Usted puede activar la secuencia especial de teclas kbrequest mediante el envío de la señal WINCH al proceso init (1) como root (a través de sudo). Con este comando:

 kill -WINCH 1

escribiendo mediante wall en todas las ttys:

Broadcast message from root@askapachehost (console) (Wed Oct 27 14:02:26 2010):
Keyboard Request -- edit /etc/inittab to customize

Véase también

Enlaces externos