Réécriture

This commit is contained in:
jdubois 2018-07-20 15:57:03 +02:00
parent a5a112e46d
commit 9227f0ac42

View file

@ -3,26 +3,22 @@ title: Howto vmm
categories: virtualisation openbsd
---
OpenBSD intègre un système de virtualisation (écrit from
scratch). Celui est encore largement en cours de développement, cette
documentation est susceptible de se retrouver obsolète par moment.
Avoir des VM peut être intéressant pour faire un lab réseau sur sa
machine de travail.
# Documentation
Documentation :
* <http://man.openbsd.org/OpenBSD-current/man4/vmm.4>
* <http://man.openbsd.org/OpenBSD-current/man5/vm.conf.5>
* <http://man.openbsd.org/OpenBSD-current/man8/vmd.8>
* <http://man.openbsd.org/OpenBSD-current/man8/vmctl.8>
* <http://man.openbsd.org/OpenBSD-current/man5/vm.conf.5>
OpenBSD intègre un système de virtualisation (écrit de zéro). Celui-ci est encore en cours de développement, cette documentation est donc susceptible de se retrouver obsolète par moment.
Vmd est le démon responsable de l'exécution des VMs sur un hôte et s'interface avec vmm (virtual machine monitor) intégré au noyau. Il est démarré en même temps que la machine et est contrôlé avec vmctl.
# Support matériel
Il faut que le processeur supporte la virtualisation et que celle ci
soit activée dans le bios/efi.
Le processeur doit supporter la virtualisation, et doit être activée dans le bios/efi.
Par exemple si celle-ci n'est pas activée dans le bios :
Cas où la virtualisation n'est pas activée dans le bios :
~~~
$ dmesg | grep vm
@ -30,68 +26,84 @@ vmm disabled by firmware
vmm at mainbus0 not configured
~~~
Cas où elle est activée et supportée :
~~~
$ dmesg | grep vm
vmm0 at mainbus0: VMX/EPT
~~~
# Mise en place
# Installation d'une machine
Vmd utilise un fichier de conf (*/etc/vm.conf*).
~~~
# cp /etc/examples/vm.conf /etc/vm.conf
# vim /etc/vm.conf
~~~
On définit dans la conf l'emplacement des sets que l'on va
télécharger. Ensuite on définit un switch (pour le réseau) et enfin la
ou les vm.
Il est nécessaire de créer un disque par VM :
~~~
# vmctl create "/home/vm/OpenBSD.img" -s 4G
~~~
Pour télécharger les sets :
~~~
$ cd /var/www/sets/
$ wget --no-parent -r https://ftp.openbsd.org/pub/OpenBSD/snapshots/amd64/*
~~~
On peut activer et démarrer vmd
On active et démarre vmd :
~~~
# rcctl enable vmd
# rcctl start vmd
~~~
Si on a activé une vm, on peut la voir :
Vmd utilise le fichier de conf */etc/vm.conf*, mais on préfère faire l'installation sans celui-ci, et ne l'utiliser qu'une fois la machine prête à être utilisée.
Création du disque :
~~~
# vmctl status
ID PID VCPUS MAXMEM CURMEM TTY NAME
1 88909 1 1024MB 169MB /dev/ttyp7 vm.evolix.net
# vmctl create "/home/vm/OpenBSD.img" -s 4G
~~~
Enfin on peut prendre un shell (pour procéder à l'installation). Cela utilise cu(1) donc si jamais on veut quitter : `<entrée> puis ~.`
Installation de la machine :
~~~
# vmctl console 1
Connected to /dev/ttyp7 (speed 9600)
# wget https://ftp.openbsd.org/pub/OpenBSD/X.X/amd64/installXX.fs -O /home/vm/installXX.fs
# vmctl start OpenBSD -m 512M -b /bsd.rd -d /home/vm/OpenBSD.img -d /home/vm/installXX.fs -c
~~~
La machine démarrera sur /bsd.rd, avec OpenBSD.img en premier disque, installXX.fs en second disque, 512M de RAM, et l'hôte se connectera automatiquement à la console de la VM.
Cela utilise cu(1) donc si on veut quitter : `<entrée> puis ~.`
~~~
Connected to /dev/ttyp0 (speed 115200)
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell?
~~~
Lorsqu'on a installé, on peut copier le disque de la vm et utiliser la copie pour une autre VM pour ne pas avoir à faire une deuxième installation.
Une fois installée, on éteint la VM et la configure dans */etc/vm.conf* :
## Réseau
~~~
vm "OpenBSD" {
disk "/home/vm/OpenBSD.img"
memory 512M
Pour le réseau, en wifi il faut faire du NAT car on ne peut pas
bridger l'interface wifi à cause d'une limitation dans le standard
802.11.
interface { switch "network" }
interfaces 2
}
Pour faire cela, le mieux est de passer par une interface
vether0.... à compléter.
switch "network" {
interface bridge0
}
~~~
Deux interfaces seront créées, dont l'une sera dans le bridge0 qui doit exister :
~~~
# echo "up" > /etc/hostname.bridge0 && sh /etc/netstart bridge0
~~~
# Utilisation
* Lister les VMs : `vmctl status`
* Démarrer une VM : `vmctl start <ID|name>`
* Se connecter à la console d'une VM : `vmctl console <ID|name>`
* Éteindre une VM : `vmctl stop <ID|name>`
* Mettre en pause/sortir de pause une VM : `vmctl (un)pause <ID|name>`.
* Recharger la configuration depuis */etc/vm.conf* : `vmctl reload`. Les VMs démarrées mais non présentes dans la configuration ne seront pas éteintes. Celles éteintes et présentes dans la configuration seront démarrées si elles n'ont pas l'option `disable`.
Toutes les actions sur les VMs peuvent être faites à partir de leur ID ou de leur nom.
# FAQ
## Réseau Wi-Fi
Pour le réseau, en wifi il faut faire du NAT car on ne peut pas bridger l'interface wifi à cause d'une limitation dans le standard 802.11.
Pour faire cela, le mieux est de passer par une interface vether0.... à compléter.