Inhaltsverzeichnis

libvirt

Das Kommandozeilenwerkzeug Virsh des libvirt Toolkits dient zur Verwaltung von virtuellen Maschinen. Es unterstützt dabei zahlreiche Virtualisierungstechnologien, darunter KVM, Hyper-V, VMware, LXC oder Xen.

Virsh-Parameter im Überblick

Virsh - Kommandozeilenwerkzeug zur Verwaltung virtueller Maschinen

Virsh-Parameter Erklärung
list --all Listet alle virtuellen Maschinen auf
list --inactive Listet alle inaktiven virtuellen Maschinen auf
dominfo <VM-Bezeichnung> Ausgabe aller Informationen zur virtuellen Maschine
nodeinfo Liefert Informationen zum KVM-Host (linux-magazin schreibt Gastsystem)
start <VM-Bezeichnung> Startet die virtuelle Maschine
shutdown <VM-Bezeichnung> Fährt die VM ordentlich herunter
destroy <VM-Bezeichnung> Schaltet die VM einfach aus
suspend <VM-Bezeichnung> Pausiert die virtuelle Maschine / Ruhemodus
resume <VM-Bezeichnung> Die VM wird fortgesetzt / aufwecken aus dem Ruhemodus
console <VM-Bezeichnung> Die Konsolenausgabe der VM wird gestartet
dumpxml <VM-Bezeichnung> Die XML-Konfigurationsdatei der angegebenen VM wird auf der Standardausgabe ausgegeben
create vm.xml Eine neue VM wird auf Basis der übergebenen XML-Datei erstellt
undefine <VM-Bezeichnung> Die angegebene VM wird gelöscht, die virtuelle Festplatte verbleibt aber im Datenspeicher
setmem <VM-Bezeichnung> <Speichergröße> Die RAM-Größe anpassen
setvcpus <VM-Bezeichnung> <Anzahl-CPUs> Anzahl die CPUs anpassen
migrate <VM-Bezeichnung> <URI> Eine Migration der VM zum Host mit dessen angegebener URI wird durchgeführt
Verbindungsmöglichkeiten mit Virsh
URI Hypervisor
lxc:/// LXC
qemu:///system Qemu/KVM
xen:/// Xen
openvz:///system OpenVZ
vbox:///session VirtualBox
hyperv:///<example.com> Microsoft Hyper-V
esx:///<example.com> VMware ESX-Server
gsx:///<example.com> VMware GSX
vmwareplayer:///session VMware Player
vmwarews:///session VMware Workstation
Verbindung per Virsh
URI Protokoll
virsh -c qemu+ssh://<USER>@<IP-Adresse>/system SSH
virsh -c qemu://<USER>@<IP-Adresse>/system TLS/x509
virsh -c qemu+tcp://<USER>@<IP-Adresse>/system SASl/Kerberos

Installation einer VM auf einem Linux-Ubuntu-Host

https://raymii.org/s/articles/virt-install_introduction_and_copy_paste_distro_install_commands.html

CentOS 7 - Gast

virt-install \
--name centos7 \
--ram 1024 \
--disk path=./centos7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/7/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'

FreeBSD 10.1 - Gast

> wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-dvd1.iso
virt-install \
--name freebsd10 \
--ram 1024 \
--disk path=./freebsd10.qcow2,size=8 \
--vcpus 1 \
--os-type generic \
--os-variant generic \
--network bridge=virbr0 \
--graphics vnc,port=5999 \
--console pty,target_type=serial \
--cdrom ./FreeBSD-10.1-RELEASE-amd64-dvd1.iso

Ubuntu 14.04 - Gast

> apt install bridge-utils virtinst libvirt-clients qemu-kvm libvirt-bin virt-manager

Jetzt muss sich der entsprechende (unprivilegierte) Benutzer neu anmelden, damit die Aufnahme in die Gruppe libvirt wirksam wird.

> virt-install -n web_devel -r 256 --disk path=/var/lib/libvirt/images/web_devel.img,bus=virtio,size=4 -c ubuntu-14.04-server-i386.iso --network network=default,model=virtio --graphics vnc,listen=0.0.0.0 --noautoconsole -v

Das Paket virt-manager enthält ein grafisches Werkzeug, um lokale und entfernte virtuelle Maschinen zu verwalten. Geben Sie folgendes ein, um virt-manager zu installieren:

> aptitude install virt-manager

Da virt-manager eine grafische Benutzeroberfläche erfordert, sollte es auf einer Workstation oder einer Testmaschine anstatt eines Servers installiert werden. Um sich mit dem lokalen libvirt-Dienst zu verbinden, geben Sie folgendes ein:

> virt-manager
> virt-manager -c qemu:///system

Es sollten diese Einstellungen vorgenommen werden:

Sie können sich mit folgender Befehlszeileneingabe mit dem auf einem anderen Host laufenden libvirt-Dienst verbinden (hier muss der passwortlose SSH-Login möglich sein, siehe: SSH-Schlüssel austauschen für ein passwortlosen Login):

> virt-manager -c qemu+ssh://virtnode1.mydomain.com/system

LibVirt-Netzwerk

> vi /etc/libvirt/qemu/networks/br-ext.xml
> virsh net-list 
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 br-ext               active     yes           yes
> virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 br-ext               active     yes           yes
 default              inactive   no            yes

Es gibt mehrere Möglichkeiten, später die virtuelle Maschine mit ein realen Netzwerk / Internet zu verbinden. Per Voreinstellung setzt VMM ein virtuelles Netzwerk im Adressraum 192.168.122.0/24 ein, dass per NAT mit der realen Netzwerkkarte verbunden ist. Mit dieser Konfiguration kann jede virtuelle Maschine ins Internet, es sind keine weiteren Schritte notwendig.

Grundsätzlich besteht auch die Möglichkeit, dass die virtuelle Maschine sich per Bridge direkt in das reale Netzwerk einklinkt. Dazu muss aber zuerst die Bridge eingerichtet werden, was etwas Handarbeit erfordert. Ein entsprechende Anleitung findet man im Englischen Wiki KvmWithBridge oder auch im libvirt-Wiki.

Start/Stop

VM stoppen:

root@vmhost01:# virsh shutdown vmgast01

nach dem stoppen muss die VM erst wieder "definiert" werden:

root@vmhost01:# virsh define  /etc/libvirt/qemu/vmgast01.xml
Domain vmgast01 defined from /etc/libvirt/qemu/vmgast01.xml

…jetzt steht sie wieder in der Liste drin:

root@vmhost01:# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 25    vmtest01                       running
 -     vmgast01                       shut off

…dann kann man die VM wieder starten:

root@vmhost01:# virsh start vmgast01
Domain vmgast01 started

root@vmhost01:# virsh  list --all
 Id    Name                           State
----------------------------------------------------
 25    vmtest01                       running
 27    vmgast01                       running

in der VM alles entfernen, was individuel ist; die SSH-Host-Keys werden nur bei der SSH-Installation angelegt und SSH wird durch "cloud-init" per Standard wieder installiert:

root@vmgast01:# userdel -r ubuntu
root@vmgast01:# apt -y purge openssh-server
root@vmgast01:# exit

VM anhalten

root@vmhost01:# virsh stop vmgast01

Reset, unconfigure or customize

root@vmhost01:# virt-sysprep -d vmgast01

Reset, unconfigure or customize von einer Auswahl, nicht alle

root@vmhost01:# virt-sysprep --enable $(virt-sysprep --list-operations | awk '{print $1}' | egrep -v 'fs-uuids|lvm-uuids|user-account' | tr -s '\n' ',' | sed 's/[,]$//') -d vmgast01

Fehler mit virt-install

> virt-install --virt-type kvm --name linux --ram 2048 --cdrom=ubuntu-18.04.1-server-amd64.iso --disk /tmp/linux.qcow2,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=ubuntu17.10
Installation wird gestartet …
ERROR    internal error: process exited while connecting to monitor: 2018-10-31T15:45:33.829160Z qemu-system-x86_64: -drive file=/tmp/linux.qcow2,format=qcow2,if=none,id=drive-virtio-disk0: Could not open '/tmp/linux.qcow2': Permission denied
Installation der Domäne scheint nicht erfolgreich gewesen zu sein..

Lösung:

> virt-install --virt-type kvm --name linux --ram 2048 --cdrom=ubuntu-18.04.1-server-amd64.iso --disk /var/lib/libvirt/images/linux.qcow2,format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=ubuntu17.10

Das HDD-Image muss im richtigen Pfad liegen, sonst verhindert AppArmor den Zugriff.

Start-Skript:

libvirt-Test.sh
#!/bin/bash
 
 
 
OS_VAR="ubuntu17.10"
NAME="bionic"
RAM="2048"
 
IMG="/var/lib/libvirt/images/${NAME}.qcow2"
ISO="/var/tmp/ISO/ubuntu-18.04.1-server-amd64.iso"
 
rm -f ${IMG}
qemu-img create -f qcow2 ${IMG} 10G
chmod 0664 ${IMG}
virt-install --virt-type kvm --name ${NAME} --ram ${RAM} --cdrom=${ISO} --disk ${IMG},format=qcow2 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --os-type=linux --os-variant=${OS_VAR}
 
ls -lha ${IMG}

Installation einer VM auf einem FreeBSD-Host