F.2.4. Programa /sbin/init
El programa
/sbin/init
(también llamado init
) coordina el resto del proceso de arranque y configura el entorno del usuario.
Cuando el comando
init
arranca, se vuelve el padre o abuelo de todos los procesos que comienzan automáticamente en el sistema. Primero, ejecuta el script /etc/rc.d/rc.sysinit
, que establece la ruta del entorno, activa el swap, verifica los sistemas de archivos y se encarga de todo lo que el sistema necesita al momento de la inicialización. Por ejemplo, la mayoría de los sistemas usan un reloj, por lo tanto, el rc.sysinit
lee el archivo de configuración /etc/sysconfig/clock
para iniciar el hardware del reloj. Otro ejemplo es si hay procesos especiales en los puertos seriales que deben ser inicializados, rc.sysinit
ejecutará el archivo /etc/rc.serial
.
Luego, el comando
init
procesa los trabajos en el directorio /etc/event.d
, que describe cómo el sistema debe configurarse en cada nivel de ejecución SysV. Los niveles de ejecución son un estado o modo definido por los servicios enumerados en el directorio SysV /etc/rc.d/rc<x>.d/
, en donde <x> es el número de nivel de ejecución. Para obtener más información sobre los niveles de ejecución de SysV vaya a la Sección F.4, “Niveles de ejecución de SysV Init”.
A continuación, el comando
init
configura la biblioteca de funciones fuente, /etc/rc.d/init.d/functions
, para el sistema, que establece el modo en de iniciar o matar un programa y la forma para determinar el PID de un programa.
El programa
init
inicia todos los procesos de fondo buscando en el directorio apropiado rc
para el nivel de ejecución especificado por defecto en /etc/inittab
. Los directorios rc
se encuentran numerados para corresponder al nivel de ejecución que representan. Por ejemplo, /etc/rc.d/rc5.d/
es el directorio para el nivel de ejecución 5.
Cuando se arranca el nivel de ejecución 5, el programa
init
consulta el directorio /etc/rc.d/rc5.d/
para determinar qué procesos iniciar o parar.
A continuación un ejemplo de listado del directorio
/etc/rc.d/rc5.d/
:
K05innd -> ../init.d/innd K05saslauthd -> ../init.d/saslauthd K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local
K05innd -> ../init.d/innd
K05saslauthd -> ../init.d/saslauthd
K10dc_server -> ../init.d/dc_server
K10psacct -> ../init.d/psacct
K10radiusd -> ../init.d/radiusd
K12dc_client -> ../init.d/dc_client
K12FreeWnn -> ../init.d/FreeWnn
K12mailman -> ../init.d/mailman
K12mysqld -> ../init.d/mysqld
K15httpd -> ../init.d/httpd
K20netdump-server -> ../init.d/netdump-server
K20rstatd -> ../init.d/rstatd
K20rusersd -> ../init.d/rusersd
K20rwhod -> ../init.d/rwhod
K24irda -> ../init.d/irda
K25squid -> ../init.d/squid
K28amd -> ../init.d/amd
K30spamassassin -> ../init.d/spamassassin
K34dhcrelay -> ../init.d/dhcrelay
K34yppasswdd -> ../init.d/yppasswdd
K35dhcpd -> ../init.d/dhcpd
K35smb -> ../init.d/smb
K35vncserver -> ../init.d/vncserver
K36lisa -> ../init.d/lisa
K45arpwatch -> ../init.d/arpwatch
K45named -> ../init.d/named
K46radvd -> ../init.d/radvd
K50netdump -> ../init.d/netdump
K50snmpd -> ../init.d/snmpd
K50snmptrapd -> ../init.d/snmptrapd
K50tux -> ../init.d/tux
K50vsftpd -> ../init.d/vsftpd
K54dovecot -> ../init.d/dovecot
K61ldap -> ../init.d/ldap
K65kadmin -> ../init.d/kadmin
K65kprop -> ../init.d/kprop
K65krb524 -> ../init.d/krb524
K65krb5kdc -> ../init.d/krb5kdc
K70aep1000 -> ../init.d/aep1000
K70bcm5820 -> ../init.d/bcm5820
K74ypserv -> ../init.d/ypserv
K74ypxfrd -> ../init.d/ypxfrd
K85mdmpd -> ../init.d/mdmpd
K89netplugd -> ../init.d/netplugd
K99microcode_ctl -> ../init.d/microcode_ctl
S04readahead_early -> ../init.d/readahead_early
S05kudzu -> ../init.d/kudzu
S06cpuspeed -> ../init.d/cpuspeed
S08ip6tables -> ../init.d/ip6tables
S08iptables -> ../init.d/iptables
S09isdn -> ../init.d/isdn
S10network -> ../init.d/network
S12syslog -> ../init.d/syslog
S13irqbalance -> ../init.d/irqbalance
S13portmap -> ../init.d/portmap
S15mdmonitor -> ../init.d/mdmonitor
S15zebra -> ../init.d/zebra
S16bgpd -> ../init.d/bgpd
S16ospf6d -> ../init.d/ospf6d
S16ospfd -> ../init.d/ospfd
S16ripd -> ../init.d/ripd
S16ripngd -> ../init.d/ripngd
S20random -> ../init.d/random
S24pcmcia -> ../init.d/pcmcia
S25netfs -> ../init.d/netfs
S26apmd -> ../init.d/apmd
S27ypbind -> ../init.d/ypbind
S28autofs -> ../init.d/autofs
S40smartd -> ../init.d/smartd
S44acpid -> ../init.d/acpid
S54hpoj -> ../init.d/hpoj
S55cups -> ../init.d/cups
S55sshd -> ../init.d/sshd
S56rawdevices -> ../init.d/rawdevices
S56xinetd -> ../init.d/xinetd
S58ntpd -> ../init.d/ntpd
S75postgresql -> ../init.d/postgresql
S80sendmail -> ../init.d/sendmail
S85gpm -> ../init.d/gpm
S87iiim -> ../init.d/iiim
S90canna -> ../init.d/canna
S90crond -> ../init.d/crond
S90xfs -> ../init.d/xfs
S95atd -> ../init.d/atd
S96readahead -> ../init.d/readahead
S97messagebus -> ../init.d/messagebus
S97rhnsd -> ../init.d/rhnsd
S99local -> ../rc.local
Copy to clipboardCopied
Como puede ver, ninguno de los scripts que inician y detienen los servicios están localizados en el directorio
/etc/rc.d/rc5.d/
. Casi todos los archivos en /etc/rc.d/rc5.d/
son enlaces simbólicos apuntando a los scripts localizados en el directorio /etc/rc.d/init.d/
. Los enlaces simbólicos se usan en cada uno de los directorios rc
de manera que los niveles de ejecución se puedan reconfigurar al crear, modificar y eliminar los enlaces simbólicos sin que afecte a los scripts actuales a los que se refiere.
El nombre de cada enlace simbólico comienza con
K
o S
. Los enlaces K
son procesos eliminados en ese nivel de ejecución, mientras que aquellos que inician por S
son procesos a iniciar.
El comando
init
en primer lugar detiene todos los enlaces simbólicos de K
en el directorio mediante el comando /etc/rc.d/init.d/<command> stop
, en el que <command> es el proceso a matar. Luego inicia todos los enlaces simbólicos S
ejecutando /etc/rc.d/init.d/<command> start
.
Nota
Después de que el sistema ha terminado de arrancar, es posible iniciar una sesión como usuario root y ejecutar estos mismos scripts para dar inicio y parar servicios. Por ejemplo, el comando
/etc/rc.d/init.d/httpd stop
detiene el Servidor HTTP de Apache.
Cada uno de los enlaces simbólicos se numera para dictaminar el orden de inicio. Usted puede cambiar el orden en el que los servicios inician o paran al cambiar este número. Mientras más bajo es el número, más rápido se arrancará. Los enlaces simbólicos con el mismo número se inician de modo alfabético.
Nota
Una de la últimas cosas que el programa
init
ejecuta es el archivo /etc/rc.d/rc.local
. Este archivo es útil para la personalización del sistema. Para obtener más información sobre cómo utilizar el archivo rc.local
, consulte la Sección F.3, “Ejecutar programas adicionales en el tiempo de arranque ”.
Después de que el comando
init
haya progresado a través del directorio rc
apropiado para el nivel de ejecución, Upstart inicia un proceso /sbin/mingetty
para cada consola virtual (indicador de inicio de sesión) asignada al nivel de ejecución por la definición de tarea en el directorio /etc/event.d
. Los niveles de ejecución del 2 al 5 tienen todos seis consolas virtuales, mientras que el nivel de ejecución 1 (modo de monousuario) tiene una, y los niveles de ejecución 0 y 6 no tienen ninguna. El proceso /sbin/mingetty
abre las rutas de comunicación para dispositivos tty [16], establece sus modos, imprime el proceso de inicio de sesión, acepta el nombre y contraseña de usuario y comienza el proceso de inicio de sesión.
En el nivel de ejecución 5, Upstart ejecuta un script denominado
/etc/X11/prefdm
. El script prefdm
ejecuta el gestor de pantalla X[17] — gdm
, kdm
, o xdm
, dependiendo del contenido del archivo /etc/sysconfig/desktop
.
Una vez que haya terminado, el sistema operará en el nivel de ejecución 5 y mostrará la pantalla de inicio de sesión.