Runit
Runit es un systema de init alternativo de systemd. Hay otras alternativas a systemd como OpenRC de gentoo y s6. Claro, también se puede usar los scripts de SysV, pero son un poco antiguos. Runit tiene varias ventajas. Primero, es super rápido en arrancar. En un par de segundos ya puedes entrar la clave. Segundo, es bastante fácil escribir servicios para Runit. Es simplemente un script sh que dice ejecutar el programa.
Cómo instalar Runit en debian
Runit es un systema de init alternativo de systemd. Hay otras alternativas a systemd como OpenRC de gentoo y s6. Claro, también se puede usar los scripts de SysV, pero son un poco antiguos. Runit tiene varias ventajas. Primero, es *super * rápido en arrancar. En un par de segundos ya puedes entrar la clave. Segundo, es bastante fácil escribir servicios para Runit. Es simplemente un script sh que dice ejecutar el programa.
En debian, la instalación de runit puede ser un poco difícil. Si tratamos de instalar runit-init de una vez, no nos permite.
Primero hay que quitar el paquete de 'init' (que en realidad es un metapaquete)
sudo dpkg -r init
Luego podemos instalar runit
sudo apt install runit runit-init getty-run runit-services libsystemd0-
En el caso que recibimos un mensaje de error, tenemos que:
sudo apt install runit-systemd
y sudo reboot
Y luego podemos instalar los paquetes deseados y quitar systemd.
luego reiniciamos el equipo para entrar en runit
sudo apt install runit runit-init runit-helper getty-run runit-services libsystemd0- systemd- systemd-sysv- libsystemd0- libsystemd-shared- util-linux apt
Desafortunadamente, la versión de runit que aparece en debian no es la mejor. El problema es que en vez de utilizar los scripts de la versión de runit, solo utiliza los scripts de SysV, y por eso es un poco lento. Por eso vamos a utilizar unos scripts de cloux en github:
git clone https://github.com/cloux/runit-base.git
Este repositorio tiene sus propias versiones para 1,2,3 (que son los scripts que se corren al arrancar y apagar la máquina).
primero copiamos esos scripts:
sudo cp -r runit-base/etc/runit/* /etc/runit/
miremos qué contienen los scripts:
Lo importante del primer script (/etc/runit/1) es lo siguiente:
for f in /etc/runit/bootup/*.sh; do
[ -r "$f" ] && . "$f"
done
O sea, corre todos los scripts en /etc/runit/bootup
Si miramos en ese directorio, vemos que contienen números al principio. Esto decide en cuál orden van a correr. Todos los que terminen en '.sh' se van a ejecutar cuando la máquina arranque.
A mí me gusta tener el directorio de /tmp montado en el RAM, por lo que voy a cambiar un poco la configuración de 04-tmpfs.sh, y remplazo la línea
RAMTMP=no
a RAMTMP=yes
También no necesito remplazar los comandos a '.sysv', por lo que puedo desactivar un script en /etc/runit/autorun:
chmod -x /etc/runit/autorun/runit-init
Lo bueno de este repositorio es que contiene scripts de runit para muchos servicios. Miremos en la carpeta donde clonamos el repositorio de runit. En el directorio de ~/runit-base/etc/sv tiene muchos servicios. Si queremos instalar un paquete que tiene un servicio de runit, podemos simplemente copiar ese directorio en /etc/sv
Por ejemplo, vamos a instalar chrony
sudo apt install chrony
luego copiamos el directorio:
sudo cp -r runit-base/etc/sv/chrony /etc/sv
En el nuevo directorio, hay unos archivos que no necesitamos (ya que runit los va a crear automáticamente):
rm -r /etc/sv/chrony/supervise; rm -r /etc/sv/chrony/.meta; rm -r /etc/sv/chrony/log/supervise
Ahora, para activar el demonio de chrony, es muy fácil. Solo hay que enlazar el directorio en /etc/sv a /etc/service.
ln -s /etc/sv/chrony /etc/service/
También queremos instalar a socklog
sudo apt install socklog --no-install-recommends
sudo cp -r runit-base/etc/sv/socklogd /etc/sv/; sudo ln -s /etc/sv/socklogd /etc/service/
En runit para parar y reiniciar servicios es muy parecido a systemd.
sv start/stop servicio
pero para desactivar o activar servicios (que empiezen automaticamente) es un poco diferente. Hay que enlazar de /etc/sv/daemon a /etc/service/.