Baptiste Daroussin, miembro del FreeBSD Core Team y autor del gestor de paquetes pkg, está desarrollando un nuevo gestor del sistema para FreeBSD: rcd. El gestor del sistema rcd es invocado por el proceso init en lugar de /etc/rc, lee los archivos de configuración de los servicios (/etc/rcd.d/*.ucl), construye un árbol de dependencias y arranca los servicios de forma paralela siempre que sea posible, y luego monitoriza su funcionamiento, reiniciándolos si es necesario.
El manejo de procesos en segundo plano y las operaciones con servicios se pueden realizar mediante la transmisión directa de comandos a un socket UNIX o usando la utilidad de línea de comandos rctl. Los archivos unit con los parámetros de los servicios están formateados en UCL, que recuerda al formato de los archivos de configuración de nginx y bind, incluyendo elementos para facilitar el procesamiento automatizado, tomados de JSON. Se ofrece la posibilidad de crear plantillas de archivos unit estándar y de escribir controladores integrados en el lenguaje Lua. Ejemplo de un archivo unit para iniciar nginx: name = "nginx"; description = "Servidor HTTP Nginx"; type = "simple"; command = "/usr/local/sbin/nginx"; command_args = "-g 'daemon off;'"; provides = ["nginx", "http"]; requires = ["NETWORKING", "sshd"]; restart { policy = "always"; max_retries = 10; delay = 2000; backoff = "linear"; } process { user = "www"; group = "www"; cpuset = "0-3"; } rctl { memoryuse = { action = "deny"; amount = "2g"; }; pcpu = { action = "throttle"; amount = "80"; }; }
En lugar de trabajar con archivos PID, el seguimiento de la actividad de los procesos en ejecución se realiza utilizando descriptores devueltos por la llamada al sistema pdfork(). Se admite la activación de servicios solo al acceder a un socket de red y la posibilidad de proteger servicios críticos contra la finalización forzada en caso de que falte memoria en el sistema. Es posible actualizar la versión del proceso en segundo plano rcd sobre la marcha sin perder el estado.
Para limitar los recursos disponibles para un servicio se aplica rctl, y para una completa isolación de los servicios se admite su ejecución en entornos jail. Es posible configurar el acceso al socket UNIX de control asociado a servicios individuales. Se admite la transición a modo de suspensión.
El administrador del sistema es completamente compatible con el sistema existente de inicio secuencial de servicios rc.d y puede funcionar sin modificar los scripts rc.d y los archivos de configuración existentes. Solo es necesario instalar rcd en un sistema en funcionamiento y, tras el reinicio, todo continuará funcionando como antes, excepto por la reducción del tiempo de arranque gracias a la paralelización del inicio de los servicios. Esta compatibilidad facilitará la migración de sistemas a rcd y permitirá la conversión gradual de los scripts rc.d existentes al formato de archivos unit.
Para la compatibilidad con rc.d, se admite un tipo especial de unidades «legacy». Rcd escanea el contenido de /etc/rc.d/ y /usr/local/etc/rc.d/, analiza los encabezados PROVIDE/REQUIRE/BEFORE/KEYWORD en los scripts, lee la configuración de rc.conf y determina el estado de inicio de los scripts, tras lo cual procesa cada script como una unidad virtual legacy. Al usar el comando rcctl para gestionar estas unidades virtuales, las operaciones se traducen al formato antiguo; por ejemplo, ejecutar «rcctl reload sshd» resultará en la ejecución de «/etc/rc.d/sshd reload».
Fuente: opennet.ru
