Il est très propable que vous ayez déjà vu passer des tutoriels ou des posts, avec à la clé une machine virtuelle assez stable et bien intégrée au bureau et au workflow, qui sert principalement d’environnement virtuel pour programmer ou faire d’autres choses qu’on ne pourrait pas se permettre de faire sur son système principal.
Généralement, ces configs utilisent KVM (ou Hyper-V). Malheureusement, chez moi, Arch Linux a décidé que KVM était trop ennuyeux et refuse de m’installer ebtables (qui permet tout de même d’avoir une connexion réseau sur les machines virtuelles…)

J’ai donc opté pour un système tout aussi intéressant, quoiqu’un peut moins performant : on va utiliser Virtualbox.

Le principe

C’est tout simple : on lance un script qui se charge de démarrer la machine virtuelle, puis de se connecter en SSH. Si la VM est déjà lancée, pas grave, on se connecte tout de même en SSH.

Le script appelle VboxManage, qui permet de gérer les machines virtuelles Virtualbox sans avoir à passer par l’interface graphique, et, bien évidemment, SSH. Il pourrait également être intéressant de configurer RemoteSSH pour pouvoir coder dans la VM, mais nous ne le ferons pas ici.

Ici, j’utiliserai Manjaro Linux en tant que système hôte, et d’un côté Arch Linux et Debian comme systèmes invités, mais nous n’aborderons que la configuration d’un seul.

Configurons

Allez, c’est l’heure de bidouiller un peu.

Etape 1 : tout installer sur VirtualBox.

Alright, commencons par créer une VM sur laquelle installer notre système hôte. Voici la configuration que je lui ai mise, je vous recommande de faire de même :
Carte mère :

  • Mémoire Vive : 1024 Mo (1Go)
  • Nb de processeurs : 1

Configuration vidéo :

  • Mémoire vidéo : 16 Mo
  • Contrôleur Graphique : VMSVGA

Stockage :

  • Contrôleur : SATA
  • Disque 1 : VMDK, Dynamiquement Alloué, 8Go

Réseau :

  • Interface 1 : NAT

Et je n’ai pas installé les additions invité, nous n’en aurons pas besoin.

Je vous laisse installer et configurer vous-même le système hôte, on se retrouve à la fin

Etape 2 : Installer SSH et configurer les ports

Et c’est à partir de là qu’on rentre dans le vif du sujet.
Vous l’avez sans doute remarqué, on ne peut pas se connecter directement à une machine virtuelle en SSH. Sur Virtualbox, il faut configurer une redirection de ports. Dans la boîte de dialogue de configuration de la machine virtuelle, allez dans la section réseau, puis dans Avancé, et enfin, cliquez sur Redirection de ports. Voici comment j’ai paramétré la mienne :

  • Nom : SSH (mais on s’en fiche, vous pouvez l’appelez comme vous le souhaitez)
  • Protocole : TCP
  • IP Hôte : 127.0.0.1 (localhost)
  • Port Hôte : 2523 (Utilisez un port libre, sinon SSH n’arrivera pas à se connecter à la VM)
  • Ip Invité : 10.0.2.15 (Elle peut être différente, vérifiez quelle est celle de votre machine avec ifconfig par exemple)
  • Port Invité : 23

Maintenant, place à l’installation de SSH. Le processus est différent selon les distributions, voici comment faire sur Arch Linux :

# On installe OpenSSH
sudo pacman -S openssh

# On active et démarre le service sshd
sudo systemctl enable sshd 
sudo systemctl start sshd

Ensuite, il va falloir le configurer. C’est extrèmement simple à faire, on n’a qu’une seule ligne à changer : le port utilisé. Dans le fichier /etc/ssh/sshd_config, décommentez la ligne :

#Port

Ajoutez ensuite votre port invité défini dans la configuration de redirection de ports Chez moi, ça ressemble à ça :

Port 23

Enfin, n’oubliez pas de recharger SSH ou de redémarrer pour appliquer les changements.
Normalement, vous pouvez vous connecter à votre VM. Chez moi, on a :

ssh -p 2523 khyrthy@localhost # Vous pouvez aussi mettre 127.0.0.1, normalement, ça revient au même

Configurations finales

Bon, maintenant que tout est correctement configuré du côté invité, on va s’attaquer à l’hôte. Premièrement, il nous faudra le nom de notre VM Vous pouvez le récupérer avec vboxmanage list vms. Chez moi, j’ai choisi le nom d’Architecture (Jeu de mots avec Arch Linux et le but de la VM : bootstrap des distributions linux comme Arch, Debian ou LFS)

Normalement, vous pouvez démarrer la machine virtuelle avec :

vboxmanage startvm --type headless [nom de la machine]

--type headless sert à préciser qu’on ne veut pas que la VM ait d’affichage.

Nickel, maintenant, si vous essayez de vous connecter en SSH, ça marche comme sur des roulettes. Pour finir, j’ai fait un petit script pour automatiser tout ça :

#!/bin/bash

vboxmanage starvm "Architecture" --type headless
sleep 1 # J'attends un petit peu avant d'essayer de me connecter par SSH
ssh -p 2523 khyrthy@localhost

Le script se charge de lancer la VM et de me connecter par SSH. Si la machine est déjà démarrée, Virtualbox m’affiche simplement une erreur, mais ce n’est pas grave. Il y a même moyen, avec des conditions, de ne pas tenter de démarrer la VM si elle est déjà up.

Voilà, vous avez une véritable devbox, opérationnelle et automatisée ! Merci d’avoir lu !

Mes sources

Pour produire cet article, je me suis principalement inspiré d’un post sur le blog de Stéphane Robert, que j’ai adapté à mes besoins et à ma configuration (donc sur un système GNU/Linux.

J’ai également dû consulter ce tutoriel sur la redirection de ports VirtualBox.