article linuxfr.org

L’heure du test — fork 1 — Void (Linux)

Voici un tour d’horizon d’une distribution peu connue mais néanmoins intéressante : Void (Linux) !

Void est une distribution indépendante, créée de zéro (from scratch, pas une divergence de Debian ou autres). Elle est développée par une communauté de volontaires et vous pouvez facilement y contribuer via ses dépôts sur GitHub. C’est une distribution avec mise à jour en continu (rolling‐release), tournée vers les ordinateurs de bureau et qui se veut légère et performante.

La distribution Void

L’aventure Void Linux a commencé en 2008 lorsque Juan Romero Pardines, un ancien mainteneur de NetBSD voulait tester son gestionnaire de paquets xbps. Depuis, elle a grandi pour avoir tout ce qu’il faut. Le système de base est totalement libre, dépourvu de blobs binaires venus des constructeurs. Les utilisateurs disposent cependant du dépôt non‐free pour installer des bouts de code propriétaires.

D’un point de vue utilisateur

Void est une distribution avec mise à jour en continu (rolling‐release), orientée bureau et qui se veut légère et performante. Elle se destine principalement à des utilisateurs de niveau intermédiaire ou avancé et peut être conseillée si vous voulez :

En revanche, Void n’est pas à conseiller si vous cherchez :

D’un point de vue technique

Void est une distribution indépendante, créée « from scratch » (pas une divergence de Debian ou autres). Elle est développée par une communauté de volontaires et vous pouvez facilement y contribuer via ses dépôts sur GitHub.

Void est disponible pour les architectures x86 et ARM, ainsi que compilé avec glibc (la bibliothèque C de GNU) ou avec musl-libc (une alternative plus légère à glibc).

Void est une rolling‐release, c’est‐à‐dire que le système et les paquets sont mis à jour en continu ; il n’y a pas de « version » de la distribution. Void utilise son propre gestionnaire de paquets, xbps, qui est très similaire aux classiques apt, dnf, pacman et autres. Il y a un dépôt officiel ainsi qu’un dépôt « non‐free » et il est relativement facile de faire ses propres paquets.

Enfin, Void utilise par défaut LibreSSL (l’alternative à OpenSSL développée suite à la faille de sécurité Heartbleed) ainsi que le système d’initialisation runit (alternative à systemd).

Installation et configuration

L’installation de Void est très classique et bien décrite dans la page Installation du Wiki :

Le système d’initialisation runit

Void utilise runit pour initialiser le système et gérer les services, ce qui en fait l’une des rares distributions actuelles à ne pas utiliser systemd (sans entrer dans le débat pro ou anti systemd). À l’usage basique de tous les jours, runit se révèle vraiment facile et rapide ; voir la doc runit dans le Wiki.

Activer ou désactiver des services

Les services disponibles sont dans /etc/sv/. Pour activer un service, il suffit d’ajouter un lien symbolique dans /var/service/. Par exemple, pour activer sshd :

# ln -s /etc/sv/sshd /var/service/

Pour désactiver un service, il suffit de supprimer le lien symbolique correspondant, dans /var/service/. Par exemple, pour désactiver sshd :

# rm -r /var/service/sshd

Gérer des services

L’utilitaire sv permet de démarrer (start), d’arrêter (stop) ou d’interroger (status) un service. Par exemple, pour interroger sshd :

# sv status sshd
run: sshd: (pid 775) 17011s

Le gestionnaire de paquets xbps

La gestion des paquets est expliquée en détails dans la page xbps du Wiki. À l’usage, xbps est vraiment rapide (en même temps, ça vaut mieux car le système est en rolling‐release et il y a des mises à jour tous les jours).

Fonctionnalités de base

Installer un paquet (par exemple le client IRC hexchat) :

# xbps-install hexchat

Chercher un paquet parmi les paquets disponibles dans les dépôts :

$ xbps-query -Rs hexchat
[*] hexchat-2.12.4_2        A GTK+ based IRC client successor of Xchat
[-] hexchat-lua-2.12.4_2    A GTK+ based IRC client successor of Xchat - lua plugin
[-] hexchat-perl-2.12.4_2   A GTK+ based IRC client successor of Xchat - perl plugin
[-] hexchat-python-2.12.4_2 A GTK+ based IRC client successor of Xchat - python plugin

Afficher les informations d’un paquet installé :

$ xbps-query hexchat
architecture: x86_64
build-date: 2017-04-12 08:50 CEST
...
short_desc: A GTK+ based IRC client successor of Xchat
source-revisions: hexchat:66e4fa9536
state: installed

Mettre à jour le système :

# xbps-install -Su

Supprimer un paquet :

# xbps-remove hexchat

Supprimer tous les paquets obsolètes :

# xbps-remove -Oo

Afficher les autres noyaux disponibles sur la machine :

$ vkpurge list
4.10.10_1
4.9.11_1

Supprimer un noyau :

# vkpurge rm 4.9.11_1

La politique de paquets de Void

Malgré quelques manques (notamment KDE 5), la logithèque de Void est assez fournie, au moins 8 000 paquets. Ce nombre peut paraître faible en comparaison des 43 000 paquets proposés par Debian, mais ce n’est pas tout à fait le cas, car Void réutilise les gestionnaires de paquets proposés par les différents langages et outils. Ainsi, là où Debian propose de nombreux paquets pour les bibliothèques Haskell, les packages LaTex et les greffons Vim, Void préfère généralement passer par les gestionnaires respectifs (cabal / stack, tlmgr, vundle), ce qui n’est pas comptabilisé dans les paquets de la distribution.

Écrire et soumettre des paquets

Void permet bien entendu de compiler et d’installer des logiciels « à la main ». Cependant, si vous voulez faire une installation propre, vous pouvez créer un paquet et l’installer via le gestionnaire xbps (voir la page xbps-src dans le Wiki). Et si votre paquet fonctionne bien, vous pourrez même facilement le proposer aux mainteneurs de Void pour qu’il soit intégré dans le dépôt officiel.

Initialisation d’un dépôt de paquets

Pour créer des paquets Void, le plus simple est de cloner le dépôt officiel de Void, puis d’en diverger en y créant ses paquets.

Le dépôt de paquets contient un programme xbps-src pour compiler des paquets. Pour pouvoir l’utiliser, il faut d’abord initialiser un environnement de compilation :

$ ./xbps-src binary-bootstrap

Créer un paquet

Imaginons, par exemple, que vous voulez empaqueter le programme GNU-hello. Commencez par créer une branche « hello » dans le dépôt de paquets :

$ git checkout -b hello

Initialisez un nouveau paquet hello :

$ xnew hello

Ceci crée un fichier srcpkgs/hello/template qui contiendra la description du paquet et les instructions de compilation. Éditez ce fichier pour votre paquet :

# Template file for 'hello'
pkgname="hello"
version="2.10"
revision=1
build_style=gnu-configure
distfiles="https://ftp.gnu.org/gnu/hello/${pkgname}-${version}.tar.gz"
checksum="31e066137a962676e89f69d1b65382de95a7ef7d914b8cb956f41ea72e0f516b"
short_desc="Produces a familiar, friendly greeting"
homepage="https://www.gnu.org/software/hello/"
license="GPL"

Vous pouvez déterminer la somme de contrôle avec la commande :

$ xgensum -f srcpkgs/hello/template

Une fois le fichier de configuration écrit, lancez la compilation et la création du paquet :

$ ./xbps-src pkg hello

Si tout s’est bien passé, vous pouvez alors installer votre paquet sur votre machine :

# xbps-install --repository=hostdir/binpkgs/hello/ hello

Soumettre un paquet

Si votre paquet fonctionne correctement, vous pouvez le proposer à la communauté pour qu’il soit intégré dans les paquets Void officiels. Tout d’abord, comme Void est disponible pour plusieurs architectures et libc, il faut commencer par tester si le paquet peut se compiler correctement sur d’autres architectures, par exemple pour ARM7, avec musl-libc :

$ ./xbps-src -a armv7l-musl pkg hello

Créez ensuite un commit décrivant votre contribution et envoyez‐le dans une branche spécifique sur le serveur :

$ git add srcpkgs/hello/template
$ git commit -am "New package: hello-2.10"
$ git push -u origin hello

Il ne vous reste plus qu’à vous connecter sur GitHub et à créer une demande d’intégration _— pull request — de votre commit dans le dépôt officiel. Si des modifications vous sont demandées, pensez à travailler toujours sur le même commit et la même branche distante :

$ git commit -a --amend
$ git push -f

Conclusion

Void (Linux) est une distribution peu connue mais dont les choix techniques originaux sont plutôt appréciables à l’usage. Elle est légère, rapide, très à jour et facile à configurer « dans l’esprit UNIX ». En revanche, elle n’est pas destinée à des débutants et n’a pas la logithèque la plus complète qui soit.

Personnellement, j’utilise Void tous les jours pour des usages classiques de bureautique, Web, multimédia, ainsi que pour développer en C++ et en Python avec toutes sortes de bibliothèques. En un an d’utilisation, je n’ai pas réussi à la casser ni à avoir de conflits majeurs. En deux occasions, la mise à jour du système ne fonctionnait pas, mais à chaque fois il a suffit d’attendre un jour ou deux pour que les mainteneurs corrigent le problème et que les mises à jour fonctionnent à nouveau.