Installation eines neuen Windows PC über opsi (OS-Installation)

Nachfolgend wird beschrieben, wie ein bisher nicht mit einem Betriebssystem ausgestatter Computer per opsi mit einem Windows-Betriebssystem ausgestattet wird.

Als Client-PC eignen sich reale oder virtuelle Rechner mit mindestens 2048 MB RAM, die über eine Netzwerkkarte mit Netzwerkboot-Unterstützung verfügen: D.h., sie unterstützen das PXE-Protokoll zum Laden von Boot-Systemen via Netzwerk. Der Netzwerkboot ist ggf. im BIOS-Menü zu aktivieren bzw. an die erste Stelle der Bootoptionen zu rücken.

Virtuelle Hardware wird in der Regel gut von den Windows-Standardtreibern unterstützt, wenn Sie später eine Testinstallation von Windows durchführen. Zur Installation von Windows auf neueren realen Rechnern müssen Sie möglicherweise vorab zusätzliche Treiber integrieren. Für einen ersten Tests können Sie eine VMware-Appliance verwenden, die einen leeren Rechner abbildet und in VMware Workstation Player laufen kann.

Für die nachfolgenden Kapitel sollten Sie einen entsprechenden Client in opsi aufgenommen haben. Einfach geht dies mittels opsi-configed.

Einige für die Bereitstellung von Windows mit opsi nützliche Werkzeuge werden über das Paket 'opsi-windows-support' installiert.

Betriebssysteminstallation: Vervollständigen der Basispakete für Windows

In den zum Download empfohlenen Paketen sind lediglich Basispakete (Framework) enthalten. Diese dienen zur Installation der Windows-Betriebssysteme, müssen jedoch noch vervollständigt werden, da sie nicht die Dateien zur Installation des Betriebssystems selbst enthalten.

Zur automatischen Windows-Betriebssysteminstallation müssen Sie Ihre vorhandenen Original-Windows-Installationsdateien kopieren (und ggf und den Windows-Lizenzschlüssel auf dem Server ablegen).

NT6 Familie: ab Win7 / 2008R2

Um diese Betriebssysteme installieren zu können, wird ein sogenanntes WinPE als 'Live-System' genutzt. Sie können es mithilfe eines opsi - Paketes erstellen (opsi-winpe), oder von Hand, wenn Sie möchten. Grundsätzlich ist die Windows-Version des PE unabhängig von der zu installierenden Windows-Version. Wichtig ist vor allem die Verfügbarkeit von Festplatten- und Netzwerkkarten - Treibern an dieser Stelle. Microsoft empfiehlt für 32-Bit Installationen ein 32-Bit PE, bzw. für 64-Bit ein 64-Bit PE.

'"Um eine 64-Bit-Version von Windows zu installieren, müssen Sie eine 64-Bit-Version von Windows PE verwenden. Um eine 32-Bit-Version von Windows zu installieren, müssen Sie eine 32-Bit-Version von Windows PE verwenden."'
https://technet.microsoft.com/de-de/library/cc766093.aspx

In jedem Fall benötigen Sie ein "Windows PE add-on für das Assessment and Deployment Kit" (ADK, Windows 10 bzw. 11), welches Sie auf ein unterstütztes Windows Betriebssystem (bevorzugt 64 Bit) installieren.:

Installieren Sie das Windows PE Add-On für ADK (nach Möglichkeit auf einer 64Bit- Maschine) in den vorgeschlagenen Pfad unter Program Files (x86). Wählen Sie nur die "Windows-Vorinstallationsumgebung (Windows PE)" aus; Abhängigkeiten werden automatisch ausgewählt.

Erstellen eines PE

Die einfachste Methode setzt voraus, dass Sie bereits einen Windows-Computer haben, auf dem sowohl der opsi-client-agent installiert ist, als auch das Windows ADK (Win10, Win11). Der manuelle Weg wird anschließend unter Manuelles Erstellen eines PE für Windows 10 & Windows 11 (ADK) beschrieben.

Automatisiertes Erstellen eines PE mit opsi

  • Setzen Sie das Localboot-Produkt opsi-winpe für diesen Client auf once, wählen Sie ggf. in den Produkt-Properties rechts unten x86 statt x64 aus, und speichern Sie (Rechtsklick > Speichern)

  • (sofern das opsi-Produkt opsi-winpe nicht vorhanden ist, installieren Sie es auf dem opsi - Server mittels opsi-package-updater -v install opsi-winpe)

  • Wenn Treiber für Massenspeicher (Festplatten) integriert werden sollen, gehen Sie bitte wie hier beschrieben vor: Erweiterung eines PE mit Hilfe von opsi.

  • Veranlassen Sie ein Installations - Event für diesen Client (zB Rechtsklick > on-demand, oder Reboot)

  • Nach erfolgreichem Lauf dieser Aktion verschieben oder kopieren Sie den Inhalt des entstandenen Verzeichnisses auf dem Client C:\winpe_<ARCH>\media\ in das bereits existente Verzeichnis des zu installierenden Betriebssystems \\opsiserver\opsi_depot_rw\<Betriebssystem>\winpe\

  • Führen Sie nun zuletzt folgenden Kommandozeilen - Befehl auf dem neuen opsi-Server aus. Fertig.

opsi-set-rights

Manuelles Erstellen eines PE für Windows 10 & Windows 11 (ADK)

Die Befehle für 32- und 64-Bit sind nahezu identisch, nur müssen die Einträge <ARCH> mit entweder x86 , amd64 oder ia64 ersetzt werden.

Führen Sie Start ⇒ Programme ⇒ Windows Kits ⇒ Windows ADK ⇒ "Umgebung für Bereitstellungs- und Imageerstellungstools" aus; eine Eingabe-Aufforderung erscheint (in dieser sind in der Folge benötigte Umgebungsvariablen gesetzt)

  • WinPE kopieren:

copype.cmd <ARCH> C:\winpe
  • Image mounten/einhängen:

dism /Mount-Wim /WimFile:C:\winpe\media\sources\boot.wim /index:1 /MountDir:c:\winpe\mount
  • Startnet.cmd ersetzen:

echo c:\opsi\startnet.cmd > "C:\winpe\mount\Windows\System32\startnet.cmd"

(Hinweis: c:\opsi\startnet.cmd wird vom opsi-linuxbootimage in der setup.py erstellt nebst dem oben entfernten wpeinit-Aufruf).

  • Image wieder aushängen:

dism /Unmount-Wim /MountDir:c:\winpe\mount /Commit
  • Den Inhalt von C:\winpe\ISO nach /var/lib/opsi/depot/<productid>/winpe kopieren.
    Rechte anpassen (z.B.):

opsi-setup --set-rights /var/lib/opsi/depot/<productid>/winpe

Erweiterung eines PE

Manchmal ist es sehr nützlich, das Windows PE zu erweitern. Besonders bei Hardware, welche nicht per Default vom PE unterstützt wird.

Erweiterung eines PE mit Hilfe von opsi

Während der automatischen Erzeugung des PE mit dem Produkt opsi-winpe gibt es auch die Möglichkeit Treiber zu integrieren.
Integrieren Sie nur Treiber welche unbedingt notwendig für die Windowsinstallation sind (also ohne die die Windowsinstallation scheitert). Das sind überlicherweise Netzwerk- oder Storage-Treiber die beim Installationsvorgang benötigt werden.

Kopieren Sie die Treiber nach \\opsiserver\opsi_depot_rw\opsi-winpe\drivers\ und setzten Sie danach die Dateirecht durch den Aufruf von:

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

Danach folgen Sie dem Vorgehen wie hier beschrieben: Automatisiertes Erstellen eines PE mit opsi Wenn alles funktioniert hat, wird der von Ihnen integrierte Treiber im Logfile erwähnt. Hier ein Beispiel mit einem VirtIO Massenspeicher-Treiber:

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

Erweiterung eines PE von Hand

Für Dell-Hardware gibt es Netzwerk- und Storage-Treiber, welche speziell für den PE-Einsatz empfohlen werden. Folgende Anleitung beschreibt, wie man ein PE mit Treibern erweitern kann. Weiterhin setzt diese Anleitung voraus, dass die Schritte im vorigen Kapitel zum Erstellen des PE ausgeführt wurden.

Windows Automated Installation Kit wird für folgende Schritte nicht benötigt.

Herunterladen von Dell-PE-Treibersammlung. Die heruntergeladene CAB-Datei muss nun lokal ausgepackt werden. Dies kann man mit 7zip oder aber mit dem Kommandozeilentool expand erledigen. Für die Übersichtlichkeit wird empfohlen ein Verzeichnis wie zum Beispiel dell-driver auf C: an zu legen und die CAB-Datei dort aus zu packen.

  • Nun wird zunächst das Image untersucht. Als Administrator die Eingabeaufforderung starten und folgenden Befehl eingeben:

dism /Get-WimInfo /WimFile:C:\winpe\ISO\sources\boot.wim

Aus der Ausgabe des Befehls braucht man für den nächsten Schritt den Index. Da in der Regel ein winpe aus einem einzigen Image besteht, sollte in der Regel der Index 1 immer funktioneren.

  • Mit folgendem Befehl wird das Image gemountet:

dism /Mount-Wim /WimFile:C:\winpe\ISO\sources\boot.wim /index:1 /MountDir:c:\winpe\mount
  • Nun wird das PE mit den dafür ausgepackten Treibern erweitert:

dism /Image:C:\winpe\mount  /Add-Driver /Driver:c:\dell-driver\winpe\x64 /Recurse

Für 32-Bit muss das x64 durch x86 ersetzt werden. Die Driver-CAB von Dell beinhaltet die Treiber für beide Architekturen.

Wenn man nur einen Treiber integrieren möchte, kann man die Option /Recurse weglassen und statt ein Verzeichnis direkt die inf-Datei des Treibers angeben. Weiterhin ist es möglich mit dem Parameter /ForceUnsigned auch nicht signierte Treiber in ein PE zu integrieren.
  • Zum Schluss wird das Image wieder ausgehängt und die Änderungen übernommen:

dism /Unmount-Wim /MountDir:c:\winpe\mount /Commit
  • Das Verzeichnis C:\winpe\ISO als Verzeichnis winpe nach /var/lib/opsi/depot/<productid>/ kopieren.
    Rechte anpassen (z.B.):

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

unattend.xml

Die Steuerdatei für die unattended Installation ist die unattend.xml, welche unter /var/lib/opsi/depot/<productid>/custom zu finden ist. Mögliche Modifikationen an dieser Datei sollten in diesem Verzeichnis und nicht im opsi Verzeichnis gemacht werden.

Die von uns mitgelieferte unattend.xml enthält Verweise auf die Netboot-Produkteigenschaften, welche unter anderem für die Aktivierung des Administrator Accounts mit dem Passwort 'nt123' sorgen.

Treiber-Integration

Die Treiber-Integration verläuft wie hier: Vereinfachte Treiberintegration in die automatische Windowsinstallation beschrieben.

Bereitstellung der Installationsmedien

Kopieren der Installations-DVD nach
/var/lib/opsi/depot/<productid>/installfiles und passen Sie Rechte/Eigentümer an:

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

Log-Dateien der unattended-Installation

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

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

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

  • c:\Windows\Panther\UnattendGC\setupact.err:
    Fehler-Log ab Specialize-Phase

  • c:\Windows\System32\Winevt\Logs\*

  • c:\Windows\ntbtlog.txt (nur nach aktivierter Startprotokollierung)

Windows-Produktschlüssel

Wenn Sie über das Modul opsi-Lizenzmanagement verfügen, können Sie die Windows Lizenzschlüssel über das Lizenzmanagement Modul verwalten. Lesen Sie dazu das Lizenzmanagement Handbuch bzw. das entsprechende Kapitel im opsi-Handbuch.

Haben Sie kein Lizenzmanagement oder wollen dieses nicht verwenden, gehen Sie wie folgt vor.

Wenn Sie bereits opsi-Clients eingerichtet haben, können Sie im opsi-Konfigurationseditor einen Windows-Produktschlüssel per Client eintragen:

  • einen Client auswählen

  • zum Tab Netboot-Produkte wechseln

  • dort zB. das Produkt win10-x64 auswählen

  • rechts in der Schalter-Liste in die Property-Zeile productkey gehen

  • in das Value-Feld den Schlüssel eintragen und mit Klick auf "+" hinzufügen

  • durch Klick auf das "rote Häckchen" speichern und das Feld verlassen

  • die Änderungen im Backend speichern ("rotes Häckchen" oben rechts).

Oder Sie vergeben einen Default für den Windows-Produktschlüssel für das komplette opsi-Depot, was ebenfalls über den opsi-Konfigurationseditor erledigt werden kann:

  • im Konfigurationseditor die Depoteigenschaften auswählen (Kachel rechts oben)

  • zum Tab Produkt-Defaultproperties wechseln

  • dort zB. das Produkt win10-x64 auswählen

  • rechts in der Schalter-Liste in die Property-Zeile productkey gehen

  • in das Value-Feld den Schlüssel eintragen und mit Klick auf "+" hinzufügen

  • durch Klick auf das "rote Häckchen" speichern und das Feld verlassen

  • die Änderungen im Backend speichern ("rotes Häckchen" oben rechts).

Start der Windows-Installation

Zum Starten einer Windows-Installation wählen Sie nun im opsi-configed den betreffenden Client aus, setzen unter dem Karteireiter 'Netboot-Produkte' für die gewünschten Betriebssystem (z.B. win10-x64) die Aktion auf 'setup' und klicken auf den roten Haken (der wieder grün wird).

Der Client sollte jetzt beim Booten ein Linux Bootimage übers Netz ziehen, in dem Sie nochmal die PC-Neu-Installation bestätigen müssen. Dann sollte alles automatisch weiter laufen, bis schließlich die Logon-Aufforderung des installierten Windows auf dem Bildschirm steht.

Sollte nach dem Laden des Bootimages der Bildschirm schwarz bleiben oder die Netzwerkkarte nicht (korrekt) funktionieren, so muss für diese konkrete Hardware evtl. die Startparameter des Bootimages angepasst werden.
Dies können Sie im 'opsi-configed' im Tab 'Hostparameter' am Eintrag 'opsi-linux-bootimage.append' tun.
Details hierzu finden Sie im opsi Handbuch im Kapitel 'Netboot Produkte'.
Vorsicht bei Clients mit einer über 2TB großen Festplatte. In einem nicht UEFI-System beträgt die maximale Partitionsgröße 2 Terabyte. Sofern eine größere Partition angelegt werden soll schlägt die Installation fehl. Dies ist technisch durch die standard Partitionstabelle bedingt. Sie müssen die Festplatte in zwei Partitionen aufteilen. Dies können Sie über die Product-Properties steuern. Oder Sie erwerben das UEFI-Modul, wodurch diese technische Limietierung entfällt.

Aufbau der Produkte zur unattended Installation

Diese Kapitel betrifft die Windows-Netboot-Produkte.

Übersicht des Verzeichnisbaums

<productid>-
           |-i386/				NT5 only: Installations files
           |-installfiles/		        NT6 only: Installations files
           |-winpe/				NT6 only
           |-opsi/				Scripte und Templates by opsi.org
           |  |-$oem$/					NT5 only: $oem$ gemaess MS
           |  |-postinst.d/				Scripte nach OS-Install by opsi.org
           |  !-unattend.(txt/xml).template		Template by opsi.org
           |-custom/				Scripte und Templates by customer
           |  |-$oem$/					NT5 only: $oem$ gemaess MS by customer
           |  |-postinst.d/				Scripte nach OS-Install by customer
           |  !-unattend.(txt/xml)			unattend.txt by customer
           |-drivers/				drivers Verzeichnis
        user   |  |-drivers/			drivers Verzeichnis
           |  |-pciids/				Symlinkbaum zu Treibern
           |  |-vendors/			Symlinkbaum zu Treibern
           |  |-classes/			Symlinkbaum zu Treibern
           |  |-usbids/				Symlinkbaum zu Treibern
           |  |-hdaudioids/			Symlinkbaum zu Treibern
           |  |-pci.ids				PCI-IDs DB
           |  !-usb.ids				USB-IDs DB
           |-setup.py				Installationsscript
           |-<productid>_<version>.control	Meta Daten (nur zur Info)
           |-<productid>.files			Dateiliste (automatisch erstellt)
           |-create_driver_links.py		Script zur Treiberverwaltung
           |-show_drivers.py			Script zur Treiberverwaltung
           !-extract_driver_pack.py		Script zur Treiberverwaltung

Die Dateien

  • setup.py
    Dies ist das Installationsskript, welches vom Bootimage ausgeführt wird.

  • <productid>_<version>.control
    enthält die Metadaten des Produkts, so wie sie vom Paketierer bereitgestellt wurden. Die Datei liegt hier nur zu Informationszwecken, d.h. Änderungen an dieser Datei haben keinerlei Auswirkungen auf das System.

  • <productid>.files
    Diese Datei wird automatisch erzeugt und sollte nicht verändert werden.

  • create_driver_links.py
    show_drivers.py
    extract_driver_pack.py
    Dies sind Scripte zur Treiberintegration, die im Kapitel Vereinfachte Treiberintegration in die automatische Windowsinstallation, näher erläutert werden.

Verzeichnis installfiles / winpe

  • installfiles
    Enthält den Inhalt der Installations-CD.

  • winpe
    Enthält ein bootbares winpe Image.

Verzeichnisse opsi / custom

Diese beiden Verzeichnisse enthalten Scripte und Konfigurationsdateien zur Steuerung der Betriebssysteminstallation. Während der Installation wirken diese Verzeichnisse zusammen, indem die Dateien aus custom Vorrang haben.

Das Verzeichnis opsi enthält Dateien, die mit Updates jederzeit überspielt werden können. Hier sollten also keine Änderungen vorgenommen werden. Für Anpassungen können Sie Änderungen im Verzeichnis custom vornehmen, welches bei Updates nicht überspielt wird.

Das Unterverzeichnis postinst.d enthält Scripte, welche nach der eigentlichen Installation des Betriebssystems über die postinst.cmd gestartet werden, um z.B. den opsi-client-agent zu installieren. Die Scripte werden dabei in alphabetischer Reihenfolge abgearbeitet. Um die Reihenfolge zu verdeutlichen, fangen die Dateinamen mit einer zweistelligen Nummer an (10_dhcp.cmd). Wollen Sie hier Erweiterungen vornehmen, so können Sie im Verzeichnis custom/postinst.d Scripte mit Nummern zwischen den vollen 10ern ablegen (13_myscript.cmd). Die vollen 10er sind für die Pflege durch opsi.org/uib reserviert. Das Script 99_cleanup.cmd ist das letzte und endet mit einem Reboot.

Verzeichnis drivers

Dieses Verzeichnis dient der Treiberintegration und ist im folgenden Kapitel beschrieben.

Vereinfachte Treiberintegration in die automatische Windowsinstallation

Administriert man einen Pool von PCs, die Geräte besitzen, deren Treiber nicht in der Windows-Standardinstallation enthalten sind, so ist es meist sinnvoll, diese Treiber direkt in die Installation zu integrieren. Bei Netzwerkgeräten kann dies teilweise sogar unumgänglich sein, denn ein startendes Windows ohne Netzwerkkarte ist für den Administrator nicht ohne weiteres erreichbar.

Opsi unterstützt Sie durch eine Automatisierung der Treibereinbindung und vereinfacht so die Bereitstellung der Treiber. Dabei müssen die Treiber nur in dem korrekten Verzeichnis abgelegt werden. Durch den Aufruf eines Scripts werden dann die Treiberverzeichnisse durchsucht und ein Katalog erstellt, anhand dessen das Bootimage automatisch die richtigen Treiber erkennen und einbinden kann. Dabei können sowohl Standard-Treiber, USB-Treiber, HD-Audio-Treiber wie auch Treiber für Festplattencontroller (Textmode Treiber) abgelegt und automatisch eingebunden werden.

Damit die Treiber sofort bei der Windowsinstallation mit installiert werden, müssen Sie in einer bestimmten Form auf dem Server hinterlegt werden. Hierzu sind Treiberverzeichnisse geeignet, die eine '*.inf'-Datei enthalten, die den Treiber für das Windows-Setupprogramm beschreibt. Irgendwelche in setup.exe, '*.zip' oder anders verpackten Treiber sind hier unbrauchbar. Mit dem Programm 'double driver' (http://www.boozet.org/dd.htm) können Sie von einem installierten Rechner die Treiber im geeigneten Format extrahieren.

Es stehen mehrere Ebenen zur Bereitstellung von Treibern zur Verfügung:

  • Allgemeine Treiber Pakete

  • Treiber die zu Ihrer Hardware gehören aber nicht speziell zu geordnet sind

  • Treiber die manuell Rechnern zu geordnet sind

  • Treiber die über die Felder <vendor>/<model> der Inventarisierung automatisch den Rechnern zu geordnet werden.

Wie diese unterschiedlichen Ebenen verwendet werden können ist im folgenden beschrieben:

Allgemeine Treiber Pakete

Wenn die Hardwareausstattung sehr heterogen ist, kann es sinnvoll sein mit allgemeinen Treiberpaketen zu arbeiten.
Allgemeine Treiber legen Sie ab unter ./drivers/drivers.

Treiber welche im Verzeichnis ./drivers/drivers/ liegen, werden anhand der PCI-Kennungen (bzw. USB- oder HD_Audio-Kennung) in der Beschreibungsdatei des Treibers als zur Hardware passend erkannt und in das Windows Setup mit eingebunden.

Treiber die zu Ihrer Hardware gehören aber nicht speziell zu geordnet sind

Haben Sie nur wenige unterschiedliche Hardware zu unterstützen, so können Sie die Treiber bei den Herstellern suchen.
Zusätzliche bzw. geprüfte Treiber gehören in jeweils eigene Verzeichnisse (Name und Tiefe der Verzeichnisstruktur egal) unterhalb des Verzeichnisses
./drivers/drivers/preferred.
Treiber welche im Verzeichnis ./drivers/drivers/preferred liegen, werden gegenüber den Treibern in ./drivers/drivers/ bevorzugt anhand der PCI-Kennungen (bzw. USB- oder HD_Audio-Kennung) in der Beschreibungsdatei des Treibers als zur Hardware passend erkannt und in das Windows Setup mit eingebunden.
Finden sich z.B. zu eine PCI-ID in unterschiedlichen Treiber unter preferred, so kann dies zu Problemen bei der Treiber Zuordnung führen. In diesem Fall ist eine direkte Zuordnung der Treiber zu dem Client notwendig.

Treiber die manuell Rechnern zu geordnet sind

Zusätzliche Treiber, die unabhängig von ihrer Zuordnung bzw. Erkennung über die PCI- oder USB-IDs installiert werden sollen, gehören in jeweils eigene Verzeichnisse (Name und Tiefe der Verzeichnisstruktur egal) unterhalb des Verzeichnisses ./drivers/drivers/additional. Über das Produkt-Property 'additional_drivers' können Sie einen oder mehrere Pfade von Treiberverzeichnissen innerhalb von ./drivers/drivers/additional einem Client zu ordnen. Im Produkt-Property 'additional_drivers' angegebene Verzeichnisse werden rekursiv durchsucht und alle enthaltenen Treiber eingebunden. Dabei wird auch symbolischen Links gefolgt. Dies können Sie nutzen, um für bestimmte Rechner-Typen ein Verzeichnis zu erstellen (z.B. dell-optiplex-815).

Wird in den über 'additional_drivers' angegebenen Treiberverzeichnissen ein Treiber für ein vorhandenes PCI-Gerät (oder HD-Audio, USB) gefunden, so wird für dieses Gerät kein weiterer Treiber aus drivers/preferred/ oder drivers/ mehr eingebunden ('additional_drivers' ist sozusagen 'super-preferred'). Damit hat 'additional_drivers' die Funktion Treiber hinzuzufügen, welche über die normale Treibererkennung nicht gefunden würden.

Treiber die über die Felder <vendor>/<model> der Inventarisierung automatisch den Rechnern zu geordnet werden.

Der im vorigen Abschnitt beschriebene Mechanismus der direkten Zuordnung von Treibern zu Geräten, kann seit dem 2 Teil des Service Release opsi 4.0.2 automatisiert werden. Dazu wird in dem Verzeichnis ./drivers/drivers/additional/byAudit nach einem Verzeichnisnamen gesucht der dem bei der Hardwareinventarisierung gefundenen 'Vendor' entspricht. In diesem 'Vendor' Verzeichnis wird nun nach einem Verzeichnisnamen gesucht, das dem bei der Hardwareinventarisierung gefundenen 'Model' entspricht. Wird ein solches Verzeichnis gefunden, so wird dieses Verzeichnis genauso behandelt, als wäre es über das Produkt-Property 'additional_drivers' manuell zugewiesen.

Dabei können seit opsi 4.0.5 die Treiber für einen opsi-client über den opsi-configed im Reiter Hardwareinventarisiering bereitgestellt werden (vgl.:opsi-Handbuch Automatisierte Treiberintegration).

Die Abarbeitung im opsi-Linux-Bootimage erfolgt in der Reihenfolge

  • <vendor>/<model> (<sku>)

  • ohne Fund greift der Fallback auf <system vendor>/<system model>

  • ohne Fund greift der Fallback auf <motherboard vendor>/<motherboard model>.

Einige Hersteller verwenden Modellbezeichnungen, die für diese Methode sehr ungünstig sind, da man einige Sonderzeichen wie / nicht in Datei- oder Verzeichnisnamen verwenden darf. Ein Beispiel dafür wäre als Modelbezeichnung: "5000/6000/7000". Ein Verzeichnis mit dieser Bezeichnung ist wegen den Sonderzeichen nicht gestattet. Seit der dritten Service Release opsi 4.0.3 werden deshalb folgende Sonderzeichen: < > ? " : | \ / * intern durch ein _ ersetzt. Mit dieser Änderung kann man oben genanntes schlechtes Beispiel als: "5000_6000_7000" anlegen und das Verzeichnis wird automatisch zu gewiesen, obwohl die Information in der Hardwareinventarisierung nicht der Verzeichnisstruktur enstprechen.

Struktur des Treiber Verzeichnisses und Ablage der Treiber

/var/
  !-lib/
     !-opsi/depot/
        !-<productid>/
           !-drivers
              |-classes/		(Links auf Treiber über Geräteklassen)
              |-hdaudioids/		(Links auf HD-Audio Treiber)
              |-pciids/			(Links auf Treiber über PCI-Kennung)
              |-pci.ids			(PCI Datenbank)
              |-usbids/			(Links auf Treiber über USB-Kennung)
              |-usb.ids			(USB Datenbank)
              |-vendors/		(Links auf Treiber über Hersteller)
              !-drivers			(Platz für allg. Treiber Packs)
                 |-additional/		(Für manuell zugeordnete Treiber)
                    |-byAudit/		Modell spezifische Treiber welche
                       |-<vendor>		über die Hardwareinventarisierung
                          |-<model>		zugeordnet werden
                 |-buildin/		(Daten aus dem i386 Baum)
                 |-preferred/		(geprüfte Treiber)
                 |-exclude/		(ausgeschlossene Treiber)
                 !-mydriverpacks/	(Beispiel Treiber Pack)

Abarbeitung der unterschiedlichen Ebenen der Treiberintegration

Als oberste Priorität werden alle Treiber eingebunden, welche über das Property 'additional_drivers' bzw. die über die Inventarisierungsdaten in ./drivers/drivers/additional/byAudit gefunden werden. Im Rahmen der Einbindung von Treibern wird geprüft für welche der Hardware eines Geräts (anhand der PCI-,USB-,HDAudio-Kennungen) hierdurch ein Treiber bereit gestellt wurde. Nur für Geräte für die auf diese Weise noch kein Treiber bereitgestellt wurde wird über die nachfolgenden Methoden ein Treiber gesucht.

Für Geräte denen nicht über 'additional_drivers' (bzw. 'byAudit') ein Treiber zu geordnet wurde wird anhand der PCI Kennung (bzw. USB-, HDAudio-Kennung) ein passender Treiber gesucht und eingebunden.

'Einbindung' von Treiber bedeutet dabei:

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

  • Dem Windows Setup wird in der unattended Datei mitgeteilt, in den Verzeichnissen unterhalb von c:\drv\ nach passenden Treibern zu suchen.

Treiber hinzufügen und prüfen

Nach jedem Hinzufügen eines Treibers oder jeden anderen Änderung im ./drivers/drivers Verzeichnis (oder darunter) rufen Sie im Stammverzeichnis des netboot Produktes Verzeichnis folgenden Befehl auf, um die Rechte korrekt zu setzen:

opsi-set-rights ./drivers

Wenn Sie Treiber in die Verzeichnisse ./drivers/drivers oder ./drivers/drivers/preferred abgelegt haben, dann rufen Sie das Script ./create_driver_links.py auf. Dieses durchsucht die Verzeichnisse und erzeugt eine Reihe von Links anhand deren die Zuordnung der Treiber zu bestimmter Hardware (PCI-IDs, USB-IDs, HD-Audio-IDs) zu erkennen ist. Die Treiber aus dem preferred Verzeichnis werden von dem Script bevorzugt verwendet.

Das setup.py Script des Bootimages untersucht die Hardware des zu installierenden Computers und identifiziert die notwendigen Treiber. Diese werden dann auf die Festplatte kopiert und die unattend.xml entsprechend gepatcht.

Liegt zu einem Client eine Hardware-Inventarisierung vor, so kann über den Befehl:

./show_drivers.py <clientname>

ausgegeben werden, 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 bereit steht.

Kontrollieren Sie die Ausgabe von show_drivers.py um zu prüfen ob die gewünschten Treiber eingebunden werden.

Es kann vorkommen, das Treiberverzeichnisse von Herstellern Treiber für unterschiedliche Betriebssystemversionen ( z.B. Windows 7/8.1/10) oder Konfigurationen (SATA / SATA-Raid) enthalten. Das kann nicht automatisch unterschieden werden. Wenn Sie die Vermutung haben, das ein erkannter Treiber falsch ist, so verschieben Sie diesen Treiber in das Verzeichnis drivers/exclude und führen create_driver_links.py bzw. show_drivers.py <clientname> erneut aus. Treiber die in drivers/exclude liegen werden bei der Treiberintegration nicht berücksichtigt.

Beispiel einer show_drivers.py Ausgabe für einen Client:

./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
TIPPS
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, 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.60: Windows Server 2016 and Windows 10, 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, version 1809
NDIS 6.83: Windows 10, version 1903
  • Manche Chipsatztreiber enthalten Beschreibungsdateien, welche sehr viel Hardware aufführen ohne hierzu tatsächlich Treiber zu liefern. Ein Beispiel hierfür ist z.B. die cougar.inf oder ibexahci.inf von Intel. Wird ein solches 'Pseudo-Treiber' Verzeichnis per 'additional_drivers' (bzw. 'byAudit') zu geordnet, so führt dies dazu, das die hier aufgeführte Hardware von der weiteren Suche nach Treibern im 'preferred' Verzeichnis ausgeschlossen wird.

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

  • Kontrollieren Sie die Ausgabe von ./show_drivers.py genau !