KVM
Met KVM draaien we een hypervisor type 1 rechtstreeks op onze hardware. KVM staat voor kernel virtual machine. De kernel draait rechtstreeks op de hardware. KVM modificeert de kernel dusdanig dat die ook hypervisor wordt. (https://www.linux-kvm.org/page/Main_Page)
KVM werkt samen met QEMU, een HOST-manager en hardware emulator. Grosso modo houdt KVM zich bezig met CPU en RAM terwijl QEMU alle andere hardware emuleert, en een user-interface voorziet.
QEMU kan het ook alleen, maar dan gedraagt die zich eerder als een soort virtualbox, hypervisor type2: een programma dat zich voor een guest-OS voordoet als hardware (heel veel soorten hardware), en voor een host-OS als een stuk software. (https://www.qemu.org/ )
Op een client-PC installeren we straks een GUI: virt-manager
, om ons geheel te beheren.
- installatie
We gebruiken een ubuntu 16.04 server. En die moet draaien, rechtstreeks op hardware, niet in vmware-station en niet in virtualbox, of iets anders.
We installeren de volgende software (met dependencies +200 pakketten):
$
sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils cpu-checker
Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: adwaita-icon-theme at-spi2-core augeas-lenses cgmanager colord colord-data dconf-gsettings-backend dconf-service ebtables fontconfig fontconfig-config fonts-dejavu-core gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking . . . The following NEW packages will be installed: adwaita-icon-theme at-spi2-core augeas-lenses bridge-utils cgmanager colord colord-data cpu-checker dconf-gsettings-backend dconf-service ebtables fontconfig fontconfig-config fonts-dejavu-core gir1.2-freedesktop gir1.2-libosinfo-1.0 glib-networking glib-networking-common glib-networking-services gsettings-desktop-schemas hicolor-icon-theme humanity-icon-theme ipxe-qemu . . . 0 upgraded, 209 newly installed, 0 to remove and 0 not upgraded. Need to get 63,7 MB of archives. After this operation, 389 MB of additional disk space will be used. Do you want to continue? [Y/n] y
- hardware nakijken:
cpu-checker
kijkt de processor na, en dat doen we zo ...:
$kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used
We kunnen dit ook met het volgende commando:
$egrep '(vmx|svm)' /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl ***vmx*** est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm kaiser tpr_shadow vnmi flexpriority ept vpid dtherm ida
En dan zien we het woord vmx ('x' keer voor elke processor thread) ergens op de derde regel ...
- netwerk opzetten:
Een bron van moeilijkheden is het manueel aanpassen van de netwerk-settings,
in/etc/network/interfaces
.
Die ziet er nu nog zo uit:# The loopback network interface auto lo iface lo inet loopback # The HOME network interface auto eno1 iface eno1 inet static address 192.168.0.19 netmask 24 gateway 192.168.0.11 dns-nameservers 8.8.8.8 192.168.0.11
En we passen die aan als volgt:
# The loopback network interface auto lo iface lo inet loopback # The HOME network interface # auto eno1 # -> keeps itself busy with being a layer2-bridge port # so can be declared as 'manual' iface eno1 inet manual iface eno1 inet6 manual # auto br0 iface br0 inet static address 192.168.0.19 netmask 24 gateway 192.168.0.11 dns-nameservers 8.8.8.8 192.168.0.11 ## bridge config: bridge_ports eno1 bridge_stp off bridge_maxwait 0 bridge_fd 0 ## what's all this: ## bridge_ports eno1 ## doorverwijzen naar interface eno1 ## bridge_stp off ## geen spanning tree protocol ## bridge_maxwait 0 ## bridge not waiting for setup scripts ## bridge_fd 0 ## bridge forward delay (should be 0 seconds)
... na het aanpassen van
/etc/network/interfaces
kunnen we het netwerk herstarten met ...
$
sudo systemctl restart networking
maar soms werkt alleen een systeem herstart.
Metifconfig
zien we dan (ingekort) het volgende:br0 Link encap:Ethernet HWaddr 00:22:19:69:15:43 inet addr:192.168.0.19 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::222:19ff:fe69:1543/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX bytes:26469 (26.4 KB) TX bytes:24275 (24.2 KB) eno1 Link encap:Ethernet HWaddr 00:22:19:69:15:43 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX bytes:31036 (31.0 KB) TX bytes:24033 (24.0 KB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX bytes:72496 (72.4 KB) TX bytes:72496 (72.4 KB) virbr0 Link encap:Ethernet HWaddr 52:54:00:72:ab:af inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 Metric:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
We krijgen een bridge-interface
br0
dieeno1
lijkt te hebben overgenomen, ook inipv6
,
met hetzelfde MAC-address alseno1
Er komt ook een extra netwerk-adapter bij:
virbr0
wordt een virtueel aangrijpingspunt, en fungeert straks als NAT-gateway voor de virtual guests (als we die zo instellen).
Indien er meerdere netwerkkaarten zijn, moeten die zonodig elk afzonderlijk worden gebridged.