Instalando Void Linux con ZFS
Después de años cambiando de distribución como si me fuera la vida en ello —a veces por curiosidad, otras simplemente por instalar Gentoo o Arch para hacerme el guay—…
La verdad es que a mi yo de 15 años le encantaba usar Arch, no tanto por el minimalismo, sino por sentirme diferente. Con el tiempo entendí lo que realmente significa el minimalismo, y también me di cuenta de que esas distros tienen más marketing de “instálalo desde cero” que otra cosa. La realidad es que:
Arch tiene el AUR lleno de paquetes desactualizados y su gestor de paquetes a veces te rompe el sistema porque sí, porque le apetece. Los parámetros de pacman parecen sacados de un trabalenguas: son muy confusos y ni el manual te salva. Cuando tienes un error con ese gestor de paquetes sufres, porque muchas veces ocurre sin razón aparente y la documentación no te aclara nada.
Por otro lado, Gentoo tampoco se libra: presume de tener todo compilado a medida para exprimir tu máquina, pero luego usan un lenguaje interpretado para su gestor de paquetes. Y en serio, ¿quién en su sano juicio espera horas para actualizar el sistema? Me parece tedioso e innecesario. Seguro que muchos de los que usan Gentoo terminan recurriendo a Flatpak o AppImages, lo cual es bastante irónico. Para la gente que realmente usa Gentoo por las famosas USE FLAGS para compilar con mayor seguridad, mejor te instalas FreeBSD.
Después de darme cuenta de que siempre fui un idiota por no ver que podía instalar un Debian igual de minimalista, con su estabilidad y su ecosistema sólido, entendí que estaba cometiendo un error. Con el tiempo comencé a juzgar las distribuciones desde otra perspectiva y, a día de hoy, me siento cómodo con la distro de la que hablaremos hoy.
Esto no quita que dentro de unos meses me dé y cambie de nuevo el sistema operativo, porque ya me conozco. Pero lo que tengo claro es que no será Arch.
Así que hoy hablaremos de Void Linux y de mi instalación de escritorio. Mi instalación va dedicada a tener un sistema funcional, no muy tedioso de customizar (suena contradictorio, pero no lo es). Este sistema no lo tengo tan purista porque no lo uso como sistema principal; en mi sistema principal uso FreeBSD en una ThinkPad T480s. Este ordenador de escritorio, a pesar de ser potente, lo uso únicamente para tareas que requieran esa potencia. También le doy uso a Void Linux para gaming, ya que en FreeBSD aún no tengo esa opción.
Volviendo al tema, esta distribución es un producto nacional español. Es independiente, no está basada en ninguna otra distribución. El proyecto se mantiene pequeño, pero el equipo de desarrollo está altamente comprometido. Es una distribución rolling release, lo que significa que tienes actualizaciones constantemente y usas los paquetes en su última versión posible. A pesar de ser un grupo pequeño, la experiencia rolling-release no se rompe.
FILOSOFÍA DE VOID LINUX
Un punto importante es su filosofía, porque si no tienes filosofía como sistema, es que no tienes nada que aportarme. La filosofía de Void se basa en la simplicidad y la flexibilidad. ¿Por qué, a ti, quién te dijo que usar una distribución minimalista sea difícil? Ellos quieren proporcionarte las herramientas y configuraciones más básicas, dejándote a ti el control total de lo que instalas y cómo configuras tu sistema.
Sus características clave son:
-
Su propio init Una de sus características más notables es que utiliza runit en lugar de systemd. runit es un init muy simple, entendible, rápido y, sobre todo, funciona. Escribir scripts para él es muy fácil, mucho más que con systemd.
-
Su propio gestor de paquetes Void usa el gestor de paquetes xbps, que está bien documentado, es estable y eficiente. De hecho, creo que en todo mi trayecto en Linux, en lo que respecta al día a día y al uso práctico, es el único gestor de paquetes con el que jamás he tenido un dependency hell. Además, es rápido como una bala. xbps se compone de varios componentes, cada uno con su propia página de manual:
- xbps-query: Consulta información sobre los paquetes instalados o los disponibles en el repositorio.
- xbps-install: Para instalar paquetes.
- xbps-remove: Elimina paquetes.
- xbps-pkgdb: Mantenimiento de la base de datos de paquetes.
- xbps-src: Herramienta creada por la comunidad que se utiliza para compilar paquetes desde el código fuente. Aunque Void Linux es una distribución binaria por defecto, si un paquete no está disponible como binario o prefieres compilarlo tú mismo, puedes usar xbps-src. Esto da una gran flexibilidad a los usuarios que quieran compilar paquetes específicos o modificar configuraciones antes de la instalación.
-
Facilidad para crear paquetes Crear paquetes
.xbpspara Void no es difícil y está bien documentado. Muchas veces ni siquiera hará falta, porque la comunidad —de la que hablé antes— se hace notar creando un proyecto llamado xdeb, que permite convertir paquetes .deb en paquetes .xbps.
Por todo lo dicho anteriormente, uso Void Linux. Ahora falta hablar de la joya de la corona: ZFS.
ZFS es un sistema de archivos creado por Sun Microsystems. Fue usado en Solaris y, a día de hoy, es uno de los sistemas de archivos por defecto de FreeBSD. A día de hoy no lo tenemos por defecto en los instaladores de las distribuciones GNU/Linux porque al “dictador” Linus Torvalds no le gusta la licencia de ZFS. Pero no te preocupes: ZFS no es privativo ni un virus de la NSA; simplemente no cumple con algunas de las condiciones estrictas que tienen los chicos de GNU con su licencia GPL. Así que, si queremos instalar ZFS en un sistema operativo GNU/Linux, tendremos que hacer malabares, pero valdrá la pena.
¿PERO POR QUÉ ZFS?
-
Protección de datos ZFS es extremadamente sólido y protege tus datos. No se corrompe y, si algo sale mal, el sistema es capaz de detectar y reparar errores automáticamente.
-
Snapshots ZFS permite realizar snapshots de manera eficiente. Esto significa que puedes crear puntos de restauración de tu sistema en cualquier momento, sin mucho esfuerzo. Es ideal para tener un control total sobre las versiones y poder revertir cambios si algo sale mal.
-
Gestión sencilla de discos ZFS facilita la gestión de discos. Con ZFS puedes manejar volúmenes y discos de manera más flexible y sin complicaciones.
-
Compresión integrada ZFS incluye compresión de datos que puedes activar por cada dataset. Aunque podrías pensar que esto ralentiza el sistema, las opciones de compresión ligera no impactan en el rendimiento y te permiten ahorrar espacio sin notarlo.
-
Encriptación ZFS permite la encriptación de datos de forma nativa, sin afectar al rendimiento. Puedes usar algoritmos como AES-256 para asegurar tus datos de manera efectiva.
-
RAID-Z ZFS incluye su propia implementación de RAID, conocida como RAID-Z. Esta solución te permite gestionar la redundancia y la protección de tus datos de forma eficiente, sin necesidad de usar soluciones RAID tradicionales que a veces son más complicadas.
-
Zvols ZFS soporta los zvols, que son discos virtuales dentro de tu almacenamiento ZFS. Son como discos reales, pero virtuales. Son ideales para máquinas virtuales y tienen soporte nativo para snapshots, lo que los hace perfectos para gestionar almacenamiento en entornos virtualizados.
Una vez explicadas las razones de por qué quizá te pueda resultar interesante usar este grandioso sistema operativo, pasemos a lo importante.
¿Cómo instalo Void Linux con ZFS? Vamos a repasar algunos puntos clave antes de la instalación:
Como dijimos antes, a Linus Torvalds no le gusta ZFS y, como al “dictador” no le gusta, nos toca hacer malabares. Esto significa que no podremos usar el instalador automático y habrá que ensuciarse las manos para disfrutar de una buena instalación manual.
Técnicamente, los primeros pasos serían bootear la ISO que quieras, porque lo instalaremos mediante chroot, así que da igual desde qué distribución instalemos Void Linux. Yo, en mi caso, usaré el live USB oficial de Debian con LXQt para escuchar música en el navegador mientras hacemos todo el proceso. Lo importante es que el host, en este momento (el live USB), tenga los paquetes de ZFS instalados, ya que no vienen por defecto en el sistema.
Algo a destacar es que GRUB y ZFS no son una combinación ideal; lo mejor es usar ZFSBootMenu, que es lo que vamos a instalar en esta pequeña guía.
Otro punto a recalcar es que mi máquina host es EFI, por lo que la guía estará redactada para EFI. Realmente los pasos no cambian mucho, pero igualmente tienes las guías oficiales por si necesitas más detalles.
Respecto a ZFS, antes me olvidé de mencionar el concepto clave con el que funciona todo: los zpools. El zpool es la estructura principal de almacenamiento, que puede ser de un solo disco o de varios usando RAID-Z. Imagínalo como el contenedor dentro del cual van los datasets de los que hablamos antes.
Con todo esto claro, podemos comenzar a instalar.
PARTICIONADO DE DISCOS
Estoy en mi Debian LXQt Live, que es la imagen que usaré para instalar Void Linux.! 
|
|
Estoy desde una máquina real. El disco duro está 100% vacío, no tiene absolutamente nada.
Para usar ZFS, tendremos que instalar antes los paquetes necesarios para trabajar con él. En Debian, en este caso, no viene en los repos por defecto, así que tendremos que añadir contrib y non-free al archivo /etc/apt/sources.list. Quedaría así:
deb http://deb.debian.org/debian/ bookworm main non-free-firmware contrib non-free
Con ese repositorio añadido y habiendo actualizado para que los lea, instalamos el paquete zfsutils-linux.
Para que todo funcione, tendremos que cargar los módulos del kernel con modprobe zfs.
Primero crearemos el esquema de partición GPT en el disco duro vacío, y después una partición para /boot/efi, que servirá para que el sistema arranque correctamente. El resto del disco lo dejaremos para la raíz del sistema.
|
|
Con todo funcionando, creamos el zpool. Yo voy a crear uno con un solo disco, sin RAID, y con unas opciones que me interesan.
|
|
Si quieres información ya masticada para crear zpools con RAID, te dejo la wiki de mi colega donde lo explica resumido.
Con el zpool creado, es hora de montar los datasets. Lo primero será crear un dataset padre. Este paso puede parecer confuso porque aún no montamos nada. El propósito es que, dentro de él, montaremos el dataset de la raíz del sistema. Esto lo hace más flexible si más adelante quieres meter otro sistema operativo dentro del ZFS.
|
|
ZFS funciona distinto a otros sistemas de archivos. Cuando le das una ruta a un dataset, por defecto lo montará ahí. Si, por ejemplo, estás usando un USB para reparar el sistema, intentará montarlo igualmente a menos que se lo impidas, lo cual puede liar las cosas.
Usamos canmount=noauto para evitar que ZFS monte automáticamente zroot/ROOT/void en /. Así, si metes otro sistema en el mismo zpool, no chocará al montar / por defecto. Esto te da control sobre cuándo y cómo se monta el sistema. Y en más casos, ser organizado simplemente es necesario.
Como /home, /etc y demás se montarán solo cuando lo haga /zroot/ROOT/void, no hay que poner canmount=noauto en ellos.
|
|
Como no hay que especificar tamaños, podemos separar el sistema como queramos. Esto da mucho más control sobre los datos, permitiendo restauraciones más finas si algo se rompe. Con esto, todas las particiones ya estarían montadas, porque antes montamos la raíz en /mnt.
Ahora vamos a crear también la partición /boot/efi.
|
|
Para que ZFS arranque más rápido, podemos guardar la configuración del pool en un archivo de caché. Esto evita tener que buscar todos los discos cada vez que arranca.
|
|
El hostid es un identificador único que usa ZFS para saber a qué máquina pertenece el zpool. Ayuda a evitar movidas raras si lo mueves de sistema.
|
|
PREPARANDO EL SISTEMA
Llegados a este punto, nos vamos a la web de Void Linux.
Ahí descargamos el tarball, según tus gustos puedes bajarte la version de musl o la de glibc. A mí me mola tener un sistema que funcione de una, así que tiro con la versión con glibc.
|
|
Con eso ya tenemos el sistema operativo ahí. Ahora toca meterse dentro, así que hay que bindear los recursos esenciales del sistema hacia /mnt.
|
|
Nos metemos con chroot al nuevo Void.
|
|
¡Ya estamos dentro del esqueleto del SO!
Toca instalar los paquetes base. En este caso, instalamos base-system, que trae lo esencial.
|
|
Cambiamos el hostname, zona horaria, y editamos un par de archivos para generar bien las locales.
|
|
Creamos el usuario personal y le ponemos contraseña, igual que a root.
|
|
Vamos a añadir /boot/efi al bootstrap. ZFS no hace falta porque no se mete en el fstab, no sabría leerlo.
|
|
Esto hace falta para que ZFS se incluya bien en el initramfs.
|
|
Instalamos ZFS:
|
|
Para activar ZFSBootMenu en zroot/ROOT, solo hay que ponerle una propiedad. Así, todos los subdatasets dentro lo heredan. Por ejemplo, pasar quiet al kernel sin tener que repetirlo.
|
|
Como ya hemos dicho, ZFSBootMenu »> GRUB, así que vamos directos a por el EFI.
|
|
Instalamos la imagen descargada con efibootmgr:
|
|
Para terminar, que Void haga su magia.
|
|
Desmontamos todo y reiniciamos.
|
|
PRIMER INICIO
Si el arranque se instaló correctamente nos encontraremos en este menú que practicamente actua igual que el grub que bien conocemos.
Si todo ha salido bien, traas iniciar el sistema nos encontraremos en la terminal de inicio. No tenemos nada instalado, asi que tendremos que ponernos manos a la obra, como no tenemos sudo/doas configurado hay que entrar con el usuario root.
CONFIGURACION DE RED
La instalación al ser super minima tan siquiera trata de encender la interfaz de red por lo que será trabajo nuestro, veremos cual es nuestra interfaz de red usando el comando ip adress:
|
|
Con hay que levantar la interfaz y obtendremos la direccion IP.
Añadimos el servidor DNS:
|
|
Probamos la comunicacion con la red, con ip directa y con dominio para verificar que todo está funcionando correctamente.
|
|
Ahora añadiremos una configuracion para esta interfaz para que el sistema sepa como debe de actuar con nuestra interfaz, tendremos que editar el archivo /etc/network/interfaces, Este archivo es el formato que adoptaron debian, para usarlo de esta manera en nuestro void tendremos que instalar el paquete ifupdown.
|
|
Entonces ahora cada vez que reiniciemos deberiamos tener la red configurada correctamente.
Ya que estamos, actualizamos el sistema
|
|
USO BÁSICO DEL GESTOR DE PAQUETES
Instalación y actualización de paquetes: Con xbps-install podremos instalar paquetes y actualizarlos como en cualquier otro gestor de paquetes.
|
|
Eliminar paquetes: Con xbps-remove podremos desinstalar paquetes del sistema:
|
|
Búsqueda de paquetes: Con xbps-query podremos listar y buscar paquetes instalados del sistema o del repositorio.
|
|
Reconfigurar paquetes: xbps-reconfigure es una herramienta de Void para volver a “configurar” paquetes que estén a medias o para aplicar de nuevo sus scripts de instalación.
|
|
Base de datos: xbps-pkgdb es la base de datos donde XBPS guarda información sobre los paquetes instalados en el sistema, incluyendo los archivos que instalaron, sus versiones, dependencias, y el estado de cada paquete (como si está bloqueado para actualizaciones, si fue instalado manualmente o como dependencia).
Estos estados pueden ser los siguientes:
-
auto: El paquete fue instalado como dependencia.
-
manual: El paquete fue instalado explícitamente por el usuario.
-
hold: El paquete no se actualizará.
-
unhold: El paquete se actualizará como cualquier otro.
-
repolock: El paquete solo aceptará actualizaciones del repositorio donde se instaló.
-
repounlock: El paquete puede actualizarse desde cualquier repositorio.
|
|
USO BÁSICO DEL INIT RUNIT
runit como ya comenté es un sistema de gestión de servicios que se utiliza para iniciar, detener y gestionar los servicios en el sistema.
La principal diferencia de runit es su minimalismo que lo veremos reflejado a simple vista utilizándolo.
runit se organiza en tres fases:
-
Inicio (1): Arranca el sistema.
-
Servicios (2): Gestiona y ejecuta los servicios que están activos. Esta es la fase en la que el sistema está en funcionamiento.
-
Cierre (3): Maneja la parada del sistema.
A diferencia de otros inits, runit no tiene un “daemon” central que controle todo. En su lugar, runit simplemente verifica si un servicio está activo observando enlaces simbólicos en el directorio /var/service/, donde cada servicio tiene su propio script de inicio. Si el enlace está presente, el servicio se ejecuta. Cuando descargas un paquete, los scripts de inicio de este paquete están en /etc/sv.
Lo que tendremos que hacer es un enlace simbólico desde /etc/sv/paquete hasta /var/service. Runit cargará automáticamente al inicio estos scripts.
|
|
Luego podremos gestionar estos servicios con la herramienta [sv.
|
|
Diferencia entre UP y DOWN: Al iniciar un servicio con sv up este servicio volverá a correr automáticamente ya sea parado por sv stop o mates el PID. Quiere decir que si paras el servicio, a los segundos el solito volverá a iniciar, para revertir esto debes usar sv down.
CONFIGURANDO DOAS
Para gustos colores, pero yo le tiro más a doasDoque a sudo. Para empezar a usar doas deberemos editar el archivo /etc/doas.conf
|
|
Con eso ya podré cambiar al usuario sin problemas, sin depender de estar en root.
ZSH > BASH
A este punto de la instalación, estoy bastante harto de la shell que traigo. Un amigo subió un artículo en su wiki que me vendrá de perlas para instalar zsh. También instalaré git porque posteriormente lo necesitaré.
|
|
Posteriormente, creamos el archivo .zshrc que nos brindan la primera vez que iniciamos zsh:
|
|
Mete lo siguiente en tu archivo ~/.zshrc:
|
|
Luego procedemos con la descarga del proyecto y la configuración previa para que todo funcione:
|
|
Dentro de ~/.zsh_plugins, recomiendo los siguientes plugins, cabe recalcar que el formato es el que ves y quiere referirse a la ruta del proyecto en GitHub.
|
|
Después de eso, ejecutaremos zsh nuevamente y veremos que inicia un instalador, eso indica que ya está en proceso de dejar los plugins de ~/.zsh_plugins en su sitio.
Teniendo configurada la nueva shell ya podríamos cambiarla para empezar a usarla por defecto con el comando chsh.
|
|
Si salimos con exit de las shells que hemos ido abriendo una encima de otra, volveremos al login. Al volver a iniciar sesión estará zsh.
INSTALAR ENTORNO XFCE4
Tras entender cómo funciona todo creo que estamos capacitados totalmente para instalar un entorno de escritorio e iniciarlo sin ningún tipo de problema.
Voy a instalar lightdm como display manager, pipewire como sistema de audio con pavucontrol para visualizarlo, entre otros paquetes. Como entorno usaré xfce, pero para gustos colores.
|
|
Iniciaré lightdm y algunos servicios que nos harán falta para que todo el entorno de escritorio funcione.
|
|
Haré reboot para ver si inicia lightdm al encender el ordenador.

¡Finalmente, Void Linux!
Con todos estos pasos tenemos un sistema Void Linux (root on ZFS) funcional. En la parte 2 enseñaré configuraciones personales que yo tengo en mi instalación, como el entorno de escritorio, más sobre ZFS y una recomendación de programas u otros tutoriales que sean útiles para el día a día de Void.
