Windows Server 2012 (R2) Foundation unter Hyper-V virtualisieren

Grundsätzlich kann man die Foundation-Edition des Windows Servers virtualisieren. Unter VirtualBox gab es keine größeren Schwierigkeiten (siehe hier), auch unter KVM-basierten Lösungen und soweit mir bekannt ist sollte VMware ebenfalls kein Problem sein. Unter Hyper-V sieht die Sache allerdings etwas anders aus.

Eigentlich sind in allen neueren Versionen von Windows die Integrationsdienste bereits integriert. Die Ausnahme stellen nach aktuellem Kenntnisstand die Home-Editionen und der Foundation-Server dar.

Darf man das?

Gute Frage, die Lage ist etwas schwierig, da Microsoft im Blog etwas formuliert, das man so auslegen kann, als sei es ok:

Windows Foundation Server und Virtualisierung

Auf der anderen Seite allerdings unter Introduction to Windows Server 2012 Foundation folgendes erwähnt ist:

"Virtual image use rights: None; cannot host virtual machines or be used as a guest operating system in a virtual machine."

Ungeachtet dessen ist es technisch möglich.

Warum eigentlich?

Bei einem Kunden ging es darum, das einiges zu testen ist bevor an der Produktikumgebung etwas verändert werden sollte. Da der Kunde neben dem Foundation-Server noch Hyper-V im Einsatz hat, war es naheliegend die Produktivumgebung dort nachzubilden bzw. ein Backup davon als virtuellen Computer wiederherzustellen.

Übrigens geht s um folgende Versionen:

  • Windows Server 2012 Foundation
  • Windows Server 2012 R2 Standard als Hyper-V Host

Sonderfall “Hyper-V”

Der Restore des Backups war dabei gewohnt einfach. Ein Drive Snapshot-Abbild wurde in eine zuvor angelegte VHDX eingespielt. Der anschl. Bootvorgang verlief erfolgreich.

Hinweis: Der verwendete virtuelle Computer entspricht der “Generation 1”.

Allerdings viel schnell auf, das die virtuelle Hardware nicht vollständig lief. Das fing bei der Maus an und betraf unter anderem die virtuelle Netzwerkkarte. Letztere liese sich zwar auch über das Hinzufügen einer “Älteren Netzwerkkarte” zum virtuellen Computer lösen, allerdings handelt es sich dabei dann nur um eine Fast Ethernet-Variante.

Den Versuch die Integrationsdienste zu installieren quittiert das Setup mit der Meldung, das diese schon laufen. Faktisch ist das allerdings nur ein Teil, soll heißen: Wenige Treiber, keine Dienste. Für die Dienste wurde bislang keine Lösung gefunden. Wichtig sind zunächst die Treiber.

Wichtig: Der Server läuft ohne die Treiber relativ langsam, so das etwas Geduld aufgebracht werden muss!

Vorbereitung ist alles

Damit man die Treiber über den Geräte-Manager installieren kann, müssen diese zunächst entpackt werden. Dazu auf dem Hyper-V Host die Datei “C:\Windows\System32\vmguest.iso” einhängen oder entpacken und anschließend die Datei “support\amd64\Windows6.2-HyperVIntegrationServices-x64.cab” entpacken. Das geht mit Bordmitteln oder z.B. mit 7-Zip.

Variante 1:

In jeden Unterordner der eine *.inf-Datei enhält die Datei “update.cat” kopieren, die *.inf-Datei editieren und folgende Zeile einfügen:

CatalogFile=update.cat

Danke an Luxx für den Tipp (Siehe Kommentare).

Variante 2:

Das SDK für Windows 8.1 herunterladen:

Windows Software Development Kit (SDK) für Windows 8.1

Die Installationsdatei ausführen, angeben das man lediglich Herunterladen möchte und nur das “Windows App Certification Kit” benötigt.

Folgendes Skript unter dem Namen “Treiber-signieren.cmd” abspeichern:

@echo off

title Treiber signieren ...

rem Konfiguration

 set SDKPath=C:\Program Files (x86)\Windows Kits\8.1\bin\x64
 cd "%SDKPath%"

rem Zertifikat erzeugen

 makecert -r -ss MeineZertifikate -n "CN=Microsoft Windows - Hyper-V" -sr LocalMachine

rem Zertifikate kopieren

 cls
 echo Das neuerstellte Zertifikate muss sowohl zu
 echo "Vertrauenswuerdige Stammzertifizierungstelle" als auch zu
 echo "Vertrauenswuerdige Herausgeber" kopiert werden.
 echo.
 echo Erst wenn dies erfolgt ist, eine beliebige Taste druecken!
 echo.
 pause
 echo.

rem Treiber signieren

 rem Microsoft Hyper-V-Eingabe
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\VMBusHID.sys"

 rem Microsoft Hyper-V-Video
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\HyperVideo.sys"

 rem Microsoft Hyper-V-Netzwerkadapter
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\netvsc63.sys"
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\NetVscCoinstall.dll"
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\netvscres.dll"

 rem Microsoft Hyper-V S3 Cap
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\vms3cap.sys"

 rem Microsoft Hyper-V-Generieungszähler
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\vmgencounter.sys"

 rem Microsoft Hyper-V - Virtuelle Tastatur
  signtool sign -a -s MeineZertifikate -n "Microsoft Windows - Hyper-V" "C:\Windows\System32\DRIVERS\hyperkbd.sys"

rem BCD konfigurieren

 bcdedit /set TESTSIGNING ON

echo.
pause

Die entpackten Treiber, ggf. das StandaloneSDK und ggf. das Skript in die VHDX des virtuellen Computers kopieren.

Tipp: Die Dateien z.B. nach “C:\Temp” o.ä. kopieren. Den Pfad möglichst kurz halten, das erspart später Tipperei.

Die Sache mit der Treiber-Signatur

Seltsam erscheint, das angeblich die Treiber nicht signiert sind oder Signaturinformationen fehlen. Das scheint aber nicht ganz zuzutreffen. In den Details der Treiber ist erkennbar, das manche Dateien signiert sind, manche wiederum (angeblich) nicht. Prüft man mit dem SignTool oder Sigverif bekommt man evtl. Ergebnisse wie das z.B. die Prüfung an einem (Root-)Zertifikat endet, dem nicht vertraut wird oder (bei Sigverif) alle Hyper-V Treiber nicht signiert wären.

Abhilfe schafft das Booten ohne erzwungene Treibersignatur und ggf. das anschl. Signieren der Treiber (Nur bei Variante 2!). Führt man dies nicht durch, so lassen sich die Treiber nicht installieren und die Treiber starten später nicht (Code 52).

Treiber der Integrationsdienste installieren

Die Treiber müssen für die betroffene Geräte über den Geräte-Manager installiert werden, das ist zwar ohne Maus etwas frickelig, aber machbar. Der imho kürzeste Weg lautet:

  • Den virtuellen Computer starten, “F8” drücken und “Erzwingen der Treibersignatur deaktivieren” auswählen.
  • Nachdem der virtuelle Computer gebootet ist und man sich angemeldet hat “Win+R” drücken,
  • “devmgmt.msc” eingeben,
  • mit der “Tab”-Taste zum Geräte-Baum springen,
  • über die Pfeiltasten zu den mit einem Ausrufezeichen markierten Gerät(en) wechseln,
  • “Enter” drücken,
  • mit der “Tab”-Taste zu “Treiber aktualisieren” wechseln und “Enter” drücken,
  • “Auf dem Computer nach Treibersoftware suchen” auswählen und “Enter” drücken,
  • “Diese Treibersoftware trotzdem installieren” auswählen und “Enter” drücken.
  • Dieser Vorgang muss zunächst für alle Treiber mit einem Ausrufezeichen und anschließend für alle Treiber mit einem Fragezeichen wiederholt werden.

Die Maus als auch Netzwerk (und weiteres) sollten nun funktionieren.

SDK installieren, Zertifikat erstellen und Treiber signieren (Nur bei Variante 2!)

Damit nicht bei jedem Bootvorgang “F8” (usw.) gedrückt werden muss, wird ein eigenes Zertifikat erstellt, diesem dem System hinzugefügt und es werden die Treiber mit diesem Zertifikat signiert. Abschließend muss der BCD angepasst werden.

Als Grundlage für dieses Vorgehen dienen folgende Seiten:

Microsoft TechNet – Schritte zum Signieren eines Gerätetreiberpakets

UNAWAVE – Zertifikat erstellen und die gepatchte Kernel-Datei signieren

Um etwas Arbeit zu ersparen wurde ein Skript erstellt, dass das Zertifikat erstellt, die Treiber signiert und den BCD konfiguriert. Einzig das Kopieren des Zertifikats muss man von Hand vornehmen.

Zunächst muss das SDK installiert werden. Im Anschluss das Skript “Treiber-signieren.cmd” mit erhöhten Rechten ausführen. Sobald folgende Meldung erscheint

Hyper-V - Foundation-Server - Treiber signieren-SigTool

  • eine MMC öffnen,
  • das “Zertifikate”-Snap-In für das lokale Computerkonto hinzufügen,
  • zu “MeineZertifikate – Zertifikate” wechseln,
  • dort das Zertifikat “Microsoft Windows – Hyper-V” kopieren und sowohl bei “Vertrauenswürdige Stammzertifizierungstellen” als auch “Vertrauenswürdige Herausgeber” einfügen.
  • Nun für das Skript eine beliebige Taste drücken.

Hyper-V - Foundation-Server - Treiber signierenSobald das Skript durchgelaufen ist, den Server normal (d.h. ohne “F8…”) starten. Anschließend kann wie bei jeder Migration die IP-Konfiguration wiederhergestellt und alle notwendigen Anpassung (Alte Treiber deinstallieren, …) durchgeführt werden.

Neuinstallation

Versucht man den Foundation-Server komplett von DVD oder ISO in einen virtuellen Computer zu installieren, so bleibt man ggf. bei der Eingabe des Produktschlüssels hängen. Die konkrekte Fehlermeldung dazu lautet:

"Der Product Key konnte nicht überprüft werden. Überprüfen sie bitte das Installationsmedium."

Ein möglicher Grund kann zuwenig Arbeitsspeicher sein, dieser sollte bei min. 2 GB liegen. Ob eine Netzwerkverbindung vorhanden ist spielt keine Rolle.

Abhilfe schafft der “Generic Installation Key”: PN24B-X6THG-274MF-YHM9G-H8MVG

Quelle: Windows Answer File Generator – Generic Installation Keys

Ob’s im Anschluss mit der Aktivierung unter Verwendung des vorhandenen Product Keys klappt wurde noch nicht getestet.

Als nächste Hürde steht man dann vor dem Problem, das nach dem Neustart beim Festlegen des Administrator-Kennworts weder Tastatur noch Maus funktionieren. Selbst über das “Zwischenablage”-Menü kann man nichts machen. Mögliche Abhilfe lauten:

  • Ein paar Minuten warten, im Hintergrund wird die Hardware eingerichtet. Die Tastatur funktioniert dann i.d.R..
  • “Shift + F10” drücken, es öffnet sich eine Eingabeaufforderung, diese mit “exit” wieder schließen. Nun sollte die Tastatureingabe in den Kennwort-Feldern möglich sein.
  • Den virtuellen Computer neustarten.

Wie zuvor weiter oben erwähnt müssen die Integrationsdienste bzw. deren Treiber installiert und ggf. signiert werden.

Beim Versuch mit den unterschiedlichen Generation (1 oder 2) stellte sich heraus, das offenbar “Generation 2” nicht unterstützt wird:

Hyper-V - Generation 2 und Foundation-ServerOb es funktioniert, die Treiber bzw. Integrationsdienste offline in den virtuellen Computer einzufügen wurde noch nicht getestet. Das grundsätzliche Vorgehen ist hier beschrieben:

How to install integration services when the virtual machine is not running

Was nicht funktioniert

Bevor man auf den zuvor genannten Lösungsweg gekommen ist, wurden folgende Möglichkeiten erfolglos getestet:

ReadyDriver Plus – Mit Hilfe dieses Tools wird automatisch beim Start von Windows bei den erweiterten Startoptionen der Punkt ausgewählt, das die Treiber-Signaturprüfung deaktiviert werden soll. Leider funktioniert das nur unter Windows 7 oder neuer. Beim Windows Server wäre ein weiterer emulierten Tastendruck nötig, um den richtigen Eintrag zu aktivieren.

Windows Server - F8 - AV

Driver Signature Enforcement Overrider – Beim Test zeigte dieses Tool zumindest auf dem Windows Server keinerlei Wirkung.

Das Ändern des BCD mit den Befehlen

BCDEDIT /Set LoadOptions DDISABLE_INTEGRITY_CHECKS
BCDEDIT /Set TESTSIGNING ON

und einem Neustart änderte leider nichts.

Das in der *.cab-Datei enthaltene Zertifikat zu den vertrauenswürdigen Stammzertifizierungstellen und Herausgebern hinzuzufügen reicht ebenfalls nicht aus.

Das Kopieren von Treiberdateien aus einer Windows Server 2012 R2 Standard-Installation bringt nichts, da es binär die gleichen Dateien sind.

Weitere Quellen & Informationen

MSDN – SignTool.exe (Sign Tool)

MSDN – Using SignTool to Verify a File Signature

17 Kommentare

  1. Luxx

    Moin,

    das mit den Treibern geht auch einfacher..

    Entpacke die .cab Datei und lege zu jeder inf datei die update.cat.

    Dann Editiere die .Inf wie folgt

    Catalogfile=Update.cat

    und schon sind die Treiber gültig signiert und lassen sich installieren..

  2. andy

    Danke für den Tipp, habe es gerade getestet und den Beitrag erweitert.

    Einmalig (für die Dauer der Treiberinstallation) muss man die erzwungene Treibersignatur beim Starten via F8 deaktivieren, da man sonst folgende Meldung erhält:

    “Der Hashwert für die Datei ist in der angegebenen Katalogdatei nicht vorhanden. Die Datei ist wahrscheinlich beschädigt oder wurde unerlaubt verändert.”

  3. Öpitz

    Nice, vielen Dank. Variante 2 funktioniert tadellos…

  4. Daniel

    Sali Andy

    Vielen Dank für die tolle Anleitung!

    …. gerade eben froh darum gewesen :-).

    Grüsse Dani

  5. Thomas

    Andy,

    you saved my life!!!!! Variante 1 mit dem Tipp waren unbezahlbar!

    Grüße
    Thomas

  6. Bernhard

    Jo man!

    Danke für diesen geilen Tip!!
    hab schon zwei Nächte wegen der nötigen Virtualisierung eines Foundatin hinter mir – nu läuft dat Ding!!!

    Danke!!!!

  7. Otto

    Vielen Dank! Für die Vorbereitung und Variante 1 hätte ich noch zwei Powershell Zeilen (der Rest ist nur Optik)
    # cab Datei entpacken und in allen inf Dateien eine Zeile ergänzen
    $cabFile=”E:supportamd64Windows6.2-HyperVIntegrationServices-x64.cab”
    $fString=[regex]::Escape(‘[Version]’) # wegen der Klammer []
    $rString=”$&`nCatalogFile=update.inf” # Der String der gefunden wurde + NL + Text
    # Zielpfad frisch machen
    $DestDir = (split-path $cabFile -leaf) -replace ‘.cab’
    if ($DestDir) {rm $DestDir}
    md $DestDir
    # cab datei auspacken
    cmd.exe /c “C:WindowsSystem32expand.exe -F:* $cabFile $DestDir”
    #replace in den inf Dateien
    gci -Recurse $DestDir |where {$_.name -like “*.inf”}|% {(Get-Content $_.fullname) -replace $fString, $rString| Set-Content $_.fullname}

  8. Otto

    Der Code den ich oben gepostet habe hat leider noch einen Fehler (update.inf muss update.cat heissen und die Datei muss mit kopiert werden).
    Aber es macht wenig Sinn, den zu korrigieren: Das Webinterface korrigiert alle Anführungszeichen und damit ist der Code eh unbrauchbar. Ich habe noch einen Weg gefunden die Treiber mit dism offline einfach in die fertige VHD einzuspielen, da kann man sich die mühsame manuelle Installation und den Start über F8 ersparen.
    Ich mache einfach einen kurzen Artikel in meinem Blog, der Link wird offenbar unter meinen Name gelegt. 🙂
    Eine Weg die Services zu integrieren habe ich leider auch nicht gefunden. Ich denke MS hat den Start der Dienste (und die Installation) an irgendeiner Stelle schlicht von der Systemkennung her verboten.

  9. Ines

    Einfach nur danke!! Version 1 hat super funktioniert.

  10. Roger

    Hat mich weitergeführt.
    Da bei neueren Hyper-V Versionen allerdings kein vmguest.iso dabei ist gibt es diese bei Microsoft zum Download.

    support.microsoft.com – hyper-v-integration-components-update-for-windows-virtual-machines

    https://support.microsoft.com/en-us/topic/hyper-v-integration-components-update-for-windows-virtual-machines-8a74ffad-576e-d5a0-5a2f-d6fb2594f990

    cab in die vhd entpacken, mit F8 starten, dann lassen sich diese über den Gerätemanager installieren.
    Das brachte einen mit dvd2vhd gesicherten Server 2012 R2 Foundation in eine VM.

  11. Marco

    Hallo Kollegen, hallo Andy,
    vielen Dank für die tolle Anleitung, ich habe damit alle fühlbaren (oben beschriebenen) Auffälligkeiten beseitigt bekommen, allerdings fehlen mir die ganzen (7) Hyper-V-Dienste.
    Habt ihr die irgendwie installiert bekommen?

  12. Andy

    Hallo Marco,

    vielen Dank.
    Kurze und knackige Antwort zu deiner Frage: Nein.

    Gruß

    Andy

  13. Andrew

    I’m trying to do this with a Server 2012 Foundation install myself currently.

    Do I always have to manually boot windows and select use unsigned drivers ?

    I have a production environment I would like to convert to Hyper-V.

  14. Andy

    No, Variant 1 ist the way to go.
    You have to exract “C:WindowsSystem32vmguest.iso” and then
    extract “supportamd64Windows6.2-HyperVIntegrationServices-x64.cab”.
    Copy or create now in every folder which contains an “*.inf” an “update.cat” which contains the following line:

    CatalogFile=update.cat

    Now you can install the drivers with the device manager.

    FIY: This this blogpost was writen in 2016, i have no idea if this is working nowadays.
    The “vmguest.iso” is missing in Windows since Server 2016 and Windows 10. It seems the components can be downloaded here:

    Hyper-V integration components update for Windows virtual machines

  15. Marco

    hi, i also have the same problem. I have done all the steps but it keeps saying the driver is not digitally signed.
    I copied the update.cat file in each folder and added CatalogFile = update.cat inside the * .inf files

  16. Marco

    I correct myself. it worked. By installing the modified drivers after temporarily disabling digital signature checking

    Thank you

  17. David

    Hallo zusammen,

    Stehe grad vor dem selben Problem, habe Variante 1 gewählt. Bekomme ebenfalls die Meldung:

    “Der Hashwert für die Datei ist in der angegebenen Katalogdatei nicht vorhanden. Die Datei ist wahrscheinlich beschädigt oder wurde unerlaubt verändert.”

    Kann die Treiber dann zwar via F8 und der deaktivierten Treibersignatur installieren, jedoch kommt dann beim erneuten Start dass die Treiber nicht gestartet werden können (Code 52).

    Hab jetzt mehrfach die Anleitung gelesen, finde aber nicht, was ich vergessen haben könnte.
    Kann mir zufällig jemand auf die Sprünge helfen?

    Lieben Dank

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑