Windows mit opsi installieren

Dieses Kapitel beschreibt, wie Sie Windows auf einem bisher nicht mit einem Betriebssystem ausgestatteten Computer per opsi installieren. Als Client-Rechner eignen sich physische Computer oder virtuelle Rechner mit den folgenden Voraussetzungen:

  • 2 GByte RAM oder mehr

  • Netzwerkkarte mit Netzboot-Unterstützung (Unterstützung des PXE-Protokolls zum Laden von Bootmedien via Netzwerk)

Überprüfen Sie die Einstellungen im BIOS. Netzboot muss aktiviert sein und an erster Stelle der Bootoptionen stehen, damit Sie Windows per opsi installieren können.

Die Windows-Standardtreiber unterstützen virtuelle Hardware in der Regel gut. Wenn Sie Windows auf neueren physischen Rechnern installieren möchten, müssen Sie möglicherweise vorab zusätzliche Treiber integrieren (siehe Abschnitt Vereinfachte Treiberintegration).

Um die in diesem Kapitel vorgestellten Schritte nachvollziehen zu können, sollten Sie vorher einen Windows-Client in die opsi-Umgebung aufgenommen haben (siehe Kapitel Neue Clients hinzufügen).

opsi-Produkte vervollständigen

Die von uns zur Installation von Windows angebotenen Netboot-Produkte sind lediglich Wrapper (Hüllen), denen ein entscheidender Teil fehlt: die Inhalte der Installations-Medien. Diese kopieren Sie selbst ins Verzeichnis installfiles (siehe Abschnitt Übersicht des Verzeichnisbaums) auf dem opsi-Depotserver, das in der Voreinstellung noch leer ist.

Sie benötigen ebenfalls den Windows-Produktschlüssel. Diesen können Sie vor der Installation hinterlegen (siehe Abschnitt Windows-Produktschlüssel hinterlegen), aber auch nach der Installation bei der Aktivierung des Windows-Systems eingeben.

Vorbereitungen

Um Windows zu installieren, benötigen Sie ein Windows PE (WinPE), das als Live-System genutzt wird. Sie können das WinPE automatisch mit opsi erstellen oder das WinPE von Hand erstellen (Windows ADK).

Grundsätzlich ist die im WinPE verwendete Windows-Version unabhängig von der zu installierenden Windows-Version. An dieser Stelle ist vor allem wichtig, dass alle Treiber für Festplatten, Netzwerkkarten usw. verfügbar sind. Verwenden Sie ein 32-Bit PE für 32-Bit-Installationen und ein 64-Bit PE für 64-Bit-Installationen. Weitere Informationen finden Sie in diesem Artikel bei Microsoft Learn.

In jedem Fall benötigen Sie ein Windows Assessment and Deployment Kit (Windows ADK) und das WinPE-Addon, das Sie auf einem Windows-Rechner (bevorzugt 64 Bit) in den vorgeschlagenen Pfad unter Program Files (x86) installieren. Wählen Sie nur die Windows-Vorinstallationsumgebung (Windows PE); Abhängigkeiten werden automatisch aufgelöst.

Für Windows 11: Wenn Sie bei der Installation das Property win11_hardware_check auf [true] gesetzt haben, so muss das WinPE die optionalen Komponenten WinPE-WMI und WinPE-SecureStartup enthalten (Hinweise zum Ausführen von Windows Setup in Windows PE:, Für Windows 11). Die 32-Bit-Versionen von Windows PE sind ab dem ADK für Windows 11 nicht mehr in den WinPE-Addons enthalten. Die letzte unterstützte 32-Bit-Version ist im WinPE-Addon für Windows 10 (Version 2004) verfügbar. Weitere Informationen: Herunterladen und Installieren des Windows ADKs

WinPE erstellen

Im einfachsten Fall haben Sie bereits einen Windows-Computer, auf dem der opsi-Client-Agent und das Windows ADK installiert sind. In dem Fall können Sie das WinPE automatisch mit opsi erstellen. Als Alternative beschreibt der Abschnitt WinPE von Hand erstellen (Windows ADK) den manuellen Weg.

WinPE automatisch mit opsi erstellen

So gehen Sie vor, um das WinPE automatisch mit opsi zu erstellen:

  1. Installieren Sie das Paket opsi-winpe auf dem opsi-Server:
    opsi-package-updater -v install opsi-winpe

  2. Setzen Sie das Localboot-Produkt opsi-winpe für den Windows-Client auf once. Wählen Sie gegebenenfalls in den Produkt-Propertys rechts unten x86 statt x64 aus und speichern Sie die Änderungen über einen Rechtsklick / Speichern.

  3. Wenn Sie Treiber für Massenspeicher (Festplatten) integrieren wollen, lesen Sie den Abschnitt WinPE mit opsi erweitern.

  4. Lösen Sie das Installations-Event für den Client aus, z. B. per Rechtsklick / on-demand oder durch einen Reboot.

  5. Anschließend verschieben oder kopieren Sie den Inhalt des auf dem Client neu entstandenen Verzeichnisses C:\winpe_<ARCH>\media\ ins bestehende Verzeichnis des zu installierenden Betriebssystems (\\opsiserver\opsi_depot_rw\<Betriebssystem>\winpe\). Ersetzen Sie <ARCH> durch x86 (32 Bit) oder amd64 (64 Bit).

  6. Zum Schluss führen Sie den Befehl opsi-set-rights auf dem opsi-Server aus:

opsi-set-rights

WinPE von Hand erstellen (Windows ADK)

Um ein WinPE von Hand für Windows 10 oder 11 zu erstellen, führen Sie zunächst Start / Programme / Windows Kits / Windows ADK / Umgebung für Bereitstellungs- und Imageerstellungstools aus. Es erscheint eine Eingabe-Aufforderung, in der schon die benötigten Umgebungsvariablen gesetzt sind. In dieser Eingabe-Aufforderung geben Sie nun mehrere Befehle ein.

Die Befehle für 32-Bit- und 64-Bit- sind nahezu identisch. Ersetzen Sie im ersten Kommando <ARCH> durch x86 oder amd64 — je nachdem, welche Architektur Sie verwenden.
  1. Als Erstes erstellen Sie mit dem Tool CopyPE ein Arbeitsverzeichnis mit den WinPE-Standarddateien:
    copype.cmd <ARCH> C:\winpe

  2. Dann mounten Sie das Image:
    dism /Mount-Wim /WimFile:C:\winpe\media\sources\boot.wim /index:1 /MountDir:c:\winpe\mount

  3. Ersetzen Sie das Skript startnet.cmd; die Datei c:\opsi\startnet.cmd wird vom opsi-Linux-Bootimage zusammen mit dem Wpeinit-Aufruf in der setup.py erstellt:
    echo c:\opsi\startnet.cmd > "C:\winpe\mount\Windows\System32\startnet.cmd"

  4. Hängen Sie das Image wieder aus:
    dism /Unmount-Wim /MountDir:c:\winpe\mount /Commit

  5. Kopieren Sie den Inhalt von C:\winpe\ISO nach /var/lib/opsi/depot/<productid>/winpe und passen Sie danach die Rechte an:
    opsi-setup --set-rights /var/lib/opsi/depot/<productid>/winpe

WinPE erweitern

Im WinPE sind in der Voreinstellung viele Treiber enthalten — je neuer das Windows ist, aus dem Sie das WinPE erstellt haben, desto wahrscheinlicher ist es, dass das WinPE alle benötigten Treiber enthält. Es kann allerdings auch vorkommen, dass Treiber fehlen. Es ist sogar möglich, dass ein Standardtreiber einer Hardwarekomponente nicht zum WinPE, weil es zu sehr vom Standard-Windows abweicht. In allen diesen Fällen müssen Sie das WinPE vor der OS-Installation erweitern. Dazu stehen wiederum zwei Möglichkeiten zur Verfügung:

WinPE mit opsi erweitern

Sie können das Produkt opsi-winpe dazu verwenden, gezielt Treiber bei der automatischen WinPE-Erzeugung zu integrieren.

Integrieren Sie nur Treiber, die unbedingt erforderlich zur Windows-Installation sind. Dazu gehören normalerweise Netzwerk- oder Massenspeicher-Treiber, die beim Installationsvorgang benötigt werden.

Kopieren Sie die Treiber ins Verzeichnis \\opsiserver\opsi_depot_rw\opsi-winpe\drivers\ und setzen Sie die Zugriffsrechte:

opsi-set-rights /var/lib/opsi/depot/opsi-winpe

Danach geht es weiter, wie im Abschnitt WinPE automatisch mit opsi erstellen beschrieben.

Das alles richtig funktioniert hat, können Sie im Logfile kontrollieren. Für einen VirtIO-Massenspeicher-Treiber sieht der Eintrag beispielsweise so aus:
comment: Driver           : oem0.inf
comment: OriginalFileName : C:\winpe_amd64\mount\Windows\System32\DriverStore\FileRepository\viostor.inf_amd64_aa6c91b5db55ab62\
comment:                    viostor.inf
comment: Inbox            : False
comment: ClassName        : SCSIAdapter
comment: BootCritical     : True
comment: ProviderName     : Red Hat, Inc.
comment: Date             : 15-11-2022 00:00:00
comment: Version          : 100.92.104.22900

WinPE von Hand erweitern

Für Dell-Hardware gibt es beispielsweise Netzwerk- und Speicher-Treiber, die der Hersteller speziell für den WinPE-Einsatz empfiehlt. Dieser Abschnitt beschreibt, wie Sie solche Treiber von Hand in ein WinPE integrieren. Voraussetzung ist, dass Sie vorher alle Schritte zum Erstellen des WinPE ausgeführt haben (siehe Abschnitt WinPE automatisch mit opsi erstellen).

  1. Laden Sie das WinPE10-Treiberpaket herunter und entpacken es, beispielsweise mit 7-Zip oder dem Befehl expand. Am besten legen Sie dazu ein neues Verzeichnis namens dell-drivers an und entpacken die .cab-Datei dorthin.

  2. Untersuchen Sie das Image; dazu starten Sie als Administrator die Eingabeaufforderung und geben den folgenden Befehl ein:
    dism /Get-WimInfo /WimFile:C:\winpe\ISO\sources\boot.wim

  3. Für den nächsten Schritt benötigen Sie den Index, den Sie aus der Ausgabe des vorigen Kommandos entnehmen. Da ein WinPE in der Regel aus einem einzigen Image besteht, sollte der Index 1 funktionieren. Mounten Sie das Image:
    dism /Mount-Wim /WimFile:C:\winpe\ISO\sources\boot.wim /index:1 /MountDir:c:\winpe\mount

  4. Nun erweitern Sie das WinPE mit den ausgepackten Treibern:
    dism /Image:C:\winpe\mount /Add-Driver /Driver:c:\dell-driver\winpe\x64 /Recurse
    Für 32-Bit-Systeme ersetzen Sie x64 durch x86. Das Treiberpaket von Dell beinhaltet die Treiber für beide Architekturen.

  5. Hängen Sie das Image wieder aus und übernehmen Sie die Änderungen:
    dism /Unmount-Wim /MountDir:c:\winpe\mount /Commit

  6. Kopieren Sie das Verzeichnis C:\winpe\ISO als Verzeichnis winpe nach /var/lib/opsi/depot/<productid>/ und passen Sie die Rechte an:
    opsi-set-rights /var/lib/opsi/depot/<productid>/winpe

Wenn Sie nur einen einzigen Treiber integrieren möchten, können Sie die Option /Recurse aus Schritt 4. weglassen und direkt die .inf-Datei des Treibers anstelle eines Verzeichnisses angeben. Über den Parameter /ForceUnsigned können Sie auch nicht-signierte Treiber in ein WinPE integrieren.

Die Datei unattend.xml

Für unbeaufsichtigte Installationen gibt es eine Steuerdatei namens unattend.xml, die Sie im Verzeichnis custom finden, z. B. unter /var/lib/opsi/depot/<productid>/custom (siehe Abschnitt Aufbau der Netboot-Produkte). Die Datei enthält Verweise auf die Eigenschaften der Netboot-Produkte, darunter Platzhalter für den Namen des Administrator-Accounts und des dazugehörigen Passworts (Standard: nt123).

Darüber hinaus gibt es im Verzeichnis opsi des jeweiligen Netboot-Produktes eine Datei unattend.xml.template. Das ist das von uns getestete und regelmäßig aktualisierte Template.

Wenn Sie Änderungen an der Datei unattend.xml vornehmen wollen, bearbeiten Sie die Datei im Verzeichnis custom, denn es hat Vorrang (siehe Abschnitt Verzeichnisse opsi und custom).

Die Datei unattend.xml enthält außerdem die Anweisung, nach der Windows-Installation im opsi-Verzeichnis eine Datei namens postinst.cmd auszuführen. Diese führt wiederum alle im Verzeichnis opsi/postinst.d liegenden Skripte aus. Weitere Informationen dazu finden Sie in Abschnitt Verzeichnisse opsi und custom.

Treiber integrieren

Im Idealfall gelingt die Windows-Installation, und alle im Rechner enthaltenen Geräte funktionieren. In der Praxis ist es aber häufig so, dass fast alles funktioniert, aber bestimmte Komponenten nicht — etwa die Bluetooth-Schnittstelle eines Notebooks. Aber auch wenn alles funktioniert, gibt es oft bessere oder neuere Hardware-Treiber. Es kann also sein, dass Hardware-Hersteller wie Lenovo oder Dell eigene Treiber empfehlen und zum Download anbieten.

Wie die Integration solcher Treiber gelingt, beschreibt der Abschnitt Vereinfachte Treiberintegration ausführlich.

Installationsmedien bereitstellen

Kopieren Sie den Inhalt der Windows-Installations-DVD nach /var/lib/opsi/depot/<productid>/installfiles und passen Sie die Zugriffsrechte bzw. den Eigentümer an:

opsi-set-rights /var/lib/opsi/depot/<productid>/installfiles

Logdateien

Im Folgenden geben wir einen Überblick über die bei der OS-Installation geschriebenen Logdateien:

  • c:\Windows\Panther\setupact.log:
    Protokoll bis zum Ende der Setup-Phase 4 (läuft unter WinPE)

  • c:\Windows\Panther\setupact.err:
    Fehlerprotokoll bis zum Ende Setup-Phase 4 (läuft unter WinPE)

  • c:\Windows\Panther\UnattendGC\setupact.log:
    Protokoll ab der Specialize-Phase

  • c:\Windows\Panther\UnattendGC\setupact.err:
    Fehlerprotokoll ab der Specialize-Phase

  • c:\Windows\System32\winevt\Logs\*:
    mehrere Ereignis-Protokolle

  • c:\Windows\ntbtlog.txt:
    Protokoll, das Windows während des Startvorgangs erstellt (sofern aktiviert)

Viele der bei der OS-Installation geschriebenen Logdateien finden Sie im Verzeichnis *c:\Windows\Panther\*.
Abbildung 1. Viele der bei der OS-Installation geschriebenen Logdateien finden Sie im Verzeichnis c:\Windows\Panther\.

Windows-Produktschlüssel hinterlegen

Wenn Sie das Modul Lizenzmanagement erworben haben, können Sie die Windows-Produktschlüssel über diese Erweiterung verwalten. Das Netboot-Produkt zur OS-Installation erkennt das Modul automatisch und fragt beim opsi-Server nach, ob es einen passenden Lizenzpool gibt. Ist das der Fall, bezieht es den Windows-Produktschlüssel von dort.

Wenn Sie kein Lizenzmanagement-Modul haben oder dieses nicht zur Verwaltung der Windows-Produktschlüssel verwenden möchten, tragen Sie den Key über die Management-Oberfläche opsi-configed ein:

  1. Wählen Sie aus der linken Seitenleiste einen Client aus.

  2. Wechseln Sie zum Reiter Netboot-Produkte.

  3. Wählen Sie dort das gewünschte Netboot-Produkt aus, z. B. win10-x64.

  4. Klappen Sie auf der rechten Seite die Property-Konfiguration aus und blättern Sie bis zum Eintrag productkey.

  5. Klicken Sie in die Spalte Property_Wert.

  6. Tragen Sie den Produktschlüssel im sich öffnenden Dialog ein und klicken Sie auf das Pluszeichen.

  7. Das grüne Häkchen erscheint nun in Rot; klicken Sie darauf, um die Änderungen zu speichern und den Dialog zu schließen.

  8. Speichern Sie abschließend die Änderungen im Backend über einen Klick auf das rote Häkchen oben links.

Den Windows-Produktschlüssel hinterlegen Sie in den Produkteigenschaften.
Abbildung 2. Den Windows-Produktschlüssel hinterlegen Sie in den Produkteigenschaften.

Alternativ können Sie einen Standard-Produktschlüssel für das komplette opsi-Depot vergeben. Die dazu notwendigen Schritte im opsi-configed sehen so aus:

  1. Klicken Sie rechts oben auf die Kachel Depot-Konfiguration.

  2. Öffnen Sie den Reiter Standard-Propertys.

  3. Wählen Sie dort das gewünschte Netboot-Produkt aus, z. B. win10-x64.

  4. Klappen Sie auf der rechten Seite die Property-Bearbeitung auf Depot(s) aus und blättern Sie bis zum Eintrag productkey.

  5. Klicken Sie in die Spalte Property_Wert.

  6. Tragen Sie den Produktschlüssel im sich öffnenden Dialog ein und klicken Sie auf das Pluszeichen.

  7. Das grüne Häkchen erscheint nun in Rot; klicken Sie darauf, um die Änderungen zu speichern und den Dialog zu schließen.

  8. Speichern Sie abschließend die Änderungen im Backend über einen Klick auf das rote Häkchen oben links.

Windows-Installation starten

Um die Windows-Installation zu starten, wählen Sie in der Management-Oberfläche opsi-configed den Client aus und wechseln zum Reiter Netboot-Produkte. Setzen Sie das gewünschte Netboot-Produkt (z. B. win10-x64) in der Spalte Angeforderte Aktion auf setup und klicken links oben auf das rote Häkchen; es wird anschließend wieder grün.

Das Client zieht jetzt beim Booten ein Linux-Bootimage übers Netz. Im Bootmenü bestätigen Sie die PC-Neu-Installation. Anschließend sollte alles automatisch laufen, bis Sie schließlich den Windows-Anmeldebildschirm sehen.

Sollte nach dem Laden des Bootimages der Bildschirm schwarz bleiben oder die Netzwerkkarte nicht (korrekt) funktionieren, können Sie die Startparameter des Bootimages an die verwendete Hardware anpassen. Dazu wählen Sie in der Management-Oberfläche opsi-configed auf dem Reiter Host-Parameter den Eintrag opsi-linux-bootimage.append aus und klicken in die Spalte Property-Wert (siehe Abschnitt Parameter für das Linux-Bootimage).
Die Parameter für das Linux-Bootimage können Sie über den *opsi-configed* anpassen.
Abbildung 3. Die Parameter für das Linux-Bootimage können Sie über den opsi-configed anpassen.
Vorsicht bei Clients mit großen Festplatten: Auf Nicht-UEFI-Systemen beträgt die maximale Partitionsgröße 2 TByte! Wenn Sie eine größere Partition anlegen, schlägt die Installation fehl. Sie können entweder mehrere Partitionen anlegen oder die UEFI-Erweiterung installieren (siehe Kapitel opsi mit UEFI/GPT).

Aufbau der Netboot-Produkte

Dieser Abschnitt beschreibt den Aufbau der Windows-Netboot-Produkte zur unbeaufsichtigten Installation.

Übersicht des Verzeichnisbaums

Ein Netboot-Produkt für eine automatische Windows-Installation enthält (je nach Windows-Version) unterschiedliche Verzeichnisse und Dateien.

So sieht der Verzeichnisbaum für das Netboot-Produkt *win10-x64* aus.
Abbildung 4. So sieht der Verzeichnisbaum für das Netboot-Produkt win10-x64 aus.

Verzeichnisse installfiles und winpe

  • installfiles:
    Das Verzeichnis enthält den Inhalt des Installations-Mediums.

  • winpe:
    Das Verzeichnis enthält ein bootbares WinPE-Image.

Verzeichnisse opsi und custom

Diese beiden Verzeichnisse enthalten Skripte und Konfigurationsdateien zur Steuerung der Betriebssystem-Installation. Während der Installation wirken diese Verzeichnisse zusammen; die Dateien aus custom haben Vorrang.

Ein Update kann Inhalte des Verzeichnisses opsi jederzeit überschreiben, daher sollten Sie hier keine Änderungen vornehmen. Ihre eigenen Anpassungen gehören ins Verzeichnis custom, das bei Aktualisierungen nicht überschrieben wird.

Im Unterverzeichnis postinst.d liegen Skripte, die nach der OS-Installation über postinst.cmd gestartet werden. Die Skripte übernehmen verschiedene Aufgaben, z. B. das Einspielen des Client-Agent, damit opsi die Applikationssoftware installierne kann. Die Skripte werden in alphabetischer Reihenfolge abgearbeitet und sind daher nummeriert: 05_copy_drivers.cmd, 10_dhcp.cmd, 20_try.ps1 usw.

Eigene Skripte gehören ins Verzeichnis custom/postinst.d. Wählen Sie für den Dateinamen Ziffern zwischen 11_ und 19_ (z. B. 13_myscript.cmd). Alles zwischen 01_ und 10_ ist für Skripte von opsi.org/uib reserviert. Das Skript 99_cleanup.cmd ist das letzte und startet den Rechner neu.

Verzeichnis drivers

Dieses Verzeichnis dient der Treiberintegration und ist im Abschnitt Vereinfachte Treiberintegration beschrieben.

Skripte und andere Dateien

Weiterhin finden Sie auf oberster Ebene im Produktverzeichnis folgende Dateien:

  • setup.py:
    Das ist das Installationsskript, das vom Bootimage ausgeführt wird.

  • <productid>.files:
    Diese Datei enthält Informationen zu Dateien und Verzeichnissen im Produktverzeichnis, darunter die Größe und Prüfsummen. Sie wird automatisch erzeugt und sollte nicht verändert werden.

  • create_driver_links.py:
    Das Skript verlinkt Treiber mit Verzeichnissen des Netboot-Produktes.

  • show_drivers.py:
    Das Skript integriert Treiber, was der nächste Abschnitt (Vereinfachte Treiberintegration) näher erläutert.

Vereinfachte Treiberintegration

Wenn Sie einen Pool von Windows-Rechnern administrieren, deren Treiber nicht in der Windows-Standardinstallation enthalten sind, ist es in der Regel sinnvoll, diese Treiber direkt in die Installation zu integrieren. Bei Netzwerkgeräten ist das teilweise sogar unumgänglich, denn ein startendes Windows-System ohne Netzwerkkarte ist nicht ohne Weiteres erreichbar.

opsi vereinfacht das Bereitstellen solcher Treiber — diese müssen lediglich im korrekten Verzeichnis auf dem Depot-Server liegen. Ein Skript durchsucht diese Treiberverzeichnisse und erstellt einen Katalog, den das Bootimage nutzt, um automatisch die richtigen Treiber zu erkennen und einzubinden. Das funktioniert für Standardtreiber, USB-Treiber, HD-Audio-Treiber und Treiber für Festplattencontroller (Textmode-Treiber).

Einbinden von Treibern bedeutet konkret:

  • Der Treiber wird auf die lokale Festplatte nach c:\drv\<num> kopiert.

  • Dem Windows-Setup wird über die Datei unattend.xml mitgeteilt, in den Verzeichnissen unterhalb von c:\drv\ nach passenden Treibern zu suchen.

Windows erwartet die Treiber in einem bestimmten Format auf dem opsi-Server. Geeignet sind Treiberverzeichnisse, die mindestens eine .inf-Datei enthalten. Die Datei beschreibt den Treiber für das Windows-Setup-Programm. setup.exe-, .zip-Dateien oder anders verpackte Treiber sind für diesen Zweck ungeeignet!

Es gibt verschiedene Möglichkeiten, Treiber für die OS-Installation mit opsi bereitzustellen:

Treiber automatisch zuordnen

Der bevorzugte Weg, Treiber zuzuordnen, ist über die opsi-Hardware-Inventarisierung (siehe Abschnitt Inventarisierung (hwaudit/swaudit)). Dazu sucht opsi im Verzeichnis <productid>/drivers/drivers/additional/byAudit nach einem Verzeichnisnamen, der dem bei der Hardware-Inventarisierung gefundenen <vendor> entspricht. Im Ordner <vendor> sucht opsi nun nach einem Verzeichnisnamen, der dem bei der Hardware-Inventarisierung gefundenen <model> entspricht.

Findet opsi ein solches Verzeichnis, dann behandelt es dieses so, als wäre es über das Produkt-Property additional_drivers manuell zugewiesen worden (siehe Abschnitt Treiber manuell zuordnen).
Sie können die Treiber über die Management-Oberfläche opsi-configed, Reiter Hardware-Information, bereitstellen. Lesen Sie dazu auch den Abschnitt Treiber automatisch integrieren.

Das opsi-Linux-Bootimage arbeitet die Treiber in dieser Reihenfolge ab:

  1. Zuerst sucht opsi im Verzeichnis <vendor>/<model> (<sku>).

  2. Findet opsi hier nichts, schaut es nach <system vendor>/<system model>.

  3. Als Fallback-Lösung sucht opsi nach <motherboard vendor>/<motherboard model>.

Einige Hersteller verwenden Modellbezeichnungen, die für diese automatische Methode über hwaudit sehr ungünstig sind — Sonderzeichen wie / oder : sind nicht erlaubt in Datei- oder Verzeichnisnamen. So wäre es z. B. möglich, dass ein Verzeichnis namens 5000/6000/7000 entsteht. opsi ersetzt daher intern die folgenden Sonderzeichen durch einen Unterstrich (_): <, >, ?, ", :, |, \, / und *. Für das eben erwähnte Beispiel würde opsi also ein Verzeichnis namens 5000_6000_7000 anlegen und automatisch zuweisen, obwohl die Hardware-Inventarisierung einen anderen Namen geliefert hat.

Treiber manuell zuordnen

Treiber, die Sie unabhängig von ihrer Zuordnung bzw. Erkennung über die PCI- oder USB-IDs installieren möchten, gehören in jeweils eigene Verzeichnisse unterhalb des Ordners <productid>/drivers/drivers/additional; Name oder Tiefe der Verzeichnisstruktur sind egal. Über das Produkt-Property additional_drivers (siehe Abschnitt Treiber manuell zuordnen) können Sie einen oder mehrere Pfade von Treiberverzeichnissen aus dem Ordner <productid>/drivers/drivers/additional einem Client zuordnen.

Im Produkt-Property additional_drivers angegebene Verzeichnisse durchsucht opsi rekursiv und bindet alle enthaltenen Treiber ein. Dabei folgt opsi auch symbolischen Links. Das können Sie beispielsweise nutzen, um für bestimmte Rechnermodelle ein eigenes Verzeichnis zu erstellen (z. B. dell-optiplex-815).

Findet opsi in den über additional_drivers angegebenen Verzeichnissen einen Treiber für ein vorhandenes PCI-Gerät (oder HD-Audio, USB), so bindet es für dieses Gerät keinen weiteren Treiber aus drivers/preferred/ (siehe Abschnitt Spezielle Treiber) oder drivers/ mehr ein. additional_drivers ist also dazu geeignet, Treiber hinzuzufügen, die über die normale Treiberekennung nicht gefunden werden (siehe Abschnitt Priorität der Treiber).

Allgemeine Treiber

Wenn die Hardware-Ausstattung sehr heterogen ist, kann es sinnvoll sein, mit allgemeinen Treiberpaketen zu arbeiten. Solche Pakete legen Sie im Verzeichnis <productid>/drivers/drivers ab. Diese Treiber erkennt opsi anhand ihrer PCI-Kennungen (bzw. USB- oder HD-Audio-Kennungen) in der Beschreibungsdatei des Treibers als zur Hardware passend und bindet sie ins Windows-Setup mit ein.

Spezielle Treiber

Treiber, die zu Ihrer Hardware gehören, aber nicht speziell zugeordnet sind, können Sie von den Websites der Gerätehersteller beziehen. Zusätzliche bzw. geprüfte Treiber gehören in jeweils eigene Verzeichnisse (Name und Tiefe der Verzeichnisstruktur egal) unterhalb von <productid>/drivers/drivers/preferred. opsi erkennt die Treiber anhand ihrer PCI-Kennungen (bzw. USB- oder HD-Audio-Kennungen) in der Beschreibungsdatei des Treibers als zur Hardware passend, zieht sie den unter <productid>/drivers/drivers abgelegten Treibern vor und bindet sie ins Windows-Setup mit ein.

Gibt es beispielsweise für eine PCI-ID unterschiedliche Treiber im Verzeichnis preferred, kann das zu Problemen bei der Treiberzuordnung führen. In solchen Fällen ist eine direkte Zuordnung der Treiber zu einem Client notwendig.

Ablage im Verzeichnis drivers

Im Verzeichnis drivers des Netboot-Produktes gibt es Platz für manuell und automatisch hinzugefügte Treiber.

So sieht der Verzeichnisbaum im Ordner *drivers* aus.
Abbildung 5. So sieht der Verzeichnisbaum im Ordner drivers aus.

opsi arbeitet die Treiber nach einer festgelegten Reihenfolge ab und setzt unterschiedliche Prioritäten.

Priorität der Treiber

Oberste Priorität haben Treiber, die über das Produkt-Property additional_drivers bzw. über die Inventarisierungs-Daten aus <productid>/drivers/driversadditional/byAudit eingebunden sind. opsi prüft zuerst anhand der PCI-, USB- oder HD-Audio-Kennungen, ob es hier für die Hardware einen Treiber gibt. Gibt es hier keinen passenden Treiber, durchsucht opsi die anderen Verzeichnisse (<productid>/drivers/drivers/preferred und <productid>/drivers/drivers).

Treiber hinzufügen und prüfen

Nach jedem Hinzufügen eines Treibers oder nach jeder anderen Änderung im Verzeichnis <productid>/drivers/drivers (oder seinen Unterverzeichnissen) rufen Sie im Stammverzeichnis des Netboot-Produktes den folgenden Befehl auf, um die Rechte korrekt zu setzen:

opsi-set-rights ./drivers

Wenn Sie Treiber in den Verzeichnissen <productid>/drivers/drivers oder <productid>/drivers/drivers/preferred abgelegt haben, dann rufen Sie außerdem das Skript ./create_driver_links.py auf. Es durchsucht die Verzeichnisse und erzeugt eine Reihe von Links, damit die Zuordnung der Treiber zur Hardware gelingt. Das Skript behandelt die Treiber aus dem preferred-Verzeichnis bevorzugt.

Das Skript setup.py untersucht die Hardware des zu installierenden Computers und identifiziert die notwendigen Treiber. Diese kopiert es dann auf die Festplatte und passt die Datei unattend.xml entsprechend an.

Liegt zu einem Client eine Hardware-Inventarisierung vor, so können Sie über das Skript show_drivers.py ausgeben, welche Treiber das Bootimage via PCI-IDs, USB-IDs, HD-Audio-IDs und additional_drivers (bzw. byAudit) zur Installation auswählen würde und zu welcher Hardware noch kein Treiber bereitsteht:

./show_drivers.py <clientname>

Kontrollieren Sie die Ausgabe von show_drivers.py, um sicherzustellen, dass die gewünschten Treiber eingebunden werden.

Es kann vorkommen, dass Treiberverzeichnisse von Herstellern Treiber für mehrere Betriebssysteme (z. B. Windows 10, Windows 11 usw.) oder Konfigurationen (SATA, SATA-Raid usw.) enthalten. opsi kann das nicht unterscheiden. Wenn Sie vermuten, dass ein erkannter Treiber falsch ist, dann verschieben Sie diesen ins Verzeichnis <productid>/drivers/exclude; dort liegende Treiber berücksichtigt opsi bei der Integration nicht. Führen Sie anschließend ./create_driver_links.py bzw. ./show_drivers.py erneut aus.

Ausgabe von show_drivers.py (Beispiele)

./show_drivers.py pcdummy

PCI-Devices
   [(Standardsystemgeräte), PCI Standard-PCI-zu-PCI-Brücke]
      No driver - device directory  /var/lib/opsi/depot/<productid>/drivers/pciids/1022/9602 not found
   [ATI Technologies Inc., Rage Fury Pro (Microsoft Corporation)]
      Using build-in windows driver
   [(Standard-IDE-ATA/ATAPI-Controller), Standard-Zweikanal-PCI-IDE-Controller]
      /var/lib/opsi/depot/<productid>/drivers/drivers/D/M/N/123
   [Realtek Semiconductor Corp., Realtek RTL8168C(P)/8111C(P) PCI-E Gigabit Ethernet NIC]
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/realtek_gigabit_net_8111_8168b
   [IEEE 1394 OHCI-konformer Hostcontroller-Hersteller, OHCI-konformer IEEE 1394-Hostcontroller]
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/197B/2380' not found
   [Advanced Micro Devices, Inc., AMD AHCI Compatible RAID Controller]
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/ati_raid_sb7xx
   [(Standard-USB-Hostcontroller), Standard OpenHCD USB-Hostcontroller]
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/1002/4397' not found
   [ATI Technologies Inc, ATI SMBus]
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/ati_smbus

USB-Devices
   [(Standard-USB-Hostcontroller), USB-Verbundgerät]
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/brother_844x_pGerb
   [Microsoft, USB-Druckerunterstützung]
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/brother_844x_pGerb

Additional drivers
   [ati_hdaudio_azalia]
     /var/lib/opsi/depot/<productid>/drivers/drivers/additional/ati_hdaudio_azalia

Beispiel für einen Client mit additional_drivers:

 ./show_drivers.py e5800
Manually selected drivers (additional)
   [hp_e5800]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI3.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDX861A.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI1.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXCPC.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64/HDXHPAI2.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/autorun.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/ibxHDMI/IntcDAud.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/HDMI/IntcHdmi.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/Graphics/kit24890.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/IIPS/Impcd.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp54284/Realtek 64bit/hp64win7.inf]

PCI-Devices
   [8086:27C8]  Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27C8
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27DA]  Intel : Intel(R) N10/ICH7 Family SMBus Controller - 27DA
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27C9]  Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27C9
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27DF]  Intel : Intel(R) ICH7 Family Ultra ATA Storage Controllers - 27DF
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27CA]  Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27CA
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:2E30]  Intel : Intel(R) 4 Series Chipset Processor to I/O Controller - 2E30
      /var/lib/opsi/depot/<productid>/drivers/drivers/not_preferred/x64/C/Intel/1
   [8086:27CB]  Intel : Intel(R) N10/ICH7 Family USB Universal Host Controller - 27CB
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:2E32]  Intel Corporation : Intel(R) G41 Express Chipset
      Manually selected [hp_e5800] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp50134/Graphics
   [8086:27CC]  Intel : Intel(R) N10/ICH7 Family USB2 Enhanced Host Controller - 27CC
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:244E]  Intel : Intel(R) 82801 PCI-Brücke - 244E
      Using build-in windows driver
      This driver will not be integrated, because same device already integrated in: '/var/lib/opsi/depot/<productid>n/drivers/drivers/not_preferred/x64/C/Intel/1/dmi_pci.inf'
   [8086:27D0]  Intel : Intel(R) N10/ICH7 Family PCI Express Root Port - 27D0
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27B8]  Intel : Intel(R) ICH7 Family LPC Interface Controller - 27B8
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27D2]  Intel : Intel(R) N10/ICH7 Family PCI Express Root Port - 27D2
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27C0]  Intel : Intel(R) N10/ICH7 Family Serial ATA Storage Controller - 27C0
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/R293337/WIN7
   [8086:27D8]  Microsoft : High Definition Audio-Controller
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/8086/27D8' not found
   [10EC:8136]  Realtek : Realtek RTL8102E/RTL8103E-Familie-PCI-E-Fast-Ethernet-NIC (NDIS 6.20)
      Manually selected [hp_e5800] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp54284/Realtek 64bit

USB-Devices
   [0461:0010]  (Standardsystemgeräte) : USB-Eingabegerät
      No driver - vendor directory '/var/lib/opsi/depot/<productid>/drivers/usbids/0461' not found
   [0461:4D20]  (Standardsystemgeräte) : USB-Eingabegerät
      No driver - vendor directory '/var/lib/opsi/depot/<productid>/drivers/usbids/0461' not found
   [058F:6366]  Kompatibles USB-Speichergerät : USB-Massenspeichergerät
      No driver - vendor directory '/var/lib/opsi/depot/<productid>/drivers/usbids/058F' not found
   [0461:0010]  (Standard-USB-Hostcontroller) : USB-Verbundgerät
      No driver - vendor directory '/var/lib/opsi/depot/<productid>/drivers/usbids/0461' not found

HD-Audio-Devices
   [10EC:0662]  Realtek High Definition Audio
      Manually selected [hp_e5800] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/hp_e5800/sp52852/Vista64

Beispiel für einen Client mit byAudit:

 ./show_drivers.py pctry5detlef
Manually selected drivers (additional)
   [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)/atiilhag.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)/atiilhag.inf]
      [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/MEDIA/Realtek AC'97 Audio/oem21.inf]

PCI-Devices
   [1002:5B70]  ATI Technologies Inc. : Radeon X300/X550/X1050 Series Secondary (Microsoft Corporation - WDDM)
      Manually selected [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)
      Multiple selected [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)
   [10DE:0053]  (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/0053' not found
   [10DE:005D]  (Standardsystemgeräte) : PCI Standard-PCI-zu-PCI-Brücke
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/005D' not found
   [1022:1100]  AMD : AMD HyperTransport(tm)-Konfiguration
      Using build-in windows driver
   [10DE:0054]  (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/fsc__esprimo_p625/FTS_NVIDIASATAAHCIDRIVERVISTA64V103042MCP78__1026963/NVIDIA_SATA_AHCI_DRIVER_Vista64_V10.3.0.42_MCP78 (textmode capable)
   [1022:1101]  AMD : AMD-Adresszuordnungskonfiguration
      Using build-in windows driver
   [10DE:0055]  (Standard-IDE-ATA/ATAPI-Controller) : Standard-Zweikanal-PCI-IDE-Controller
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/fsc__esprimo_p625/FTS_NVIDIASATAAHCIDRIVERVISTA64V103042MCP78__1026963/NVIDIA_SATA_AHCI_DRIVER_Vista64_V10.3.0.42_MCP78 (textmode capable)
   [1022:1102]  AMD : AMD DRAM und HyperTransport(tm)-Nachverfolgungsmoduskonfiguration
      Using build-in windows driver
   [10DE:0057]  NVIDIA : NVIDIA nForce-Netzwerkcontroller
      Using build-in windows driver
   [1022:1103]  AMD : Sonstige AMD-Konfiguration
      Using build-in windows driver
   [10DE:0059]  Realtek : Realtek AC'97 Audio
      Manually selected [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/MEDIA/Realtek AC'97 Audio
   [10DE:005E]  NVIDIA : NVIDIA nForce4 HyperTransport-Brücke
      /var/lib/opsi/depot/<productid>/drivers/drivers/preferred/ga-ma78-pcbon4/chipset_win7-64/SMBUS
   [104C:8025]  Texas Instruments : OHCI-konformer Texas Instruments 1394-Hostcontroller
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/104C/8025' not found
   [10DE:005A]  (Standard-USB-Hostcontroller) : Standard OpenHCD USB-Hostcontroller
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/005A' not found
   [10DE:0050]  (Standardsystemgeräte) : PCI Standard-ISA-Brücke
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/0050' not found
   [10DE:005B]  (Standard-USB-Hostcontroller) : Standard PCI-zu-USB erweiterter Hostcontroller
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/005B' not found
   [1002:5B60]  ATI Technologies Inc. : Radeon X300/X550/X1050 Series (Microsoft Corporation - WDDM)
      Manually selected [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series Secondary (Microsoft Corporation - WDDM)
      Multiple selected [/var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi] /var/lib/opsi/depot/<productid>/drivers/drivers/additional/byAudit/nvidia/awrdacpi/pctry5detlef/Display/Radeon X300-X550-X1050 Series (Microsoft Corporation - WDDM)
   [10DE:0052]  NVIDIA : NVIDIA nForce PCI-Systemverwaltung
      Using build-in windows driver
   [10DE:005C]  (Standardsystemgeräte) : PCI Standard-PCI-zu-PCI-Brücke
      No driver - device directory '/var/lib/opsi/depot/<productid>/drivers/pciids/10DE/005C' not found

USB-Devices
   [1241:1111]  (Standardsystemgeräte) : USB-Eingabegerät
      No driver - vendor directory '/var/lib/opsi/depot/<productid>/drivers/usbids/1241' not found

HD-Audio-Devices
   No devices installed

Weitere Tipps und Hinweise

Die Network Driver Interface Specification (NDIS) ist ein gemeinsam von Microsoft und 3Com entwickelter Standard zur Integration von Netzwerkkarten. Folgende NDIS-Versionen wurden implementiert:

  • NDIS 6.0: Windows Vista

  • NDIS 6.1: Windows Vista SP1, Server 2008, Windows Embedded Compact 7, Windows Embedded Compact 2013

  • NDIS 6.20: Windows 7, Microsoft Windows Server 2008 R2

  • NDIS 6.30: Windows 8, Windows Server 2012

  • NDIS 6.40: Windows 8.1, Windows Server 2012 R2

  • NDIS 6.50: Windows 10, Version 1507

  • NDIS 6.51: Windows 10, Version 1511

  • NDIS 6.60: Windows 10 und Windows Server 2016, Version 1607

  • NDIS 6.70: Windows 10, Version 1703

  • NDIS 6.80: Windows 10, Version 1709

  • NDIS 6.81: Windows 10, Version 1803

  • NDIS 6.82: Windows 10 und Windows Server 2019, Version 1809

  • NDIS 6.83: Windows 10, Version 1903

Einige Chipsatz-Treiber enthalten Beschreibungsdateien, die sehr viel Hardware aufführen, ohne aber tatsächlich Treiber zu liefern. Das ist beispielsweise bei cougar.inf oder ibexahci.inf von Intel der Fall. Wenn ein solches Verzeichnis mit "Pseudo-Treibern" per additional_drivers bzw. per byAudit zugewiesen wird, gilt die Hardware als "erkannt", und opsi sucht nicht weiter nach Treibern im preferred-Verzeichnis.

SATA-Treiber und SATA-RAID-Treiber beziehen sich auf dieselbe PCI-Kennung. Ein SATA-RAID-Treiber wird mit einem Einzelplatten-System aber nicht funktionieren.

Kontrollieren Sie die Ausgabe von ./show_drivers.py ganz genau, bevor Sie die automatische OS-Installation starten!