Astuces pour GNU Guix

par Julien Lepiller — lun. 15 janvier 2018

Utiliser un clone du dépôt

La liste des paquets disponibles pour guix est en réalité la liste des recettes. Ces recettes se trouvent dans le dépôt git du projet. La commande guix pull crée simplement un clone et le compile, à chaque fois. Si vous souhaitez développer et proposer des patchs, ou pour des raisons de simplicité (voir plus loin), il est possible d'utiliser un dépôt cloné.

git clone https://git.sv.gnu.org/git/guix.git
cd guix
./bootstrap
./configure --prefix=/usr --localstatedir=/var \
  --sysconfdir=/etc
make

Maintenant que c'est construit, il faut indiquer à guix que l'on souhaite qu'il utilise ce dépôt :

ln -sfv ~/guix ~/.config/guix/latest

Une erreur de compilation

Parfois, l'interface de programmation interne de guix change. Les fichiers déjà compilés ne sont plus compatibles avec la nouvelle version. Cela pose un problème au compilateur scheme qui ne sait pas bien ce qu'il doit recompiler. Pour cela, utilisez la cible « clean-go » pour supprimer les fichiers compilés, et recommencez :

make clean-go && make

Un dépôt supplémentaire

Il est possible d'ajouter des paquets personnels dans un dépôt à part. Il suffit pour cela de créer un répertoire dans lequel seront installés les paquets:

mkdir guix-repo

Ensuite, il suffit de créer des fichiers dans ce répertoire en suivant le modèle des fichiers de gnu/packages/*.scm. Dans le nom du module, il faut indiquer le chemin par rapport à « guix-repo ». Par exemple, pour « guix-repo/non-free.scm », le nom de module associé est (non-free).

Ensuite, il suffit d'ajouter une variable d'environnement (par exemple dans votre .bashrc) :

export GUIX_PACKAGE_PATH=~/guix-repo

Si vous le souhaitez, j'ai un dépôt supplémentaire avec des logiciels que je suis en train d'intégrer à guix, ou des logiciels qui ne respectent pas les conditions d'entrées dans le dépôt principal de Guix.

git clone https://framagit.org/tyreunom/guix-more.git
export GUIX_PACKAGE_PATH=~/guix-more

Plus de mémoire :(

Note : si vous lisez cet article maintenant, cette section n'est plus valide pour les versions actuelles de Guix. Maintenant, il suffit de trouver un numéro de commit construit par hydra ou berlin et de lancer guix pull --commit=.... Pour trouver ce numéro, il suffit de trouver le dernier commit de guix/modular construit par hydra ou berlin. La version de Guix correspondant à ce commit sera téléchargé directement depuis les serveurs, sans avoir besoin de la compiler, donc sans utiliser toute votre mémoire vive !

La commande guix pull peut demander pas mal de mémoire vive, jusqu'à 2 Go. Cela est dû à un bogue dans le compilateur scheme difficile à corriger. Le problème, c'est que sur de plus petites machines, la compilation se met à swapper et ça prend une éternité à finir.

Si vous possédez une machine plus puissante de la même architecture, vous pouvez transférer un dépôt git précompilé sur la machine moins puissante. Sur la machine puissante :

cd ~/guix; make
tar cf ../guix.tar *
cd ..
gzip guix.tar
scp guix.tar.gz <machine moins puissante>

Ensuite sur la machine la moins puissante :

cd ~
mkdir guix
cd guix
tar xf ../guix.tar.gz
ln -sfv ~/guix ~/.config/guix/latest

Invalider le cache de substituts

Il semble que le cache de substituts ne soit pas toujours très à jour et ne s'invalide parfois pas tout seul.

rm /var/guix/substitute/cache/<hash>