Cómo iniciar el sistema con un OpenRC puro

Continúa el conflicto que existe contra SystemD. Que haya quedado claro que es una mierda, no es algo de sorprenderse. Y como era de esperarse, aparecieron varias opciones, pero la que ha estado sonando desde hace mucho, es OpenRC. Desarrollado originalmente por Gentoo para su uso en su variante basada en BSD, es el init que dicha distro usa por defecto (y de hecho, me encanta porque me trae viejos recuerdos de que cuando empecé a usar Linux). Y que además, es portable, ya que no sólo está limitado a Gentoo, sino a otros sabores de Linux y de Unix en general, así que todo aquél que quiera (y pueda) probar esta alternativa a SystemD, está invitado a hacerlo. De hecho, hay distros que lo soportan oficialmente, como Alpine Linux y Manjaro (de hecho, existe una variante que lo trae por defecto).

Pero dejando de lado ese tema, me voy a centrar a lo que vine: a usar un OpenRC en su estado puro.

¿Cómo? ¿Acaso no está OpenRC en su estado puro?

No exactamente.

Para aclarar el tema, muchos acá recordamos al viejo Sysvinit, ¿verdad? Ese sistema de init que se ha vuelto tan popular en su momento antes de la llegada de SystemD. Pues bien: en muchos sabores de Unix todavía se usa. Así como en algunas distros también, como Slackware. Y FreeBSD lo ha mantenido hasta la actualidad. A eso sumémosle que SystemD no es soportado por otra variante de Unix que no sea Linux.

OpenRC utiliza Sysvinit como backend, lo que explica por qué las diferencias entre ambos (si se utilizaran por separado, claro) no es distinguible. Sin embargo, prepararon su propio binario de init que está disponible desde la versión 0.25 para que los usuarios la prueben y vean qué tal está quedando. De hecho, ya mi notebook lo tengo configurado para que lo use y hasta ahora no he tenido problemas. Y es a lo que vine acá, a enseñarles a migrar para tener un OpenRC en su estado puro y ejecutar sus propios binarios de init, ya que de momento, no existe más documentación que la que aparece en la wiki de Gentoo, además de algunas cosas que no mencionan y que tuve que descubrirlas por mi cuenta tras un buen rato de investigación.

Eso sí, antes de probar este nuevo init de OpenRC, tienen que tener en cuenta lo siguiente:

  • La primera vez el inicio suele ser más lento de lo normal. No desesperen, a más de alguno le ha pasado.
  • Los binarios que se usan como herramientas que forman parte de Sysvinit, como shutdown y reboot, no funcionan mientras se use el init de OpenRC por razones obvias. En su lugar, utiliza un binario llamado openrc-shutdown, al cual se le pasa un parámetro dependiendo de lo que se vaya a necesitar. Es necesario hacer algo antes que mencionaré más adelante.
  • El init de OpenRC ignora el archivo /etc/inittab por ser parte de Sysvinit. Lo que se traduce, además de lo mencionado anteriormente, que las TTY no funcionan de manera automática, sino que también hay que hacer algo antes que, desde luego, explicaré más adelante también.
  • Es necesario también estar usando Consolekit, aunque ya va de la mano junto con OpenRC. Ya les explicaré por qué.
  • El proceso es indoloro y fácil y totalmente reversible.

Teniendo esto en mente, entonces… ¡Manos a la obra!

El proceso es bien sencillo, y en parte, está también mencionado en la Wiki de Gentoo. Si usan un gestor de inicio como GRUB, basta con agregar esto en los parámetros del kernel, en la línea GRUB_CMDLINE_LINUX:

Luego regeneramos el archivo del grub:

(El binario puede cambiar dependiendo de la distro)

Luego, para iniciar las TTY, es necesario que el daemon de agetty esté detenido. Así que creamos tantos enlaces simbólicos como terminales TTY necesitemos. Por ejemplo, para la TTY1, haremos esto:

Ya saben cómo hacerlo para las demás. Nada más se cambia el número y ya.

Ahora hay que agregarlas al inicio como se haría como cualquier daemon:

Y ya está.

Y lo último, esencial para apagar y reiniciar el sistema desde el entorno gráfico, es necesario crear dos scripts que deben ser invocados por Consolekit. Deben llamarse así: ck-system-stop y ck-system-restart. Los contenidos de cada uno son muy similares.

Para el ck-system-stop, el contenido debe ser el siguiente:

El del ck-system-restart es el siguiente:

Como se darán cuenta, son prácticamente el mismo contenido, sólo que se cambia el parámetro que se le pasa a openrc-shutdown.

Ahora les damos permisos de ejecución:

Y los copiamos a la siguiente ruta: /usr/lib/consolekit/scripts/. No se preocupen, los permisos se mantendrán.

Y ya nada más queda reiniciar el sistema y ya está.

Como verán, el proceso es bien sencillo y toma algo de tiempo acostumbrarse, pero al menos acá está la documentación necesaria para guiarse y usar un OpenRC desde el backend.

Espero que les haya sido de ayuda este tutorial.

Jorgicio

En volá podría gustarte también...

3 comentarios

  1. elc79 dijo:

    Hola, me puse en el intento de transformar una instalacion fresca de Debian en OpenRC, tal vez no fuera necesario pero primero procedi a la eliminacion de systemd por el metodo que sale en la pagina without-systemd, por cierto que lo hice con un Debian Buster para poder usar una version mas reciente de OpenRC ya que en stretch solo esta la 0.23 que no tiene openrc-init, todo va entrelazado y el proceso de sustituir SystemD por SysV y posterior eliminacion de SystemD es facil. Hasta aqui todo bien.

    Pese a que en Debian Buster tiene la version 0.34.1 que si cuenta con openrc-init, la instalacion no cuenta con los scripts agetty, tampoco es un problema mayor porque los copio del git de Gentoo y procedo a los symlinks para las 6 tty, algo de experimentacion, el arranque con OpenRC puro no parece sincronizarse bien lo que sale en pantalla con el prompt para loguear pero se puede entrar sin problemas.

    Intentando instalar lightdm me encuentro con que no puedo porque consolekit no esta disponible, probablemente por el primer paso, no lo se, pero sin eso no puedo instalar lightdm, asi que instalo lxdm, tambien el escritorio Xfce pero me doy cuenta del problema que supone no poder instalar consolekit porque no puedo llevar a cabo el paso de creacion de esos comandos para el apagado y reboteo asi que tengo que apagar a mano desde la consola.

    Puede que el problema sea culpa del primer paso para la eliminacion de SystemD, ya que en Devuan tengo visto que si se puede usar consolekit, asi que mi consulta es si sabes alguna alternativa para poder apagar o reiniciar desde los botones. Tu metodo funciona en Gentoo, tambien lo he probado en Parabola y funciona bien, y ahora mismo estoy intentando con Devuan migrando a Beowulf, esto no se si saldra bien porque si en Debian Buster todavia esta fase alfa, es bastante probable que en Devuan Beowulf los problemas sean mayores, pero voy a intentarlo. Gracias.

    • jorgicio dijo:

      Buenas. Entiendo que tu drama es porque consolekit no está disponible en Debian Testing (por lo que estuve averiguando) y desconozco por qué. Llevo tanto tiempo sin usar Debian que no recuerdo exactamente si los scripts de inicio/apagado son los mismos que acá en Gentoo, por lo que no se me ocurre otra cosa más que usar la línea de comandos como poweroff (para apagar) y el reboot (para reiniciar). Aparte, como notaste, tuve que crear mis propios scripts para poder hacer lo que me preguntas.
      Aparte, al final dejé de usar el método expuesto en mi blog porque, si bien funciona, configurarlo implica algún trabajo manual que hace que no sea tan… digamos… nativo. Así que volví a la configuración por defecto.
      Aparte, este método que expuse en mi blog, a mi parecer, está en pañales. Y con mucha suerte funciona acá en Gentoo, por lo que no garantizo que funcione igual en otras distros (debí poner ese aviso antes, me excuso por eso). Pero gracias por el feedback sobre tu test en otras distros.
      Mi consejo es que si quieres deshacerte de SystemD en Debian, podrías volver a Debian Stable o seguir con Devuan (que no sé exactamente cómo es ya que nunca lo he probado). Teniendo en cuenta que este método, como dije anteriormente, está en pañales. Sugiero esperar.
      Espero te haya sido de ayuda. Cualquier cosa, me escribes.

      ¡Saludos!

      • elc79 dijo:

        Si, ya he observado que a dia de hoy si se quiere un OpenRC 100% operativo hay que recurrir de manera obligatoria a Gentoo, algunas de sus distros derivadas, o algunas derivadas de Arch como Parabola OpenRC, en esta la instalacion sustituye el init de SysV por el de OpenRC sin tener que hacer nada ya esta todo integrado y listo para funcionar con el entorno grafico. En Debian y Devuan aun en las versiones testing que cuentan con OpenRC 0.34 faltan los scripts basicos como agetty y otros, es un proyecto en pañales.

        No he probado en Gentoo pero he echado un ojo a los ebuilds y no parece que tengan diferencia con los paquetes de Parabola, de hecho en Parabola directamente recomiendan usar elogind como servicio porque funciona mejor que consolekit en el entorno grafico, por lo que no hace falta ni mirar los scripts ck-system-stop y tal.

Agregar un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *

A %d blogueros les gusta esto: