GNU Guix 1.4.0 est publié

Posté par  . Édité par palm123 et Ysabeau 🧶 🧦. Modéré par Ysabeau 🧶 🧦. Licence CC By‑SA.
Étiquettes :
34
27
déc.
2022
Distribution

GNU Guix est le gestionnaire de paquets transactionnel et une distribution perfectionnée du système GNU qui respecte la liberté de ses utilisateurs. Guix peut s’utiliser en tant que gestionnaire de paquets sur n’importe quel système utilisant le noyau Linux ou Hurd, et peut s’utiliser comme distribution à part entière sur les machines i686, x86-64, ARMv7, AArch64 et POWER9.

En plus des fonctionnalités habituelles des gestionnaires de paquets, Guix permet des mises à jour et des retours en arrière transactionnels, de gérer ses paquets sans privilèges, d’utiliser plusieurs profils par utilisateur, et d’empaqueter une collection de paquets via une archive TAR repositionnable ou une image Docker. Et tout ceci pour n’importe quel point dans le temps via guix time-machine.

Lorsque Guix est utilisé comme distribution GNU/Linux à part entière, il permet aussi de gérer son système d’exploitation avec une approche déclarative et sans état. Guix est extrêmement personnalisable et bidouillable grâce à ses interfaces Guile (un dialecte du langage Scheme).

La publication fournit des images d’installation ISO 9660, une image pour machine virtuelle et un script d’installation pour installer le gestionnaire de paquets sur votre distribution GNU/Linux sans interférer avec celle‑ci. Les utilisateurs de Guix peuvent mettre à jour comme d’habitude en lançant guix pull.

La suite de la dépêche est une traduction de l’annonce officielle. Le « nous » utilisé dans la dépêche renvoie à l’équipe Guix, pas aux traducteurs.

Sommaire

Nous avons le plaisir de vous annoncer la sortie de GNU Guix version 1.4.0 !

La nouvelle version propose des images d’installation ISO-9660, une image de machine virtuelle et des archives qui vous permettent d’installer le gestionnaire de paquets sur votre distribution GNU/Linux, que ce soit à partir des sources ou des binaires. Pour obtenir ces fichiers, consultez la page des téléchargements. Si vous utilisez déjà Guix vous pouvez le mettre à jour en exécutant la commande guix pull.

Il s’est écoulé 18 mois depuis la version précédente. Cela représente un long intervalle de temps et reflète le fait qu’en tant que rolling release, Guix permet aux utilisateurs et utilisatrices de recevoir en permanence les nouvelles fonctionnalités et les mises à jour en exécutant la commande guix pull. Mais voyons les choses en face : cela montre également un domaine dans lequel nous pourrions et devrions collectivement améliorer nos processus. Au cours de cette période, Guix a reçu environ 29 000 commits de 453 personnes, comprenant de nouvelles fonctionnalités importantes dont nous allons parler. Le projet a également changé de mainteneurs, structuré la coopération en créant des équipes, et célébré son dixième anniversaire !

Une grenouille heureuse assise devant un ordinateur où Guix est installé avec un humanoïde bénéfique et tout-puissant derière elle.

Illustration de Luis Felipe, publiée sous licence CC-BY-SA 4.0.

Cet article propose de mettre en lumière tout le travail qui a abouti à cette publication. Et oui, il s’agit sans doute des notes de version les plus longues de l’histoire de Guix, alors installez-vous confortablement, détendez-vous et profitez de la lecture.

Bonus ! Voici un chiptune (de Trevor Lentz, sous licence CC-BY-SA 3.0) que notre illustrateur Luis Felipe recommande d’écouter avant d’aller plus loin.

Amélioration de la gestion des environnements logiciels

L’un des points forts de Guix est la gestion des environnements logiciels. La commande guix environment a été conçue à cet effet, mais elle souffrait d’une interface peu ergonomique. Elle est maintenant remplacée par guix shell, bien que nous nous soyons engagés à garder guix environment jusqu’au 1ᵉʳ mai 2023 au moins. guix shell est un outil pratique pour le développement, mais il est également utile si vous souhaitez essayer un logiciel sans pour autant l’installer de manière définitive dans votre profil avec guix install. Disons que vous voulez jouer à SuperTuxKart mais que vous préférez ne pas l’avoir dans votre profil parce que, bon, c’est un ordinateur portable professionnel. Voici comment vous pourriez le lancer, après que Guix l’a récupéré si nécessaire :

guix shell supertuxkart -- supertuxkart

Outre son interface plus simple, guix shell améliore significativement les performances avec son cache. Il simplifie également le processus de développement en détectant automatiquement les fichiers guix.scm et manifest.scm présents dans un répertoire. Glissez-en un dans votre projet et les autres membres de l’équipe de développement peuvent commencer à travailler en exécutant simplement guix shell, sans argument. Au fait, l’option --export-manifest vous permet de démarrer en « convertissant » les arguments de la ligne de commande en un manifeste. En apprendre plus sur guix shell dans le manuel.

Une autre innovation de guix shell est l'émulation facultative du standard de la hiérarchie du système de fichiers (FHS). La FHS spécifie les emplacements des différentes catégories de fichiers : /bin pour les binaires des commandes essentielles, /lib pour les bibliothèques, etc. Le dépôt de Guix l’empêche de respecter la FHS, ce qui peut empêcher les utilisatrices et les utilisateurs d’exécuter des programmes qui supposent le respect de la FHS. Le nouveau drapeau --emulate-fhs (ou -F) de guix shell combiné à l’option --container permet de créer un environnement de conteneur qui respecte la FHS. Cette fonctionnalité est illustrée au mieux par cet exemple, où la commande ls du paquet coreutils apparaît directement sous /bin, comme si nous étions sur un système FHS comme Debian :

$ guix shell -CF coreutils -- /bin/ls -1p /
bin/
dev/
etc/
gnu/
home/
lib/
lib64
proc/
sbin/
sys/
tmp/
usr/

Guix Home est une autre nouvelle fonctionnalité importante. En résumé, elle applique la philosophie déclarative du système Guix à votre environnement personnel en vous donnant la possibilité de déclarer tous ses différents aspects (les fichiers de configuration (« dot files »), les services et les paquets) et de les instancier dans votre répertoire $HOME ou dans un conteneur.

Si vous maintenez déjà vos fichiers de configuration sous contrôle de version ou si vous voulez les garder sous contrôle pour ne pas avoir à passer des jours ou des semaines à les reconfigurer la prochaine fois que vous changez d'ordinateur portable, c'est l'outil qu'il vous faut. Consultez cette excellente introduction que David Wilson a donnée pendant la célébration des dix ans de Guix et apprenez-en plus sur Guix Home dans le manuel.

Les options de transformation de paquet vous donnent un contrôle précis sur la manière dont les paquets sont construits. La nouvelle option --tune permet de régler les paquets pour une micro-architecture du CPU spécifique. Cela vous permet d’utiliser les nouvelles instructions « une instruction, plusieurs données » (SIMD), comme AVX-512 sur les CPU AMD/Intel récents, ce qui peut représenter une différence importante pour certaines tâches comme les calculs d’algèbre linéaire.

Depuis la version 1.3.0, le projet a commencé à maintenir une ferme de construction alternative sur https://bordeaux.guix.gnu.org. Elle est indépendante de la ferme de construction sur ci.guix.gnu.org (donnée et hébergée par le Max Delbrück Center for Molecular Medicine à Berlin en Allemagne), ce qui présente deux avantages : elle nous permet de tester les substituts fournis par les deux systèmes, et elle fournit une redondance en cas de panne de l’une de ces deux fermes. Guix est maintenant configuré par défaut pour récupérer ses substituts auprès de n’importe laquelle de ces deux fermes de construction. De plus, un bogue a été corrigé, ce qui assure que Guix puisse passer de l’une à l’autre en cas de problème avec la première.

Les personnes qui apprécient les déploiements déclaratifs de flottes entières de machines seront sûrement ravis de la nouvelle option --execute de guix deploy.

Une distribution plus robuste

La distribution elle-même a connu beaucoup de changements. Tout d’abord, l'installateur du système Guix a reçu un certain nombre de corrections de bogues et il inclut maintenant un nouveau mécanisme qui vous permet de rapporter automatiquement les informations de débogage utiles en cas de crash. Cela aidera l’équipe de développement à s’occuper des bogues qui arrivent avec les configurations inhabituelles.

Le temps de démarrage des programmes a été réduit grâce à un nouveau cache de l’éditeur des liens dynamiques par application, qui a considérablement réduit le nombre d’appels à stat et open causés par la recherche des bibliothèques partagées (nous sommes heureux que ce changement en ait inspiré d’autres).

Guix System utilise désormais la version 0.9 de GNU Shepherd qui corrige des défauts, améliore la journalisation et ajoute des fonctionnalités telles que l’activation des services à la manière de systemd ou celle d’inetd. La nouvelle sous-commande guix system edit fournit également un nouveau moyen d’inspecter les services, complétant ainsi guix system search et guix system extension-graph.

Il y a 15 nouveaux services systèmes parmi lesquels choisir, dont Jami, Samba, fail2ban, et Gitile font partie.

Une nouvelle interface est disponible pour déclarer l’espace d’échange dans la configuration des systèmes d’exploitation. Cette interface est plus expressive et flexible que ce qui était disponible auparavant.

De même, l’interface permettant de déclarer la configuration réseau statique a été retravaillée. Sur GNU/Linux, elle vous permet de faire à peu près la même chose que la commande ip, mais de manière déclarative et avec des vérifications statiques pour éviter de déployer des configurations manifestement incorrectes.

Impression écran de GNOME 42.

Plus de 5 300 paquets ont été ajoutés pour un total de près de 22 000 paquets, ce qui fait de Guix l’une des 10 distributions les plus grosses d’après Repology. Parmi les nouveaux paquets et les mises à jour les plus notables, GNOME 42 est maintenant disponible. KDE n’est pas encore là mais des dizaines de paquets KDE ont été ajoutés et nous en rapproche. Qt 6 est aussi disponible. La distribution propose aussi GCC 12.2.0, GNU libc 2.33, Xfce 4.16, Linux-libre 6.0.10, LibreOffice 7.4.3.2 et Emacs 28.2 (avec la prise en charge de la compilation à la volée !).

Entre autres nouvelles, motivés par le fait que Python 2 a officiellement atteint sa « fin de vie » en 2020, plus de 500 paquets Python 2 ont été supprimés (ceux dont le nom commence par python2-). Cela comprend quelques « poids lourds » comme python2-numpy ou python2-scipy. Si vous en avez encore besoin, vous avez deux possibilités : utiliser guix time-machine pour revenir à un commit plus ancien qui contient les paquets dont vous avez besoin, ou utiliser le canal Guix-Past pour construire certains de ces anciens paquets dans un environnement récent. Le calcul scientifique est un domaine où cela pourrait s’avérer utile.

En plus de cela, le site web propose un nouveau navigateur de paquets. Enfin ! Entre autres choses, ce navigateur de paquets propose des URL stables comme https://packages.guix.gnu.org/packages/PAQUET.

Le fichier NEWS liste des changements notables supplémentaires et des corrections de bogues qui pourraient vous intéresser.

Plus de documentation

Comme pour les versions précédentes, nous avons travaillé sur la documentation pour rendre Guix plus abordable. Nous avons rédigé et amélioré des sections de type « comment faire », telles que :

Le livre de recettes continue lui aussi de recevoir de nouvelles entrées, consultez-le !

Le manuel de référence de Guix est entièrement traduit en français et en allemand ; 70% est disponible en espagnol et il y a des traductions initiales en russe,
chinois, et d’autres langues. Guix lui-même est entièrement traduit en français, avec des traductions presque complètes en portugais brézilien, en allemand, en slovaque et en espagnol, et des traductions partielle dans presque vingt autres langues. Consultez le manuel pour apprendre à aider ou cette visite guidée par le traducteur en chef Julien Lepiller !

Soutenir la reproductibilité sur le long-terme

Une fonctionnalité importante de Guix est sa prise en charge des déploiements logiciels reproductibles. Il y a plusieurs aspects à cela, l’un d’entre eux étant la capacité à récupérer le code source à partir de l’archive de Software Heritage. Guix était déjà capable de récupérer le code source de paquets à partir de Software Heritage comme solution de repli, mais avec la version 1.4.0 le code source des canaux Guix est également automatiquement récupéré à partir de Software Heritage si leur URL originale n’est plus joignable.

De plus, Guix est maintenant capable de récupérer et de restaurer des archives de code source comme les fichiers .tar.gz. Software Heritage archive le contenu des archives, mais pas les archives elles-mêmes. Cela créait une inadéquation entre Guix et Software Heritage, d’autant plus que la majorité des définitions de paquets utilisent des archives et s’attendent à pouvoir vérifier l’empreinte de l’archive elle-même. Pour combler cet écart, Timothy Sample a développé Disarchive, un outil qui peut (1) extraire les métadonnées des archives et (2) assembler les métadonnées extraites et les fichiers eux-mêmes pour reconstruire une archive, comme indiqué dans le diagramme ci-dessous.

Diagramme montrant Disarchive et Software Heritage.

Le projet Guix a configuré une tâche d’intégration continue pour construire une base de données Disarchive, disponible sur disarchive.gnu.org. La base de données inclut les métadonnées pour toutes les archives utilisées par les paquets. Lorsqu’une archive de code source disparait, Guix récupère maintenant de manière transparente les métadonnées de l’archive depuis la base Disarchive, puis il récupère le contenu des fichiers à partir de Software Heritage et reconstruit l’archive initiale. Au moment de la publication d’un « Rapport sur la préservation de Guix » publié en janvier 2022, presque 75 % des fichiers .tar.gz utilisés par les paquets sont maintenant complètement archivés avec Disarchive et Software Heritage. Exécuter la commande guix lint -c archival PKG vous donnera le statut d’archivage de PKG. Vous pouvez en apprendre plus dans le rapport annuel de Guix-HPC.

C’est une avancée importante qui permet, pour la première fois, de disposer d’un outil capable de redéployer des environnements logiciels passés tout en maintenant la connexion entre le code source et les binaires.

Lots applicatifs et images système

La commande guix pack qui crée des « lots applicatifs » (des images d’applications indépendantes) a été étendue : guix pack -f deb crée un paquet .deb indépendant qui peut être installé sur Debian et les distributions dérivées. Le nouveau drapeau --symlink lui fait créer des liens symboliques dans l’image.

Au niveau du système, la nouvelle commande guix system image remplace quelques sous-commandes existantes de guix system par un nouveau point d’entrée unique pour construire des images de tous types : des images disques brutes, des images de machines virtuelles au format QCOW2, des images CD ou DVD ISO8660, des images Docker et même des images pour le sous-système Linux de Microsoft Windows (WSL2). Elle propose une interface de haut-niveau qui vous permet de déclarer le type d’image que vous voulez : le format de stockage, les partitions, et évidemment le système d’exploitation pour cette image. Pour faciliter son utilisation, des types d’image prédéfinis sont disponibles :

$ guix system image --list-image-types
Les types d’image disponibles sont :

   - rock64-raw
   - pinebook-pro-raw
   - pine64-raw
   - novena-raw
   - hurd-qcow2
   - hurd-raw
   - raw-with-offset
   - iso9660
   - efi32-raw
   - wsl2
   - uncompressed-iso9660
   - efi-raw
   - docker
   - qcow2
   - tarball

Cela comprend par exemple un type d’image pour les machines Pine64 et pour le système d’exploitation GNU/Hurd. Par exemple, voici comment vous pourriez créer une image de machine virtuelle QCOW2 utilisable avec QEMU :

guix system image -t qcow2 my-operating-system.scm

… où my-operating-system.scm contient une déclaration de système d’exploitation.

De même, voici comment vous pourriez créer, sur votre machine x86_64, une image pour votre Pine64, prête à être transférée à une carte SD ou un périphérique de stockage similaire à partir duquel la carte pourra démarrer :

guix system image -t pine64-raw my-operating-system.scm

Le type d’image pine64-raw spécifie que les logiciels de l’image sont en fait compilés de manière croisée vers aarch64-linux-gnu, c’est-à-dire GNU/Linux sur un CPU AArch64, avec la variante U-Boot appropriée comme chargeur d’amorçage. Il n’y a plus de limite !

Une meilleure expérience d’empaquetage

Un changement important que les empaqueteurs et empaqueteuses remarqueront immédiatement est la simplification des paquets, introduite peu après la 1.3.0. Le changement le plus visible est que les définitions des paquets sont désormais plus lisibles :

(package
  ;; …
  (inputs (list pkg-config guile-3.0)))  ;👍

… au lieu du vieux style baroque avec ses « étiquettes d’entrées » :

(package
  ;; …
  (inputs `(("pkg-config" ,pkg-config)   ;👎
            ("guile" ,guile-3.0))))

La nouvelle commande guix style peut automatiquement effectuer la conversion de « l’ancien » style vers le « nouveau » style d’entrées des paquets. Elle peut aussi reformater des fichiers Scheme entiers en fonction des canons stylistiques du jour, ce qui est bien pratique pour débuter avec le langage.

Ce n'est que la partie visible de l’iceberg : la nouvelle macro modify-inputs rend la manipulation des entrées des paquets plus facile et plus claire. On peut également utiliser des G-expressions par exemple dans les phases des paquets. Lisez notre annonce précédente pour plus d’informations. En plus de cela, le nouveau mécanisme de nettoyage des champs est utilisé pour valider certains champs. Par exemple, il vérifie maintenant le type du champ license tandis que la syntaxe Texinfo de description et synopsis est validée, tout cela sans surcoût dans les cas usuels. Nous espérons que ces changements rendront plus faciles vos débuts avec l’empaquetage.

La commande guix build a de nouveaux drapeaux, --list-systems et --list-targets, pour lister les types de systèmes (qui peuvent être passés à --system) et les triplets cibles de compilation croisée (à utiliser avec --target) pris en charge. Sous le capot, le nouveau module (guix platform) vous permet de définir des « plateformes », c’est-à-dire la combinaison d’une architecture CPU et d’un système d’exploitation, de manière abstraite. Cela unifie diverses informations qui étaient précédemment éparpillées.

En plus de cela, les empaqueteurs et empaqueteuses peuvent maintenant marquer comme « réglables » des paquets qui bénéficieraient des optimisations pour la micro-architecture CPU, activées avec l’option --tune.

L’empaquetage pour Python a vu d’importants changements. Déjà, le paquet python respecte maintenant la variable d’environnement GUIX_PYTHONPATH au lieu de PYTHONPATH. Grâce à cela, Python ne récupérera pas sans le vouloir des paquets qui ne sont pas fournis par Guix. Ensuite, le nouveau système de construction pyproject-build-system implémente PEP 517. Cela complémente le système de construction python-build-system existant, et les deux pourraient finalement être fusionnés.

Le moment le plus agréable de l’empaquetage, c’est quand il arrive tout prêt comme un cadeau. La commande guix import a gagné la prise en charge de plusieurs dépôts de paquets amonts : minetest (pour les extensions du jeu Minetest), elm (le langage de programmation Elm), egg (pour CHICKEN Scheme) et hexpm (pour les paquets Erlang et Elixir). Les importateurs existants ont aussi bénéficié de plusieurs améliorations. La commande guix refresh pour automatiquement mettre à jour les définitions des paquets a un nouveau programme de mise à jour generic-git.

Essayez-la !

Il y a plusieurs façons de commencer à utiliser Guix :

  1. Le script d’installation vous permet de rapidement installer Guix par dessus n’importe quelle distribution GNU/Linux.
  2. Vous pouvez utiliser l'image de machine virtuelle du système avec QEMU pour découvrir simplement le système Guix sans toucher à votre système.
  3. Vous pouvez installer le système Guix en tant que distribution distincte. L'installateur vous guidera dans les étapes de configuration initiale.

Pour voir toutes les options à votre disposition, consultez la page de téléchargement et n’hésitez pas à nous contacter.

Amusez-vous bien !

Aller plus loin

  • # Excellent. Go

    Posté par  . Évalué à 4.

    guix en tant que gestionnaire de paquets est excellent, il prend juste un peu d'espace disque (compter rapidement qlq gigas, et ne pas oublier de passer le ramasse miettes (guix gc) de temps en temps).

    • [^] # Re: Excellent. ~~Go~~Lisp ? :-P

      Posté par  . Évalué à 1. Dernière modification le 29 décembre 2022 à 17:25.

      Est-ce que tu l'utilises pour le dev en Common Lisp ?

  • # distinguer Guix et Guix

    Posté par  . Évalué à 3.

    Le dernier paragraphe n'est pas clair. Quand on nous dit :

    Il y a plusieurs façons de commencer à utiliser Guix :

    1. Le script d’installation vous permet de rapidement installer Guix par dessus n’importe quelle distribution GNU/Linux.

    Il s'agit d'installer le gestionnaire de paquets Guix, pas d'installer la distribution. Tandis que les deux autres cas décrivent l'installation de la distribution.

    • [^] # Re: distinguer Guix et Guix

      Posté par  . Évalué à 5.

      En anglais, la dénomination officielle du projet c'est « Guix » et « Guix System ». J'aurais éventuellement pu traduire le deuxième avec une majuscule. C'est vrai que c'est pas forcément très clair, mais la raison invoquée, c'est qu'en dehors d'une commande, guix system reconfigure, tout fonctionne de la même manière dans les deux cas.

      Avant, la distribution basée sur Guix s'appelait GuixSD (pour System Distribution) et évidemment on nous demandait si ça fonctionnait que sur un raspberry pi…

      • [^] # Re: distinguer Guix et Guix

        Posté par  . Évalué à 4.

        Bah, ça n'est pas très important. La traduction est réussie, très fluide, hyper-lisible… Je voulais clarifier pour les naïfs enthousiastes qui se ruent sur le script shell et se demandent comment in peut installer un système comme ça — c'est du vécu ;-)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.