Installer Guix, le gestionnaire de paquets, distro, venv universel et container
Guix est passé en version 0.9 en début de mois et il devient sacrément intéressant. Il n'est pas disponible dans Debian donc nous allons voir comment l'installer.
Mais une petite présentation s'impose. GNU Guix est "un gestionnaire de paquets fonctionnel pour le système GNU". "Fonctionnel" car le but est que les builds soient reproductibles. C'est un moyen pour une fin.
Il est entièrement hackable en guile scheme. Et avec guix, ils construisent le système GuixSD (System Distribution), maintenant dispo pour clef bootable (et sans installateur graphique). Avec guix, on peut donc installer des paquets, mais aussi:
- revenir à un point antérieur du système,
- créer des environnements virtuels indépendants du language (une sorte de virtual env universel, et à propos de python vous pourrez essayer guix-tox),
- créer des containers, à la Docker, mais avec des avantages certains,
- avec GuixSD, déclarer son système entier dans un fichier guile,
- etc
Guix est le sujet de recherche de son leader à l'INRIA.
Donc, installons-le pour jouer avec !
Il faut installer quelques dépendances:
apt-get install guile-2.0-dev guile-2.0 libgcrypt20-dev libbz2-dev libsqlite3-dev autopoint
Récupérons Guix. On peut télécharger un paquet binaire, avec lequel
l'installation est rapide, mais nous allons le faire depuis les
sources car c'est plus sport. De plus on ne va pas faire
d'installation globale, on va le laisser dans son coin, c'est plus
propre. (en gros, on ne va pas faire le make install
).
Dans le doute, référez-vous à la doc: https://gnu.org/software/guix/manual/guix.html#Binary-Installation
Donc, pour les sources:
git clone git://git.savannah.gnu.org/guix.git
et le classique
./configure && make
mais là, ça fait un peu mal car make
va compiler la déclaration des
346 paquets de base de guix le système et donc ça peut prendre
longtemps :/ c'était au moins deux heures par intermittence sur ma
vieille machine. Vous remarquerez que dans ces paquets de base on
trouve des choses aussi diverses que abiword, zsh, python, haskell… ça
peut rendre vert si on ne compte pas utiliser Guix le système.
D'abord, rassurez-vous, guix ne va pas compiler ces logiciels, il va
"juste" compiler leur déclaration en guile scheme (de .scm
en .go
,
un peu comme fait emacs d'un .el à un .elc). Et puis on n'a pas le
choix actuellement car la base de données des paquets est incluse dans
le logiciel (la raison entendue est que c'est plus simple pour
synchroniser l'api). D'après un développeur vu sur irc, un patch pour
rendre cette compilation "beaucoup plus rapide" devrait bientôt être
proposé sur la mailing liste. Vous pouvez aussi essayer de modifier la
liste des modules dans le Makefile (voir la variable "MODULES").
Notez aussi que ces 346 paquets sont ceux de base, il y en a plus de 2000 autres disponibles. C'est peu encore par rapport à Debian, mais c'est assez pour certains qui utilisent GuixSD quotidiennement. Et le nombre de paquets augmente d'environ 500 à chaque nouvelle version.
Maintenant on va suivre un peu la doc et créer un utilisateur et un groupe pour le démon guix.
# Make the "worker users" and their group... this allows the daemon # to offload package building while keeping things nicely contained sudo groupadd guix-builder for i in `seq 1 10`; do sudo useradd -g guix-builder -G guix-builder \ -d /var/empty -s `sudo which nologin` \ -c "Guix build user $i" --system \ guix-builder$i; done # Make the /gnu/store directory, where packages are kept/built sudo mkdir -p /gnu/store sudo chgrp guix-builder /gnu/store sudo chmod 1775 /gnu/store # Authoriser le téléchargement de paquets binaires depuis la plateforme de build. # Permet de ne pas tous les compiler par la suite. # Guix parle de "substitutes". sudo ./pre-inst-env guix archive --authorize < hydra.gnu.org.pub
Donc maintenant on a guix installé dans son répertoire. Comme il n'est
pas installé globalement, on doit lancer le script
./pre-inst-env
avant chaque commande ainsi que configurer notre path
du shell. Je vous propose cette fonction bash pour le faire (merci à
ma source (c'est le leader de mediagoblin)):
# Guix stuff (for .bashrc) function guix-enable() { alias guix="$INSTALL_DIR/guix/pre-inst-env guix" alias guix-daemon="sudo $INSTALL_DIR/guix/pre-inst-env guix-daemon --build-users-group=guix-builder" # add guix's bin to the path export PATH=$HOME/.guix-profile/bin:$PATH # and others export PYTHONPATH="$HOME/.guix-profile/lib/python3.4/site-packages" export GUILE_LOAD_PATH="$GUILE_LOAD_PATH:$HOME/.guix-profile/share/guile/site/2.0/" export GUILE_LOAD_COMPILED_PATH="$GUILE_LOAD_PATH:$HOME/.guix-profile/share/guile/site/2.0/" }
La source sus-citée donne aussi des indications pour configurer correctement emacs (qui possède un mode complet pour manipuler guix).
Ma foi, c'est fini !
Pour tout tester, on doit lancer le démon:
guix-daemon
si vous avez suivi, on doit au préalable lancer notre guix-enable
.
Et dans un autre terminal, essayons quelques commandes:
guix-enable # encore guix package -i artanis # installer un framework web guix package -i artanis -r abiword # installer et supprimer en même temps guix package -s guile # search
puis guix environment:
guix environment guile
puis guix container…
Allez, il reste tout à découvrir, à plus !
(et si vous souhaitez aussi un paquet Debian, on essaye ensemble ?)
Dernier lien:
- une vidéo de présentation et de démo récente, où on voit la bête en action et où on comprend les buts et limitations.