Archivo de la etiqueta: systemd

Crónicas de un arranque dual o de cómo FreeBSD convive pacíficamente junto a Manjaro en mi disco duro

Todos los que hemos recorrido los caminos del software libre hemos desarrollado un fuerte interés por FreeBSD en más de una ocasión. En mi experiencia, he tenido oportunidad de echarle mano en el ámbito laboral, pero para uso personal siempre me sentí más cómodo con las distribuciones GNU/Linux.

Sin embargo, me doy cuenta que esta tendencia está cambiando. Por un lado, systemd ya no es una opción para mí y ciertamente veo más complicado cada día andar por el mundillo “linuxero” evitando el contacto con el daemonio del sistema, a pesar de las múltiples y excelentes opciones que hay en la vía (tema que da lugar quizá a otra entrada).

Por otra parte, la mayoría de nosotros cuenta con abundante espacio en disco duro y a menudo andamos buscando alternativas para llenar esas particiones con sistemas que llamen nuestra curiosidad por conocer y analizar, prácticamente de laboratorio por decirlo de alguna manera. Por mi parte, no me considero un distrohopper y tampoco soy de virtualizar mis instalaciones, pero soy de los que gusta tener una o varias particiones del disco listas para recibir un nuevo huésped con quien divertirme o aprender un rato.

Actualmente mi máquina de escritorio juega con Manjaro OpenRC y KDE Plasma como entorno de escritorio (versión 5.8.1 al momento de escribir la entrada) y mi intención es que siga siendo el sistema operativo principal por un tiempo más. El planteo entonces es poder instalar FreeBSD en una de las particiones disponibles y correr un arranque dual utilizando el actual Grub de Manjaro para escoger entre sistemas operativos.

Lo que sigue no es un tutorial de cómo instalar FreeBSD, el proceso en sí es bastante intuitivo y comprensible, además está amplia y perfectamente descrito en la Documentación oficial del Proyecto. Lo que sigue es más bien la crónica de mi experiencia instalando FreeBSD junto a mi actual distribución GNU/Linux.

Preparando la instalación

Es algo obvio, pero por si alguien se pregunta, lo primero fue preparar un dispositivo de arranque con la imagen de FreeBSD que descargué desde aquí y que luego pasé a un pendrive así:

$ sudo dd if=/ruta_de_descarga/FreeBSD-11.0-RELEASE-xxx-memstick.img of=/dev/sdc
1433746+0 registros leídos
1433746+0 registros escritos
734077952 bytes (734 MB, 700 MiB) copied, 268,342 s, 2,7 MB/s

Algo verdaderamente notorio es la multiplicidad de opciones que ofrece FreeBSD en cuanto a arquitecturas, imágenes listas para importar a máquinas virtuales y tarjetas SD para dispositivos embebidos.

Ahora bien, antes de iniciar desde el pendrive, hay que echar un ojo a las particiones en el disco (/dev/sda) para tenerlas bien identificadas.

$ lsblk /dev/sda -o NAME,SIZE,MOUNTPOINT
NAME       SIZE       MOUNTPOINT
sda        465,8G
├─sda4     1,9G       [SWAP]
├─sda2     19,1G
├─sda3     425,8G     /home
└─sda1     19,1G      /

Como puede verse, tengo un disco con una disposición bastante estándar, es decir, una tabla MBR con 4 particiones primarias: el directorio raíz (/) un directorio de usuario por separado (/home) una partición de intercambio (swap) y una partición libre (/dev/sda2). No cabe duda que FreeBSD irá a parar a /dev/sda2 y obviamente no quiero tocar los preciados datos en /home ni mucho menos dañar la actual instalación de Manjaro (/), así que voy tomando nota.

Para facilitar todavía más las cosas, lo que personalmente prefiero es eliminar la partición /dev/sda2 para que quede como espacio sin asignar o sin utilizar. De esta manera, la tarea de configurar esa partición la haré desde el instalador de FreeBSD.

Ahora sí está todo listo para iniciar desde el dispositivo USB. Una vez que arranca dará a escoger entre iniciar el instalador , ejecutar una consola de comandos o una sesión en vivo del sistema . Más por capricho que por experiencia, me inclino a ejecutar la shell  para preparar la partición manualmente y posteriormente ejecutar el instalador.

When finished type 'exit' to return the installer.

#

Creando y configurando las particiones

Para gestionar las particiones en FreeBSD contamos con una gran herramienta: gpart. Algo a tener en cuenta al momento de trabajar con el disco es la notación que usa FreeBSD para nombrar los dispositivos: donde en GNU/Linux teníamos /dev/sda, aquí se llama ada0; la partición /dev/sda1 ahora es ada0s1 y así con el resto.

# gpart show -p ada0
ada0        MBR            (468.8G)
ada0s1      linux-data     (19.1G)
- free -                   (20G)
ada0s3      linux-data     (428.8G)
ada0s4      linux-swap     (1.9G)

El primer paso a partir de aquí es crear la partición ada0s2 utilizando el espacio libre que dejó la ya eliminada /dev/sda2.

# gpart add -t freebsd -i 2 ada0
ada0s2 added
Antes de continuar, una pequeña reseña del comando:
gpart add: agrega una nueva partición a la tabla ya existente
-t freebsd: el tipo de partición (freebsd en este caso)
-i 2 ada0: indicarle a gpart que la partición se creará con el índice número 2 en el dispositivo ada0. Si no especificamos un tamaño, lo asignará automáticamente

Al mirar nuevamente la tabla, la cosa va tomando forma.

# gpart show -p ada0
ada0        MBR            (468.8G)
ada0s1      linux-data     (19.1G)
ada0s1      freebsd        (20G)
ada0s3      linux-data     (428.8G)
ada0s4      linux-swap     (1.9G)

A continuación, debe crearse el sistema de archivos en la partición (freebsd-ufs) con el siguiente comando:

# newfs ada0s2
/dev/ada0s2: 20000.0MB (40960000 sectors) block size 32768, fragment size 4096
using 32 cylinder groups of 626.09MB, 20035 blks, 80256 inodes.
super-block backups (for fsck_ffs -b #) at:
...
Un detalle a tener en cuenta es que BSD discrimina entre particiones primarias y lógicas llamando a estas segundas slices. Por ejemplo, la partición primaria /dev/ada0s2 (del tipo BSD) tendrá el slice /dev/ada0s2a (freebsd-ufs o simplemente ufs).

Teniendo ya lista la partición, regreso al instalador escribiendo # exit y realizo los primeros pasos de configuración del sistema: distribución del teclado, hostname, componentes opcionales) hasta llegar al editor de particiones.

A partir de este punto me encuentro ante dos alternativas: seleccionar Manual y configurar los puntos de montaje desde allí o continuar ensuciándome las manos desde la Shell. Como me gusta complicarme la vida a fuerza de comandos, lo que hago es irme de nuevo a la consola.

Primero voy a generar el archivo /tmp/bsdinstall_etc/fstab.

# echo "/dev/ada0s2a / ufs rw 1 1" > /tmp/bsdinstall_etc/fstab

Luego, montar el nuevo sistema de archivos y salir.

# mount -t ufs /dev/ada0s2a /mnt

# exit

El instalador comenzará la copia de archivos, pedirá configurar la red, el usuario root, la zona horaria, el reloj y demás. Bastará aquí con seguir los pasos. Al terminar, salgo y reinicio.

Agregando FreeBSD al Grub de GNU/Linux

Como es natural, al reiniciar el Grub no mostrará FreeBSD entre las opciones de arranque. Normalmente, en Manjaro bastaría con ejecutar $ sudo update-grub, pero en este caso lo que debe hacerse es crear la entrada de forma manual y regenerar el Grub.

$ sudo nano /etc/grub.d/40_custom

/etc/grub.d/40_custom

!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "FreeBSD" {
set root=(hd0,2)
chainloader +1
}
Añadimos la entrada manual indicando que el directorio raíz se encuentra en /dev/sda2 (hd0,2).
$ sudo grub-mkconfig -o /boot/grub/grub.cfg
Generando un fichero de configuración de grub...
...
Encontrado unknown Linux distribution en /dev/sda2
...
hecho

¡Y listo! Reinicio y veo a FreeBSD flamante entre las opciones del Grub, lista para convivir pacíficamente junto a Manjaro en mi disco. Restará instalar y configurar un entorno gráfico y las aplicaciones que uso a diario, pero esa es toda una historia aparte.

Adiós cruel daemonio de sistema o de cómo vencí mi hartazgo hacia systemd

Systemd es un monstruo de caminar lento, torpe y caprichoso que con el tiempo se ha ido comiendo cada ser viviente del entorno en su afán por controlarlo todo. El asunto es que por mucho tiempo intenté mantener una convivencia pacífica con el gigante bicho que dominaba mi distribución GNU/Linux favorita. Hasta que un buen día me harté.

Para un usuario desatendido, digamos, aquel que sólo utiliza el equipo para navegar, escuchar música o editar documentos, el funcionamiento de systemd pasa desapercibido la mayor parte del tiempo. Ahora, si ese usuario quisiera disfrutar de los beneficios de poner su equipo en hibernación la cuestión se pone más difícil en la mayoría de los casos. Y ya cuando empezamos a tratar con servicios más o menos avanzados y necesitamos que estos servicios se ejecuten de una manera especifica con una configuración particular y además requerimos mayor control sobre los mismos, la cosa cambia. Y en este sentido, systemd viene a complicarlo todo.

Pero en fin, esta entrada está lejos de ser una lista exhaustiva de las maldades del monstruo ya por todos conocidas. Tampoco quiero entrar (por ahora) en el tema de la filosofía Unix y toda la discusión al respecto. Simplemente quiero contarles cómo, luego de alcanzar altos niveles de molestia con systemd y su mal comportamiento, atravesé victorioso el proceso de abandonar al daemonio de sistema.

¿Cómo quitarse systemd sin morir en el intento?

La primera cosa que me vino a la mente cuando me planteé esta pregunta fue: ¿por qué no migrar directamente desde Archlinux? Esta idea fue descartada por varias razones. En primer lugar, toda una distro pensada para funcionar con systemd implica la minuciosa tarea de ponerse a trabajar varios días hasta que todo quede funcionando correctamente, eso si andamos con suerte, y la pereza me gana en ese sentido. Por otra parte, el simple hecho de que OpenRC no esté soportado de manera oficial (requiere AUR o el repositorio openrc-eudev) indica claramente que la gente de Arch no está interesada en que se use nada más que systemd en su distro.

De manera que con Arch fuera del tablero, los nombres empezaron a salir a la superficie: FreeBSD, Devuan y Gentoo. FreeBSD resultaría lo más sencillo dado que la conozco bastante habiéndola usado en el ámbito de servidores. Devuan era una opción fuerte, pero la idea de abandonar el rolling-release me pesaba (lo mismo ocurre con FreeBSD). Gentoo sonaba fuerte, pero ya estoy viejo para andar compilando.Sin embargo, pensé en darle la oportunidad.

Así fue que, mientras probaba Gentoo, busqué opciones y di con una versión de Manjaro con OpenRC, lo que me resultó especialmente interesante: inspirada en Arch (aunque con repositorios propios), con pacman como gestor de paquetes y rolling-release. Además, en este caso OpenRC está soportado oficialmente por la distro. Dado que me estaba sobrando una partición, me decidí a instalarla en su formato mínimo para ir analizando cómo se comportan los servicios en esta distro para luego, instalar un entorno de escritorio.

Actualmente mi equipo está completamente libre de systemd con dos distribuciones en paralelo: Gentoo+Gnome y Manjaro-OpenRC+Plasma5. Ambas serán expuestas a muchas pruebas antes de definirme por una (o por quitarlas y buscar otra). A su vez, ambas han mostrado un desempeño excelente, así que es probable que se queden un buen rato por aquí.

Para finalizar  quisiera comentarles los beneficios que he obtenido en el corto plazo. Por un lado, ha mejorado notablemente el tiempo de arranque del sistema (obvio, pero tengo que decirlo), los procesos se mantienen más estables y los servicios configurados de acuerdo a mis necesidades funcionan sin ningún problema. Por el otro lado, he recuperado la sensación de control sobre el sistema y sus procesos de fondo (daemons).

P.D.: quienes estén pensando mudarse a un mundo sin systemd, les recomiendo darse una vuelta por aquí: http://without-systemd.org/wiki/index.php/Main_Page