Benutzer-Werkzeuge

Webseiten-Werkzeuge


openqrm_-_kvm

openQRM - KVM

Hier wird der Umgang mit openQRM 4.7 beschrieben.

veraltete VMs killen

> 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)

Windows installieren

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"

allgemeines

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 "
...

Windows starten

Zum starten dieser Windows-Installation unter openQRM muss wie folgt vorgegangen werden:

  1. openQRM 4.7
    1. Plugins
      1. Virtualization
        1. VM Manager
          1. KVM Host
            1. Windows
              1. [Start]

Skripte

KVM-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}

/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifup-net1

#!/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

/usr/share/openqrm/plugins/kvm/bin/openqrm-kvm-ifdown-net1

Dieses openQRM-Skript ist leer und tut praktisch garnichts.

/root/bin/kvm_lokal_frei.sh

#!/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

no boot device found

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.

KVM-VM stirbt sofort nach dem Start

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.

/root/bin/kvmbios.sh

#!/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
/home/http/wiki/data/pages/openqrm_-_kvm.txt · Zuletzt geändert: von 127.0.0.1