root@starkos:~$ cat SERVICIOS.md

Servicios y demonios

starkOS se puede instalar con tres inits distintos: SysV+RC, Runit o s6 (ver Descargas). Consulta la sección que corresponda al rootfs que hayas instalado.

SysV + RC · Runit · s6

Init de estilo BSD basado en SysVinit como PID1. RC loc componen un conjunto de scripts de shell simples, sin gestión de dependencias, que inician, paran o reinician el demonio: el orden de arranque de los servicios lo decides tú. Con SysVinit + RC no existe supervisión de servicios.

Archivo Función
/etc/rc Script principal de arranque, ejecutado por /sbin/init.
/etc/rc.conf Reloj, zona horaria, teclado, fuente de consola y lista de demonios a arrancar.
/etc/rc.d/ Directorio con el script de cada servicio.
/etc/rc.local Comandos adicionales al final del arranque en modo multiusuario.
/etc/rc.shutdown Script ejecutado al apagar el sistema.
/etc/rc.subr Funciones comunes que usan los scripts de /etc/rc.d/.

Gestionar servicios

Cada servicio se controla directamente con su script en /etc/rc.d/:

# /etc/rc.d/networkmanager start
# /etc/rc.d/networkmanager restart
# /etc/rc.d/networkmanager stop

Para que un servicio arranque con el sistema, añádelo a la variable DAEMONS en /etc/rc.conf, en el orden en que quieras que se inicie.

Crear un servicio

Un script de servicio solo necesita hacer source de /etc/rc.subr y usar sus funciones. Ejemplo mínimo:

#!/bin/sh

. /etc/rc.subr

case $1 in
    start)
        msg "Iniciando demonio..."
        start_daemon /usr/bin/miprograma
        ;;
    stop)
        msg "Deteniendo demonio..."
        stop_daemon /usr/bin/miprograma
        ;;
    restart)
        $0 stop
        sleep 1
        $0 start
        ;;
    status)
        status_daemon /usr/bin/miprograma
        ;;
    *)
        echo "uso: $0 [start|stop|restart|status]"
        ;;
esac

Guarda el script en /etc/rc.d/ con permisos de ejecución (chmod +x) y ya puedes controlarlo con start/stop/restart/status.

Suite de supervisión de procesos minimalista. Cada servicio corre en un entorno de proceso limpio, independientemente de cómo se haya arrancado o reiniciado, y cuenta con su propio registro de log mientras el servicio esté activo.

Estructura de un servicio

Cada servicio vive en un directorio con un único archivo obligatorio, run, que ejecuta el proceso en primer plano. De forma opcional puede incluir:

Gestionar servicios

Los servicios activos son symlinks dentro de /var/service/:

# sv up <servicio>
# sv down <servicio>
# sv restart <servicio>
# sv status <servicio>

Habilitar un servicio

# ln -s /etc/sv/<servicio> /var/service/

Esto arranca el servicio de inmediato; runit lo reiniciará si se cae y lo volverá a levantar en cada arranque.

Deshabilitar un servicio

# rm /var/service/<servicio>

Si solo quieres evitar que arranque en el boot sin quitarlo de la supervisión, crea un archivo down dentro de su directorio de servicio:

# touch /etc/sv/<servicio>/down

Suite de supervisión de procesos que, junto con s6-rc (gestión de servicios) y s6-linux-init (arranque del sistema), forma el init completo. s6-svscan actúa como PID 1 y supervisa todo el árbol de procesos.

Bundles

Los servicios se agrupan en bundles: colecciones de demonios (longrun), tareas de un solo uso (oneshot) e incluso otros bundles. El bundle default es el que arranca en un sistema normal e incluye a su vez boot, con las tareas esenciales.

Gestionar servicios

# s6 live start <servicio>
# s6 live stop <servicio>
# s6 process restart <servicio>
# s6 live status

Habilitar o deshabilitar en el arranque

# s6 set enable <servicio>
# s6 set disable <servicio>
# s6 set commit
# s6 live install

commit e install son necesarios para que el cambio persista entre reinicios. Si has añadido o modificado definiciones de servicio, sincroniza antes con s6 repo sync.

Cada rootfs de starkOS trae un único init preinstalado; no se mezclan entre sí. Si quieres cambiar de init, deberás reinstalar con el rootfs correspondiente (ver Descargas).