Instalación de paquetes con GUIX

Introducción

Guix é unha aplicación de terminal de GNU para a instalación de paquetes. Está baseada en Nix ca sua xestión de paquetes funcional. Isto fai que dada unha entrada a saída sempre será a mesma. Deste xeito é posible ter o sistema nun estado estable. Quero dicir, co arquivo de definición dos programas instalados, poderemos formatear, movernos a outro equipo, etc, conservando os mesmos programas e versións.

Ademáis, se non o executamos como administrador, as apliacións serán instaladas na nosa carpeta de usuario e non afectará a outras partes do sistema, ou a outros usuarios. O cal incrementa a seguridade ao estar contido o programa. Por exemplo, sen poder crear, modificar ou eliminar ficheiros fora dos directorios de instalación e configuración. Guix faise cargo de instanciar a configuración do sistema de xeito transaccional, reproducible e sen estado global. Isto último é especialmente interesante para desenvolvedores ao ter un entorno facilmente reproducible entre sistemas, evitando o inferno das dependencias. Ao ter distintas aplicacións que requiran distintas versións de librarías. Con Guix as aplicacións están contidas cas suas dependencias e non interfiren cas de outras aplicacións. Xa o propio sistema se encarga de evitar duplicar estas librarías internamente.

Instalación

Guix pode ser instalado sobre calquer sistema GNU/Linux e tamén está dispoñible como imaxe para QEMU, Guix System, unha distribución propia.

Para instalalo en OpenSuse Tumbleweed, chega con facelo co uso de Zypper, xa que é un paquete que está no repositorio.

sudo zypper install guix

NOTA: a forma de xestionar os paquetes de GUIX, fai que non interfira con outras ferramentas do sistema. Como zypper no caso de OpenSuse. Para isto fai uso de dous directorios, que soen ser /gnu/store e /var/guix. Co que non afecta aos arquivos do sistema en /etc.

Outras distros poden requerir outros xeitos de instalar, como por exemplo co uso de apt en Debian e derivadas.

Se non estivese nos repositorios da nosa distro, podemos recurrir a instalación dende o binario. Tal e como se explica na guía.

Configuración

Unha vez instalado crearemos o grupo guixbuild con sudo groupadd --system guixbuild. Para a continuación engadir os usuarios de construcción. Estes non son os usuarios regulares do sistema, se non usuarios que o demo de guix utilizará para compillar os paquetes. Crearemos dez deles.

for i in `seq -w 1 10`; do
  sudo useradd -c "Guix build user $i" -d /var/empty \
    -g guixbuild -G guixbuild \
    -M -N -r -s /usr/sbin/nologin guixbuilder$i
done

Despois activamos o demo para que o comando poida comunicarse con el. Sen isto non funcionará, dando un erro conforme o servizo non está en execución.

sudo systemctl enable --now guix-daemon

Saída agardada

Created symlink '/etc/systemd/system/multi-user.target.wants/guix-daemon.service''/usr/lib/systemd/system/guix-daemon.service'.

Agora se comprobo o estado do demo:

systemctl status guix-daemon

Saída agardada

● guix-daemon.service - Build daemon for GNU Guix
     Loaded: loaded (/usr/lib/systemd/system/guix-daemon.service; enabled; preset: disabled)
     Active: active (running) since Sat 2026-03-21 17:49:48 CET; 55s ago
 Invocation: 61e440c069ac4666b06065fe0c82f3b7
   Main PID: 76846 (guix-daemon)
      Tasks: 1 (limit: 8192)
        CPU: 12ms
     CGroup: /system.slice/guix-daemon.service
             └─76846 /usr/bin/guix-daemon --build-users-group=guixbuild

Antes de comezar a instalar paquetes, precisamos instalar os paquetes de localización de guix e definir a variable GUIX_LOCPATH.

guix install glibc-locales && export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale

Agora comprobamos que o socket estea accesible:

ls -l /var/guix/daemon-socket/socket

Saída agardada

srw-rw-rw-. 1 root root 0 Mar 21 17:49 /var/guix/daemon-socket/socket

Instalamos guix install glibc-locales

guix install glibc-locales

E configuramos a variable co path, mellor incluílo na configuración da terminal para facelo permanente.

export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale

Comandos

  1. Obter o listado de paquetes: guix pull Exemplo de saída
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%
0,0 MB will be downloaded
 le-certs-1  5KiB                                                                          438KiB/s 00:00 [##################] 100.0%
Updating channel 'guix' from Git repository at 'https://git.savannah.gnu.org/git/guix.git'...
  1. Listar paquetes dispoñibles: guix package --list-available Listado completo dos paquetes

  2. Buscar un paquete: guix search nome do paquete

guix search vlc

Exemplo de saída

name: vlc
version: 3.0.23
outputs:
+ out: everything
systems: x86_64-linux
dependencies: alsa-lib@1.2.11 avahi@0.8 bash-minimal@5.2.37 bison@3.8.2 dav1d@1.5.1 dbus@1.16.2 eudev@3.2.14 ffmpeg@8.0 flac@1.5.0
+ flex@2.6.4 fontconfig-minimal@2.16.0 freetype@2.13.3 fribidi@1.0.12 gettext-minimal@0.23.1 gnutls@3.8.9 liba52@0.8.0
+ libarchive@3.7.7 libass@0.15.1 libavc1394@0.5.4 libbluray@1.3.4 libcaca@0.99.beta19 libcddb@1.3.2 libdca@0.0.7 libdvbpsi@1.3.3
+ libdvdnav@6.1.1 libdvdread@6.1.3 libebml@1.4.5 libgcrypt@1.11.0 libidn@1.43 libkate@0.4.1 libmad@0.15.1b libmatroska@1.7.1
+ libmicrodns@0.1.2 libmodplug@0.8.9.0 libmpeg2@0.5.1 libogg@1.3.6 libpng@1.6.39 libraw1394@2.1.2 librsvg@2.58.5 libsamplerate@0.1.9
+ libsecret@0.21.7 libssh2@1.11.1 libtheora@1.1.1 libupnp@1.14.30 libva@2.22.0 libvdpau@1.5 libvnc@0.9.15 libvorbis@1.3.7
+ libvpx@1.15.2 libx264@165-0.0480cb0 libxext@1.3.6 libxi@1.8.2 libxinerama@1.1.5 libxml2@2.14.6 libxpm@3.5.17
+ livemedia-utils@2025.11.06 lua@5.2.4 mesa@25.2.3 opus@1.5.2 perl@5.36.0 pkg-config@0.29.2 protobuf@3.21.9 pulseaudio@16.1
+ python-wrapper@3.11.14 qtbase@5.15.17 qtsvg@5.15.17 qtx11extras@5.15.17 samba@4.18.1 sdl-image@1.2.12 sdl12-compat@1.2.68
+ speex@1.2.1 speexdsp@1.2.1 srt@1.4.4 taglib@1.13.1 twolame@0.4.0 unzip@6.0 wayland-protocols@1.45 wayland@1.24.0 x265@3.5
+ xcb-util-keysyms@0.4.1
location: gnu/packages/video.scm:2489:2
homepage: https://www.videolan.org/
license: GPL 2+
synopsis: Audio and video framework  
description: VLC is a cross-platform multimedia player and framework that plays most multimedia files as well as DVD, Audio CD,
+ VCD, and various streaming protocols.
relevance: 32
  1. Instalar un paquete: guix install paquete
guix install vlc
The following package will be installed:
  vlc 3.0.23
  
substitute: updating substitutes from 'https://ci.guix.gnu.org'... 100.0%

Executando programas

Parece que por defecto os programas instálanse no directorio ~/.guix-profile/bin, así que para executalo sería ~/.guix-profile/bin/vlc.

Para simplificar, no meu .bashrc engadín a seguinte liña

export PATH=~/bin:~/.cargo/bin:~/scripts:~/.guix-profile/bin:$PATH

Con export imos establecer o valor na variable PATH. Despois do igual están as rutas que queremos incluír. Compre notar como cada ruta está separada con :. E sobre todo non esquecer engadir ao final $PATH, que inclúe toda-las rutas que existían previamente. Neste caso creadas polo propio sistema. Se non o facemos así, teremos problemas ao faltar certas rutas cando traballemos.

Conclusión

Neste punto xa teríamos GUIX configurado para instalar aplicacións. Seguirei vendo outras opcións. Por exemplo cando compre actualizar, ou como facer para definir unha configuración con versións concretas. De momento non é máis que curiosidade por este sistema, xa que cousas como VLC están no repo de OpenSuse. Pero de cara ao desenvolvemento, poder contar con configuracións estables para as aplicacións pode estar ben.

En definitiva ao igual que ocorre con Nix ou Flatpak, as aplicacións non interfiren unhas cas outras, nin co sistema. Co que poderemos xerar un paquete que será instalable en calquer sistema cas dependencias necesarias. Repito, dun xeito illado e seguro, evitando que o programa afecte aos aplicativos na carpeta /etc.

Fontes