Tutoriel Développer avec une machine virtuelle

Introduction

L’utilisation d’ordinateurs privés (BYOD) pour le développement dans le cadre de l’entreprise ou de l’école pose le problème de la configuration des machines. L’utilisation de machines virtuelles préconfigurées permet de minimiser cette difficulté et d’avoir rapidement un environnement de développement prêt à l’emploi.

Une possibilité consiste à utiliser une machine virtuelle équipée d’un environnement de bureau et d’un EDI (VSCode, NetBeans, IntelliJ, etc.). Toutefois, cette solution est particulièrement gourmande en ressource. En effet, un environnement de bureau est généralement plutôt lourd et celui de la machine virtuelle fait double emploi avec celui de l’ordinateur hôte. De plus, il n’est pas possible de mettre à jour la machine virtuelle simplement en la remplaçant sans perdre les préférences de l’utilisateur.

Une autre possibilité est d’utiliser une machine virtuelle sans environnement de bureau, à l’aide d’un émulateur de terminal et du protocole ssh. Le principal avantage est que l’environnement ne demande alors que très peu de ressource ; mais sans interface utilisateur graphique, le temps et la pratique nécessaires à sa prise en main le rendent peu adapté à une utilisation occasionnelle.

Enfin, une troisième possibilité consiste à utiliser un EDI supportant le développement à distance. L’EDI fonctionne dans l’environnement graphique de la machine hôte et effectue les tâches de compilation, d’exécution et de débogage à distance avec le protocole ssh. Visual Studio Code permet de réaliser cela avec l’extension Remote Development.

C’est cette dernière possibilité que nous avons retenue dans le cadre des modules de développement. Ce tutoriel a pour but de vous aider à la mettre en œuvre.

VirtualBox et Vagrant

Pour utiliser la machine virtuelle de développement que nous avons préparé, vous aurez besoin d’installer l’hyperviseur VirtualBox et l’utilitaire en ligne de commande Vagrant. VirtualBox est un hyperviseur qui a l’avantage d’être disponible sur toutes les plateformes et Vagrant permet de simplifier le déploiement et la gestion des machines virtuelle.

Installation

Nous ne saurions trop vous recommander l’utilisation d’un gestionnaire de paquets pour l’installation de logiciel tel que Chocolatey sous Windows ou Homebrew sous macOS. Si vous n’utilisez pas de gestionnaire de paquets, ou si vous avez un doute, veuillez suivre le tutoriel : Installer et utiliser un gestionnaire de paquets.

Lancez l’une des séries de commandes ci-après pour installer VirtualBox et Vagrant dans sur votre système.

1
2
3
# Installer VirtualBox et Vagrant sous Windows.
choco install virtualbox -y --params "/NoDesktopShortcut /ExtensionPack" --version=6.0.14
choco install vagrant -y
1
2
3
4
# Installer VirtualBox et Vagrant sous macOS.
brew install --cask virtualbox
brew install --cask virtualbox-extension-pack
brew install --cask vagrant

Création d’une machine virtuelle de développement

Si vous effectuez cette opération en classe, assurez-vous d’être connecté au réseau de l’école avec un câble Ethernet afin de réduire le temps de téléchargement de la machine.

Pour créer votre machine virtuelle de développement, ouvrez une fenêtre de terminal sans privilège, rendez-vous dans votre répertoire de projets (~/projects) et lancez les commandes ci-dessous pour récupérer le projet Vagrant depuis le gestionnaire de dépôt git de l’école :

1
2
# Récupérer le projet Vagrant depuis le gitlab de l’école
git clone https://gitlab.epai-ict.ch/epai-ict/dev-vm.git

Si la commande ne fonctionne pas, assurez-vous que git est correctement installé. Si ce n’est pas le cas ou si vous n’en êtes pas sûr, veuillez suivre le tutoriel Installer git et Visual Studio Code.

Exécutez ensuite les commandes ci-après. La commande cd permet de vous rendre dans le répertoire de dev-vm que vous venez de créer. La commande vagrant up crée la machine virtuelle si elle n’existe pas déjà, et la démarre. Si la machine doit être créée, le téléchargement de l’image peut prendre plusieurs minutes.

1
2
3
4
# Aller dans le répertoire dev-vm
cd dev-vm
# Créer et démarrer la machine virtuelle
vagrant up

Le système d’exploitation de la machine virtuelle est Ubuntu 21.10 et est installé sans interface utilisateur graphique. Elle ne peut donc être utilisée qu’en ligne de commande. Les logiciels préinstallés sont les suivants :

  • Git
  • OpenJdk 16
  • Maven
  • MariaDB (mysql -u root -pepai123)

La machine est créée avec un utilisateur nommé «vagrant» qui se trouve dans le groupe sudoer. Le répertoire projects, qui se trouve dans le répertoire personnel de cet utilisateur, correspond au répertoire parent du répertoire dev-vm de votre machine physique. Les fichiers enregistrés dans le répertoire ~/projects de la machine virtuelle sont enregistrés directement dans le répertoire de projets de votre ordinateur et non sur le disque de la machine virtuelle.

Lorsque la machine est prête, assurez-vous de vous trouver dans le répertoire dev-vm et lancez la commande ci-après pour ouvrir une session avec le protocole ssh. La session est ouverte avec l’utilisateur vagrant et une clé publique pour l’authentification. Vous n’avez donc pas à saisir un mot de passe.

1
vagrant ssh

Vous pouvez fermer la session à l’aide de la commande exit.

Gestion de la machine virtuelle de développement

Pour gérer votre machine virtuelle de développement, prenez l’habitude d’utiliser vagrant en ligne de commande et non l’interface utilisateur de VirtualBox. Pour effectuer une action sur votre machine virtuelle, vous avez besoin de son identifiant. Pour le connaître, ouvrez une fenêtre de terminal sans privilège et lancez la commande suivante :

1
2
# Affiche l’état des machines gérées par Vagrant
vagrant global-status

Le résultat de la commande devrait ressembler à la figure ci-après.

1
2
3
4
5
6
7
8
9
10
11
id       name   provider   state    directory
------------------------------------------------------------------------
c77bfed  dev-vm virtualbox running  /Users/frossardj/projects/dev-vm

The above shows information about all known Vagrant environments
on this machine. This data is cached and may not be completely
up-to-date (use "vagrant global-status --prune" to prune invalid
entries). To interact with any of the machines, you can go to that
directory and run Vagrant, or you can use the ID directly with
Vagrant commands from any directory. For example:
"vagrant destroy 1a2b3c4d"

Le nombre hexadécimal tout à gauche est l’identifiant de la machine; ici c77bfed. Pour lancer les commandes, vous n’avez pas besoin de retenir le nombre en entier, mais juste assez de chiffre pour que le système puisse l’identifier sans ambiguïté. Ici, comme il n’y a qu’une machine, le premier chiffre suffit.

Les commandes principales sont :

1
2
3
4
5
6
7
8
# Démarrer la machine virtuelle
vagrant up <id>

# Arrêter la machine virtuelle
vagrant halt <id>

# Ouvrir une session ssh (la machine doit déjà être démarrée)
vagrant ssh <id>

Configurer VSCode pour le développement à distance

Pour commencer, assurez-vous que l’extension Remote Development est bien installée en lançant la commande ci-après dans une fenêtre de terminal sans privilège.

1
code --install-extension ms-vscode-remote.vscode-remote-extensionpack

Si la commande ne fonctionne pas, assurez-vous d’avoir installé Visual Studio Code. Si ce n’est pas le cas, veuillez suivre le tutoriel Installer git et Visual Studio Code.

Toujours dans la fenêtre de terminal, lancez la commande ci-après pour vous assurer que votre machine virtuelle est démarrée et accessible.

1
vagrant up <id>

Lancer ensuite la commande ci-dessous pour récupérer la configuration ssh de votre machine virtuelle de développement dans un fichier nommé ssh.config.

1
2
3
4
5
# Commande pour Windows CMD et macOS bash
vagrant ssh-config > ./ssh.config

# Commande pour PowerShell
vagrant ssh-config | Out-File -Encoding UTF8 -FilePath ./ssh.conf

Ouvrez le fichier pour vous assurer que le contenu est similaire au texte ci-après.

1
2
3
4
5
6
7
8
9
10
Host défaut
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/frossardj/work/test/dev-vm/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

Copiez ce fichier dans votre répertoire personnel et ouvrez Visual Studio Code. Pressez ensuite Shit-Ctrl-P et cherchez la commande Remote-SSH: Settings (fig. 1).

Remote-SSH: Settings
Fig. 1 – Remote-SSH: Settings

Dans la zone de texte prévue à cet effet (voir fig. 2), saisissez le chemin du fichier ssh.conf que vous venez de créer.

Fichier de configuration
Fig. 2 – Fichier de configuration

Enfin, redémarrez Visual Studio Code pour terminer la configuration.

Connecter VSCode à votre machine virtuelle

Lancez VSCode et ouvrez le panneau de développement à distance et faites un click droit sur l’icône du serveur nommé « default » pour ouvrir le menu contextuel. Ouvrez une session sur la machine virtuelle avec le menu « Connect to Host in Current Window » (voir fig. 3).

Connecter la machine virtuelle
Fig. 3 – Connecter la machine virtuelle

Après quelques instants, votre fenêtre est maintenant connectée à votre machine virtuelle. Vous pouvez voir le nom de la machine à laquelle vous êtes connecté en bas à droite dans le rectangle vert. Dans votre cas, vous devriez voir « SSH: dev-vm ».

Il reste encore à installer le pack d’extension pour Java dans la machine virtuelle. Pour cela, ouvrez le panneau des extensions et installez le Java Extension Pack (voir fig. 4) .

Connecter la machine virtuelle
Fig. 4 – Ouvrir le panneau des extensions et installer Java Extension Pack

Vous pouvez désormais travailler avec VSCode tout à fait normalement. Lorsque vous utilisez le menu « Open… », vous parcourez le système de fichier de la machine virtuelle et le terminal intégré vous permet d’utiliser le bash de la machine virtuelle.

Ouvrir un répertoire
Fig. 5 – Ouvrir un répertoire de la machine virtuelle

Conclusion

Avec ce tutoriel, vous avez créé une machine virtuelle de développement à l’aide de vagrant. Vous avez appris à démarrer et à arrêter cette machine. Vous avez ensuite configuré Visual Studio Code pour le développement à distance et appris à ouvrir une session de développement à distance sur la machine virtuelle.