Hier wird der Umgang mit openQRM 4.7 beschrieben.
> kill -9 $(awk -F'"' '{print $2}' /var/lib/kvm/openqrm/*/vnc > /tmp/vncs;ps wwwaux|fgrep '127.0.0.1:'|fgrep -vf /tmp/vncs|awk '{print $2}';rm -f /tmp/vncs)
Als erstes legt man eine normale VM im VM-Manager an (hier beispielhaft mit dem Namen "Windows"),
dadurch wird das entsprechende Verzeichnis sowie die benötigten Dateien angelegt.
Jetzt stoppen wir die neue VM sofort wieder und legen das Windows-Installations-Image
("Windows_x86.iso") uns KVM-Verzeichnis unserer neuen VM:
> cp Windows_x86.iso /var/lib/kvm/openqrm/Windows/
Nun werden die entsprechenden Dateien nach unseren Vorstellungen bearbeitet;
hier wird das Startlaufwerk angegeben, meistens ist das "c"; allerdings müssen wir ja erstmal Windows von einer virtuellen CD installieren, deshalb müssen wir den Laufwerksbuchstaben unseres virtuellen CDROM-Laufwerkes angeben:
> vi /var/lib/kvm/openqrm/Windows/boot #KVM_VM_BOOT="-boot c" KVM_VM_BOOT="-boot d"
hier muss der korrekte Pfad zum CDROM-ISO-Image eingetragen werden:
> vi /var/lib/kvm/openqrm/Windows/cdrom KVM_VM_CDROM="-cdrom /var/lib/kvm/openqrm/Windows/Windows_x86.iso"
meistens reichen 2GB RAM, man kann aber auch mehr eingeben, wenn der physikalische Rechner genug RAM hat:
> vi /var/lib/kvm/openqrm/Windows/ram KVM_VM_RAM="2048"
Windows startet auf keinem System, auf dem ein BIOS ohne ACPI-Unterstützung läuft,
deshalb müssen wir auch den "-no-acpi"-Parameter entfernen.
Seit Ubuntu 9.10 (karmic) scheint bei KVM der VGA-Typ "std" (-vga std) defekt zu sein.
Deshalb sollte man diesen komplett aus der übergebenen Parameterzeile entfernen,
dann greift der Default-Type "cirrus", der auch von allen Windows-Versionen seit Win95 unterstützt wird.
> vi /var/lib/kvm/openqrm/Windows/Windows.kvm ... #KVM_VM_OPT="-no-acpi -serial none -parallel none -usb -usbdevice tablet -k de -vga std -localtime " KVM_VM_OPT="-serial none -parallel none -usb -usbdevice tablet -k de -localtime " ...
Zum starten dieser Windows-Installation unter openQRM muss wie folgt vorgegangen werden:
Windows[Start]Will man die KVM-Windows-VM ohne Oberfläche von Hand starten, dann könnte man dieses Skript verwenden.
Allerdings kann es sein, das der eine oder der andere, dieses Skript evtl. anpassen müssen.
#!/bin/bash
VMNAME="Windows"
VNCPORT="2" # VNC-Port
MACADRESSE="00:0C:29:67:82:C8" # MAC-Adresse der Netzwerkkarte
BOOT="c" # Startlaufwerk
ISOIMAGE="Windows_x86.iso" # Name des CD- bzw. DVD-Image
RAM="2048" # Größe des Arbeitsspeichers in MB
SMP="1" # Anzahl der zu verwendenden Prozessorkerne
ACPI="" # "-no-acpi" oder für Windows leer lassen
screen -dmS ${VMNAME} /usr/bin/kvm -hda /var/lib/kvm/openqrm/${VMNAME}/disk01.img -hdd /var/lib/kvm/openqrm/${VMNAME}/disk04.img -cdrom /var/lib/kvm/images/${ISOIMAGE} -m ${RAM} -smp ${SMP} ${ACPI} -serial none -parallel none -usb -usbdevice tablet -k de -boot ${BOOT} -net nic,vlan=1,macaddr=${MACADRESSE},model=e1000 -net tap,vlan=1,script=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifup-net1,downscript=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifdown-net1 -vnc 127.0.0.1:${VNCPORT}
#!/bin/sh # # This file is part of openQRM. # # openQRM is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 # as published by the Free Software Foundation. # # openQRM is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with openQRM. If not, see <http://www.gnu.org/licenses/>. # # Copyright 2009, Matthias Rechenburg <matt@openqrm.com> # /sbin/ifconfig $1 0.0.0.0 promisc up /sbin/ifconfig $1 mtu 1500 /usr/sbin/brctl addif br0 $1 sleep 2
Dieses openQRM-Skript ist leer und tut praktisch garnichts.
#!/bin/bash
# 1 - physikalische Host's
# 2 - KVM-Host's
# 3 - VM's
VIRTION="2"
(if [ -z ${1} ] ; then
echo "Bitte warten ..."
. /usr/share/openqrm/etc/openqrm-server.conf
MYSQL="mysql -N -u${OPENQRM_DATABASE_USER} -p${OPENQRM_DATABASE_PASSWORD} openqrm"
ALLEKVMS="$(for i in $(echo "SELECT appliance_name FROM appliance_info WHERE appliance_virtualization='${VIRTION}';" | ${MYSQL})
do
HDDGES="$(ssh ${i} 'df -kP /var/lib/kvm/' | awk '{print $2}' | egrep -v '[a-zA-Z]' | awk '{printf ("%6.2f\n", $1 / 1024^2)}')"
BENUTZT="$(ssh ${i} 'ls -lk /var/lib/kvm/openqrm/*/' | awk '{z=$5;s+=z}END{print s}')"
HDDFREI="$(ssh ${i} 'df -kP /var/lib/kvm/' | awk -v weg=${BENUTZT} '{print $2,weg}' | egrep -v '[a-zA-Z]' | awk '{printf ("%6.2f\n", ($1 - $2) / 1024^2)}')"
ANZAVMS="$(ssh ${i} 'ls /var/lib/kvm/openqrm/ | wc -l' | awk '{printf"%2s\n",$1}')"
RAMGES1="$(ssh ${i} 'free' | awk '/^Mem:/ {print $2/1024}')"
RAMGES2="$(echo "${RAMGES1}" | awk '{printf ("%6.2f\n",$1/1024)}')"
RAMKVM1="$(ssh ${i} 'cat /var/lib/kvm/openqrm/*/ram' | awk -F'"' -v ges="${RAMGES1}" '{z=$2;s+=z}END{printf("%.2f %.2f \n",s/1024,(ges-s)/1024)}')"
RAMKVMS="$(echo "${RAMKVM1}" | awk '{printf ("%7s\n",$1)}')"
RAMFREI="$(echo "${RAMKVM1}" | awk '{printf ("%7s\n",$2)}')"
KVMHOST="$(echo "${i} (${RAMGES2} GB RAM / ${HDDGES} GB HDD) -" | awk '{printf ("%42s\n",$0)}')"
echo -e "${KVMHOST} ${HDDFREI} GB HDD frei - ${ANZAVMS} VMs brauchen ${RAMKVMS} GB RAM - ${RAMFREI} GB RAM frei"
done)"
echo
echo "${ALLEKVMS}" | sort -n
echo "
pro Standard-VM werden ca. 3,2 GB Platzbedarf berechnet;
pro VM mit lokal genutztem 10GB-Image werden ca. 11,2 GB Platzbedarf berechnet;
${0} [KVM-Host]
"
else
BENUTZT="$(ssh ${1} 'ls -lk /var/lib/kvm/openqrm/*/' | awk '{z=$5;s+=z}END{print s}')"
FREI="$(ssh ${1} 'df -kP /var/lib/kvm/' | awk -v weg=${BENUTZT} '{print $2,weg}' | egrep -v '[a-zA-Z]' | awk '{print ($1 - $2) / 1024^2}')"
VMS="$(ssh ${1} 'ls /var/lib/kvm/openqrm/ | wc -l')"
echo "${FREI} GB sind auf der ${1} noch frei und \"${VMS}\" VMs sind installiert."
fi) 2>/dev/null
exit 0
eine Beispielausgabe:
kvm01 ( 70.93 GB RAM / 102.12 GB HDD) - 25.49 GB HDD frei - 18 VMs brauchen 36.00 GB RAM - 34.93 GB RAM frei kvm02 ( 70.93 GB RAM / 412.05 GB HDD) - 295.31 GB HDD frei - 21 VMs brauchen 70.00 GB RAM - 0.93 GB RAM frei kvm03 ( 15.69 GB RAM / 393.72 GB HDD) - 229.47 GB HDD frei - 4 VMs brauchen 16.00 GB RAM - -0.31 GB RAM frei
Wenn man sich die KVM-VM-Konsole per VNC ansieht
und die Meldung "no boot device found" zu sehen ist,
dann fehlen diese drei Links:
# ln -s /usr/share/kvm/pxe-e1000.bin /usr/share/qemu/ # ln -s /usr/share/kvm/pxe-rtl8139.bin /usr/share/qemu/ # ln -s /usr/share/kvm/pxe-virtio.bin /usr/share/qemu/
Ein weiteres Merkmal ist, dass für die Cloud kein LVM-Snapshot angelegt wird.
Wenn die VM nicht starten will, dann
# ssh root@kvm01
Die VM wird durch das Script "/var/lib/kvm/openqrm/vm01/vm01.kvm" gestartet,
hier werden wir die letzte Zeile:
# vi /var/lib/kvm/openqrm/vm01/vm01.kvm ... $RUNSCREEN -dmS $KVM_VM_MAC_1 $KVM $KVM_VM_DISK $KVM_VM_CDROM -m $KVM_VM_RAM -smp $KVM_VM_CPUS $KVM_VM_OPT $KVM_VM_BOOT $KVM_VM_NET -vnc $KVM_VM_VNC
noch mal mit einem ECHO ausgeben:
... echo "$RUNSCREEN -dmS $KVM_VM_MAC_1 $KVM $KVM_VM_DISK $KVM_VM_CDROM -m $KVM_VM_RAM -smp $KVM_VM_CPUS $KVM_VM_OPT $KVM_VM_BOOT $KVM_VM_NET -vnc $KVM_VM_VNC" $RUNSCREEN -dmS $KVM_VM_MAC_1 $KVM $KVM_VM_DISK $KVM_VM_CDROM -m $KVM_VM_RAM -smp $KVM_VM_CPUS $KVM_VM_OPT $KVM_VM_BOOT $KVM_VM_NET -vnc $KVM_VM_VNC
dann sieht das so aus:
# /var/lib/kvm/openqrm/vm01/vm01.kvm /usr/bin/screen -dmS 00:7F:9F:B8:63:50 /usr/bin/kvm -hda /var/lib/kvm/openqrm/vm01/disk01.img -hdd /var/lib/kvm/openqrm/vm01/disk04.img -m 2048 -smp 2 -no-acpi -serial none -parallel none -usb -usbdevice tablet -k de -boot nc -net nic,vlan=1,macaddr=00:7F:9F:B8:63:50,model=virtio -net tap,vlan=1,script=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifup-net1,downscript=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifdown-net1 -vnc 127.0.0.1:1
jetzt können wir das eigentliche Kommando auf der Kommandozeile starten, um die Fehlermeldung zu sehen:
# /usr/bin/kvm -hda /var/lib/kvm/openqrm/vm01/disk01.img -hdd /var/lib/kvm/openqrm/vm01/disk04.img -m 2048 -smp 2 -no-acpi -serial none -parallel none -usb -usbdevice tablet -k de -boot nc -net nic,vlan=1,macaddr=00:7F:9F:B8:63:50,model=virtio -net tap,vlan=1,script=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifup-net1,downscript=/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifdown-net1 -vnc 127.0.0.1:1 qemu: could not load PC BIOS 'bios.bin'
Wie man sieht, wurde hier eine sehr wichtige Datei (bios.bin) nicht gefunden!
Dieses Problem tritt bei openQRM hin und wieder auf (meistens nach einem Update).
Es kann durch das starten des Script's kvmbios.sh schnell wieder gerichtet werden.
#!/bin/bash ls -l /usr/share/qemu/bios.bin /usr/share/qemu/vgabios.bin /usr/share/qemu/vgabios-cirrus.bin rm -vf /usr/share/qemu/bios.bin cd /usr/share/qemu/ && ln -vs ../seabios/bios.bin bios.bin rm -vf /usr/share/qemu/vgabios.bin cd /usr/share/qemu/ && ln -vs ../vgabios/vgabios.bin vgabios.bin rm -vf /usr/share/qemu/vgabios-cirrus.bin cd /usr/share/qemu/ && ln -vs ../vgabios/vgabios-cirrus.bin vgabios-cirrus.bin aptitude reinstall qemu-common ls -l /usr/share/qemu/bios.bin /usr/share/qemu/vgabios.bin /usr/share/qemu/vgabios-cirrus.bin