deustux

Instalando Void Linux con ZFS

Void_Linux_logo.svg

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:


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?


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.! Debian Live LXQt

1
2
3
4
5
6
7
root@debian:~# lsblk
NAME  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0   7:0    0  2.5G  1 loop /usr/lib/live/mount/rootfs/filesystem.squashfs
                               /run/live/rootfs/filesystem.squashfs
sr0    11:0    1    3G  0 rom  /usr/lib/live/mount/medium
                               /run/live/medium
sda   254:0    0   223.6G  0 disk 

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.

1
2
3
parted /dev/sda --script mklabel gpt        # Crea tabla GPT
parted /dev/sda --script mkpart primary 1MiB 801MiB   # Partición de 800 MiB
parted /dev/sda --script mkpart primary 801MiB 100%   # El resto del disco

Con todo funcionando, creamos el zpool. Yo voy a crear uno con un solo disco, sin RAID, y con unas opciones que me interesan.

1
zpool create -f -o ashift=12 -O acltype=posixacl -O xattr=sa -O compression=lz4 -O relatime=on -m none zroot /dev/sda2

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.

1
2
3
4
5
zfs create -o mountpoint=none zroot/ROOT
zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/void
zpool export zroot
zpool import -N -R /mnt zroot
zfs mount zroot/ROOT/void

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.

1
2
3
4
5
6
7
8
zfs create -o mountpoint=/home zroot/ROOT/void/home
zfs create -o mountpoint=/usr zroot/ROOT/void/usr
zfs create -o mountpoint=/usr/local zroot/ROOT/void/usr/local
zfs create -o mountpoint=/var zroot/ROOT/void/var
zfs create -o mountpoint=/etc zroot/ROOT/void/etc
zfs create -o mountpoint=/srv zroot/ROOT/void/srv
zfs create -o mountpoint=/opt zroot/ROOT/void/opt
zfs create -o mountpoint=/tmp -o compression=lz4 -o atime=off -o exec=off -o setuid=off zroot/ROOT/void/tmp

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.

1
2
3
mkfs.vfat -F32 /dev/sda1
mkdir -p /mnt/boot/efi
mount /dev/sda1 /mnt/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.

1
2
mkdir -p /mnt/etc/zfs 
zpool set cachefile=/mnt/etc/zfs/zpool.cache zroot

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.

1
2
zgenhostid -f 0x00bab10c
cp /etc/hostid /mnt/etc/hostid

PREPARANDO EL SISTEMA

Llegados a este punto, nos vamos a la web de Void Linux.
void-rootfs 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.

1
tar -xvf void.tar.xz -C /mnt

Con eso ya tenemos el sistema operativo ahí. Ahora toca meterse dentro, así que hay que bindear los recursos esenciales del sistema hacia /mnt.

1
2
3
4
mount --rbind /dev /mnt/dev && mount --make-rslave /mnt/dev
mount --rbind /sys /mnt/sys && mount --make-rslave /mnt/sys
mount --rbind /proc /mnt/proc && mount --make-rslave /mnt/proc
mount --rbind /run /mnt/run && mount --make-rslave /mnt/run

Nos metemos con chroot al nuevo Void.

1
chroot /mnt

¡Ya estamos dentro del esqueleto del SO!
Toca instalar los paquetes base. En este caso, instalamos base-system, que trae lo esencial.

1
xbps-install -Sy base-system

Cambiamos el hostname, zona horaria, y editamos un par de archivos para generar bien las locales.

1
2
3
4
5
6
7
echo "void" > /etc/hostname
ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime

$EDITOR /etc/locale.conf
$EDITOR /etc/default/libc-locales

xbps-reconfigure -f glibc-locales

Creamos el usuario personal y le ponemos contraseña, igual que a root.

1
2
3
4
useradd user

passwd user
passwd root

Vamos a añadir /boot/efi al bootstrap. ZFS no hace falta porque no se mete en el fstab, no sabría leerlo.

1
cat /proc/mounts | grep /boot/efi > /etc/fstab

Esto hace falta para que ZFS se incluya bien en el initramfs.

1
2
3
4
5
cat << EOF > /etc/dracut.conf.d/zol.conf
nofsck="yes"
add_dracutmodules+=" zfs "
omit_dracutmodules+=" btrfs "
EOF

Instalamos ZFS:

1
xbps-install -S 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.

1
zfs set org.zfsbootmenu:commandline="quiet" zroot/ROOT

Como ya hemos dicho, ZFSBootMenu »> GRUB, así que vamos directos a por el EFI.

1
2
3
xbps-install -S curl
mkdir -p /boot/efi/EFI/ZBM
curl -o /boot/efi/EFI/ZBM/VMLINUZ.EFI -L https://get.zfsbootmenu.org/efi

Instalamos la imagen descargada con efibootmgr:

1
2
3
4
5
xbps-install -S efibootmgr
mount -t efivarfs none /sys/firmware/efi/efivars
efibootmgr -c -d "/dev/sda" -p "1" \
  -L "ZFSBootMenu" \
  -l '\EFI\ZBM\VMLINUZ.EFI'

Para terminar, que Void haga su magia.

1
xbps-reconfigure -fa

Desmontamos todo y reiniciamos.

1
2
3
4
5
6
exit
umount /mnt/boot/efi
umount -lf /mnt
zfs umount -a
zpool export zroot
reboot

PRIMER INICIO

Si el arranque se instaló correctamente nos encontraremos en este menú que practicamente actua igual que el grub que bien conocemos.

inicio 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.

login_void

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:

1
2
ip link set eno1 up
dhcpcd eno1

Con hay que levantar la interfaz y obtendremos la direccion IP.

Añadimos el servidor DNS:

1
echo "nameserver 1.1.1.1" > /etc/resolv.conf

Probamos la comunicacion con la red, con ip directa y con dominio para verificar que todo está funcionando correctamente.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# ping -c1 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=4.27 ms

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 4.268/4.268/4.268/0.000 ms
# ping -c1 google.com
PING google.com (142.250.200.78) 56(84) bytes of data.
64 bytes from mad07s24-in-f14.1e100.net (142.250.200.78): icmp_seq=1 ttl=118 time=4.22 ms

--- google.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 4.224/4.224/4.224/0.000 ms
#

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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# /etc/network/interfaces
auto eno1
iface eno1 inet static
   address 192.168.70.88
   netmask 255.255.255.0
   gateway 192.168.70.1
   
# PARA DHCP
#auto eno1
#iface eno1 inet dhcp

Entonces ahora cada vez que reiniciemos deberiamos tener la red configurada correctamente.

Ya que estamos, actualizamos el sistema

1
xbps-install -Su

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.

1
2
3
4
5
6
7
xbps-install paquete # Instala el paquete
xbps-install -S # Sincroniza los repositorios
xbps-install -u # Actualiza los paquetes
xbps-install -Su # Ambas
xbps-install -Syu paquete # Sincroniza, actualiza, salta confirmación (y/n) e instala el paquete
xbps-install -g paquete # Descarga el paquete sin instalarlo, lo guarda en un tarball en formato .xbps
xbps-remove firefox -r /mnt # Con el -r actuarás en un chroot

Eliminar paquetes: Con xbps-remove podremos desinstalar paquetes del sistema:

1
2
3
4
xbps-remove -Oo # Elimina los paquetes que nadie necesita ya y limpia la caché borrando los .xbps que ya no valgan
xbps-remove firefox # Borra Firefox sin borrar las dependencias
xbps-remove -R firefox # Borra Firefox y las dependencias de Firefox sin borrar las dependencias que son necesarias para otros paquetes.
xbps-remove firefox -r /mnt # Con el -r actuarás en un chroot

Búsqueda de paquetes: Con xbps-query podremos listar y buscar paquetes instalados del sistema o del repositorio.

1
2
3
4
5
6
7
8
xbps-query -l # Lista de paquetes instalados en el sistema
xbps-query -R paquete # Busca información del paquete en el repositorio
xbps-query -s paquete # Busca un paquete en el repositorio por nombre o descripción.
xbps-query -Rs busqueda_paquete # Buscaremos por nombre o descripción y mostraremos.
xbps-query -x firefox # Ver todas las dependencias de un paquete
xbps-query -X sudo # Buscar quién depende de un paquete
xbps-query -m # Listar paquetes instalados a mano y no por dependencias
xbps-query -f sudo # Listar los archivos que ha instalado el paquete en el sistema

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.

1
2
3
xbps-reconfigure firefox
xbps-reconfigure -f firefox # Forzar
xbps-reconfigure -a # Reconfigura todo

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:

1
2
3
4
xbps-pkgdb -a # Procesa los datos para luego poder usarlos
xbps-pkgdb -a -v # Procesa los datos y te enseña cómo lo está haciendo
xbps-pkgdb -m mode firefox # Ponle uno de los modos mencionados anteriormente a un paquete
xbps-pkgdb -m hold firefox # El paquete no se actualizará

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:

  1. Inicio (1): Arranca el sistema.

  2. Servicios (2): Gestiona y ejecuta los servicios que están activos. Esta es la fase en la que el sistema está en funcionamiento.

  3. 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.

1
2
ln -s /etc/sv/tor /var/service # Añadir
rm -rf /var/service/tor # Quitar

Luego podremos gestionar estos servicios con la herramienta [sv.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
sv start sshd # Iniciar el servicio
sv stop sshd # Parar el servicio
sv restart sshd # Reiniciar el servicio

sv force-stop servicio   # Mata el proceso con SIGTERM a lo bestia
sv force-restart servicio # Igual, pero reinicia
sv force-down servicio    # Lo mata y cambia el estado a "down"

sv status sshd # Ver el estado del servicio
sv status * # Ver el estado de todos los servicios

sv up sshd # Explicado más adelante
sv down sshd # Explicado más adelante

sv log tor # Ver los logs del servicio

sv check sshd # Comprueba si el run script es válido y el servicio responde

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

1
2
xbps-install opendoas
echo "permit nopass user as root" > /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é.

1
doas xbps-install zsh git

Posteriormente, creamos el archivo .zshrc que nos brindan la primera vez que iniciamos zsh:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[user@void ~]$ zsh
This is the Z Shell configuration function for new users,
zsh-newuser-install.
You are seeing this message because you have no zsh startup files
(the files .zshenv, .zprofile, .zshrc, .zlogin in the directory
~). This function can help you with a few settings that should
make your use of the shell easier.

You can:

(q)  Quit and do nothing.  The function will be run again next time.

(0)  Exit, creating the file ~/.zshrc containing just a comment.
     That will prevent this function from being run again.

(1)  Continue to the main menu.

--- Type one of the keys in parentheses ---

Teclea: 0

Mete lo siguiente en tu archivo ~/.zshrc:

1
2
3
4
source ${HOME}/.antidote/antidote.zsh
antidote load ${ZDOTDIR:-$HOME}/.zsh_plugins

PROMPT="%F{5}%~ [%F{090}%m%f%F{5}]%f%F{red} %%%f "

Luego procedemos con la descarga del proyecto y la configuración previa para que todo funcione:

1
2
3
git clone --depth=1 https://github.com/mattmc3/antidote.git ${ZDOTDIR:-$HOME}/.antidote
touch ~/.zsh_history
touch ~/.zsh_plugins

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.

1
2
3
4
5
6
zsh-users/zsh-syntax-highlighting
zsh-users/zsh-autosuggestions
zsh-users/zsh-history-substring-search
zsh-users/zsh-completions
rupa/z
MichaelAquilina/zsh-you-should-use

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.

1
2
3
4
5
~ [void] % chsh
Changing shell for user.
Password:
New shell [/bin/bash]: /usr/bin/zsh
Shell changed.

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.

1
doas xbps-install -S xorg lightdm lightdm-gtk-greeter pipewire pavucontrol wireplumber xfce4 firefox-esr

Iniciaré lightdm y algunos servicios que nos harán falta para que todo el entorno de escritorio funcione.

1
2
3
doas ln -s /etc/sv/lightdm /var/service
doas ln -s /etc/sv/dbus /var/service
doas ln -s /etc/sv/polkitd /var/service

Haré reboot para ver si inicia lightdm al encender el ordenador.

lightdm xfce


¡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.

#linux #zfs #void linux