63 views
# Guix : un outil pour les remplacer tous :::info Cet article, en cours de rédaction, est placé pour la licence CC BY SA Auteur : Andréas Livet ::: [TOC] ## Introduction Je suis tombé très récemment sur [une dépèche linuxfr](https://linuxfr.org/news/gnu-guix-version-un-point-zero) annonçant la sortie de la version 1.0 du gestionnaire de paquet [Gnu Guix](https://www.gnu.org/software/guix/) et dans la foulée de la distribution GuixSD et j'ai littérallement pris une claque ! Comme me l'a fait [remarquer quelqu'un dans les commentaire](https://linuxfr.org/news/gnu-guix-version-un-point-zero#comment-1773244), le projet n'est pas tout jeune (7 ans de mémoire), mais c'est passé à travers des mailles de mon filet de veille techno tout ce temps. Je compte bien rattraper le retard car cet outil est tout bonnement hallucinant et je vous invite vraiment à creuser les différentes sources que vous trouverez car, que vous soyez admin sys., devops, développeurs ou simple amateurs de distributions libres, Guix est fait pour vous ! Cet article est une tentative, sans doute très imparfaite, de montrer l'ensemble des cas où Guix remplace avantagement d'autres outils. Vous allez voir, les champs d'application sont vastes ! Dans l'histoire de l'informatique, des outils/approches, sont venues totalement boulverser nos manières de voir les choses et de travailler, Guix en fait partie. ## Installation Tout d'abord, j'ai installé Guix très facilement en suivant [les instructions et l'installeur officiel](https://www.gnu.org/software/guix/manual/en/html_node/Binary-Installation.html). Ça se résume à : ```bash curl https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh | sudo bash ``` Et à suivre les instructions à l'écran. ## Guix pour remplacer les gestionnaires de paquets Guix étant un gestionnaire de paquet avant tout, il est tout naturel qu'il puisse constitué un remplaçant des autres gestionnaires de paquets existants. Si, comme moi (ou comme Brien Lunduke, note : retrouver la vidéo Linux Sucks sur peertube), vous trouviez qu'il y a déjà trop de fragmentation dans le desktop et qu'il faudrait juste choisir une bonne fois pour toute un format de paquet (par exemple les `.deb`) et un gestionnaire de paquet (par exemple `apt`) et ainsi avoir une compatibilité entre les distros, Guix pourrait être un bon candidat ! En effet, Guix a de nombreux avantages par rapport à ses concurrents : * Il est transactionnel, ce qui signifie que si l'installation des paquets n'aboutie pas pour une raison ou pour une autre (coupure d'alimentation), le système n'est pas impacté * Il permet d'avoir plusieurs versions d'un même logiciels installées sur la même machine sans aucun conflit * Il permet d'installer les paquets sans avoir les droits d'administrations (oubliez `sudo`) * Il est possible de revenir, à tout moment, à un état antérieur du système et donc être sûr de retrouver un état fonctionnel si jamais une mise à jour n'a pas fonctionnée. Guix à d'autres avantages, mais déjà ces 4 là le rendent important. ### Guix pour remplacer `apt` Voici par exemple comment je remplace progressivement l'utilisation de `apt` (et `snap`, voir plus bas) sur mon système Xubuntu 18.04. #### Avant toute choses : gestion des locales Commes les paquets Guix ne sont pas forcément compilés avec la même libc que les paquets de notre système d'exploitation, il faut en premier lieu installer le paquet responsable de la gestion des locales de la libc, comme c'est précisé [dans la doc](https://www.gnu.org/software/guix/manual/en/html_node/Application-Setup.html#Locales) `guix install glibc-locales` Puis rajouter cette variable d'environnement à tous vos fichiers de session (`.bashrc`, `.xsessionrc` etc) : `export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale` Sans cela, vous risquez d'avoir, [comme moi, ce genre de problème](https://issues.guix.info/issue/36180) #### Installation de paquets Après avoir installer guix (voir plus haut). Installer un paquet avec Guix est une opération très simple. J'ai commencé par remplacer certains paquet de ma distribution par des version plus à jour. Par exemple (sans avoir les droits administrateurs): `guix install libreoffice` Qui est un alias de : `guix package -i libreoffice` :::warning **Attention** : La première installation de paquet peut prendre du temps (et de la place !) car Guix va chercher toutes les dépendances nécessaires à toutes les dépendances du paquet vu qu'il ne va utiliser aucunes dépendances installées sur le système. ::: :::info Vous verrez, certains paquets (ou patches) sont même compilés sur votre machine, mais dans l'ensemble, beaucoup de binaires précompilés (appelé substitus) [sont disponibles](https://www.gnu.org/software/guix/packages/) (vois l'atributs "builds" dans la description des paquets). ::: Toutes les dépendances téléchargées se trouvent dans le dossier `/gnu/store`. Voici un petit bout de mon dossier : ``` $ ls --group-directories-first /gnu/store | less 01xnzx1q3k9z3xmhly0fa5ki8hp8l99s-libmwaw-0.3.15 023gvzf7gqbp61jfpc0674krwv7yiyza-mariadb-10.1.38 02iklp4swqs0ipxhg5x9b2shmj6b30h1-binutils-2.31.1 02k245xy33cvcnr8vm3lagm9zmb1s2wa-grep-3.1 03bgmiwcr3v5yh6psgh9dvg4qihb7qa0-xdg-desktop-database 03hd5wljl5yirh33czpi738ckq16zyp5-xdg-mime-database 04h27h0myyksngxx8imv416n4iwsiv8m-hunspell-1.7.0 04vqghzmpqzxpd94h1q931xpmazp5s7g-libgc-7.6.6 057dna3nwy84zdvfqss8vbgx1pzkdc2l-libungif-4.1.4 05zlxc7ckwflz56i6hmlngr86pmccam2-pcre-8.42 09x4p4ywz39xzy42kmscfi2nnhwjgybd-curl-7.64.0 0cnnj7kvggda2p12mlmxawz3ni9w5rwa-xcb-util-0.4.0 0fcp0xw1l1r2v42j4kdmn9ra3r7bd45v-gtk-im-modules 0fnyf3043x767xfm6gski5h1576q8wsn-glib-schemas 0h9x3hqqh4fx52735a7mykqm7mdkqnf4-libgc-7.6.6 0j6sz3bk4chqc8pgfv0fsn6byarwq4df-openldap-2.4.46 0j7xd8b63wv6hfssbacw28bj7rsbx0sk-packages 0ja63438w88gil4lxbpsgc5chmyiqhn6-openldap-2.4.46 0jif6gjzhxcg86q9qb7cjbcxdy8sacsn-python2-pygtk-2.24.0 0k450nckm9yp9vlbykvrb7pqp2njm3c4-libxv-1.0.11 0q9pq9flr76rh4bv2524niknknnl2kvq-glib-2.56.3 0r1ihh22jhbii0n3xa4isgscbrynydfr-module-import 0wqgmqnlpr8pzvx4skqdgczym8384fbb-shishi-1.0.2 ``` Comme vous pouvez le voir, toutes les dépendances se trouvent ici. Et dans chaque dépendance se trouve une arborescence propre. Ex : ``` $ tree -d /gnu/store/01xnzx1q3k9z3xmhly0fa5ki8hp8l99s-libmwaw-0.3.15/ /gnu/store/01xnzx1q3k9z3xmhly0fa5ki8hp8l99s-libmwaw-0.3.15/ |-- bin |-- include | `-- libmwaw-0.3 | `-- libmwaw |-- lib | `-- pkgconfig `-- share `-- doc |-- libmwaw | `-- html `-- libmwaw-0.3.15 ``` Se trouve aussi maintenant dans mon répertoire personnel un dossier `.guix-profile` dont voici l'arborescence : ```bash tree -L 1 /home/dede/.guix-profile ~/.guix-profile |-- bin |-- etc |-- include |-- lib |-- libexec |-- manifest |-- sbin -> /gnu/store/8k4pnixpz73kxvxbjqajgbprjjmmgpxy-util-linux-2.32.1/sbin `-- share ``` Le dossier `bin` contient des liens symboliques vers les binaires présents dans `/gnu/store`. On a ainsi un fonctionnement très flexible et je peux choisir très facilement à quel version d'un logiciel attribuer tel ou tel alias. Le fichier qui nous intéresse est `manifest`, il décrit toutes les version des logiciels installés et où ils se trouvent : ```bash (manifest (version 3) (packages (("tree" "1.8.0" "out" "/gnu/store/x5xb40q502s7pnqk9lmsnpc5vpsm1r8r-tree-1.8.0" (propagated-inputs ()) (search-paths ()) (properties)) ("recutils" "1.8" "out" "/gnu/store/wzk023ls4f7dq4mcc3kc86vskhw804n1-recutils-1.8" (propagated-inputs ()) (search-paths ()) (properties)) ("emacs" "26.2" "out" "/gnu/store/b38pn0gnj4jsrf79lg4kr80rn5kaim0q-emacs-26.2" (propagated-inputs ()) (search-paths [...] ``` #### Utilisation des paquets Pour utiliser les paquets installés par Guix, quand on est en ligne de commande, il suffit de rajouter le dossier `bin` à notre `$PATH` : ```bash export PATH="/home/dede/.guix-profile/bin${PATH:+:}$PATH" ``` Pour un usage perein, vous pouvez rajouter cette ligne à votre `.bashrc` si vous utilisez `bash` ou `.zshrc` si vous êtes sous `zsh` (): ```bash # Guix # le fichier profile contient l'ajout de `bin` au `$PATH` GUIX_PROFILE="$HOME/.guix-profile" ; \ source "$HOME/.guix-profile/etc/profile" ``` Maintenant, quand vous tapper par exemple : `libreoffice` C'est la version Guix qui se lance et non plus celle installée sur votre système via apt et cela, sans aucune interference. Si ce n'est les fichiers de configuration qui se trouvent dans votre HOME qui seront partagées (voir plus bas pour le mode bac à sable si vous voulez éviter le partage des fichiers de conf). Il est aussi possible de modifier les lanceurs graphique en changeant simplement la commande d'éxecution. Ex avec libreoffice Writer, avant j'avais : `libreoffice --writer %U` Et j'ai simplement mis ça à la place: `/home/dede/.guix-profile/bin/libreoffice --writer %U` Après m'être assuré que le paquet Guix fonctionnait bien, j'ai pu faire une désinstallation du paquet installé via `apt`. Je fais ça petit à petit avec tous les logiciels que j'utilise. Ca me permet en quelque sorte d'avoir une "rolling release" tout en gardant le système auquel je suis habitué. C'est une introduction tout en douceur à Guix :). #### Désinstallation des paquets Il est bien sur possible de désinstaller un paquet très facilement via : ```bash guix remove libreoffice ``` alias de : ```bash guix package -r libreoffice ``` :::info *Note* : Après un remove, guix garde tout de même les fichiers dans `/gnu/store` mais supprime les liens symboliques dans votre `guix-profile`. Pour faire une vraie suppression, il faut faire un `guix gc` qui supprime tous les paquets inutilisées. Mais après quelques tests, certains paquets supprimés restent quand même, je ne sais pas pourquoi. ::: #### Mise à jour des paquets Pour mettre à jour tous les paquets en même temps, il suffit de tapper : `guix upgrade` ou `guix package -u` Si je veux simplement mettre à jour libreoffice par exemple je peux faire : `guix upgrade libreoffice` ## Guix pour remplacer les technologies de "contenerisation" https://www.gnu.org/software/guix/blog/2017/creating-bundles-with-guix-pack/ https://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-environment.html