URL: https://linuxfr.org/news/guix-pour-remplacer-mon-gestionnaire-de-paquets-apt Title: Guix pour remplacer mon gestionnaire de paquets APT Authors: AndrĂ©as Livet Cyril Chaboisseau, nokomprendo, Davy Defaud, Ysabeau đŸ§¶, palm123, BenoĂźt Sibaud, Bruno Michel et M5oul Date: 2020ćčŽ01月22æ—„T09:40:19+01:00 License: CC By-SA Tags: guix, libreoffice, flatpak, snap et nix Score: 31 DeuxiĂšme article d’une sĂ©rie autour de Guix, aprĂšs une [brĂšve introduction gĂ©nĂ©rale](https://linuxfr.org/news/guix-un-outil-pour-les-remplacer-tous), voici un article plus programmatique sur le _remplacement_ (ou la cohabitation) de l’outil `apt` par `guix`. Je prĂ©cise qu’il s’agit de dĂ©pĂȘches dont l’objectif est de vulgariser les notions phares de Guix et de les illustrer par des cas pratiques. ---- [Site officiel du projet Guix](https://guix.gnu.org/) [Manuel de rĂ©fĂ©rence](https://guix.gnu.org/manual/fr/html_node/) [DĂ©pĂȘche annonçant la version 1.0 de Guix](https://linuxfr.org/news/gnu-guix-version-un-point-zero) [1re dĂ©pĂȘche de cette sĂ©rie sur Guix](https://linuxfr.org/news/guix-un-outil-pour-les-remplacer-tous) ---- # Introduction Guix Ă©tant un gestionnaire de paquets avant tout, il est tout naturel qu’il puisse constituer un remplaçant des autres gestionnaires de paquets existants. Si, comme moi ([ou comme Bryan Lunduke](https://alttube.fr/videos/watch/54f6b95b-8bbc-4b01-ba48-dede84a09014)), vous trouviez qu’il y a dĂ©jĂ  trop de fragmentation dans le _desktop_ et qu’il faudrait juste choisir une bonne fois pour toutes un format de paquet (par exemple les `.deb`) et un gestionnaire de paquets (par exemple `apt`) et ainsi avoir une compatibilitĂ© entre les distros, Guix (ou [Nix](https://nixos.org/nix/), mais ce n’est pas le sujet de cette dĂ©pĂȘche) 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’aboutit pas pour une raison ou pour une autre (p. ex. coupure d’alimentation), le systĂšme n’est pas impactĂ© ; * il permet d’avoir plusieurs versions d’un mĂȘme logiciel installĂ©es sur la mĂȘme machine sans aucun conflit ; * il permet d’installer les paquets sans avoir les droits d’administration (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Ă©. Guix a d’autres avantages, mais dĂ©jĂ  ces quatre‐lĂ  le rendent important. # Guix pour remplacer APT Voici par exemple comment je remplace progressivement l’utilisation de `apt` (et `snap` par la mĂȘme occasion) sur mon systĂšme Xubuntu 18.04. ## 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). ## Avant toute chose : gestion des locales Comme 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, quelques problĂšmes](https://issues.guix.info/issue/36180). # Installation de paquets AprĂšs avoir installĂ© guix (voir plus haut), installer un paquet avec Guix est une opĂ©ration trĂšs simple. J’ai commencĂ© par remplacer certains paquets de ma distribution par des versions plus Ă  jour. Par exemple (sans avoir les droits administrateur) : `guix install libreoffice` Qui est un alias de : `guix package -i libreoffice` **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 aucune dĂ©pendance installĂ©e sur le systĂšme. **Note** : Vous verrez, certains paquets (ou correctifs) sont mĂȘme compilĂ©s sur votre machine, mais dans l’ensemble, beaucoup de binaires prĂ©compilĂ©s (appelĂ© substituts) [sont disponibles](https://www.gnu.org/software/guix/packages/) (voir l’attribut _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. Par exemple : ```bash $ 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 Ă  quelle version d’un logiciel attribuer tel ou tel alias. Le fichier qui nous intĂ©resse est `manifest`, il dĂ©crit toutes les versions 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 serein, 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 tapez 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 interfĂ©rence, si ce n’est les fichiers de configuration qui se trouvent dans votre HOME qui seront partagĂ©s. ![](https://)![](https://pad.lamyne.org/uploads/upload_0ed6e6d6f3e1ce29bcf594b15886ad50.png) _Ici la version 6.1.5.2 de LibreOffice, alors que [celle prĂ©sente dans Xubuntu 18.04](https://packages.ubuntu.com/bionic/libreoffice) est la 6.0.7. Dans ce cas‐lĂ , Guix n’offre pas de paquet trĂšs Ă  jour._ ## Avec un lanceur graphique Si vous voulez que les lanceurs graphiques (les raccourcis dans le menu) lancent directement toutes vos applications Guix, vous n’avez qu’à modifier le fichier `.xsessionrc` en rajoutant la mĂȘme ligne que dans votre `.bashrc` : ```bash # Guix # le fichier profile contient l’ajout de `bin` au `$PATH` GUIX_PROFILE="$HOME/.guix-profile" ; \ source "$HOME/.guix-profile/etc/profile" ``` Si toutefois vous souhaitez garder vos logiciels installĂ©s via `apt` et ne mettre Ă  jour que quelques lanceurs, il est aussi possible de modifier les lanceurs graphiques en changeant simplement la commande d’exĂ©cution. Exemple, 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` ![](https://pad.lamyne.org/uploads/upload_8c19e9e3ccdbfe02f6ffd18b709e32d4.png) AprĂšs m’ĂȘtre assurĂ© que le paquet Guix fonctionnait bien, j’ai pu faire une dĂ©sinstallation du paquet installĂ© via `apt` : `sudo apt remove libreoffice` Je fais ça petit Ă  petit avec tous les logiciels que j’utilise. Ça 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 sĂ»r possible de dĂ©sinstaller un paquet trĂšs facilement via `guix remove libreoffice`, alias de `guix package -r libreoffice`. **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Ă©s. 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 taper `guix upgrade` ou `guix package -u`. Si je veux simplement mettre Ă  jour LibreOffice, par exemple, je peux faire : `guix upgrade libreoffice` # Rechercher un paquet Pour rechercher un paquet, rien de plus simple, exemple avec `libreoffice` : `guix search libreoffice`, alias de `guix package -s libreoffice`. Bon, ça renvoie souvent beaucoup de paquets, pas forcĂ©ment en lien, donc on peut simplifier l’affichage avec un `grep` : `guix search libreoffice | grep -A 2 'name:' | less` Voir affiner la recherche avec : `guix search libreoffice | grep -A 2 'name: libreoffice' | less` AprĂšs je ne suis pas un pro des petits outils en ligne de commande qui se chaĂźnent (je n’ai que les rudiments) et je suis sĂ»r que des personnes plus douĂ©es que moi font des merveilles pour avoir une recherche plus aisĂ©e. Bon, je ne vous conseille pas le [site listant les paquets Guix](https://guix.gnu.org/packages/), car il est tout bonnement inutilisable. Il ne contient mĂȘme pas de formulaire de recherche... # Mettre Ă  jour Guix Vous pouvez aisĂ©ment mettre Ă  jour le logiciel Guix en tapant la commande suivante : `guix pull` Et si vous souhaitez connaĂźtre les derniĂšres nouveautĂ©s ajoutĂ©es, vous pouvez faire un : `guix pull --news` # Revenir en arriĂšre suite Ă  un problĂšme Avec Guix il est possible de revenir Ă  n’importe quelle « gĂ©nĂ©ration » (c’est le nom donnĂ© Ă  chaque changement dans l’installation) de paquets sans souci. Je vais prendre un exemple concret, sous ma Xubuntu, j’ai `git` installĂ© : ```bash git --version git version 2.17.1 ``` J’aimerais avoir une version plus rĂ©cente, alors je fais un : ```bash guix install git ``` J’ai maintenant un `git` plus Ă  jour : ```bash git --version git version 2.21.0 ``` Si pour une raison ou une autre je veux revenir en arriĂšre, je peux faire un « _rollback_ » : ```bash guix package --roll-back git --version git version 2.17.1 ``` Ce qui est intĂ©ressant, c’est qu’en rĂ©alitĂ©, le logiciel reste prĂ©sent dans le rĂ©pertoire `/gnu/store`, il est seulement retirĂ© du profil personnel. Cela rend la « navigation » dans les diffĂ©rentes gĂ©nĂ©rations trĂšs rapide et aisĂ©e. # ExĂ©cuter une application en mode « bac Ă  sable » Il est possible d’utiliser une application dans un espace isolĂ© de l’environnement (appelĂ© « _container_ ») et ainsi protĂ©ger au maximum la distribution hĂŽte. Exemple avec [Midnignt Commander](https://midnight-commander.org/) oĂč l’on peut voir que les rĂ©pertoires systĂšme et autres rĂ©pertoires personnels ne sont pas accessibles : ```bash guix environment --ad-hoc --container mc # Il faut dĂ©finir la variable TERM export TERM=xterm-256color mc ``` **Note** : en jouant un peu avec cette commande, je me rends compte que ce n’est pas trĂšs utilisable pour des applications graphiques, car le conteneur n’a mĂȘme pas accĂšs au serveur X, donc son usage est un peu limitĂ©. # Conclusion Guix (tout comme Nix) offre une vision novatrice, sĂ©curisĂ©e et extrĂȘmement souple de la gestion de paquets. L’installer sur une distribution hĂŽte est trĂšs aisĂ© et sans risque. C’est une expĂ©rience intĂ©ressante pour qui souhaite dĂ©couvrir cet outil et accessoirement mettre Ă  jour certains paquets. Si vous avez plus de questions, je vous invite Ă  lire la FAQ ci‐dessous. # FAQ ## Pour quoi faire ? ## Les PPA c’est pas plus simple ? ## Et Snap ? Snap est un gestionnaire de paquets qui se veut universel, mais qui pour l’instant est portĂ© exclusivement par Canonical. Il offre des caractĂ©ristiques assez similaires Ă  Flatpak mais permet aussi d’installer des logiciels sans nĂ©cessiter de pile graphique (ce qui n’est pas le cas de Flatpak Ă  ma connaissance). Comme vu plus haut, Guix peut aussi avoir une exĂ©cution en mode bac Ă  sable, avec sans doute moins de granularitĂ© possible sur les autorisations. AprĂšs, sans vouloir troller, Snap semble avant tout fait pour introduire des logiciels tiers (entendez par la provenant d’entreprises et n’étant pas auditĂ©s par la communautĂ©) dans la logithĂšque Ubuntu. Son slogan « [_The app store for Linux »](https://snapcraft.io/) » en dit long... Je ne connais pas cet outil, mais, personnellement, je prĂ©fĂšre faire confiance aux serveurs de paquets et Ă  la communautĂ© qui les construit qu’en un logiciel qui me permet d’exĂ©cuter des applications en lesquelles je n’ai pas confiance en mode « bac Ă  sable » et me demandant des autorisations que j’accorderai forcĂ©ment... Puis ça crĂ©e des disques virtuels et je n’aime pas ça. ## Et Flatpak ? Je ne peux que vous conseiller la lecture de l’[excellente dĂ©pĂȘche de _nokomprendo_](https://linuxfr.org/users/nokomprendo-3/journaux/flatpak-et-nix) qui compare Nix (logiciel trĂšs similaire Ă  Guix) et Flatpak. Pour moi, Nix ou Guix sont plus intĂ©ressants que Flatpak. ## Et Nix alors ? D’un point de vue pragmatique, Nix est plus abouti (plus ancien) et bĂ©nĂ©ficie d’une beaucoup plus grosse communautĂ© et donc d’un nombre plus important de paquets, qui sont sans doute plus Ă  jour. Guix et Nix Ă©tant trĂšs proches dans leur fonctionnement, on est en droit se demander quel est l’intĂ©rĂȘt de Guix. Nous tĂącherons d’écrire une dĂ©pĂȘche spĂ©cifiquement sur ce sujet, mais on peut dĂ©jĂ  noter quelques spĂ©cificitĂ©s de Guix par rapport Ă  Nix qui rendent le projet attrayant et non redondant selon nous : * Guix est un projet GNU et Guix System est une distribution basĂ©e exclusivement sur du code libre, cet aspect est trĂšs important chez les contributeurs Guix ; * un Ă©norme effort est fait pour rendre la distribution _bootstrapable_ (dĂ©solĂ© pour l’anglicisme) et ainsi pouvoir compiler l’ensemble des sources (mĂȘme gcc) Ă  partir d’un unique binaire trĂšs lĂ©ger dont le code assembleur est lisible, ceci afin d’éviter les attaques dites de « _trusting trust_ » ; * dans un but similaire, l’équipe de Guix cherche Ă  avoir des _builds_ reproductibles, c’est‐à‐dire avoir des binaires identiques pour une mĂȘme entrĂ©e (mĂȘmes sources et mĂȘme fichier de configuration), ceci afin de pouvoir s’assurer que les binaires gĂ©nĂ©rĂ©s en local sont bien les mĂȘmes que ceux proposĂ©s par le serveur, par exemple ; * Guix utilise [GNU Shepherd](https://www.gnu.org/software/shepherd/) Ă  la place de systemd ; * Guix utilise pour la dĂ©finition de ses paquets et la configuration du systĂšme [le langage d’extension Guile](https://www.gnu.org/software/guile/) ; Ă  la diffĂ©rence du [langage utilisĂ© par Nix (_Nix Expression Langugage_)](https://nixos.wiki/wiki/Nix_Expression_Language), Guile est un langage gĂ©nĂ©raliste s’interfaçant facilement avec des librairies C et Ă©tant utilisĂ© dans (quelques) autres projets GNU, comme Shepherd par exemple — Ă  noter qu’ils sont tous les deux des langages fonctionnels. ## Installer des paquets sans droits administrateur c’est pas un peu dangereux ? Non, pas vraiment. Le seul risque est qu’un utilisateur disposant des droits pour installer un paquet via le dĂ©mon Guix pourra donc installer autant de logiciels qu’il veut et potentiellement remplir le disque dur. J’invite le lecteur Ă  lire [cet Ă©change](https://linuxfr.org/users/dedesite/journaux/guix-un-outil-pour-les-remplacer-tous#comment-1797120) pour plus d’informations.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /