====== VirtualBox sur Debian ======
Cette fiche traite de Debian en tant que système hôte et système invité.
=== Résumé d'installation ===
* Sur la machine hôtesse :
* vérifier les prérequis
* installer l'application __Virtualbox__
* installer le pack d'extension (__Extension Pack__) - optionnel -
* déclarer l'utilisatrice comme membre du groupe vboxusers
* Sur chaque machine invitée - optionnel - :
* installer les compléments pour invitée ou (__Guest Additions__)
* déclarer l'utilisatrice comme membre du groupe vboxsf
===== Installer VirtualBox =====
Les opérations sont effectuées avec les droits de superutilisatrice.
==== Prérequis ====
En cas de première installation de VirtualBox, il convient de s'assurer que le système est déjà équipé de tout ce dont l'application aura besoin pour fonctionner. On installe, si nécessaire, les paquetages suivants : dkms, build-essential, libvirt-daemon-driver-vbox et tous les packetages //linux-headers// correspondant aux noyaux((Il faut être honnête, déterminer avec précisions quels sont les linux-headers nécessaires et suffisantes à charger n'est pas simple. En cas de doute, une technique simple, fiable mais fastidieuse consiste à noter tous les paquetages linux-image-xxx déjà présents sur le système et installer tous le paquetages linux-headers-xxx correspondants.)) sur lesquels on veut que virtualbox fonctionne.
À titre d'exemple, voici comment j'ai procédé, sur une version fraîchement installée((Installation de base puis upgrade du noyau via les backports.)) de Debian 11:
uname -a
apt install dkms, libvirt-daemon-driver-vbox linux-headers-5.18.0-0.deb11.3-amd64 linux-headers-5.18.0-0.bpo.1-amd64
==== Depuis les dépôts Debian ====
La disponibilité des paquetages nécessaires étant variable selon les versions de Debian, il faut se renseigner sur la page dédiée du wiki de Debian : [[https://wiki.debian.org/VirtualBox|VirtualBox]].
Pour des raisons de licence, VirtualBox et l'extension "Guest Additions" sont dans deux paquetages différents.
==== Depuis le dépôt d'Oracle ====
Oracle((L'éditeur de VirtualBox.)) propose également des versions packagées pour Debian. On dispose ainsi de versions plus récentes. Attention : ces paquetages ne bénéficient d'aucune garantie de la part de Debian ! Les informations nécessaires à la configuration des dépôts et à l'installation sont disponibles sur la page dédiée d'Oracle : [[https://www.virtualbox.org/wiki/Linux_Downloads|Download VirtualBox for Linux Hosts]].
=== Ajout du dépôt Oracle ===
Il est vivement recommandé de suivre les [[https://www.linuxbabe.com/security/verify-pgp-signature-software-downloads-linux|instructions de vérification des clés et signatures]] applicables tout ajout de dépôts hors Debian.
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/oracle-virtualbox-2016.gpg] https://download.virtualbox.org/virtualbox/debian bullseye contrib" | tee -a /etc/apt/sources.list.d/virtualbox.list
cd /tmp
wget https://www.virtualbox.org/download/oracle_vbox_2016.asc
gpg --show-keys oracle_vbox_2016.asc
gpg --dearmor --yes --output /usr/share/keyrings/oracle-virtualbox-2016.gpg oracle_vbox_2016.asc
==== Installation du paquetage ====
Pour l'installer, il faut impérativement indiquer la version souhaitée, par exemple :
apt update
apt install virtualbox-6.0
Une fois la version installée, les mises à jour se font automatiquement, suivant la politique que vous avez définies pour votre système hôte.
En revanche - et heureusement - les changements de version ne sont pas automatiquement répercutés. Passer de la 6.0 à la 6.1 demandera une action de votre part.
==== Autorisation ====
VirtualBox est lancé par une utilisatrice et tourne sous les droits de cette utilisatrice. Il en va de même des machines virtuelles. L'utilisation de VirtualBox requiert donc l'octroi d'une autorisation spécifique. Cela se fait en ajoutant l'utilisatrice voulue au groupe //vboxusers// :
# usermod -a -G vboxusers
Lors de la première installation du paquetage //virtualbox-M.m//, le groupe //vboxusers// sera créé s'il n'existait pas déjà.
==== Pack d'extension ====
Ce pack apporte aux VM la possibilité d'accéder à certaines ressources de la machine hôtesse, tels les périphériques USB 2 et USB 3. Il doit être installé même si on ne l'exploite que sur une seule VM.
Lors d'une première installation((Par la suite, les mises à jours sont gérées par VirtualBox.)), on doit télécharger la version de l'extension qui correspond exactement à la version de VirtualBox que l'on vient d'installer. Le pack d'extension est identique pour tous les systèmes. L'URL de téléchargement est indiquée sur le [[https://www.virtualbox.org/wiki/Downloads|site d'Oracle]] (copier l'URL attachée à l'ancre "All supported platforms").
Une fois l'URL récupérée, on procède à l'installation proprement dite.
Principe :
cd tmp
wget
VBoxManage extpack install --replace
Exemple :
cd tmp
wget https://download.virtualbox.org/virtualbox/6.1.36/Oracle_VM_VirtualBox_Extension_Pack-6.1.36a-152435.vbox-extpack
VBoxManage extpack install --replace Oracle_VM_VirtualBox_Extension_Pack-6.1.36a-152435.vbox-extpack
Bien sûr, on remplacera l'URL et le nom du fichier par les valeurs obtenues, le jour où l'opération sera effectuée.
Si l'on souhaite continuer à utiliser le //Pack d'extension//((Oracle VM VirtualBox Extension Pack)), il faudra le mettre à jour et en accepter la [[https://www.virtualbox.org/wiki/VirtualBox_PUEL|licence]], à chaque mise à jour de VirtualBox.
==== Vérification ====
Avant d'aller plus loin, il est conseillé de faire un test qui a défaut d'être complet est à la fois informatique et particulièrement simple à réaliser :
/sbin/vboxconfig
En cas de problème((La liste des problèmes possibles et les moyens d'y remédier dépasse le cadre de cette fiche.)), les informations fournies seront bien plus complètes, lisibles et précises que si on tente bêtement de lancer l'application graphique.
===== VirtualBox Guest Additions en ligne de commande =====
==== Sur la machine hôtesse ====
On s'assure qu'on a installé l'//Extension pack// et que l'extension est reconnue par VirtualBox (Fichier > Paramètres > Extensions).
==== Sur chaque machine invitée ====
Les compléments pour invitées (Guest Additions) sont disponibles sur une image iso, installée sur la machine hôtesse : /usr/share/virtualbox/VBoxGuestADDitions.iso
Dans la configuration de la machine invitée, on ajoute cette image iso aux stockages disponibles, comme on le ferait pour n'importe quel CD/DVD virtuel.
==== Sur chaque système invité concerné ====
Une machine virtuelle pouvant héberger plusieurs systèmes, l'opération est à répéter sur chaque système que l'on souhaite faire bénéficier de //Guest Additions//.
Dans ce qui suit, ne pas sauter l'étape d'installation de build-essential et dkms !!!
# apt-get update
# apt-get install build-essential dkms
# cd /media
//// on devrait trouver un répertoire dont le nom ressemble à VBOXADDITIONS_4.2.12_84980, sinon explorer les répertoires présents (cdrom, cdrom0, cdrom1, etc.)////
//// si tous les répertoires /media/* sont vides, procéder à un montage manuel de l'image iso : # mount /dev/cdrom /media/cdrom ////
# cd VBOXADDITIONS pour faire jouer l'autocomplétion
# sh VBoxLinuxAdditions.run
En cas de montage manuel de l'image du CD, il est normal que le système indique un montage en lecture seule puisqu'il s'agit de l'image iso d'un CD ;)
Déclarer l'utilisatrice souhaitant utiliser les //guest additions// comme membre du groupe //vboxsf//.
# usermod -a -G vboxsf
==== Mises à jour ====
Chaque mise à jour de //VirtualBox// s'accompagne d'une mise à jour des //Guest Additions//.
Sur le système hôte, ces mises à jour sont gérées automatiquement par le gestionnaire de paquetages suivant la politique que l'on a définie.
Au lancement de //VirtualBox//, l'utilisatrice sera avertie de l'existence d'une nouvelle version des //Guest Additions// et l'ajout de cette mise à jour lui sera proposé.
Mais rien n'est répercuté sur les systèmes des machines invitées puisque ce sont des systèmes indépendants… Sur chaque machine invitée exploitant les //Guest Additions//, il faudra relancer le script d'installation, [[#sur_chaque_machine_invitee|comme indiqué précédemment]] :
# sh VBoxLinuxAdditions.run
Si on ne fait pas la mise à jour, aucun message ne viendra nous l'indiquer, ni au démarrage de la machine invitée, ni au lancement du système invité. Il faut donc être vigilante, car la plupart du temps, on ne perdra pas automatiquement tous les bénéfices de l'intégration au système hôte apportée par les //Guest Additions//. On ne s'en rendra pas compte jusqu'au jour où…
===== Redimensionner un disque =====
Sources : [[http://www.virtualbox.org/manual/ch08.html|VBoxManage manual]], [[http://www.thegeekstuff.com/2011/09/parted-command-examples/|parted command examples]].
Nous partons du principe que l'on veut agrandir un disque devenu trop petit.
Il va falloir :
- redimensionner le disque
- réorganiser les partitions
==== Redimensionner le disque ====
Vérifier dans la [[http://www.virtualbox.org/manual/ch08.html|documentation]] quel type disque est redimentionnable et quel type d'opération est permis.
$ VBoxManage modifyhd --resize
==== Réorganiser les partitions ====
Dans une VM de test basique, on a une seule partition. Mais en réalité, cela signifie 2 partitions :
* la racine
* le swap
De plus ces deux partitions seront souvent organisées comme suit :
* partition physique racine
* partition étendue
* partition logique swap
Cela signifie qu'il va falloir :
- étendre la partition étendue "sur la droite"
- déplacer la partition de swap "sur la droite"
- réduire la partition étendue "par la gauche"
- étendre la partition racine "sur le droite"
Ces opération doivent nécessairement être réalisée en bootant sur un autre système. Si la machine hôtesse est munie d'une interface graphique, je suggère de démarrer la machine invitée avec un CD (virtuel) de dépannage disposant de //gparted// (par ex. une image [[http://releases.ubuntu.com/|Ubuntu pour desktop]]).
====== Au secours ! ======
Quelques astuces pour se sortir de mauvaises situations.
===== Changer de terminal virtuel =====
Pour changer de terminal virtuel, dans une VM Linux, il suffit d'utiliser la touche "host" (HostKey) qui est, par défaut, assignée à la touche Ctrl située à droite du clavier. //HostKey+Fn// fait basculer sur le terminal virtuel //n// de la VM. Tout se passe comme si //HostKey// insérait un //Crtl+Alt//.
===== Forcer la VM à rendre la souris/clavier =====
Pour une raison ou une autre, la VM a capturé la souris (et le clavier) ne veut plus la rendre… Une pression sur la touche //HostKey// est censée la libérer. Si la VM est complètement partie dans le décor((Plus aucun contrôle de l'interface graphique par la souris ni raccourcis clavier de navigation et la VM utilisant 100% d'une CPU, par ex.)), il faudra peut-être envisager que l'éteindre en ligne de commande.
Mais comment ouvrir un terminal si on a perdu tout contrôle ? La première option et de basculer la machine hôtesse sur un autre terminal virtuel, par ex. Ctrl+Alt+Fn. Si cela ne fonctionne pas et si la machine hôtesse est joignable en ssh, on y accède depuis un autre ordi.
===== Quitter une VM en ligne de commande =====
Depuis la machine hôtesse, on commence par vérifier les noms des VM en fonction :
$ VBoxManage list runningvms
puis on arrête celle que l'on cible :
$ VBoxManage controlvm VM-ciblée poweroff
Une variante effectue une sauvegarde de l'état de la VM puis l'arrête.
$ VBoxManage controlvm VM-ciblée savestate