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 20GCode : 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 vmdebianCode : 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@ttyS03 / 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 vmdebianCode : Tout sélectionner
virsh destroy vmdebianCode : Tout sélectionner
virsh undefine vmdebianIl 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.8Code : 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 0D'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 br0Code : 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.xmlCode : Tout sélectionner
virsh console vmdebianCode : Tout sélectionner
virsh create/undefine domaineCode : Tout sélectionner
virsh start/shutdown/destroy/suspend/resume domaineCode : Tout sélectionner
virsh -c qemu:///system list --allCode : Tout sélectionner
virsh help|less