Distrobox une alternative à Vagrant ?
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 :
# en mode sudocurl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sudo sh# sans sudocurl -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 :
/usr/share/distrobox/distrobox.conf/etc/distrobox/distrobox.conf${HOME}/.config/distrobox/distrobox.conf${HOME}/.distroboxrc
avec ce contenu :
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 :
DBX_CONTAINER_MANAGERDBX_CONTAINER_IMAGEDBX_CONTAINER_NAMEDBX_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 :
distrobox create -n test
Pour entrer dans la box créée :
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 :
distrobox enter test -- command-to-execute
Pour lister les boxes en cours :
distrobox list
Pour l’arrêter :
distrobox stop test
Et pour la supprimer :
distrobox rm test
Quelques tests
Je crée ma box et je me connecte dessus :
distrobox create -n testdistrobox 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 :
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 ?
➜ test-nixos iduid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant)
➜ test-nixos ls $HOMEProjets 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 !