Aller au contenu

Distrobox une alternative à Vagrant ?

logo

Distrobox annonce qu’il permet de lancer n’importe quelle distribution Linux sur nos machines Linux. Il utilise des containers qui s’intègre totalement dans l’os hôte, en montant tous les filesystems, même les clés usb. Il promet même de pouvoir lancer des environnementgraphiqueses X11 et Wayland.

Installation de distrobox

Distrobox s’installe sur toutes machines et impose simplement la présence de docker ou de podman. Pour l’installer un curl suffit :

Terminal window
# en mode sudo
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh
# sans sudo
curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local

Par défaut, il utilise le répertoire home de l’utilisateur qui lance la box. Mais il est possible de changer ce comportement soit en créant un fichier de configuration créé dans un de ces répertoires :

Terminal window
/usr/share/distrobox/distrobox.conf
/etc/distrobox/distrobox.conf
${HOME}/.config/distrobox/distrobox.conf
${HOME}/.distroboxrc

avec ce contenu :

Terminal window
container_user_custom_home="/home/.local/share/container-home-test"
container_image="registry.opensuse.org/opensuse/toolbox:latest"
container_manager="docker"
container_name="test-name-1"
non_interactive="1"

soit via des variables d’environnement :

Terminal window
DBX_CONTAINER_MANAGER
DBX_CONTAINER_IMAGE
DBX_CONTAINER_NAME
DBX_NON_INTERACTIVE

Les commandes distrobox

Distrobox utilise toute une série de commandes pour gérer ses box :

Nous allons créer une nouvelle box :

Terminal window
distrobox create -n test

Pour entrer dans la box créée :

Terminal window
distrobox enter test

Pour lancer une commande, c’est la même commande, mais en ajoutant :

Exécutez une commande dans une boîte de distribution :

Terminal window
distrobox enter test -- command-to-execute

Pour lister les boxes en cours :

Terminal window
distrobox list

Pour l’arrêter :

Terminal window
distrobox stop test

Et pour la supprimer :

Terminal window
distrobox rm test

Quelques tests

Je crée ma box et je me connecte dessus :

Terminal window
distrobox create -n test
distrobox enter test
/usr/bin/sh: warning: setlocale: LC_ALL: cannot change locale (fr_FR.UTF-8)
/usr/bin/sh: warning: setlocale: LC_ALL: cannot change locale (fr_FR.UTF-8)
/usr/bin/sh: warning: setlocale: LC_ALL: cannot change locale (fr_FR.UTF-8)
/home/vagrant/.oh-my-zsh/oh-my-zsh.sh:126: compinit: function definition file not found
/home/vagrant/.oh-my-zsh/lib/completion.zsh:78: bashcompinit: function definition file not found
/home/vagrant/.oh-my-zsh/lib/directories.zsh:32: command not found: compdef
/home/vagrant/.oh-my-zsh/lib/termsupport.zsh:108: add-zsh-hook: function definition file not found
/home/vagrant/.oh-my-zsh/lib/termsupport.zsh:109: add-zsh-hook: function definition file not found
/home/vagrant/.oh-my-zsh/lib/theme-and-appearance.zsh:2: colors: function definition file not found
/home/vagrant/.zshrc:120: command not found: zplug
/home/vagrant/.zshrc:121: command not found: zplug
(anon):8: is-at-least: function definition file not found
test-nixos who

Cela confirme bien qu’il utilise que le user qui lance la box avec ses paramètres dont son shell et sa configuration de la home directory. Si on veut modifier le shell il faut ajouter ceci à la commande create :

Terminal window
distrobox create -n test SHELL=/bin/zsh

Il faudra donc bien modifier cela via le fichier de configuration.

On est qui dans le container et qu’est qui est monté dessus ?

Terminal window
test-nixos id
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
test-nixos ls $HOME
Projets my-vagrant-box sources.list
test-nixos mount
overlay on / type overlay (rw,relatime,lowerdir=/var/lib/docker/overlay2/l/BX5NTRHCZ2IVDGRFR6A2TD7TGC:/var/lib/docker/overlay2/l/YWY2NLDQFVHTVVDVXDIZFJ673V:/var/lib/docker/overlay2/l/GZSSHXSYI6ISQTJFC6SA2GVHCL,upperdir=/var/lib/docker/overlay2/a24ecf6aa0d6a033dadd26f4a09196411eb7b744a53b78db734e2f81465d4798/diff,workdir=/var/lib/docker/overlay2/a24ecf6aa0d6a033dadd26f4a09196411eb7b744a53b78db734e2f81465d4798/work)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1972988k,nr_inodes=493247,mode=755,inode64)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,size=2008784k,nr_inodes=502196,inode64)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M)
mqueue on /dev/mqueue type mqueue (rw,nosuid,nodev,noexec,relatime)
/dev/mapper/ubuntu--vg-ubuntu--lv on /tmp type ext4 (rw,relatime)
/dev/mapper/ubuntu--vg-ubuntu--lv on /nix type ext4 (rw,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate,memory_recursiveprot)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
none on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,relatime,mode=700)
...

Tous les fs sont présent ! Mince pas forcément ce que j’aimerais. Dans la FAQ je ne vois rien permettant de modifier ce comportement. J’arrête donc les tests !

Conclusion

Cela ne correspond pas du tout à ce que je cherche à faire avec Vagrant. Je cherche à créer des machines vierges de toute installation. Donc non distrobox dans l’état actuel n’est pas une alternative à vagrant.

Vivement le mode sandbox, car pour le moment je trouve même ca dangereux avec docker !

Plus d’infos