Votre mission du jour, si vous l'acceptez, sera de créer une machine virtuelle Debian9 sur un serveur distant en SSH, en mode console histoire de corser le jeu, le tout sans aucun téléchargement d'image ISO !
On ne s'attaquera pas tout de suite au réseau lié à la machine virtuelle : on utilisera dans un premier temps le bridge interne virbr0 fournit par libvirt (à installer).
Avant de se lancer, je recommande l'ouverture et l'utilisation d'un xterm classique sur le serveur distant, via la commande du même nom. Ce n'est pas une obligation en soi, mais les terminaux de nos environnements graphiques usuels ont souvent leurs petits réglages "maison", lesquels peuvent poser quelques problèmes d'affichage dans une installation en mode console. A bon entendeur.
Une fois connecté en SSH au serveur :
Etape 1 / Création d'un disque de 20 Go au format qcow2 qui contiendra la machine virtuelle :
Code : Tout sélectionner
apt-get install qemu-utils
qemu-img create -f qcow2 -o preallocation=metadata /votre_dossier_des_machines_virtuelles/vm.debian.qcow2 20G
Code : Tout sélectionner
apt-get install virtinst
virt-install --connect qemu:///system --name=vmdebian --ram=1024 --vcpus=1 --disk path=/votre_dossier_des_machines_virtuelles/vm.debian.qcow2,format=qcow2,bus=virtio,cache=none --os-type linux --accelerate --network bridge=virbr0,model=virtio --nographics --location='http://ftp.fr.debian.org/debian/dists/stretch/main/installer-amd64/' --extra-args='console=ttyS0'
Code : Tout sélectionner
virsh console vmdebian
Code : Tout sélectionner
Booting a command list
Loading Linux 4.9.0-3-amd64 ...
Loading initial ramdisk ...
Pour ne pas à avoir à se farcir cette manipulation à chaque démarrage, on peut procéder de deux façons.
Dans les deux cas, on commence par démarrer la machine virtuelle avec la manipulation ci-dessus, et on se connecte sous root.
1 / Choix 1
Dans /etc/default/grub, on remplace l'option "quiet" par le "console=ttyS0" déjà vu, puis on fait un "update-grub" et un "reboot" pour vérifier que tout est ok.
2 / Choix 2
On laisse le /etc/default/grub en paix, et l'on utilise le "systemd" qui s'occupe du démarrage du système (merci à http://www.server-world.info/en/note?os ... &p=kvm&f=2 pour l'astuce !)
Code : Tout sélectionner
systemctl enable getty@ttyS0
3 / Choix 3
On fait les deux manipulations comme un gros bourrin, et on se retrouve avec deux terminaux qui se chevauchent et foutent le bordel ! (c'est tellement plus amusant !)
A noter :
Toutes les machines peuvent être contrôlées en console via la commande "virsh".
Quelques exemples :
a) On cas de problème, on peut arrêter la machine avec un :
Code : Tout sélectionner
virsh shutdown vmdebian
Code : Tout sélectionner
virsh destroy vmdebian
Code : Tout sélectionner
virsh undefine vmdebian
Il y a plein d'autres outils très sympas à découvrir (cf. commandes virt-qqchose pour ceux qui veulent aller plus loin).
Seule petite ombre au tableau : virsh ne mémorise par l'historique des commandes. Il faut donc tout se retaper à la main.
Pour la partie réseau, si on veut connecter la nouvelle VM sur la configuration existante, il faut se construire un bridge côté serveur.
Exemple de bridge statique (si le serveur à une IP fixe) :
Code : Tout sélectionner
# cat /etc/network/interfaces:
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
dns-nameservers 8.8.8.8
Code : Tout sélectionner
# cat /etc/network/interfaces:
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0
D'après la documentation, il est possible de créer automatiquement le bridge à partir de l'interface réseau bridgée (pas testé) :
Code : Tout sélectionner
virsh iface-bridge eth0 br0
Code : Tout sélectionner
<interface type='bridge'>
<mac address='51:54:12:0c:e3:13'/>
<source bridge='virbr0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</interface>
Code : Tout sélectionner
<interface type='bridge'>
<mac address='51:54:12:d1:b1:21'/>
<source bridge='br0'/>
<model type='virtio'/>
</interface>
Il faut ensuite recharger sa VM :
Code : Tout sélectionner
virsh create /tmp/vmdebian.xml
Code : Tout sélectionner
virsh console vmdebian
Code : Tout sélectionner
virsh create/undefine domaine
Code : Tout sélectionner
virsh start/shutdown/destroy/suspend/resume domaine
Code : Tout sélectionner
virsh -c qemu:///system list --all
Code : Tout sélectionner
virsh help|less