===== Introductie =====
We gaan KVM installeren, configureren en gebruiken op de Debian GNU/Linux 13 "//Trixie//.
De bedoeling is alles KVM gerelateerd in /data/kvm te zetten en daarbij per VM een filesystem te hebben en tevens een filesystem te hebben om de ISO's te bewaren.
==== Bronnen ====
Voor mijn installatie zoals hieronder beschreven heb ik gebruik gemaakt van - beter goed gejat dan slecht verzonnen nietwaar? - de volgende bronnen:
* https://www.linuxtechi.com/how-to-install-kvm-on-debian/
* https://linuxconfig.org/how-to-create-and-manage-kvm-virtual-machines-from-cli
Sommige dingen (zoals bijvoorbeeld het verhaal over supported guest OS'en) heb ik zelf toegevoegd...
==== Prerequisites ====
Het is wel van belang dat je CPU virtualisatie snapt. Dit kun je als volgt controleren:
michelle@lummel:~$ egrep --color '(vmx|svm)' /proc/cpuinfo
Je ziet voor iedere CPU(core) in je systeem als het goed is terugkomen of deze VMX (Intel) of SVM (AMD) ondersteund.
De bijpassende kernel-modules zijn dan als het goed is ook geladen:
michelle@lummel:~$ lsmod | grep kvm
kvm_intel 413696 0
kvm 1396736 1 kvm_intel
irqbypass 12288 1 kvm
If not, dan heb je 2 kansen:
* Je hardware snapt het echt niet
* E.e.a. staat uitgeschakeld in de UEFI/BIOS.
Dat laatste valt te verhelpen door je machine te rebooten en de instellingen van de UEFI/BIOS na te lopen. Het eerste is niet anders op te lossen dan door nieuwe hardware te kopen. Of - zoals ik - je werkgever te verzoeken om wat recentere laptop...
==== Ondersteunde Guest-VMs ====
Dit is een instinker waar niet iedereen direct bij stilstaat. Maar de grote OS-boeren vinden het tegenwoordig leuk om alleen recente CPU's te ondersteunen. Microsoft Windows 11 wil graag een X86-64-V2-AES CPU hebben en bij RedHat (IBM dus) willen ze zelfs een X86-64-V3 hebben voor RHEL10. Je kunt kijken wat jouw systeem ondersteund:
michelle@lummel:~$ /usr/lib64/ld-linux-x86-64.so.2 --help | tail -4
Subdirectories of glibc-hwcaps directories, in priority order:
x86-64-v4
x86-64-v3 (supported, searched)
x86-64-v2 (supported, searched)
In tegenstelling tot mijn ProxMox servertje kan dit ding dus wel RHEL10 draaien.
===== Voorbereidingen op het OS =====
==== Storage ====
Een filesystem voor de ISO's:
michelle@lummel:~$ sudo mkdir -p /data/kvm/iso
michelle@lummel:~$ sudo lvcreate -L 2G -n lviso vgdata
michelle@lummel:~$ sudo mkfs.ext4 -m 0 /dev/vgdata/lviso
En mijn eerste VM gaat //lummelbout// heten, dus daar ook wat storage voor:
michelle@lummel:~$ sudo mkdir -p /data/kvm/vm/lummelbout
michelle@lummel:~$ sudo lvcreate -L 60G -n lvvmlummelbout vgdata
michelle@lummel:~$ sudo mkfs.ext4 -m 0 /dev/vgdata/lvvmlummelbout
En dat mikken we in de fstab file:
michelle@lummel:~$ grep /data/kvm /etc/fstab
/dev/mapper/vgdata-lviso /data/kvm/iso ext4 noatime,nodiratime 0 2
/dev/mapper/vgdata-lvvmlummelbout /data/kvm/vm/lummelbout ext4 noatime,nodiratime 0 2
En dat te mounten en dan de rechten op de mappen goed te zetten:
michelle@lummel:~$ sudo mount -a
michelle@lummel:~$ sudo chgrp -R cdrom /data/kvm/iso
michelle@lummel:~$ sudo chgrp -R kvm /data/kvm/vm
michelle@lummel:~$ sudo chmod -R g+w /data/kvm/*
==== Account (groepen) ====
Omdat ik met mijn persoonlijke account dingen wil kunnen doen maak ik mezelf nog even lid van deze groepen:
michelle@lummel:~$ sudo usermod -a -G cdrom michelle
michelle@lummel:~$ sudo usermod -a -G kvm michelle
==== RHEL ISO bestanden ====
Om wat te kunnen installeren heb je minimaal een ISO bestand nodig van een of ander OS. Ik wil met RHEL10 gaan spelen maar mogelijk ook een RHEL9 VM draaien als ik dat voor mijn werk nodig heb. Die heb ik dus gedownload en in de daarvoor aangemaakte map gezet:
michelle@lummel:~$ du -hs /data/kvm/iso/*.iso
817M /data/kvm/iso/rhel-10.0-x86_64-boot.iso
1,2G /data/kvm/iso/rhel-9.6-x86_64-boot.iso
===== Installatie =====
==== KVM (QEMU) installeren ====
Installeer de benodigde packages:
michelle@lummel:~$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils libvirt-daemon virt-install virt-viewer
Let op, 'qemu-system-x86' wordt geselecteerd in plaats van 'qemu-kvm'
Installeren:
bridge-utils libvirt-clients libvirt-daemon libvirt-daemon-system qemu-system-x86 virt-install virt-viewer
Installeren van vereisten:
gir1.2-libosinfo-1.0 libglusterfs0 libosinfo-1.0-0 libusbredirhost1t64 libvirt-daemon-driver-storage libvte-2.91-common qemu-system-modules-spice
ibverbs-providers libgtk-vnc-2.0-0 libosinfo-l10n libusbredirparser1t64 libvirt-daemon-driver-storage-disk mdevctl qemu-utils
iptables libgvnc-1.0-0 libphodav-3.0-0 libvdeplug2t64 libvirt-daemon-driver-storage-iscsi netcat-openbsd seabios
ipxe-qemu libibverbs1 libphodav-3.0-common libvirglrenderer1 libvirt-daemon-driver-storage-logical open-iscsi spice-client-glib-usb-acl-helper
libblkio1 libip4tc2 libpmem1 libvirt-common libvirt-daemon-driver-storage-mpath osinfo-db swtpm
libburn4t64 libip6tc2 librados2 libvirt-daemon-common libvirt-daemon-driver-storage-scsi ovmf swtpm-libs
libcacard0 libiscsi7 librbd1 libvirt-daemon-config-network libvirt-daemon-lock passt swtpm-tools
libcapstone5 libisns0t64 librdmacm1t64 libvirt-daemon-config-nwfilter libvirt-daemon-log python3-libvirt systemd-container
libdaxctl1 libisoburn1t64 libslirp0 libvirt-daemon-driver-interface libvirt-daemon-plugin-lockd python3-libxml2 xorriso
libexecs1 libisofs6t64 libspice-client-glib-2.0-8 libvirt-daemon-driver-network libvirt-glib-1.0-0 qemu-block-extra
libfdt1 libjte2 libspice-client-gtk-3.0-5 libvirt-daemon-driver-nodedev libvirt-glib-1.0-data qemu-system-common
libgfapi0 libndctl6 libspice-server1 libvirt-daemon-driver-nwfilter libvirt-l10n qemu-system-data
libgfrpc0 libnss-mymachines libtpms0 libvirt-daemon-driver-qemu libvirt0 qemu-system-gui
libgfxdr0 libopeniscsiusr liburing2 libvirt-daemon-driver-secret libvte-2.91-0 qemu-system-modules-opengl
Voorgestelde pakketten:
firewalld libvirt-login-shell libvirt-daemon-driver-storage-gluster libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-vbox auditd numad vde2 python3-argcomplete jigit
libvirt-clients-qemu libvirt-daemon-driver-lxc libvirt-daemon-driver-storage-iscsi-direct libvirt-daemon-driver-storage-zfs libvirt-daemon-driver-xen systemtap samba trousers xorriso-tcltk cdck
Samenvatting:
Opwaarderen: 0, Installeren: 100, Verwijderen: 0, Niet opwaarderen: 1
Downloadgrootte: 59,9 MB
Benodigde ruimte: 251 MB / 8.375 MB beschikbaar
Doorgaan? [J/n]
En zie dat de spulleboel in de basis draait:
michelle@lummel:~$ sudo systemctl status libvirtd
[sudo] wachtwoord voor michelle:
○ libvirtd.service - libvirt legacy monolithic daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: enabled)
Active: inactive (dead) since Thu 2025-07-17 19:32:18 CEST; 11min ago
Duration: 2min 31ms
Invocation: 5d9a747888ab4050934e7ef6fd204f57
TriggeredBy: ● libvirtd-ro.socket
● libvirtd.socket
● libvirtd-admin.socket
Docs: man:libvirtd(8)
https://libvirt.org/
Process: 16355 ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 16355 (code=exited, status=0/SUCCESS)
Mem peak: 9M
CPU: 300ms
jul 17 19:30:18 lummel systemd[1]: Starting libvirtd.service - libvirt legacy monolithic daemon...
jul 17 19:30:18 lummel systemd[1]: Started libvirtd.service - libvirt legacy monolithic daemon.
jul 17 19:32:18 lummel systemd[1]: libvirtd.service: Deactivated successfully.
==== GUI installatie ====
Mocht je een GUI erbij willen hebben installeer dan ook virt-manager:
michelle@lummel:~$ sudo apt install virt-manager
Installeren:
virt-manager
Installeren van vereisten:
gir1.2-gtk-vnc-2.0 gir1.2-gtksource-4 gir1.2-libvirt-glib-1.0 gir1.2-spiceclientglib-2.0 gir1.2-spiceclientgtk-3.0 gir1.2-vte-2.91 libgtksourceview-4-0 libgtksourceview-4-common python3-gi-cairo
Voorgestelde pakketten:
python3-guestfs
Samenvatting:
Opwaarderen: 0, Installeren: 10, Verwijderen: 0, Niet opwaarderen: 0
Downloadgrootte: 1.239 kB
Benodigde ruimte: 7.903 kB / 7.759 MB beschikbaar
Doorgaan? [J/n]