img

¿Qué es Systemv? ¿Y Systemd?

SystemV es un sistema de inicio tradicional de UNIX que gestiona la secuencia de arranque y servicios usando scripts de inicio en directorios como /etc/rc.

Los servicios se inician en un orden específico.

En cambio, Systemd es un sistema de inicio más moderno que reemplaza a SystemV en muchas distribuciones, incluido Debian.

Es más rápido, maneja dependencias de servicios de manera más eficiente, y usa archivos de configuración llamados “units”, en lugar de scripts.

Systemd es paralelo, maneja mejor dependencias y servicios dinámicos, mientras que SystemV sigue un orden secuencial más simple y menos flexible.

Hay un gran debate en la comunidad con respecto a esto, los puristas siguen prefiriendo Systemv, ahora veremos como lograr obtenerlo.

Objetivo:

En la presente práctica se trata de tener una instancia sin systemd utilizando para ello el tradicional SystemV, utilizado antes de la adopción del sistema systemd por parte de la comunidad debian.

Para ello veremos como se desinstala/instala y se configura todo lo necesario para tal fin.

Requisitos Previos:

Para esta practica, parto de la base de un equipo Debian 12.

La idea es utilizar los repositorios de Devuan, que viene a ser como Debian, pero usando Systemv.

Empezamos:

Lo primero que hay que hacer es modificar el fichero /etc/apt/sources.list de mi máquina debian y dejar los repositorios de devuan, que es otro sistema operativo como debian pero que no usa systemd, como ya he comentado antes. Para ello hay que comentar todos los repositorios de debian, y dejar solamente los de devuan, así:

deb http://deb.devuan.org/merged daedalus          main
deb http://deb.devuan.org/merged daedalus-updates  main
deb http://deb.devuan.org/merged daedalus-security main

img

Pero estos repositorios están firmados, y al hacer un apt update dará error, por lo que hay que instalar el keyring, primero lo he descargado y lo he instalado con dpkg:

wget http://deb.devuan.org/merged/pool/DEVUAN/main/d/devuan-keyring/devuan-keyring_2023.10.07_all.deb
dpkg -i devuan-keyring_2023.10.07_all.deb

img

Hecho esto ya permite actualizar la lista de paquetes (antes habia 44 paquetes, y luego ya 38 que son los de devuan):

img

img

El siguiente paso es instalar pstree que pertenece al paquete psmisc. Para poder encontrar a que paquete pertenece un binario se usa apt-file:

sudo apt-file search pstree | grep bin/$pstree
sudo apt install psmisc

img

El siguiente paso es obtener systemv y eliminar systemd. (Si diera fallo, hay que parar manualmente systemd, aunque no es nada recomendable) y para ello:

sudo apt remove --purge systemd
sudo apt install sysvinit-core sysvinit systemd-sysv-
update-initramfs -u
  • sysvinit-core: Instala el núcleo de SysVinit, el sistema de inicio tradicional basado en scripts que controlan el arranque y apagado de los servicios del sistema.

  • sysvinit: Instala herramientas adicionales para SysVinit, que complementan al paquete sysvinit-core.

  • systemd-sysv- (con el guion al final): Elimina systemd-sysv, que es el paquete que configura systemd como el sistema de inicio por defecto y reemplaza los enlaces de inicio de SystemV.

  • update-initramfs: -u para que use el kernel actual que esta en uso.

Hecho esto, se reinicia la máquina.

img

img

Y como se ve en las imágenes, ahora el proceso padre es init en lugar de systemd. Al buscar con ps aux algo de systemd aparece como que no existe:

pstree -sp

img

img

Y con esto estaria finalizada la practica. Aunque un extra es hablar de los run leves de systemv, que viene a ser los comandos de apagado, reinicio etc.

Por ejemplo para apagar la máquina seria init 0.

Nota Importante / Errores:

Errores de Red:

Un problema que puede ocurrir es quedarse sin red al quitar systemd , pero se soluciona usando dhclient , o si eso no funciona, hay que modificar el archivo /etc/network/interfaces , pero para poder reiniciar el “servicio” como haciamos en systemd, ya no es igual.

auto lo
iface lo inet loopback

auto ens3
iface ens3 inet dhcp
  • ens3 es mi interfaz, para comprobar cual es la tuya usa ip a.

No se puede usar un systemctl restart ni un service, hay que hacerlo con:

sudo /etc/init.d/networking restart

Esto de paso solucionaria el error de que en cada reinicio la máquina perderia su ip, y habria que hacer a mano un dhclient cada vez (suponiendo que no diera error).

Si por algún motivo no lo encuentra es que se ha eliminado el paquete ifupdown. Por lo que lo instalo con:

sudo apt install ifupdown

Hecho esto ya puedo reiniciar la red:

img

Ahora ya al reiniciar me puedo conectar sin problemas por ssh porque si mantiene la ip:

img

Errores de Resolución Estática (DNS):

Al eliminar systemd se ha perdido la resolución estatica, porque el archivo /etc/resolv.conf es enrealidad un enlace simbólico a /run/systemd/resolve/resolv.conf.

Para solucionarlo lo que hay que hacer es eliminar primero el enlace simbólico, y crear el archivo manualmente, añadiendo esto ya que es una instancia de OpenStack:

nameserver 172.22.0.1 search .

Donde esa ip, es el servidor DNS. Hecho eso ya conecta correctamente con los repositorios de devuan.

img

Y una ultima comprobacion de que no tiene systemd:

img

Volver a Systemd:

Si quisiera volver a utilizar systemd:

Instalar systemd y systemd-sysv:

sudo apt install systemd systemd-sysv

Eliminar sysvinit:

sudo apt purge sysvinit-core sysvinit

Actualizar el initramfs:

sudo update-initramfs -u

Y de esta forma es como se pasa de Systemd a Systemv con init, y viceversa.