Capítulo 6. Sistema rc.d

Tabla de Contenidos

6.1. La configuración del rc.d
6.2. Los Scripts rc.d
6.3. Las Reglas de rcorder y rc Scripts
6.4. Lectura Adicional

Desde NetBSD 1.5, el arranque del sistema cambió para utilizar scripts de rc (rc-scripts) para controlar servicios, similar al sistema de inicio (init-system) que utiliza System V (variante de Unix) y Linux, pero sin niveles de ejecución. Este capítulo es una descripción del sistema rc y su configuración en NetBSD. This chapter is an overview of the rc-system and its configuration on NetBSD.

6.1. La configuración del rc.d

Los archivos de arranque para el sistema residen en /etc, y son:

  • /etc/rc

  • /etc/rc.conf

  • /etc/rc.d/*

  • /etc/rc.lkm

  • /etc/rc.local

  • /etc/rc.shutdown

  • /etc/rc.subr

  • /etc/defaults/*

  • /etc/rc.conf.d/*

Primero, veamos los scripts[1] controlados y soportados, también documentados en rc(8):

  • Cuando el núcleo ha iniciado todos los dispositivos en el arranque, generalmente inicia el init(8), que alternadamente ejecuta /etc/rc

  • /etc/rc clasifica los scripts en /etc/rc.d usando rcorder(8), y las ejecuta en ese orden. Vea la página de ayuda rcorder(8) para más detalles sobre como se determina el orden de los scripts en /etc/rc.d.

  • /etc/rc.subr contiene las funciones comunes utilizadas por muchos scripts /etc/rc.d/*.

  • Cuando se cierra el sistema con shutdown(8), es ejecutado /etc/rc.shutdown que ejecuta los scripts /etc/rc.d en orden inverso (como se define en rcorder(8)).

Scripts adicionales que están fuera del directorio rc.d:

  • /etc/rc.lkm carga o descarga los Módulos del Núcleo Cargables (LKMs -- Loadable Kernel Modules), vea modload(8) y /etc/rc.d/lkm[123].

  • /etc/rc.local es casi el último script que se llama en el arranque. Este script puede ser editado por el administrador para iniciar demonios locales que no siguen el concepto del rc (rc-concept).

    Por ejemplo, los paquetes instalados de pkgsrc generalmente añaden sus archivos de inicio en /usr/pkg/etc/rc.d, y dejan como decisión del administrador del sistema permitirlos, copiándolos/asociándolos manualmente a /etc/rc.d, o añadiéndolos a /etc/rc.local.

    Lo siguiente es el ejemplo del sistema para un servidor web apache añadido a /etc/rc.local:

    if [ -f /usr/pkg/etc/rc.d/apache ]; then
    	/usr/pkg/etc/rc.d/apache start
    fi

Hay un archivo central de configuración para el script de arranque, rc.conf(5) localizado en /etc/rc.conf. /etc/rc.conf carga su configuración por defecto desde /etc/defaults/rc.conf, este último no debe ser tocado. Para alterar un ajuste fijado por defecto, se puede agregar una redefinición en /etc/rc.conf, y esta "anulará" lo que haga referencia a la misma en /etc/defaults/rc.conf pero sin tocar este último.

Por ejemplo, si quiere activar el Demonio de Interprete de Comandos Seguro (sshd -- Secure Shell Daemon):

# cd /etc; grep ssh defaults/rc.conf
sshd=NO                 sshd_flags=""
# echo "sshd=YES" >> rc.conf

O editar directamente /etc/rc.conf con su editor favorito. Lo mismo se puede hacer con cualquier ajuste por defecto que necesite cambiar. Una secuencia común realizada a menudo después de instalar un sistema NetBSD es copiar el contenido de /etc/defaults/rc.conf en /etc/rc.conf de la siguiente forma:

# cat /etc/defaults/rc.conf >>/etc/rc.conf
# vi /etc/rc.conf 

¡Procure utilizar “>>” y no “>” sino destruirá el contenido por defecto en /etc/rc.conf, el cual es crítico que permanezca allí!. Después de copiar los ajustes por defecto de esa forma, modifique cualquier cosa que necesite en /etc/rc.conf. Para asegurarse consulte la página de ayuda rc.conf(5) que explica todos los ajustes detalladamente.

Por último y no menos importante, el directorio /etc/rc.conf.d/ pude ser utilizado por trozos de scripts de software de terceros, permitiendo solamente uno o pocos ajustes por archivo.

6.2. Los Scripts rc.d

Los scripts reales que controlan los servicios están en /etc/rc.d. Una vez que se haya activado un servicio o desactivado en /etc/rc.conf este puede ser también modificado llamando el script rc desde la línea de comandos, por ejemplo si el administrador necesita iniciar el Demonio de Interprete de Comandos Seguro (sshd -- Secure Shell Daemon):

# /etc/rc.d/sshd start
Starting sshd.
(Iniciando sshd)

Los scripts rc deben recibir un de los siguientes argumentos:

  • start (iniciar)

  • stop (detener)

  • restart (reiniciar)

  • kill (matar/terminar)

Un ejemplo podría ser cuando un nuevo registro se ha añadido a la base de datos llamada "named" sobre un servicio llamado "named":

# /etc/rc.d/named restart
Stopping named.
Starting named.

Un ejemplo ligeramente más complejo es cuando una serie de ajustes se han cambiado, por ejemplo las reglas de ipfilters (filtros de IP) del firewall, la configuración de ipnat (Network Address Translation IP -- Traducción de la Dirección de Red de IP), y el servicio de interprete de comandos seguro ha cambiado el tipo de encriptación:

# sh /etc/rc.d/ipfilter restart
# sh /etc/rc.d/ipnat restart
# sh /etc/rc.d/sshd restart

6.3. Las Reglas de rcorder y rc Scripts

El sistema de arranque de cada sistema Unix determina básicamente, de una u otra forma, el orden en que los servicios arrancan. En algunos sistemas Unix esto es realizado enumerando los archivos y/o poniéndolos en directorios de niveles de ejecución separados (Solaris confía en comodines como /etc/rc[23].d/S* siendo clasificados numéricamente cuando se expanden). O ponen simplemente todos los comandos que deben ser iniciados en el momento del arranque en un simple script monolítico, que puede ser desordenado (Esto es lo que los BSD antiguos y NetBSD hacían antes del sistema rc). En NetBSD esto es realizado por el script rc y su contenido. Por favor observe que NetBSD no tiene múltiples niveles de ejecución como los encontrados por ejemplo en sistemas Systems V, Solaris, o Linux.

Al principio de cada uno de los scripts de rc en /etc/rc.d/*, hay una serie de comentarios de líneas que tienen uno de los siguientes puntos:

  • REQUIRE (requerir)

  • PROVIDE (proporcionar)

  • BEFORE (antes)

  • KEYWORD (palabra clave)

Estos dictan las dependencias de cada script particular del rc y por tanto rcorder puede trabajar fácilmente “arriba” o “abajo” como la situación lo requiera. Lo siguiente es un ejemplo del script /etc/rc.d/nfsd:

...
 PROVIDE: nfsd
 REQUIRE: mountd

. /etc/rc.subr
...

Aquí podemos ver que este script proporciona el servicio “nfsd”, sin embargo, requiere iniciar primero “mountd”. La utilidad rcorder(8) será utilizada en el momento de arranque del sistema para leer todos los scripts del rc, y determinar el orden correcto en que se ejecutarán los scripts del rc (por su nombre).

6.4. Lectura Adicional

Hay otros recursos disponibles referentes al sistema rc.d:

  • Uno de los principales diseñadores del rc.d, Luke Mewburn, hizo una presentación del sistema en USENIX 2001. Está disponible en formato PDF.

  • Will Andrews escribió un artículo de Daemonnews llamado The NetBSD rc.d System.