VirtualBox, Vagrant on Debian 10 "Buster"

Contexte

Récemment, j’ai installé mon nouveau portable professionnel avec Debian 10 "Buster". Pour mes différents travaux, j’ai pris l’habitude de travailler avec des environnement sous Vagrant. Cela permet de construire mes environnements de tests ou de tester simplement de nouveaux produits. En complément, j’utilise VirtualBox comme fournisseur pour les VMs.

Mais pourquoi ce billet ? La raison est simple. Le produit VirtualBox n’est disponible sous "Buster". Vous pouvez le voir avec le lien suivant : Packages Debian ou avec la capture d’écran ci-dessous (réalisé lors de l’écriture de ce billet.)

Capture d’écran du site packages.debian.org

Installation de Vagrant

C’est la partie la plus simple. Le package existe au niveau de la distribution.

Donc, il suffit de taper la commande suivante en tant que root

apt-get install vagrant

Le point important est que la version incluse est la version 2.2.3. La dernière version de VirtualBox supportée est la version 6.0. Nous aurons l’occasion de revenir dessus.

Vagrant has detected that you have a version of VirtualBox installed that is not supported by this version of Vagrant. Please install one of the supported versions listed below to use Vagrant:

4.0, 4.1, 4.2, 4.3, 5.0, 5.1, 5.2, 6.0

— vagrant 2.2.3

Installation de VirtualBox

Comme énoncé précédemment, le produit n’est pas inclus dans la distribution. Heureusement, Oracle met à la disposition un dépôt pour les distributions à base de Debian.

Pour les sources externes, je préfère créer un fichier spécifique. Donc pour cela, je crée un fichier virtualbox.list dans le dossier /etc/apt/sources.list.d/

deb [arch=amd64] http://download.virtualbox.org/virtualbox/debian buster contrib

Au jour de l’écriture de ce billet, il y a deux versions :

  • virtualbox-6.0

  • virtualbox-6.1

Nous allons utiliser le packet virtualbox-6.0 pour des raisons de compatibilité de vagrant.

avertissement Le support de virtualbox-6.0 est présent jusqu’en juillet 2020.

Suite à l’inclusion d’une nouvelle origine des sources, il sera nécessaire d’ajouter la clef Oracle pour les packages. Il existe plusieurs clefs, celle pour Buster est la suivante: oracle_vbox_2016.asc.

for Debian 8 ("Jessie") / Ubuntu 16.04 ("Xenial") and later

— Site VirtualBox.org

L’empreinte de la clé oracle_vbox_2016.asc est

B9F8 D658 297A F3EF C18D  5CDF A2F6 83C5 2980 AECF
Oracle Corporation (VirtualBox archive signing key) <info@virtualbox.org>

Nous allons pouvoir installer la clé

apt-key add oracle_vbox_2016.asc

Enfin, nous allons pouvoir passer à l’installation à proprement parler.

# apt-get update
# apt-get install virtualbox-6.0

astuce Si vous n’utilisez pas SecureBoot, l’installation est terminée et vous pouvez utiliser les produits. Profitez-en !

Configuration avec SecureBoot

En revanche, si vous avez SecureBoot activé comme moi, vous aurez un problème avec VirtualBox. En effet, lors de l’installation de virtualbox, vous verrez l’erreur ci-dessous.

# apt-get install virtualbox-6.0
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Paquets recommandés :
  linux-image
Les NOUVEAUX paquets suivants seront installés :
  virtualbox-6.0
0 mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de prendre 103 Mo dans les archives.
Après cette opération, 227 Mo d'espace disque supplémentaires seront utilisés.
Réception de :1 http://download.virtualbox.org/virtualbox/debian buster/contrib amd64 virtualbox-6.0 amd64 6.0.18-136238~Debian~buster [103 MB]
103 Mo réceptionnés en 3s (40,9 Mo/s)
Préconfiguration des paquets...
Sélection du paquet virtualbox-6.0 précédemment désélectionné.
(Lecture de la base de données... 252252 fichiers et répertoires déjà installés.)
Préparation du dépaquetage de .../virtualbox-6.0_6.0.18-136238~Debian~buster_amd64.deb ...
Dépaquetage de virtualbox-6.0 (6.0.18-136238~Debian~buster) ...
Paramétrage de virtualbox-6.0 (6.0.18-136238~Debian~buster) ...
Fin de la procédure.
vboxdrv.sh: failed: modprobe vboxdrv failed. Please use 'dmesg' to find out why.

There were problems setting up VirtualBox.  To re-start the set-up process, run
  /sbin/vboxconfig
as root.  If your system is using EFI Secure Boot you may need to sign the
kernel modules (vboxdrv, vboxnetflt, vboxnetadp, vboxpci) before you can load
them. Please see your Linux system's documentation for more information.
Traitement des actions différées (« triggers ») pour mime-support (3.62) ...
Traitement des actions différées (« triggers ») pour hicolor-icon-theme (0.17-2) ...
Traitement des actions différées (« triggers ») pour gnome-menus (3.31.4-3) ...
Traitement des actions différées (« triggers ») pour systemd (241-7~deb10u3) ...
Traitement des actions différées (« triggers ») pour shared-mime-info (1.10-1) ...
Traitement des actions différées (« triggers ») pour desktop-file-utils (0.23-4) ...

Si vous lancez la commande /sbin/vboxconfig comme conseillé en premier lieu, cette dernière vous proposera de désactiver le SecureBoot.

Voulant garder la sécurité maximale de mon ordinateur, je préfère la seconde solution. C’est à dire signer les modules du noyau (vboxdrv, vboxnetadp, vboxnetfltet vboxpci)

Pour la signature des modules, il est nécessaire de mettre en place une configuration particulière avec son propre certificat, je vous renvoie vers mon précédent billet sur le sujet. J’y explique pourquoi et comment réaliser les opérations.

Signer les modules VirtualBox

Une fois la configuration faite, nous allons pouvoir signer nos modules. Pour cela nous allons utiliser la commande sign-file. L’emplacement est en fonction du noyau que vous utilisez. Dans mon cas, c’est le noyau 4.19. Pour simplifier, je définis un alias mais cela n’est pas obligatoire.

alias sign-file="/usr/lib/linux-kbuild-4.19/scripts/sign-file"

Vous devez ensuite mettre la pass-phrase dans la variable KBUILD_SIGN_PIN sans oublier de l’exporter

[ -z "${KBUILD_SIGN_PIN}" ] && read -p "Passphrase for ${key}: " KBUILD_SIGN_PIN
export KBUILD_SIGN_PIN

Enfin, vous pouvez utiliser la commande sign-file qui possède quatre arguments :

  • Algorithme de hash (ex : sha256)

  • Votre clé privée (key)

  • Votre certificat (x509)

  • Votre module

sign-file "${hash_algo}" "${key}" "${x509}" "${module}"

Une fois la signature réalisée, vous pourrez vérifier avec la commande modinfo.

modinfo vboxdrv

Vous devriez voir les propriétés : sig_id, signer, sig_key, sig_algo et signature :

filename:       /lib/modules/4.19.0-8-amd64/misc/vboxdrv.ko
version:        6.0.18 r136238 (0x00290008)
license:        GPL
description:    Oracle VM VirtualBox Support Driver
author:         Oracle Corporation
srcversion:     43F4A2EEB843DF199ED0E7C
depends:
retpoline:      Y
name:           vboxdrv
vermagic:       4.19.0-8-amd64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         dali
sig_key:        8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45
sig_hashalgo:   sha256
signature:      8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		8F:05:22:A2:E8:7E:9D:69:7E:19:93:D8:F4:1B:4D:DC:B8:7A:F2:45:
		CD:3D:41:65:AF:E8:B1:0F:CF:ED:6A:E6:D1:7B:0A:FF
parm:           force_async_tsc:force the asynchronous TSC mode (int)

Chargez vos modules avec la commande modprobe. Pour rappel, il y en a quatres :

  • vboxdrv.ko,

  • vboxnetadp.ko,

  • vboxnetflt.ko

  • vboxpci.ko.

Les modules se trouvent dans le répertoire :

  • /lib/modules/4.19.0-8-amd64/misc

avertissement Là encore, le répertoire est relatif à la version du noyau que vous utilisez.

L’installation et la configuration sont terminée. Profites-en !

Références