kvm (KernelVirtualMachine) mit WinXP Gast

By dose | November 20, 2010
Under: Uncategorized

Nachdem XEN als virtuelle Maschine doch relativ kompliziert aufzusetzen ist, gibt es seit einiger Zeit eine sehr nützliche Alternative, nämlich die KVM, die im Kernel bereits integriert ist und sehr einfach zu installieren ist.
Noch dazu haben einige führende Linux-Distributoren bereits angekündigt, in Zukunft eher auf KVM zu setzen als auf XEN.
Grund genug, KVM einmal auszuprobieren. In meinem Fall wollte ich eine virtuelle Windows XP VM aufsetzen.
Das Aufsetzen ging relativ einfach über PXE (dazu brauche ich dann nicht extra die XP CD rüberzukopieren), Anleitungen hierfür findet man genug im Internet, z.B. hier. Mit dd erstellt man einfach ein leeres Image und verwendet dieses dann als virutelle HDD. Angeblich kann man sogar VMware-Images mit KVM booten, habe ich aber nicht ausprobiert. Über die Installation einer Netzwerkbridge für kvm werde ich mich jetzt hier nicht detailliert auslassen, Anleitungen hierzu gibt es ansich genügend im Internet.
Interessant sind vielmehr die Problemchen, auf die man so stößt:
So hatte ich beispielsweise, das Problem, dass der Mauscursor im VNC nicht exakt mit meinem client-Mauscursor mitfuhr, also ich hatte einen offset, welcher sich immer mehr vergrößerte. Das ist in der Praxis dann eher mühsam.
Abhilfe schafft hier folgender zusätzlicher Startparameter für kvm:
-usbdevice tablet
Nun stellt sich dann noch das Problem des Herunterfahrens der virtuellen Maschine.
Grundsätzlich kann man dies mit dem ACPI Poweroff-Signal erledigen. Hierzu bindet man den Monitor des qemu, welcher die Emulation der virtuellen CPU vornimmt auf einen Socket, z.B. mit:
-monitor "unix:/var/run/kvm/monitors/winxp,server,nowait"
Beim Herunterfahren sendet man dann ein ACPI Poweroff mit:
echo 'system_powerdown' |socat - unix-connect:/var/run/kvm/monitors/winxp >/dev/null
Das Problem bei Windows XP mit dieser Lösung ist jedoch, dass auf dem Hauptschirm hier eine Dialogbox erscheint, die fragt, ob man wirklcih herunterfahren möchte, da noch Benutzer angemeldet sind (zumindest soweit dies der Fall ist). Nachdem man eine virtualisierte Windows XP Maschine höchstwahrschienlich mittels RemoteDesktop verwenden möchte, hat man also mit großer Wahrscheinlichkeit diese Dialogbox stehen und der Gast fährt nicht herunter.
Bei Windows Server 2003 gäbe es hierfür eine Lösung, indem man folgenden Timeout-Wert in die Registry einträgt:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows]
"ShutdownWarningDialogTimeout"=dword:00000001

Bei Windows XP ist dies jedoch wirkungslos. Nun gäbe es noch einen anderen Trick, und zwar, indem man Windows mitteilt, dass es auf alle Fehlermeldungen automatisch mit der Standardantwort antwortet:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Error Message Instrument]
"EnableDefaultReply"=dword:00000001

Doch auch dies stellt keine zufriedenstellende Lösung dar, da hier z.B. dann auch der Dialog “Neue USB-Hardware gefunden, wollen Sie neustarten?” standardmäßig mit Ja beantwortet wird, was einen ungewollten Neustart der Maschine zur Folge hat.
Die für mich am praktikabel erscheinendste Lösung ist daher, dem Rechner über RPC mitzuteilen, dass er bitte ohne Wenn und Aber herunterfahren möge.
Hierzu muss in Windows die einfache Dateifreigabe ggf. deaktiviert werden (WIN+E/Extras/Ordneroptionen/Ansicht/[ ] Einfache Dateifreigabe verwenden).
Weiters muss die Windows Firewall abgeschaltet werden (Systemsteuerung/Windows Firewall).
Danach kann man vom Linux-Hostsystem aus mit Kenntnis der IP-Adresse des Systems, und vorausgesetzt, man hat SAMBA installiert, den Rechner mit folgendem Kommando herunterfahren:

net rpc SHUTDOWN -C "The system is going down for SHUTDOWN now" -f -I [IP der VM] -U [Benutzer]%[Passwort]

Der Benutzer muss natürlich ein authorisierter Benutzer sein, welcher Rechte zum Herunterfahren hat, z.B. der Administrator.
Ich hoffe, das hilft dem Einen oder Anderen weiter, der vor dem selben Problem steht und aggregierte Informationen hierzu haben möchte.

One comment | Add One

Comments

  1. Gerlach - 02/7/2011 at 22:29

    use freesshd, a free sshd for Windows. You can shutdown Windows with a simple ssh command:
    ssh 192.168.128.101 “shutdown -s -t 0” (WinXP)
    You have to exchange keys before.

Trackbacks

Leave a Comment

Name:

E-Mail :

Subscribe :
Website :

Comments :