Virtualisation de systèmes d'exploitation
Introduction
Virtualisation de systèmes d'exploitation :
- technique qui permet de faire fonctionner en même temps, sur un seul ordinateur (hôte), plusieurs systèmes d'exploitation (invités). Il existe plusieurs types de virtualisation.
- on parle alors de Virtual Machines (VM) ou Machine Virtuelle.
- La virtualisation sur Wikipédia
Hyperviseur
- Logiciel de virtualisation installé dans le système d'exploitation de l'hôte et qui permet à plusieurs systèmes d'exploitation de fonctionner sur l'hôte.
- Crée des environnements clos où sont installé les OS invités.
- KVM (Kernel-based Virtual Machine) est un hyperviseur libre de type I pour Linux. C'est l'hyperviseur qui sera utilisé dans ce document.
Pourquoi utiliser la virtualisation ?
- Utiliser plusieurs VM en même temps sur la même machine,
- Tester différents systèmes d'exploitation,
- Tester des logiciels dans un environnement contrôlé sans danger pour le système hôte,
- Copier et utiliser des environnements de test,
- Utiliser des configurations différentes sur le même serveur comme par exemple Nginx et PostgreSQL sur une VM et Apache2 et MySQL sur une autre.
- Transporter un OS d'une machine à l'autre.
Description de l'installation et des outils utilisés dans ce document
Le réseau
Le réseau local est connecté à internet via un modem routeur. Il communique avec l'extérieur (le monde) à l'aide d'une adresse IP publique que nous représenterons par XXX.XXX.XXX.XXX.
Le modem routeur possède 4 prises LAN (réseau local ).Donc, on peut y connecter 4 appareils. Ici,on voit :
- un PC sur la prise 1 et
- un serveur sur la prise 2.
- Les deux autres prises sont libres.
Les appareils du réseau local communiquent l'un avec l'autre à l'aide d'adresses IP privées. Ici, par exemple :
- le PC a pour adresse IP privée 198.168.0.1
- le serveur l'adresse IP privée 192.168.0.2.
Les systèmes d'exploitation des machines
Dans ce document il ne sera question que d'OS GNU/Linux. Pour trouver des informations sur l'OS installé tapez dans un terminal la commande :
uname -a
- PC :
Linux <nom de la machine> 5.15.0-58-generic #64~20.04.1-Ubuntu SMP Fri Jan 6 16:42:31 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
- Serveur (machine hôte):
Linux <nom du serveur> 5.4.0-137-generic #154-Ubuntu SMP Thu Jan 5 17:03:22 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
- Archive utillisée pour installer la VM : ubuntu-20.04.5-live-server-amd64.iso
L'hyperviseur KVM
- Hyperviseur de type I pour une virtualisation complète.
- Simule un nouvel ordinateur complet pour les le système d'exploitation (OS) invité.
- KVM est plus facile à mettre en place qu'un hyperviseur de type II.
- KVM est un logiciel libre.
- Pour des OS prévus pour la même architecture matériel que le processeur physique.
- Hyperviseurs : KVM
Est-ce que la machine hôte supporte la virtualisation ?
Envoyer cette commande dans une console de l'hôte où on veut installer une VM:
egrep -c '(svm|vmx)' /proc/cpuinfo
Réponse :
- si 0 : l'hôte ne supporte pas la virtualisation, l'installation est compromise.
- si 1 ou + : l'hôte supporte la virtualisation, on peut poursuivre l'installation.
La virtualisation est-elle activée dans le BIOS/UEFI ?
Installer cpu-checker
sudo apt install cpu-checker
Commande
Envoyer cette commande dans une console de l'hôte.
sudo kvm-ok
Réponses
- Si la virtualisation n'est pas activée et si le processeur prend en charge la virtualisation , cette réponse est envoyée en anglais (ici elle est traduite pour plus de commodité).
INFO : /dev/kvm n'existe pas ASTUCE : sudo modprobe kvm_intel INFO : Votre processeur prend en charge les extensions KVM INFO : KVM (vmx) est désactivé par votre BIOS ASTUCE : Entrez dans la configuration de votre BIOS et activez la technologie de virtualisation (VT), puis éteignez ou rallumez votre système. L'accélération KVM ne peut PAS être utilisée
Il faut entrer dans le BIOS et activez la technologie de virtualisation (VT), puis rebooter le système.
- Si la virtualisation est activée cette réponse s'affiche en anglais dans la console.
INFO : /dev/kvm existe L'accélération KVM peut être utilisée
Activation de la Technologie de virtualisation pour l'hôte
Arrêter le serveur
Installer des périphériques sur le serveur hôte
Un écran + un clavier + une souris
Ouvrir le BIOS/UEFI
Redémarrer le serveur hôte et presser la touche qui ouvre le BIOS/UEFI.
Par exemple F2 pour ouvrir ASUS UEFI BIOS Utility.
Chercher comment activer la virtualisation
Par exemple, pour ASUS UEFI BIOS Utility
- Advanced Mode / Onglet Avancé /
- Activer Technologie de virtualisation Intel tout en bas de l'écran.
- Bouton "Quitter "
Enregistrer les modifications et réinitialiser le serveur
Tester la machine
sudo kvm-ok
On devrait obtenir :
INFO: /dev/kvm exists KVM acceleration can be used
Redémarrer le serveur hôte
- Arrêter le serveur,
- Débrancher écran, clavier et souris
- Redémarrer le serveur hôte
Installation d'une machine virtuelle
Conditions d'installation
Voir les chapitres précédants.
- le ou les processeurs de la machine hôte destinée à recevoir la VM invitée acceptent la virtualisation
- la virtualisation est activée dans le BIOS/UEFI.
En plus il faut une connexion à internet ou au moins l'archive iso d'installation du système d'exploitation de la VM.
Installer KVM et annexes sur le serveur hôte
sudo apt-get install qemu-kvm
- qemu-kvm - virtualisation complète sur les machines x86 ;
Ajouter l'utilisateur au groupe kvm
sudo adduser $USER kvm
Redémarrer.
Créer un fichier image sur le serveur hôte
Répertoire vm
- Créer un répertoire vm sur le serveur hôte. Il contiendra l'image disque de la VM. Nous allons, par exemple, créer ce dossier dans le home de l'utilisateur.
mkdir /home/<utilisateur>/vm
Image disque
Moyen pratique de simuler un grand nombre de médias : elles permettent notamment de stocker, sur un seul disque dur physique, de nombreuses images disques virtuelles permettant d'accéder à des données qui pourraient ne pas être compatibles avec le système hôte.[1] Il va contenir le système de fichier virtuels de la VM.
Commande :
qemu-img create -f qcow2 /home/<utilisateur>/vm/fichier_image.img 6G
- Emplacement : /home/<utilisateur>/vm/fichier_image.img
- 6G est la taille virtuelle de ce système de fichier virtuel.
Réponse
Formatting '/home/<utilisateur>/vm/fichier_image.img', fmt=qcow2 size=6442450944 cluster_size=65536 lazy_refcounts=off refcount_bits=16
Rq : remplacer <utilisateur> par le nom de l'utilisateur du serveur hôte.
Charger l'archive iso d'Ubuntu server 20.04 sur le serveur hôte
- Créer un dossier iso , ou placer les fichiers iso des systèmes d'exploitation. Par exemple, pous placerons ce dossier dans le home de l'utilisateur :
mkdir /home/<utilisateur>/iso cd /home/<utilisateur>/iso
- Lancer la commande suivante depuis le dossier iso
wget https://releases.ubuntu.com/20.04.5/ubuntu-20.04.5-live-server-amd64.iso
Installation de virt-manager
Présentation
« L'application virt-manager est une interface utilisateur de bureau pour la gestion des machines virtuelles via libvirt. Elle cible principalement les VMs KVM, mais gère également Xen et LXC (conteneurs linux). Elle présente une vue synthétique des domaines en cours d'exécution, leurs performances en direct et les statistiques d'utilisation des ressources. Des assistants permettent la création de nouveaux domaines, ainsi que la configuration et l'ajustement de l'allocation des ressources et du matériel virtuel d'un domaine. Une visionneuse client VNC et SPICE intégrée présente une console graphique complète pour le domaine invité.» [2]
Installation
- Sur le serveur hôte
sudo apt install libvirt-daemon-system libvirt-clients bridge-utils
- Sur le client (ssh-askpass-gnome pour utiliser une connexion ssh) :
Le client est un ordinateur à partir duquel on administre la serveur. Ici c'est le PC du réseau local. Mais, il peut être accessible via un réseau étendu. On va installer une interface graphique sur le client.
sudo apt install virt-manager ssh-askpass-gnome sudo adduser $user libvirt
Créer une machine virtuelle avec le gestionnaire de machines virtuelles
Ajouter une connexion QEMU/KVM vers le serveur hôte
Lancer le gestionnaire de machines virtuelles sur la machine cliente [3]
La fenêtre du gestionnaire de machines virtuelles s'ouvre. Aller dans Fichier/Ajouter une connexion. Une fenêtre s'ouvre. | |
| |
La connexion QEMU/KVM s'affiche dans le gestionnaire. Elle va nous permettre de créer une nouvelle VM sur le serveur hôte.
Si PC et serveur hôte (local ou distant) ne sont pas déjà connectés , il faudra cliquer sur "QEMU/KVM : <ip>" dans le gestionnaire de VM puis, entrer le mot de passe ou la passphrase de la connexion. |
Organiser le stockage sur le serveur hôte depuis le gestionnaire de VM
Préparation de l'installation de l'OS de la VM
Sélectionner la connexion au serveur hôte. Dans le menu Fichier sélectionner "Nouvelle machine virtuelle". Une nouvelle fenêtre s'ouvre. On nous demande de choisir comment on veut installer l'OS. Plusieurs choix sont proposés :
Sélectionner Média d'installation local (image ISO ou CD-ROM) et cliquer sur le bouton "Suivant" | |
Cliquer sur le bouton "Parcourir" pour trouver le nom du fichier ISO qui sera utilisé pour créer la VM. La fenêtre de choix du volume de stockage s'ouvre. On retrouver les stockage Image Disque(ici Image) et ISO que nous avions créés. | |
Dans la colonne de gauche, sélectionner ISO. La liste des volumes de stockage contenus dans ISO s'affichent.
Sélectionner ubutu-20.04.5-live-server-amd64.iso. Cliquer sur Choisir ce volume. | |
Dans le champ cd choix du système d'exploitation, tapez Ubuntu, puis sélectionnez Ubuntu 20.04.
Cliquer sur Suivant. | |
Les paramètres CPU dépendront de l'OS installé, des ressources matérielles de l'hôte et à quoi on destine la VM. Il faut vérifier que ces paramètres ne dépassent pas les capacités de l'hôte indiqués sur cette fenêtre.
Pour un test et un serveur ubuntu 20.04 LTS, 1024Mo de RAM et 1 CPU suffisent. Les paramètres CPU deviennent :
Cliquer sur Suivant. | |
Dans cette nouvelle fenêtre on choisit si on veut stocker la nouvelle machine virtuelle et où la stocker.
| |
Comme pour l'archive iso, nous allons choisir un volume de stockage. Cette fois dans "Image disque" (Image) nous sélectionnons fichier_image.img.
Cliquer sur Choisir ce volume cliquer sur Suivant dans la fenêtre de choix des paramètres de CPU. | |
Une fenêtre récapitulative des paramètres d'installation de la VM s'ouvre.
|
Installation du système d'exploitation
Installer un serveur web sur la VM
Toute cette partie se fait dans la VM via la console du gestionnaire de VM.
Mise jour du système
sudo apt update sudo apt upgrade
Installation de LAMP
LAMP[5] est un acronyme désignant un ensemble de logiciels libres permettant de construire des serveurs de sites web. L'acronyme original se réfère aux logiciels suivants :
- « Linux », le système d'exploitation ( GNU/Linux ) ;
- « Apache », le serveur Web ;
- « MySQL ou MariaDB », le serveur de base de données ;
- À l'origine1, « PHP », « Perl » ou « Python », les langages de script.
Installation
sudo apt install apache2 php libapache2-mod-php mysql-server php-mysql
Remarque : Si l'installation se termine par une erreur, une solution est peut-être d'installer les paquets l'un après l'autre.
Utilisation du port 90 pour rediriger les paquets entrant vers la VM
Schéma récapitulatif de l'installation et redirection de ports :
La redirection de port [6] (port forwarding ou port mapping en anglais) consiste à rediriger des paquets réseaux reçus sur un port donné d'un ordinateur ou un équipement réseau vers un autre ordinateur ou équipement réseau sur un port donné. Cela permet entre autres de proposer à des ordinateurs extérieurs à un réseau d'accéder à des services répartis sur plusieurs ordinateurs de ce réseau.
Cela se fait depuis l'interface de configuration du modem routeur NAT. Cette interface dépend du modem routeur de la connexion à internet.
Configuration du port http pour la VM
- Remplacer le port http dans /etc/apache2/ports.conf
La ligne
Listen 80
devient
Listen 90
- Remplacer le port dans /ect/apache2/sites-available/000-default.conf
La ligne
<VirtualHost *:80>
devient
<VirtualHost *:90>
Ajouter un alias à Apache
Imaginons que nous voulions installer plusieurs sites sur cette VM. Nous allons ajouter un alias par site dans un fichier /ect/apache2/sites-available/vm.conf puis lier symboliquement ce fichier vers site-enable.
On copie le fichier 000-default.conf
cp 000-default.conf vm.conf
On édite le fichier vm.conf et on ajoute cette configuration sous la ligne DocumentRoot /var/www/html
## ZONE SITE VM Alias /tuto "/var/www/html/tuto" <Directory "/var/www/html/tuto/"> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory>
Ensuite on activer le fichier de configuration (pour désactiver on utilise a2dissite)
sudo a2ensite vm.conf
Et on recharger apache2
systemctl reload apache2
Comment activer l'utilisation de la redirection
J'ai pas mal cherché comment faire pour accéder à une page web située sur une VM. J'ai essayé beaucoup de tutoriels qui utilisaient Iptables et j'ai fait pas mal de configurations inutiles pour me rendre compte qu'avec le gestionnaire de virtualisation, tout devenait plus simple.Heureusement, j'utilise un serveur test.
Ainsi, cette partie est peut-être inutile. Je dois encore le vérifier.
- Editer ce fichier
nano /etc/sysctl.conf
- Décommenter :
net.ipv4.ip_forward=1
- Activer la modification avec cette commande.
sysctl -p
Vérification de l'accessibilité à la VM depuis internet
- On créer le dossier du site
mkdir tuto
- On peut créer une simple page html
nano /var/www/html/tuto/index.html
- Copier ces lignes et enregistrer la page
<html> Bonjour le monde ! </html>
- On attribue le dossier à l'utilisateur www-data
chown -R www-data:www-data /var/www/htlm/tuto
- Pour le test, imaginons que votre adresse IP publique est XXX.XXX.XXX.XXX et que le nom de domaine associé est monsite.truc
Vous pouvez ouvrir la page http://xxx.xxx.xxx.xxx:90/tuto/ ou http://monsite.truc:90/tuto/
Avertissement
J'ai écrit ce document pour avoir une trace de mes recherche et je le partage ici sur mon wiki parce que j'ai eu beaucoup de mal à trouver certaines informations détaillées en français.
Bien entendu, la démarche proposée ici correspond à une configuration et une installation bien précises (serveur local, VM, Ubuntu 20.04 server, Linux, apache2, mysql , web, etc) et devra être soit adaptée soit oubliée pour une autre configuration.
Si je trouve de nouvelles informations plus simples, sécurisées ou pour une autre configuration, je mettrai à jour ce document. Vous pouvez également me contacter sur Mastodon [7] (@acryline@framapiaf.org ) pour m'informer d'éventuelles erreurs, améliorations, questions, idées, partages.
Si vous utilisez ce document, vous reconnaissez et acceptez que je ne suis pas responsable des interruptions, et des conséquences qui peuvent en découler pour vous ou tout tiers.
Merci d'avoir lu ce document.