opsi Windows client manual

uib gmbh

Versionsgeschichte
Version 4.226.05.2021UG

Inhaltsverzeichnis

1. Copyright
2. Einführung Windows Clients in opsi
3. Konventionen dieses Dokuments
4. Voraussetzungen für Windows Clients
5. Von opsi unterstützte Windows Versionen
6. Einspielen der minimalen Windows opsi-Produkte
6.1. Automatisches Einspielen der minimalen Windows opsi-Produkte
6.2. Manuelles Einspielen der Windows opsi-Produkte
7. Clients zu opsi hinzufügen
7.1. Anlegen eines neuen opsi-Clients
7.1.1. Anlegen eines neuen opsi-Clients über die grafische Management-Oberfläche
7.1.2. Anlegen eines neuen opsi-Clients über die Kommandozeile
7.1.3. Anlegen eines neuen opsi-Clients mit Hilfe der opsi-client-bootcd
7.2. Integration vorhandener Windows-Clients in opsi
7.2.1. Verwendung von service_setup.cmd auf Windows NT6
7.2.2. Verwendung von service_setup.cmd auf Windows NT5
7.2.3. Verwendung von opsi-deploy-client-agent
8. Rollout existierender Produkte
8.1. Verteilung von opsi Standard Produkten: opsi-configed
8.2. Inventarisierung mit dem localboot-Produkten hwaudit und swaudit
9. Management-Oberfläche opsi-configed
9.1. Installation der Management-Oberfläche opsi-configed
9.2. Start der Management-Oberfläche opsi-configed
9.3. Hardware-Inventarisierung mit dem netboot-Produkt hwinvent
10. Installation eines neuen Windows PC über opsi (OS-Installation)
10.1. Betriebssysteminstallation: Vervollständigen der Basispakete für Windows
10.2. NT6 Familie: ab Win7 / 2008R2
10.2.1. Erstellen eines PE
10.2.2. Erweiterung eines PE
10.2.3. unattend.xml
10.2.4. Treiber-Integration
10.2.5. Bereitstellung der Installationsmedien
10.2.6. Log-Dateien der unattended-Installation
10.3. Windows-Produktschlüssel
10.4. Start der Windows-Installation
10.5. Aufbau der Produkte zur unattended Installation
10.5.1. Übersicht des Verzeichnisbaums
10.5.2. Die Dateien
10.5.3. Verzeichnis installfiles / winpe
10.5.4. Verzeichnisse opsi / custom
10.5.5. Verzeichnis drivers
10.6. Vereinfachte Treiberintegration in die automatische Windowsinstallation
10.6.1. Allgemeine Treiber Pakete
10.6.2. Treiber die zu Ihrer Hardware gehören aber nicht speziell zu geordnet sind
10.6.3. Treiber die manuell Rechnern zu geordnet sind
10.6.4. Treiber die über die Felder <vendor>/<model> der Inventarisierung automatisch den Rechnern zu geordnet werden.
10.6.5. Struktur des Treiber Verzeichnisses und Ablage der Treiber
10.6.6. Abarbeitung der unterschiedlichen Ebenen der Treiberintegration
10.6.7. Treiber hinzufügen und prüfen
11. Einbindung eigener Software in die Softwareverteilung von opsi
11.1. Ein kleines Tutorial zur Erstellung eines opsi-script Scriptes
11.1.1. Einführung
11.1.2. Methoden der nicht interaktiven Softwareinstallation bei Windows
11.1.3. Struktur eines opsi-script Skripts
11.1.4. Primäre Sektionen
11.1.5. Wichtige sekundäre Sektionen
11.1.6. Globale Konstanten
11.1.7. Zweites Beispiel: tightvnc
11.1.8. Elementare Befehle für primäre Sektionen
11.1.9. Drittes Beispiel: Windows-Template opsi-template
11.2. Erstellen eines opsi-Produkt-Pakets
11.2.1. Installation des opsi-setup-detector, opsi PackageBuilder und opsi-logviewer
11.2.2. Das Programm opsi-setup-detector zum Erstellen eines Windows Scriptes
11.2.3. Das Programm opsi PackageBuilder zum modifizieren eines Scriptes
11.2.4. Testen und verbessern eines opsi-script Skriptes
11.2.5. Packen mit opsi-makepackage
11.2.6. Installieren mit opsi-package-manager
11.2.7. Beispiel einer control Datei
11.2.8. Erstellen eines opsi-paketes mit dem CLI tool opsi-newprod
12. Allgemeine Hinweise zu Windows
12.1. Die opsi Verzeichnisse auf Windows
13. Weitere Informationen

Abbildungsverzeichnis

7.1. Startbild opsi-client-boot-cd
7.2. bootimage/boot-cd Konfigurationsmakse
7.3. bootimage/boot-cd Auswahl Erstellungsmethode
7.4. bootimage/boot-cd Authentifizierungsmaske
7.5. bootimage/boot-cd netboot Produktauswahl
11.1. Vermeidung doppelten Codes über ausgegliederte Sub
11.2. opsi-setup-detector Notwendige Konfiguration beim ersten Start
11.3. opsi-setup-detector Start
11.4. opsi-setup-detector Start
11.5. opsi-setup-detector Analyse
11.6. opsi-setup-detector Ergebnis der Analyse
11.7. opsi-setup-detector Produktkonfiguration 1
11.8. opsi-setup-detector Produktkonfiguration 2
11.9. opsi-setup-detector Dependency Editor
11.10. opsi-setup-detector Property Editor
11.11. opsi-setup-detector Produktkonfiguration 3 (Icon)
11.12. opsi-setup-detector Produkt erzeugen
11.13. opsi PackageBuilder Erster Start: Offline Modus
11.14. opsi PackageBuilder Einstellungen: Allgemein
11.15. opsi PackageBuilder Einstellungen: Programm
11.16. opsi PackageBuilder Einstellungen: Verwaltung
11.17. opsi PackageBuilder Start
11.18. opsi PackageBuilder Reiter Packet
11.19. opsi PackageBuilder Button Edit
11.20. opsi PackageBuilder Scripteditor unter Windows
11.21. opsi PackageBuilder Reiter Produktvariablen (Properties)
11.22. opsi PackageBuilder Reiter Abhängigkeiten
11.23. opsi PackageBuilder Button: Packen
11.24. opsi PackageBuilder Button: Installieren
11.25. opsi PackageBuilder Button: Installieren + Setup
11.26. opsi-script-gui im interaktiven Modus
11.27. jEdit mit einem opsi script
11.28. Auswahl des Produkttyps: localboot
11.29. Eingabe der Produktinformationen
11.30. Eingabe der opsi-winst-Skript Namen für unterschiedliche Aktionen
11.31. Eine (weitere) Produktabhängigkeit definieren: Ja / Nein
11.32. Eingabe der Daten zur Erstellung einer Produktabhängigkeit
11.33. Eine (weitere) Produkteigenschaft definieren
11.34. Datentyp der Produkteigenschaft wählen
11.35. Beschreibung der Produkteigenschaft
11.36. Festlegung des Defaultwerts der Produkteigenschaft
11.37. Beschreibung eines boolschen Properties
11.38. Eingabe der Maintainer Daten

Kapitel 1. Copyright

Das Copyright an diesem Handbuch liegt bei der uib gmbh in Mainz.

Dieses Handbuch ist veröffentlicht unter der creative commons Lizenz
Namensnennung - Weitergabe unter gleichen Bedingungen (by-sa).

CC by sa

Eine Beschreibung der Lizenz finden Sie hier:
https://creativecommons.org/licenses/by-sa/3.0/de/

Der rechtsverbindliche Text der Lizenz ist hier:
https://creativecommons.org/licenses/by-sa/3.0/de/legalcode

Die Software von opsi ist in weiten Teilen Open Source.
Nicht Open Source sind die Teile des Quellcodes, welche neue Erweiterungen enthalten die noch unter Kofinanzierung stehen, also noch nicht bezahlt sind.
siehe auch: opsi-Erweiterungen als Kofinanzierungsprojekte

Der restliche Quellcode ist veröffentlicht unter der AGPLv3:

agplv3

Der rechtsverbindliche Text der AGPLv3 Lizenz ist hier:
http://www.gnu.org/licenses/agpl-3.0-standalone.html

Deutsche Infos zur AGPL: http://www.gnu.org/licenses/agpl-3.0.de.html

Für Lizenzen zur Nutzung von opsi im Zusammenhang mit Closed Source Software kontaktieren Sie bitte die uib gmbh.

Die Namen opsi, opsi.org, open pc server integration und das opsi-logo sind eingetragene Marken der uib gmbh.

Kapitel 2. Einführung Windows Clients in opsi

Diese Anleitung beschreibt den Betrieb von Windows Clients in opsi.

Es wird voraus gesetzt, das die Installation und Inbetriebnahme eines opsi-servers bereits erfolgt ist.

Wesentliche Themen dieser Anleitung:

  1. Automatische Windows OS-Installation
  2. Aufnahme und Einbindung von Windows-Rechnern in opsi (Installation des opsi-client-agent)
  3. Bereitstellung von opsi Standardsoftware für Windows auf dem opsi-server
  4. Installation von Standard Software auf den Windows-Clients
  5. opsi-Standardsoftware für Windows unter opsi
  6. Paketierung eigener Software
  7. Erstellung von opsi-Paketen
  8. Hinweise zu Windows Clients

    1. Spezielle Befehle für Windows
    2. Directories die Sie verwenden dürfen

Kapitel 3. Konventionen dieses Dokuments

Befehle werden gesondert hervorgehoben:

dies ist ein Befehl

Im Rahmen der Installation und Konfiguration können Sie die Befehle aus diesen Feldern in der Regel der Reihe nach per copy & paste aus diesem Dokument kopieren und ausführen.

Das ist ein opsi-script Code:

Message "Installing "+ $ProductId$ +" ..."

Kapitel welche den Namen einer bestimmten Plattform enthalten sind spezifisch für diese Plattform. Die unterstützen Plattformen sind:

  • Windows
  • Linux
  • MacOS

Kapitel 4. Voraussetzungen für Windows Clients

Nachfolgend werden die Voraussetzungen für das Management von Windows Clients unter opsi beschrieben.

Technische Voraussetzungen ist ein opsi-server mit opsi 4.1.

Kapitel 5. Von opsi unterstützte Windows Versionen

Windows Version

Opsi 4.2

Opsi 4.1

Windows 10

supported.png

supported.png

Windows 2016

supported.png

supported.png

Windows 2012 R2

supported.png

supported.png

Windows 8.1

supported.png

supported.png

Windows 2012

supported.png

supported.png

Windows 8

discontinued.png

discontinued.png

Windows 2008 R2

supported.png

supported.png

Windows 7

supported.png

supported.png

Windows 2008

discontinued.png

discontinued.png

Windows Vista

discontinued.png

discontinued.png

Windows 2003

discontinued.png

discontinued.png

Windows XP

discontinued.png

discontinued.png

Windows 2000

discontinued.png

discontinued.png

supported.png: Supported unsupported.png: Unsupported develop.png: Under development discontinued.png: Discontinued

Kapitel 6. Einspielen der minimalen Windows opsi-Produkte

Zur Verteilung von Software mit opsi stehen fertige Produkte zur Installation bereit. Diese beinhalten unter anderem den Agent (opsi-client-agent), welcher für das Management auf Clients installiert werden muss.

Es gibt eine automatische und manuelle Möglichkeit dies zu tun. Der automatisierte Weg wird empfohlen.

6.1. Automatisches Einspielen der minimalen Windows opsi-Produkte

Zur automatischen Installation der opsi-Produkte gibt es das Werkzeug opsi-package-updater, welches wie in /etc/opsi/opsi-package-updater.conf bzw. /etc/opsi/package-updater.repos.d/ konfiguriert, automatisch die aktuellen Pakete vom opsi Repository holt und auf dem Server installiert.

Die Konfiguration der opsi Repositories für Windows-Clients findet sich im Verzeichnis /etc/opsi/package-updater.repos.d/ in der Datei uib-windows.repo.

Aktivieren Sie die gewünschten repos in dem Sie in der gewünschten *.repo Datei den Eintrag active = true setzen.

/etc/opsi/package-updater.repos.d/uib-windows.repo

; This repository provides products for deploying and managing Microsoft
; Windows clients with opsi.

[repository_uib_windows]
description = opsi Windows Support
active = true
baseUrl = http://download.uib.de
; dirs = opsi4.2/stable/packages/windows/localboot/, opsi4.2/stable/packages/windows/netboot/
; dirs = opsi4.1/stable/packages/windows/localboot/, opsi4.1/stable/packages/windows/netboot/
dirs = opsi4.2/testing/packages/windows/localboot/, opsi4.2/testing/packages/windows/netboot/
autoInstall = false
autoUpdate = true
autoSetup = false
; Set Proxy handler like: http://10.10.10.1:8080
proxy =

Installieren Sie die Pakete auf dem Server durch die Ausführung des Befehls als root:

opsi-package-updater -v --repo uib_linux install

Nach erfolgreicher Installation müssen Sie beim opsi-configed ein erneutes laden aller Daten ausführen, damit die neuen Produkte dort sichtbar werden.

Muss für den Zugriff auf das Internet die Verbindung über einen Proxy geleitet werden, so muss dieser in den .repo-Konfigurationsdateien unter /etc/opsi/package-updater.repos.d/ als Wert für proxy eingetragen werden. Ab Version 4.1.1.33 von opsi-utils kann ein globaler Proxy in /etc/opsi/opsi-package-updater.conf konfiguriert werden.

[repository_uib_windows]
…
proxy =

Sollen später installierte Pakete aktualisiert werden, so kann dies mit dem folgenden Befehl gelinuxht werden:

opsi-package-updater -v update

Weitere Informationen zum opsi-package-updater können im Handbuch gefunden werden.

Anmerkung

Bitte beachten Sie, dass OS-Installationsprodukte wie z.B. win10-x64, nach der Installation nicht sofort einsatzbereit sind. Die Installation muss noch durch die Installationsdateien des entsprechenden Installationsmediums ergänzt werden (siehe: Abschnitt 10.1, „Betriebssysteminstallation: Vervollständigen der Basispakete für Windows“).

6.2. Manuelles Einspielen der Windows opsi-Produkte

Es gibt auch die Möglichkeit manuell die Pakete herunter zu laden und zu installieren.

Holen Sie sich die aktuellen opsi-Pakete im .opsi-Paketformat. Die Pakete finden Sie unter https://download.uib.de/opsi4.2/stable/packages/windows/localboot
https://download.uib.de/opsi4.2/stable/packages/windows/netboot bzw. unter https://download.uib.de/opsi4.2/testing/packages/windows/localboot
https://download.uib.de/opsi4.2/testing/packages/windows/netboot.

Wir empfehlen die .opsi-Dateien unter /var/lib/opsi/repository zu speichern. Zum Sicherstellen, dass der Prozess opsiconfd auf die Dateien zugreifen kann, sollte opsi-set-rights /var/lib/opsi/repository ausgeführt werden.

Nach dem Download müssen Sie die Pakete auf dem Server mit dem Befehl opsi-package-manager -i <paketname>.opsi installieren.

Kapitel 7. Clients zu opsi hinzufügen

Damit Rechner mit opsi verwaltet werden können, müssen Sie dem System bekannt sein. Außerdem muss auf diesen Rechnern ein Agent laufen, damit eine Kommunikation zwischen Server und Client möglich ist. Ohne diesen Agent ist keine Verwaltung möglich.

Je nachdem in welcher Umgebung opsi eingesetzt werden soll, gibt es unterschiedliche Vorgehensweisen. Existieren in der Umgebung bereits Clients mit installiertem Betriebssystem, die ab sofort mit opsi verwaltet werden sollen, so können diese auf unterschiedlichen Wegen integriert werden.

Die Alternative hierzu ist, dass die zu verwalteten Rechner von opsi aus mit einem neuen Betriebssystem ausgestattet werden. Im Rahmen dieser Betriebssysteminstallation wird von opsi der benötigte Agent gleich mitinstalliert, allerdings wird dabei alle eventuell vorher vorhandene Software (inkl. Betriebssystem) entfernt. Bei diesem Vorgehen fügen Sie zuerst einen Client zu opsi hinzu und führen anschließend eine see also: Betriebssysteminstallation durch.

7.1. Anlegen eines neuen opsi-Clients

Zur Verwaltung von Rechnern müssen diese dem opsi-server bekannt sein. Dieses Kapitel beschreibt unterschiedliche Möglichkeiten einen Client in opsi für eine spätere Verwaltung anzulegen. Dies ist besonders dann hilfreich, wenn anschließend auf dem Rechner mittels opsi ein Betriebssystem installiert werden soll.

Für die Aufnahme von Clients mit bereits installiertem Betriebssystem lesen Sie bitte das Kapitel zur Integration vorhandener Clients.

7.1.1. Anlegen eines neuen opsi-Clients über die grafische Management-Oberfläche

Den Client können Sie mit der grafischen Oberfläche opsi-configed zum opsi-server hinzufügen.

Wählen Sie den Menü-Punkt OpsiClient / Neuen opsi-Client erstellen und geben Sie ein:

  • Client-Name
  • DNS Domäne (falls abweichend von der Vorgabe)
  • Beschreibung
  • IP-Adresse (wird benötigt, falls kein DNS zur Namensauflösung für diesen Client verwendet werden kann)
  • MAC-Adresse (wird benötigt, falls der opsi-server DHCP-Server ist oder PXE boot mit dem Client durchgeführt werden soll).

Nach Eingabeabschluss wird der Client dem opsi-server bekanntgemacht und gleichzeitig, falls der opsi-server DHCP Server ist, in der DHCP-Konfiguration als PXE-Client angelegt.

Die Liste der eingerichteten opsi-Clients kann jederzeit im opsi-configed Modus „Client-Konfiguration“ unter dem Reiter Client-Auswahl eingesehen werden.

7.1.2. Anlegen eines neuen opsi-Clients über die Kommandozeile

Ein Client kann auf der Kommandozeile per opsi-admin erzeugt werden.

Die Syntax ist die folgende:

opsi-admin -d method host_createOpsiClient <client-id> [opsiHostKey] [description] [notes] [hardwareAddress] [ipAddress] [inventoryNumber] [oneTimePassword] [created] [lastSeen]

Fehlende Werte verwenden in der Regel einen Standardwert - die meisten Felder sind dann leer.

Der folgende Befehl wird den Client testclient.domain.local mit einem zufälligen Host Schlüssel, der Beschreibung Testclient, keinen Notizen, der MAC-Addresse 00:0c:29:12:34:56 und der IP-Adresse 192.0.2.1 anlegen:

opsi-admin -d method host_createOpsiClient testclient.domain.local "null" "Testclient" "" 00:0c:29:12:34:56 192.0.2.1

7.1.3. Anlegen eines neuen opsi-Clients mit Hilfe der opsi-client-bootcd

Auf der Downloadseite von uib finden Sie unter https://download.uib.de/opsi4.1/boot-cd/ verschiedene ISO-Abbilder der opsi-client-boot-cd. Laden Sie sich das Neueste herunter und brennen es auf eine CD.

Starten Sie den Rechner von der CD. Sie sollten dann folgendes Bild sehen:

Abbildung 7.1. Startbild opsi-client-boot-cd

Screenshot: Startbild opsi-client-boot-cd

Wählen Sie Opsi starten. Nach einer Weile wird folgender Bildschirm erscheinen. Wenn Ihr DHCP-Server IP-Adressen an unbekannte Rechner vergibt ist die Maske schon weitgehend ausgefüllt. Ansonsten müssen Sie es von Hand tun. In der Regel müssen Sie mindestens den Hostnamen vergeben.

Abbildung 7.2. bootimage/boot-cd Konfigurationsmakse

Screenshot: bootimage/boot-cd Konfigurationsmaske

Wählen Sie dann ok.

Abbildung 7.3. bootimage/boot-cd Auswahl Erstellungsmethode

Screenshot: bootimage/boot-cd Auswahl Erstellungsmethode

Wählen Sie dann Admin account. Sie erklären damit, dass der Client sich selbst beim opsi-server anmelden und erstellen soll. Dieser Vorgang muss natürlich autorisiert werden.

Abbildung 7.4. bootimage/boot-cd Authentifizierungsmaske

Screenshot: bootimage/boot-cd Authentifizierungsmaske

Sie erhalten daher eine Loginmaske, bei der Sie sich als ein Mitglied der Gruppe opsiadmin authentifizieren müssen. Wenn dies Erfolgreich war, so teilt der Client dem Server seine Daten mit und der Client wird auf der Serverseite automatisch erstellt. Als nächstes fragt der Client die Liste der verfügbaren netboot Produkte ab und stellt Sie Ihnen zur Auswahl zur Verfügung.

Abbildung 7.5. bootimage/boot-cd netboot Produktauswahl

Screenshot: bootimage/boot-cd netboot Produktauswahl

Sie können jetzt direkt das zu installierende Betriebssystem (oder z.B. hwinvent) auswählen.

7.2. Integration vorhandener Windows-Clients in opsi

Um vorhandene Windows-Clients in opsi aufzunehmen, muss auf diesen der opsi-client-agent installiert werden. Dies kann auf mehrere Arten durchgeführt werden. Nachdem Sie, wie im Folgenden beschrieben, den opsi-client-agent installiert haben, erscheint der Client auch in der Client-Liste des opsi-configed, sofern Sie ihn dort noch nicht hinzugefügt hatten.

Grundsätzlich gibt es die Möglichkeit die Installation des Agents auf dem Client auszuführen oder vom Server aus die Installation anzustoßen.

Das Ausführen der Installation direkt auf dem Client eignet sich für einzelne Rechner. Für einen Massen-Rollout des Agents eignet sich opsi-deploy-client-agent. Falls bereits eine andere Möglichkeit existiert Software zu verteilen, so ist es ebenfalls möglich darüber den opsi-client-agent zu verteilen und das im Paket mitgelieferte Script silent_setup.cmd auszuführen.

Sobald der Agent installiert ist, können vorhandene opsi-Produkte auf diesen Clients installiert werden.

7.2.1. Verwendung von service_setup.cmd auf Windows NT6

  1. Loggen Sie sich mit administrativen Rechten auf dem Client ein.
  2. Mounten Sie den share \\<opsiserver>\opsi_depot auf einen Laufwerksbuchstaben.
  3. Starten Sie das Script opsi-client-agent\service_setup.cmd
    Starten Sie da Script nicht elevated (also rechte Maustaste: als Administrator) sonst kann das Script evtl. nicht gestartet werden, da eine elevated Prozess kein Zugriff auf ein Netzlaufwerk hat.
  4. Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script (winst32.exe) elevated. Daher bekommen Sie an dieser Stelle evtl. eine UAC Anfrage.
  5. Das Skript nimmt per opsi-Webservice Kontakt zum Server auf um serverseitig den Client zu erzeugen und den pckey zu erfahren. Dies erfolgt zunächst mit der in der config.ini eingetragenen user/password Kombination. Schlägt dies fehl, so erscheint ein Login-Fenster mit Service-URL (opsi-configserver), Benutzername und Passwort. Hier wird ein Benutzer benötigt, der Mitglied der Gruppe opsiadmin ist. Möglich ist auch ein Benutzer, welcher nur die Methode host_createOpsiClient ausführen darf.

Achtung

Der Client rebootet nach der Installation.

7.2.2. Verwendung von service_setup.cmd auf Windows NT5

  1. Loggen Sie sich mit administrativen Rechten auf dem Client ein.
  2. Mounten Sie den share \\<opsiserver>\opsi_depot auf einen Laufwerksbuchstaben.
  3. Starten Sie das Script opsi-client-agent\service_setup_NT5.cmd
  4. Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script (winst32.exe).
  5. Das Skript nimmt per opsi-Webservice Kontakt zum Server auf um serverseitig den Client zu erzeugen und den pckey zu erfahren. Dies erfolgt zunächst mit der in der config.ini eingetragenen user/password Kombination. Schlägt dies fehl, so erscheint ein Login-Fenster mit Service-URL (opsi-configserver), Benutzername und Passwort. Hier wird ein Benutzer benötigt, der Mitglied der Gruppe opsiadmin ist.

Achtung

Der Client rebootet nach der Installation.

7.2.3. Verwendung von opsi-deploy-client-agent

Das opsi-deploy-client-agent Skript verteilt den opsi-client-agent direkt vom opsi-server auf die Clients. Es ist hiermit einfach möglich eine große Menge an Clients vom Server aus in eine opsi-Umgebung zu integrieren.

Voraussetzung hierfür sind bei den Clients:

  • ein offener c$ share
  • ein offener admin$ share
  • ein administrativer account
  • keine oder eine nicht interferierende Antivirus-Lösung bei Benutzung der winexe

Auf dem Server muss das Programm winexe vorhanden sein. Diese ist Teil des Pakets opsi-windows-support.

Das opsi-deploy-client-agent Skript findet sich unter /var/lib/opsi/depot/opsi-client-agent
Führen Sie das Script mit root Rechten aus. Falls das Script nicht ausführbar ist, so können Sie dieses Problem mit dem folgenden Befehl beheben:
opsi-set-rights /var/lib/opsi/depot/opsi-client-agent/opsi-deploy-client-agent

Das Skript erzeugt serverseitig den Client, kopiert die Installations-Dateien und Konfigurationsinformationen, wie bspw. den pckey, auf den Client und startet dort die Installation.

Das Kopieren der Installationsdateien kann auf zwei Wegen geschehen. Die erste Variante wird mittels mount C$ auf dem Server verfügbar machen und dort die Daten zur Installation hin kopieren. Die zweite Variante wird den c$-Share des Clients mittels smbclient auf dem Server einhängen und dann die Installationsdateien dorthin kopieren.

Mit dem opsi-deploy-client-agent Skript kann auch eine ganze Liste von Clients bearbeitet werden. Dazu können entweder beliebig viele Clients als letzter Parameter übergeben werden oder mit der Option -f die Clients aus einer Datei eingelesen werden. Bei der Verwendung einer Datei, muss in jeder Zeile ein Client stehen.

Das Script kann mit IP-Adressen, Hostnamen und FQDNs arbeiten. Es wird versuchen automatisch zu erkennen welche Art von Adresse übergeben wurde.

Mögliche Parameter können Sie mit dem Parameter --help in Erfahrung bringen:

bonifax:/home/uib/oertel# cd /var/lib/opsi/depot/opsi-client-agent
bonifax:/var/lib/opsi/depot/opsi-client-agent# ./opsi-deploy-client-agent --help
usage: opsi-deploy-client-agent [-h] [--version] [--verbose]
                                [--debug-file DEBUGFILE] [--username USERNAME]
                                [--password PASSWORD]
                                [--use-fqdn | --use-hostname | --use-ip-address]
                                [--ignore-failed-ping]
                                [--reboot | --shutdown | --start-opsiclientd]
                                [--hosts-from-file HOSTFILE]
                                [--skip-existing-clients]
                                [--threads MAXTHREADS] [--smbclient | --mount]
                                [--keep-client-on-failure | --remove-client-on-failure]
                                [host [host ...]]

Deploy opsi client agent to the specified clients. The c$ and admin$ must be
accessible on every client. Simple File Sharing (Folder Options) should be
disabled on the Windows machine.

positional arguments:
  host                  The hosts to deploy the opsi-client-agent to.

optional arguments:
  -h, --help            show this help message and exit
  --version, -V         show program's version number and exit
  --verbose, -v         increase verbosity (can be used multiple times)
  --debug-file DEBUGFILE
                        Write debug output to given file.
  --username USERNAME, -u USERNAME
                        username for authentication (default: Administrator).
                        Example for a domain account: -u
                        "<DOMAIN>\\<username>"
  --password PASSWORD, -p PASSWORD
                        password for authentication
  --use-fqdn, -c        Use FQDN to connect to client.
  --use-hostname        Use hostname to connect to client.
  --use-ip-address      Use IP address to connect to client.
  --ignore-failed-ping, -x
                        try installation even if ping fails
  --reboot, -r          reboot computer after installation
  --shutdown, -s        shutdown computer after installation
  --start-opsiclientd, -o
                        start opsiclientd service after installation
  --hosts-from-file HOSTFILE, -f HOSTFILE
                        File containing addresses of hosts (one per line).If
                        there is a space followed by text after the address
                        this will be used as client description for new
                        clients.
  --skip-existing-clients, -S
                        skip known opsi clients
  --threads MAXTHREADS, -t MAXTHREADS
                        number of concurrent deployment threads
  --smbclient           Mount the client's C$-share via smbclient.
  --mount               Mount the client's C$-share via normal mount on the
                        server for copying the files. This imitates the
                        behaviour of the 'old' script.
  --keep-client-on-failure
                        If the client was created in opsi through this script
                        it will not be removed in case of failure. (DEFAULT)
  --remove-client-on-failure
                        If the client was created in opsi through this script
                        it will be removed in case of failure.

Kapitel 8. Rollout existierender Produkte

Für den Rollout von Software auf Clients muss auf diesen der opsi-client-agent installiert sein. Dieser kann auf bestehende Rechner ausgerollt werden. Bei einer Betriebssysteminstallation über opsi wird der opsi-client-agent automatisch installiert.

Nachfolgend wird die Management-Oberfläche opsi-configed verwendet, um Software auf Clients zu verteilen.

Folgende Produkte werden von opsi für Windows als Standard zur Verfügung gestellt:

  • opsi-linux-client-agent
  • swaudit
  • hwaudit
  • l-system-update
  • opsi-configed
  • opsi-logviewer
  • opsi-auto-update
  • opsi-linux-client-kiosk
  • opsi-setup-detector
  • ``

8.1. Verteilung von opsi Standard Produkten: opsi-configed

Zu den Standard-Produkten gehört das Produkt opsi-configed welches das opsi Management Interface als Anwendung auf einem Rechner installiert. Da diese Anwendung eine Java-Anwendung ist, wird ein JavaRE mitgeliefert.

Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Clients den betreffenden Client aus.

Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configeds mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons.

Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt opsi-configed, daraufhin öffnet sich eine Liste/Dropdown-Menü und dort wählen Sie die Aktion setup.

Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-server übermittelt, im Anschluss ist seine Farbe wieder grün.

Starten Sie dann den Client (neu). Er sollte jetzt den opsi-client-agent starten und das Produkt opsi-configed installieren. Nach Abschluß der Installation sollten Sie im Startmenü den Punkt opsi-configed finden.

8.2. Inventarisierung mit dem localboot-Produkten hwaudit und swaudit

Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Clients den betreffenden Client aus.

Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configeds mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons.

Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt hwaudit, daraufhin öffnet sich eine Liste/Dropdown-Menü und dort wählen Sie die Aktion setup. Wiederholen Sie das für das Produkt swaudit.

Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-server übermittelt, im Anschluss ist seine Farbe wieder grün.

Starten Sie dann den Client (neu). Er sollte jetzt den opsi-client-agent starten und die Produkte hwaudit und swaudit installieren. Bei hwaudit und swaudit werden Hard- bzw. Softwareinformationen erhoben und zum opsi-server übermittelt. Die gesammelten Informationen werden unter den Tabs Hardwareinformationen bzw. Software-Inventur angezeigt.

Kapitel 9. Management-Oberfläche opsi-configed

Opsi bietet mit dem opsi-configed ein komfortables Management Interface. Es kommuniziert über HTTPS mit dem opsi-Server und kann daher auf jedem Rechner verwendet werden, der eine entsprechende Verbindung aufbauen kann.

Tipp

Achten Sie bei Verwendung einer virtuellen Maschine auf eine ausreichende Auflösung des virtuellen Bildschirms. Für den opsi-configed wird mindestens eine Auflösung von 1024x768 Pixeln benötigt. Für die Verbesserung der Graphik- und Maustreiberintegration bei einer höheren Auflösung, hilft es, die VMware Tools bei einer VMware-Maschine bzw. die Gasterweiterungen bei einer VirtualBox-Maschine zu installieren.

9.1. Installation der Management-Oberfläche opsi-configed

Das Management Interface wird als lokale Anwendung auf den Administrations-PCs installiert. Rufen Sie in Ihrem Browser die Adresse https://<opsidepotserver>:4447/ auf. Dort finden Sie Links zu Installern für unterschiedliche Betriebssysteme.

Alternativ finden Sie entsprechende Installer unter https://download.uib.de/opsi4.1/misc/helper/.

Wichtig

Der Windows-Installer muss mit administrativen Rechten ausgeführt werden. Dazu öffnen Sie mit Rechtsclick das Contextmenü des Installers und wählen dort Als Administrator ausführen.

Ist erstmal ein PC mit dem Management Interface ausgestattet, so können weitere PCs später einfach über das Localboot-Produkt opsi-configed mit dem Interface ausgestattet werden, sofern auf diesen bereits der opsi Agent installiert ist.

9.2. Start der Management-Oberfläche opsi-configed

Starten Sie opsi-configed über die Verknüpfung in Ihrem Startmenü.

Loggen Sie sich als ein User ein, der Mitglied der Gruppe opsiadmin ist.

Die Bedienung des Management-Interfaces ist weitgehend selbsterklärend. Sie finden eine ausführliche Anleitung im opsi-Handbuch.

Anmerkung

Änderungen im opsi-Management Interface müssen gespeichert werden, bevor Sie wirksam werden und Veränderungen der Daten müssen vom Server über Daten neu laden geholt werden.

9.3. Hardware-Inventarisierung mit dem netboot-Produkt hwinvent

Sofern auf Ihrem opsi-Server das Produkt hwinvent bereits installiert ist und Sie einen Client aufgenommen haben, welcher für den Boot über das Netzwerk konfiguriert ist, können Sie etwas weiteres Nützliches tun: Hardware-Inventarisierung ohne installiertes Betriebssystem.

Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Client-Auswahl den betreffenden Client aus. Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configeds mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons. Wechseln Sie zum Reiter Netboot-Produkte, gehen Sie in das Feld Anstehende Aktion des Produkts hwinvent und wählen Sie in der dort angebotenen Liste die Aktion setup. Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-server übermittelt und die Farbe des Hakens wechselt im Anschluss wieder zu grün.

Starten Sie dann den Client (neu). Er sollte jetzt per PXE über das Netz ein Linux-Image ziehen, das die Hardware des PCs scannt und dann den Rechner rebootet. Wenn der Rechner nicht ansonsten schon eingerichtet war, kommt im Anschluss korrekterweise die Meldung, dass auf der Platte kein Betriebssystem installiert ist.

Das Ergebnis des Hardware-Scans hat der PC zum opsi-server übermittelt. Es ist unter dem Reiter "Hardware-Informationen" einzusehen.

Anmerkung

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.

Kapitel 10. 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.

Anmerkung

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

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

10.2. NT6 Familie: ab Win7 / 2008R2

Um diese Betriebssysteme installieren zu können, wird ein sogenanntes WinPE als Live-System genutzt. Sie können es mit Hilfe 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 "Assessment and Deployment Kit" (ADK, Win8.1 bzw 10), bzw dessen Vorgänger "Windows Automated Installation Kit" (Windows AIK; bis Windows 7), 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.

Sie können das ISO brennen oder mounten und dann installieren.

10.2.1. 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 (Win8.1, Win10). Der manuelle Weg wird anschließend unter „Manuelles Erstellen eines PE für Windows 10 & Windows 8 (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)
  • 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 8 (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

Manuelles Erstellen eines PE für Windows 7 (WAIK)

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.

Alles als Administrator aus der Eingabeaufforderung mit erweiterten Rechten ausführen (Start ⇒ Programme ⇒ Zubehör ⇒mit rechter Maustaste auf "Eingabeaufforderung" ⇒ Ausführen als … ⇒ Administrator)

  • WinPE kopieren:
"%ProgramFiles%\Windows AIK\Tools\PETools\copype.cmd" <ARCH> C:\winpe
  • Image mounten/einhängen:
"%ProgramFiles%\Windows AIK\Tools\<ARCH>\imagex.exe" /mountrw "C:\winpe\winpe.wim" 1 "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:
"%ProgramFiles%\Windows AIK\Tools\<ARCH>\imagex.exe" /commit /unmount "C:\winpe\mount"
  • Verschieben des fertigen WinPE (von dort werden mehrere Files auf den Server verschoben).
move "C:\winpe\winpe.wim" "C:\winpe\ISO\sources\boot.wim"
  • Den Inhalt von C:\winpe\media nach /var/lib/opsi/depot/<productid>/winpe kopieren.
    Rechte anpassen (z.B.):
opsi-setup --set-rights /var/lib/opsi/depot/<productid>/winpe

10.2.2. Erweiterung eines PE

Manchmal ist es sehr nützlich, das Windows PE zu erweitern. Besonders bei Dell-Hardware gibt es spezielle Netzwerk- und Storage-Treiber, die speziell für den PE-Einsatz empfohlen werden. Folgende Anleitung beschreibt, wie man ein PE mit Treibern erweitern kann. Diese Anleitung funktioniert nur mit Windows 7. (Windows Vista beinhaltet nicht das benötige dism - Deployment Image Servicing and Management.) Weiterhin setzt diese Anleitung vorraus, dass die Schritte im vorigen Kapitel zum erstellen des PE ausgeführt wurden.

Anmerkung

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

Herunterladen von Dell-PE-Treibersammlung. Bitte beachten, dass für Windows 7 die WINPE 3.0 Treiber benötigt werden. 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 (Start ⇒ Programme ⇒ Zubehör ⇒mit rechter Maustaste auf "Eingabeaufforderung" ⇒ Ausführen als … ⇒ Administrator) 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.

Anmerkung

Wenn man nur einen Treiber integrieren möchte, kann man die Option /Recurse weglassen und statt ein Verzeichniss 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/win7/ bzw. /var/lib/opsi/depot/win2008 kopieren.
    Rechte anpassen (z.B.):
opsi-set-rights /var/lib/opsi/depot/win7/winpe

10.2.3. unattend.xml

Die Steuerdatei für die unattended Installation ist die unattend.xml, welche unter /var/lib/opsi/depot/win7/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.

Dokumente zur Unattend.xml finden sich nach Installation des WAIK in c:\Program Files\Windows\Waik\docs\chms

10.2.4. Treiber-Integration

Die Treiber-Integration verläuft wie hier: Abschnitt 10.6, „Vereinfachte Treiberintegration in die automatische Windowsinstallation“ beschrieben.

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

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

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

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

Anmerkung

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.

Achtung

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.

10.5. Aufbau der Produkte zur unattended Installation

Diese Kapitel betrifft die Windows-Netboot-Produkte.

10.5.1. Ü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

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

10.5.3. Verzeichnis installfiles / winpe

  • installfiles
    Enthält den Inhalt der Installations-CD.
  • winpe
    Enthält ein bootbares winpe Image.

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

10.5.5. Verzeichnis drivers

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

10.6. 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:

10.6.1. 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.
Solche allg. Treiber Pakete finden Sie http://driverpacks.net/ .
Laden Sie die gewünschten Treiber Pakete in ein temporäres Verzeichnis herunter und entpacken die Treiberpakete mit:

./extract_driver_pack.py <pfad zu dem temporären Verzeichnis mit den komprimierten driverpacks>

Hiermit werden die Treiber entpackt und in das Verzeichnis ./drivers/drivers/ abgelegt.
Nachteil dieser Pakete ist, das sich hier auch Treiber finden welche zwar von der Beschreibung zu Ihrer Hardware passen aber nicht unbedingt mit Ihrer Hardware funktionieren.
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.

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

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

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

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

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

10.6.7. 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 !

Kapitel 11. Einbindung eigener Software in die Softwareverteilung von opsi

Die Installation von Software erfolgt bei opsi durch den opsi-client-agent und insbesondere durch das Script gesteuerte Setup Programm opsi-script. Daher muss zu jedem opsi-Produkt ein opsi-script-Script erstellt werden. Danach werden dieses Script, die Installationsdateien und die Metadaten zu einem opsi-Produkt gepackt, welches sich schließlich auf dem opsi-server installieren lässt.

11.1. Ein kleines Tutorial zur Erstellung eines opsi-script Scriptes

11.1.1. Einführung

Dieses Tutorial kann keine Schulung oder das Studium der Handbücher ersetzen. Es dient nur dazu eine Einführung zu bekommen. Daher als erstes der Verweis auf weiterführende Quellen:

Schulungen: Die uib GmbH bietet opsi-Schulungen in Mainz und Inhouse Schulungen an:
https://uib.de/de/support-schulung/schulung/

Handbücher: https://uib.de/de/opsi-dokumentation/dokumentationen/
Besonders wichtig:
opsi-winst-Reference-Card und opsi-script-Handbuch

Wiki (Scripte, Tipps, Links): https://forum.opsi.org/wiki

Support Forum: siehe https://forum.opsi.org

11.1.2. Methoden der nicht interaktiven Softwareinstallation bei Windows

Prinzipiell gibt es drei Verfahren der Einbindung eines Softwarepakets in die automatische Softwareverteilung für Windows-Betriebssysteme, zuzüglich einer Variante, die sich auf die Pakete für den Microsoft Installer Service bezieht.

  1. Unattended / Silent Setup:
    Das Original-Setupprogramm wird verwendet und über Kommandozeilenargumente in einen nicht-interaktiven Modus versetzt. Der wichtigste Spezialfall davon ist der
    „stille“ Aufruf eines MSI-Pakets:
    Ein Paket für den Microsoft Installer Service ist vorhanden und wird mit einer „quiet“-Option aufgerufen.
  2. Interaktives Setup mit automatisierten Antworten:
    Zur Vorbereitung wird bei einem Lauf des Original-Setupprogramms festgestellt, welche Fenstertitel das Programm zeigt und welche Fragen und Antworten beim Setup anfallen. Dies wird in einem Skript niedergeschrieben. Im Prozess der Softwareverteilung läuft das Setupprogramm dann unter Kontrolle eines Automatisierungs-Programms wie z.B. AutoIt oder Autohotkey, welches das Setupprogramm gemäß dem Skript steuert.
  3. Nachbilden der Setup-Routine mit dem OPSI-Winst:
    Bei einem Lauf des originalen Setupprogramms werden etwaige System-Änderungen mitprotokolliert, z.B. mit procmon und mit Hilfe des opsi-winst nachgefahren.

Anmerkung

Opsi unterstützt alle drei Varianten. In der Praxis werden sie häufig ergänzend verwendet.

11.1.3. Struktur eines opsi-script Skripts

Zunächst ein Beispiel für ein einfaches opsi-winst-Skript:

[Actions]
WinBatch_tightvnc_silent_install

[WinBatch_tightvnc_silent_install]
"%ScriptPath%\tightvnc-1.3.9-setup.exe" /silent

Ein opsi-winst-Skript besteht aus primären und sekundären Sektionen. Sektionen werden, wie von ini-Dateien bekannt, mit einem Sektions-Namen in eckigen Klammern eingeleitet.
Die eigentlichen Arbeiten zur Software-Installation finden in den sekundären Sektionen statt, die von den primären Sektionen aufgerufen werden.

Die sekundären Sektionen sind „Themen-spezifisch“ und verfügen jeweils über eine spezielle Syntax.
Der Sektionsname einer sekundären Sektion beginnt mit deren Typ, gefolgt von einem frei definierbaren Namen.

Im Beispiel ruft die primären Sektion [Actions] eine sekundäre Sektion [WinBatch_7z_silent_install] auf.
Die sekundäre Sektion ist vom Typ WinBatch. Der Inhalt einer WinBatch-Sektion wird über die Windows-API ausgeführt.
In diesem Fall wird also das Setup-Programm 7z.exe mit dem Parameter /S gestartet.

11.1.4. Primäre Sektionen

Actions/Aktionen
Die [Actions] Sektion ist das eigentliche Hauptprogramm. Hier beginnt die Skript-Verarbeitung.
Sub-Sektionen
Programmabschnitte, die wiederholt benötigt werden, können in Sub-Sektionen (Unterprogramme) ausgelagert werden. Es besteht die Möglichkeit Sub-Sektionen in externe Dateien auszulagern.

Die primären Sektionen sind das Hauptprogramm in dem der Ablauf des Skripts gesteuert wird. Hierzu gibt es:

  • Variablen: Strings und Stringlisten
  • if else endif Anweisungen
  • for Schleifen über Stringlisten
  • Funktionen

Abbildung 11.1. Vermeidung doppelten Codes über ausgegliederte Sub

Abbildung: Vermeidung doppelten Codes über ausgegliederte Sub

11.1.5. Wichtige sekundäre Sektionen

Files

Datei-Operationen, wie:

  • kopieren (mit Versionskontrolle, rekursiv …)
  • löschen
  • Verzeichnisse anlegen
WinBatch
Dient zum Aufrufen von Programmen über die Windows-API. Beispielsweise werden Aufrufe von Setup-Programmen im silent mode in diesen Sektionen durchgeführt.
ShellInAnIcon
Der Inhalt dieser Sektion wird der Betriebssystemtypischen shell zur Ausführung übergeben. Diese shell’ist bei Windows die 'cmd.exe, bei Linux und bei MacOS die bash. Hier können also normale Batch-Skripte abgelegt werden.
Namensvarianten von ShellInAnIcon mit identischem Verhalten sind Shellbatch, DOSBatch und DOSInAnIcon.
ExecWith
Der Inhalt dieser Sektionen wird einem externen Programm (Interpreter) zur Ausführung übergeben. Beispielsweise können über ExecWith AutoIt-Skripte http://www.autoitscript.com direkt in das opsi-winst-Skript integriert werden.
Registry
Die Registry-Sektionen dienen dem Bearbeiten der Registry.
LinkFolder
LinkFolder-Sektionen dienen dem Erstellen und Entfernen von Verknüpfungen. Es können beispielsweise Verknüpfungen auf dem Desktop oder im Startmenü erstellt werden.

11.1.6. Globale Konstanten

Globale Konstanten sind Text-Platzhalter, die in primären und sekundären Sektionen eingesetzt werden können und zur Laufzeit textuell durch ihre Werte ersetzt werden.
Über die Verwendung von Platzhaltern kann sichergestellt werden, dass Pfade in unterschiedlichen Umgebungen (z.B. auf System mit unterschiedlichen Sprachen oder Betriebssystem-Versionen) richtig gesetzt sind.

Beispiele:

%ProgramFiles32Dir%
c:\programme
%Systemroot%
c:\windows
%System%
c:\windows\system32
%opsiTmpDir%
c:\
%Scriptpath%
<Pfad zu laufenden Script>

11.1.7. Zweites Beispiel: tightvnc

Zur Erläuterung nun ein einfaches Script zur Installation von tightvnc. Eigentlich würde dieses Script mit dem Aufruf der Silent-Installation in der Winbatch-Sektion auskommen. Bei einer wiederholten Installation erscheint hier (wegen des Neustarts eines laufenden Services) jedoch ein interaktiver Dialog. Dieses Dialog-Fenster wird (so es auftaucht) mit Hilfe von AutoIt geschlossen.

[Actions]
Message "Installiere tightvnc 1.3.9 ..."
ExecWith_autoit_confirm "%ScriptPath%\autoit3.exe" WINST /letThemGo
WinBatch_tightvnc_silent_install
KillTask "autoit3.exe"

[WinBatch_tightvnc_silent_install]
"%ScriptPath%\tightvnc-1.3.9-setup.exe" /silent

[ExecWith_autoit_confirm]
; Wait for the confirm dialog which only appears if tightvnc was installed before as service
; Waiting for the window to appear
WinWait("Confirm")
; Activate (move focus to) window
WinActivate("Confirm")
; Choose answer no
Send("N")

11.1.8. Elementare Befehle für primäre Sektionen

String-Variable

Variablen-Deklaration
DefVar <variable name>
Variablen-Zuweisung
Set <variable name> = <value>

Beispiel:

DefVar $ProductId$
Set $ProductId$ = "firefox"

Wichtig

Stringvariablen werden in primären und sekundären Sektionen unterschiedlich behandelt. In primären Sektionen sind Stringvariablen eigenständige Objekte. Nur hier können sie deklariert und ihnen Werte zugewiesen werden. Entsprechend ist die Verbindung von Variablen und Strings zu einem Stringausdruck mit einem Operator "+" durchzuführen.
Beispiel: "Installing "+ $ProductId$ +" ..."
In sekundären Sektionen werden Stringvariablen vor der Ausführung der Sektion durch den Inhalt der Variable ersetzt.
Beispiel: "Installing $ProductId$ ..."
Dies ist zu beachten, wenn entsprechende Stringausdrücke per Cut&Paste im Skript kopiert werden.
Der Vorteil dieser Konstruktion ist, dass in Sektionen die außerhalb des opsi-winst ausgeführt werden (DosBatch / Execwith) problemlos mit opsi-winst-Variablen gearbeitet werden kann.

Message / ShowBitmap

Zur Textausgabe während der Installation:
Message <string>

Beispiel:

Message "Installing "+ $ProductId$ +" ..."

Zur Ausgabe einer Grafik während der Installation:
ShowBitmap <filename> <subtitle>

Beispiel:

ShowBitmap "%ScriptPath%\python.png" "Python"

if [else] endif

Syntax:

if <condition>
        ;statement(s)
[
else
        ;statement(s)
]
endif

Funktionen

HasMinimumSpace
Prüft auf freien Platz auf der Festplatte.
FileExists
Prüft auf Existenz einer Datei oder eines Verzeichnisses.

Fehler, Logging und Kommentare

Kommentarzeichen ;
Zeilen, die mit einem Semikolon (;) beginnen, werden nicht interpretiert.
Comment
Schreibt eine Kommentar-Meldung in die Log-Datei.
LogError
Schreibt eine Fehlermeldung in die Log-Datei.
IsFatalError
Bricht die Ausführung des laufenden Skriptes ab und meldet die Installation als gescheitert zurück.

Bedingung zur Ausführung

requiredWinstVersion
gibt die (mindestens) benötigte opsi-winst Version an.

Weitere wichtige opsi-winst Funktionen

Einen Überblick über die opsi-winst Funktionen gibt die Referencecard:
http://download.uib.de/opsi4.0/doc/opsi-winst-reference-card-en.pdf

Eine detaillierte Dokumentation ist im opsi-winst Handbuch zu finden:
http://download.uib.de/opsi4.0/doc/opsi-winst-manual-de.pdf

Hier noch einige Hinweise auf besonders wichtige Elemente:

Stringlisten: Stringlisten sind sehr mächtig, insbesondere zur Auswertung von Ausgaben externer Programme. Lesen Sie dazu die opsi-winst-Dokus.

ExitWindows: Neustart/Herunterfahren des Systems und Beendung des opsi-winst.

  • ExitWindows /Reboot
    Rechner-Neustart nach Abschluss des laufenden Skriptes.
  • ExitWindows /ImmediateReboot
    Sofortiger Neustart.
  • ExitWindows /ImmediateLogout
    Sofortige Beendigung der Skript-Bearbeitung und Beendung des opsi-winst.

Product-Properties: Für manche Produkte ist es erforderlich, Optionen zur Verfügung zu stellen. Diese werden zur Laufzeit Client-spezifisch ausgewertet. Wie solche Properties erstellt werden, ist im Kapitel Erstellen eines opsi-Produkt-Pakets beschrieben.

Der Zugriff auf die Werte der Properties geschieht über die Funktion GetProductProperty:

if GetProductProperty("example-property", "no") = "yes"
        Files_copy_extra_files
endif

Encoding: Schreiben Sie Ihre Scripte in UTF-8 Encoding und setzen sie die Zeile
encoding=utf8 an den Anfang der Datei-

11.1.9. Drittes Beispiel: Windows-Template opsi-template

Dieses Template können Sie sich mit dem opsi-setup-detector erstellen.

define_vars_multi.opsiscript: Variablen deklaration. 

; -------------------------------------
; include file for opsi-setup-detector products
; Define all variables here
;---------------------------
DefVar $ProductId$
DefVar $InstallDir$
DefVar $InstallDir1$
DefVar $InstallDir2$
DefVar $MinimumSpace$
DefVar $ExitCode$
DefVar $ErrorString$
DefVar $LicenseRequired$
DefVar $LicenseKey$
DefVar $LicensePool$
DefVar $OS$
DefVar $OSshort$
DefVar $oldProgFound$
DefVar $installSuccess$
DefVar $installCommand$
DefVar $MsiId$
DefVar $UninstallProgram$
DefVar $installerfile$
DefVar $distrotype$
DefVar $distCodeName$
DefVar $distroName$
DefVar $distRelease$
DefVar $arch$
DefVar $tmpstr$
DefVar $targetfile$
DefVar $iconfile$

DefStringlist $ListOfPackageNames$
DefStringList $osinfomap$

setup.opsiscript: Installationsscript. 

; ----------------------------------------------------------------
; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the Affero General Public License v3.
; ----------------------------------------------------------------
encoding=utf8

[Actions]
requiredWinstVersion >= "4.12.0.28"
ScriptErrorMessages = false

; All variables are defined here:
include_insert "define_vars_multi.opsiscript"

; import complete file !
importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"

; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a seperator
Set $ProductId$          = "opsi-template"
Set $MinimumSpace$       = "1 MB"
; the path were we find the product after the installation
;Set $InstallDir$               = "%ProgramFiles32Dir%\<path to the product>"
Set $InstallDir$                = "unknown"
Set $LicenseRequired$ = "false"
Set $LicensePool$         = ""
; ----------------------------------------------------------------

set $OS$ = GetOS

if not(($OS$ = "Windows_NT"))
        logError "Installation aborted: wrong OS version: only Windows"
        isFatalError "wrong OS"
endif

if not(HasMinimumSpace ("%SystemDrive%", $MinimumSpace$))
        LogError "Not enough space on %SystemDrive%, " + $MinimumSpace$ + " on drive %SystemDrive% needed for " + $ProductId$
        isFatalError "No Space"
        ; Stop process and set installation status to failed
endif

comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$



if FileExists("%ScriptPath%\delsub.opsiscript")
        comment "Start uninstall sub section"
        Sub "%ScriptPath%\delsub.opsiscript"
endif

Message "Installing " + $ProductId$ + " ..."

if $LicenseRequired$ = "true"
        comment "Licensing required, reserve license and get license key"
        set $LicenseKey$ = get_licensekey_byPool($LicensePool$)
endif


comment "Start setup program"
ChangeDirectory "%SCRIPTPATH%"
;----------------------------------------------
Winbatch_install
;----------------------------------------------
set $ExitCode$ = getlastexitcode
if "true" = isMsiExitcodeFatal_short($exitcode$, "true", $ErrorString$ )
        LogError $ErrorString$
        isfatalerror $ErrorString$
else
        Comment $ErrorString$
endif

comment "Copy files"
Files_install /32Bit

comment "Patch Registry"
Registry_install /32Bit

comment "Create shortcuts"
LinkFolder_install

[Winbatch_install]
; Choose one of the following examples as basis for your installation
; You can use $LicenseKey$ var to pass a license key to the installer
;
; === Nullsoft Scriptable Install System ================================================================
; "%ScriptPath%\Setup.exe" /S
;
; === MSI package =======================================================================================
; You may use the parameter PIDKEY=$Licensekey$
; msiexec /i "%ScriptPath%\some.msi" /l* "%opsiLogDir%\$ProductId$.install_log.txt" /qb-! ALLUSERS=1 REBOOT=ReallySuppress
;
; === InstallShield + MSI=====================================================================================
; Attention: The path to the log file should not contain any whitespaces
; "%ScriptPath%\setup.exe" /s /v" /l* %opsiLogDir%\$ProductId$.install_log.txt /qb-! ALLUSERS=1 REBOOT=ReallySuppress"
; "%ScriptPath%\setup.exe" /s /v" /qb-! ALLUSERS=1 REBOOT=ReallySuppress"
;
; === InstallShield =====================================================================================
; Create setup.iss answer file by running: setup.exe /r /f1"c:\setup.iss"
; You may use an answer file by the parameter /f1"c:\setup.iss"
; "%ScriptPath%\setup.exe" /s /sms /f2"%opsiLogDir%\$ProductId$.install_log.txt"
;
; === Inno Setup ========================================================================================
; http://unattended.sourceforge.net/InnoSetup_Switches_ExitCodes.html
; You may create setup answer file by: setup.exe /SAVEINF="filename"
; You may use an answer file by the parameter /LOADINF="filename"
; "%ScriptPath%\setup.exe" /sp- /silent /norestart /nocancel /SUPPRESSMSGBOXES

[Files_install]
; Example of recursively copying some files into the installation directory:
;
; copy -s "%ScriptPath%\files\*.*" "$InstallDir$"

[Registry_install]
; Example of setting some values of an registry key:
;
; openkey [HKEY_LOCAL_MACHINE\Software\$ProductId$]
; set "name1" = "some string value"
; set "name2" = REG_DWORD:0001
; set "name3" = REG_BINARY:00 af 99 cd

[LinkFolder_install]
; Example of deleting a folder from AllUsers startmenu:
;
; set_basefolder common_programs
; delete_subfolder $ProductId$
;
; Example of creating a shortcut to the installed exe in AllUsers startmenu:
;
; set_basefolder common_programs
; set_subfolder $ProductId$
;
; set_link
;       name: $ProductId$
;       target: <path to the program>
;       parameters:
;       working_dir: $InstallDir$
;       icon_file:
;       icon_index:
; end_link
;
; Example of creating a shortcut to the installed exe on AllUsers desktop:
;
; set_basefolder common_desktopdirectory
; set_subfolder ""
;
; set_link
;       name: $ProductId$
;       target: <path to the program>
;       parameters: <some_param>
;       working_dir: $InstallDir$
;       icon_file: <path to icon file>
;       icon_index: 2
; end_link

; ----------------------------------------------------------------
; ----------------------------------------------------------------

delsub.opsiscript: Deinstallations-SubSkript. 

; ----------------------------------------------------------------
; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib gmbh
; and published under the Terms of the Affero General Public License v3.
; ----------------------------------------------------------------
encoding=utf8

Message "Check for existing installation of " + $ProductId$ + " ..."

Set $MsiId$ = '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}'
Set $UninstallProgram$ = $InstallDir$ + "\uninstall.exe"

if FileExists($UninstallProgram$)

        comment "Uninstall program found, starting uninstall"
        Winbatch_uninstall
        Sub_check_exitcode_del

endif
if not (getRegistryValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" + $MsiId$ , "DisplayName","32bit") = "")

        comment "MSI id " + $MsiId$ + " found in registry, starting msiexec to uninstall"
        Winbatch_uninstall_msi
        Sub_check_exitcode_del

endif


comment "Delete files"
if not(($InstallDir$ = '') or ($InstallDir$ = 'unknown'))
        Files_uninstall
endif

comment "Cleanup registry"
Registry_uninstall

comment "Delete program shortcuts"
LinkFolder_uninstall

[Winbatch_uninstall]
; Choose one of the following examples as basis for program uninstall
;
; === Nullsoft Scriptable Install System ================================================================
; maybe better called as
; Winbatch_uninstall /WaitforProcessending "Au_.exe" /Timeoutseconds 10
; "$UninstallProgram$" /S
;
; === Inno Setup ========================================================================================
; "$UninstallProgram$" /silent /norestart /SUPPRESSMSGBOXES /nocancel

[Winbatch_uninstall_msi]
msiexec /x $MsiId$ /qb-! REBOOT=ReallySuppress

[Files_uninstall]
; Example for recursively deleting the installation directory:
;
; del -sf "$InstallDir$\"

[Registry_uninstall]
; Example of deleting a registry key:
;
; deletekey [HKEY_LOCAL_MACHINE\Software\$ProductId$]

[LinkFolder_uninstall]
; Example of deleting a folder from AllUsers startmenu:
;
; set_basefolder common_programs
; delete_subfolder $ProductId$
;
; Example of deleting a shortcut from AllUsers desktop:
;
; set_basefolder common_desktopdirectory
; set_subfolder ""
; delete_element $ProductId$

[Sub_check_exitcode_del]
set $ExitCode$ = getlastexitcode
if "true" = isMsiExitcodeFatal_short($exitcode$, "true", $ErrorString$ )
        LogError $ErrorString$
        isfatalerror $ErrorString$
else
        Comment $ErrorString$
endif

;-----------------------------------------------------

uninstall.opsiscript: Deinstallations-Skript. 

; ----------------------------------------------------------------
; Copyright (c) uib gmbh (www.uib.de)
; This sourcecode is owned by uib
; and published under the Terms of the Affero General Public License v3.
; ----------------------------------------------------------------
encoding=utf8

[Actions]
requiredWinstVersion >= "4.12.0.28"
ScriptErrorMessages = false

; All variables are defined here:
include_insert "define_vars_multi.opsiscript"

; import complete file !
importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"

; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a seperator
Set $ProductId$          = "opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$       = "%ProgramFiles32Dir%\<path to the product>"
Set $InstallDir$        = "unknown"
Set $LicenseRequired$ = "false"
Set $LicensePool$         = ""
; ----------------------------------------------------------------

set $OS$ = GetOS

if not(($OS$ = "Windows_NT"))
        logError "Installation aborted: wrong OS version: only Windows"
        isFatalError "wrong OS"
endif

comment "Show product picture"
ShowBitmap "%ScriptPath%\" + $ProductId$ + ".png" $ProductId$

Message "Uninstalling " + $ProductId$ + " ..."

if FileExists("%ScriptPath%\delsub.opsiscript")
        comment "Start uninstall sub section"
        Sub "%ScriptPath%\delsub.opsiscript"
endif

if $LicenseRequired$ = "true"
        comment "Licensing required, free license used"
        Set $tmpstr$ = FreeLicense($LicensePool$)
endif

11.2. Erstellen eines opsi-Produkt-Pakets

11.2.1. Installation des opsi-setup-detector, opsi PackageBuilder und opsi-logviewer

Installation des opsi PackageBuilder

Den opsi PackageBuilder gibt es derzeit für Windows, Linux und MacOS.

Die Installations-Dateien / Pakete des {opsi-package-builder} finden Sie hier:
https://forum.opsi.org/viewtopic.php?p=32473#p32473
Dort findet sich im oberen Teil die Links auf die Installationspakete für Windows, Linux und MacOS.
Der {opsi-package-builder} kommt nicht von uib sondern aus der opsi-community von Holger Pandel (Danke!).

Der {opsi-package-builder} unterliegt einer OpenSource Lizenz:
https://github.com/pandel/opsiPackageBuilder/blob/master/LICENSE_DE

Der {opsi-package-builder} hat eine eigene Dokumentation welche mit installiert wird.

Installation des opsi-setup-detector

Den opsi-setup-detector gibt es derzeit für Windows und Linux.

Sie können den opsi-setup-detector per opsi installieren:

Das Paket opsi-setup-detector gehört zu den opsi Standardprodukten und sollte auf Ihrem opsi-server installiert sein. Falls nicht, mit:

opsi-package-updater install opsi-setup-detector

können Sie es auf dem opsi-server installieren.

Ein Setup-Programm um den opsi-setup-detector auf Windows auch ohne opsi zu installieren, finden sie unter :
https://download.uib.de/opsi4.1/misc/helper/

Die Funktionalität der Linux-Version ist in folgen Features eingeschränkt, da bestimmte Programm zur Analyse von Setup-Programmen aus bestimmten Frameworks nicht für Linux zur Verfügung stehen:

  • Genauere Analyse von Inno-Setups mangels innounpack.exe für Linux
  • Genauere Analyse von wix-setups mangels dark.exe für Linux

Das opsi-Produkt opsi-setup-detector hat eine Abhängigkeit zu dem opsi-Produkt {opsi-package-builder}. Der opsi-setup-detector verwendet den {opsi-package-builder} wenn vorhanden, funktioniert in weiten Teilen aber auch ohne. Die Installation des {opsi-package-builder} ist aber empfohlen.

Installation des opsi-logviewer

Den opsi-logviewer gibt es derzeit für Windows, Linux und MacOS.

Sie können den opsi-logviewer per opsi installieren:

Das Paket opsi-logviewer gehört zu den opsi Standardprodukten und sollte auf Ihrem opsi-server installiert sein. Falls nicht, mit:

opsi-package-updater install opsi-logviewer

können Sie es auf dem opsi-server installieren.

Ein Setup-Programm um den opsi-setup-detector auf Windows auch ohne opsi zu installieren, finden sie unter :
https://download.uib.de/opsi4.1/misc/helper/

Das opsi-produkt opsi-logviewer hat eine Abhängigkeit zu dem opsi-Produkt javavm.

11.2.2. Das Programm opsi-setup-detector zum Erstellen eines Windows Scriptes

Opsi-setup-detector Start und notwendige Konfigurationen

Der opsi-setup-detector kann gestartet werden aus der Programm Menü und findet sich dort unter opsi.org. Der opsi-setup-detector wird unter Windows auch in das Kontextmenü des Explorers eingebunden, um so per Rechte Maustaste Setup-Programm direkt zur Analyse aufrufen zu können.

Abbildung 11.2. opsi-setup-detector Notwendige Konfiguration beim ersten Start

Konfigurationsdialog

Nach dem erstmaligen Start des opsi-setup-detector erscheint ein Konfigurationsmaske. Hier sind die folgenden Angaben erforderlich:

  • fullname : (Wird verwendet für Einträge in die changelog.txt)
  • email_address (Wird verwendet für Einträge in die changelog.txt)
  • workbench_path : Pfad zum Verzeichnis in dem die opsi-Pakete erstellt werden sollen. Dies ist idealerweise der Pfad zu der Stelle an der die opsi_workbench Ihres opsi-servers gemountet ist.

Nachdem Sie die notwendigen Konfigurationsangaben gemacht und gespeichert haben, erscheint die Startseite.

Abbildung 11.3. opsi-setup-detector Start

Startpage

Auf der Startseite wählen Sie die gewünschte Aufgabe und folgen den Dialogen bzw. wählen den Button Nächster Schritt.

Die angebotenen Aufgaben sind gruppiert nach:

  • Windows
  • Linux
  • MacOS
  • Multiplattform

Die Angebotenen Aufgaben für Windows:

  1. Analysiere einzelne Setup Datei und erzeuge ein opsi Paket
    Hier wird von einer Setup-Datei ausgegangen und der gesamte Ablauf bis zur Erzeugung eines opsi-Paketes durchlaufen. Dieser Prozess ist im nächsten Kapitel beschrieben.
  2. Analysiere zwei Setup Dateien (32 und 64 Bit) und erzeuge ein opsi Paket
    Verläuft analog zu dem obigen Punkt 1 mit folgenden Unterschieden:
    Es werden zwei Setupprogramme für die Architekturen 32 und 64 Bit abgefragt und analysiert. Das Produkt bekommt ein zusätzliches Property: install_architecture mit den möglichen Werten: 32bitonly, 64bitonly, both, systemspecific.
  3. Analysiere einzelne Setup Datei
    erläuft analog zu dem obigen Punkt 1 nur das nach der Analyse des Setup-Programms abgebrochen wird.
  4. Eine opsi Paketvorlage (Template) erzeugen
    Dieser Punkt fragt nicht nach einer Setup-Datei, sondern erstellt ein Template analog dem opsi-Produkt opsi-template nur das hier die Angaben aus der Produktkonfiguration bereits übernommen werden.

Opsi-setup-detector: Analysiere einzelne Setup Datei und erzeuge ein opsi Paket

Im folgenden wird der Ablauf anhand des Punktes Analysiere einzelne Setup Datei und erzeuge ein opsi Paket erläutert.

Abbildung 11.4. opsi-setup-detector Start

Startpage

Nach der Auswahl der Aufgabe erscheint ein Dateiauswahl-Dialog zur Auswahl der zu analysierenden Setup Datei. Nach der Auswahl beginnt direkt die Analyse.

Opsi-setup-detector: Analyse

Abbildung 11.5. opsi-setup-detector Analyse

Analyse

War die Analyse nicht erfolgreich, endet sie hier mit Sorry unknown Installer. Bei einer erfolgreichen Analyse wird direkt zum Ergebnis gewechselt.

Abbildung 11.6. opsi-setup-detector Ergebnis der Analyse

Ergebnis der Analyse

  • Erkannter Setup Typ: Typ des erkannten Installer
  • MST allowed:
  • Link mit Infos zum Installer
  • Setup Datei: Pfad und Name der analysierten Setup-Datei
  • MST Datei: Bei MSI-Installern oder Installern welche MSI enthalten, kann hier eine MST-Datei angegeben werden welche in den MSI Aufruf integriert wird.
  • MsiId: Bei MSI-Installern oder Installern welche MSI enthalten, der MSI-Produktcode
  • Software Version: Die Version der zu installierenden Software soweit ermittelbar
  • Setup Datei Größe MB: Größe der Setup Datei in MB
  • Benötigter Platz MB: Dieser Wert ist eine Schätzung aus sechsmal die Größe der Setup-Datei und kann gegebenenfalls angepasst werden
  • InstallDir: Soweit erkannt das Verzeichnis in das die Software installiert werden wird
  • Unattended Installationskommando: Das ermittelte Kommando zu einer nicht interaktiven Installation
  • Unattended Deinstallationskommando: Das ermittelte Kommando zu einer nicht interaktiven Deinstallation
  • Deinstallations Programm: Das ermittelte Deinstallations Programm

Die hier ermittelten Werte können nun bei Bedarf korrigiert oder ergänzt werden. Der Button Nächster Schritt führt zur ersten Seite der Produktkonfiguration. Hier werden die Metadaten des zu erstellenden opsi Produktes eingegeben.

Achtung

Die hier ermittelten Werte können falsch sein und sind wahrscheinlich unvollständig !
Nach einer ersten Installation sollten Sie unbedingt die Werte von InstallDir, Deinstallations Programm und Software Version überprüfen und gegebenenfalls in Ihrem Script anpassen.

Opsi-setup-detector: Produktkonfiguration 1

Abbildung 11.7. opsi-setup-detector Produktkonfiguration 1

Produktkonfiguration 1

  • opsi Product ID: dies ist der Name des zu erzeugenden opsi Paketes und wird aus dem weiter unten stehenden Produkt Namen erzeugt, wobei Leerzeichen und andere ungültigen Zeichen durch ein - ersetzt werden. Die vorgeschlagene opsi Product ID kann natürlich geändert werden.
  • Produkt Name: der Name der zu installierenden Software. Dieser muss evtl. händig korrigiert werden
  • Produkt Version: die aus dem Name der Setup-Datei ermittelte Versionsnummer muss wahrscheinlich händig korrigiert werden. Sie darf nur Ziffern und Punkte enthalten, da sie für die Versionierung des opsi Paketes verwendet wird.
  • Beschreibung: In diesem Feld wird als Vorgabe der Produkt Name vorgegeben und sollte mit weiteren Hinweisen ergänzt werden, die dann als Produktbeschreibung des opsi Paketes gesetzt werden.
  • Lizenz pflichtig: Wenn dieses Häkchen gesetzt wird, wird beim Patchen des opsiscripts $LicenseRequired$=true gesetzt.

Opsi-setup-detector: Priorität und Abhängigkeiten

Abbildung 11.8. opsi-setup-detector Produktkonfiguration 2

Produktkonfiguration 2

Für normale Anwendungssoftware müssen Sie hier nichts tun, da die Voreinstellungen passen. Sie können auf den Button Nächster Schritt drücken.

Ansonsten sei hier erläutert, welche Einstellungen hier möglich sind:

Priorität
beeinflusst die Installationsreihenfolge. Empfohlen für Anwendungssoftware: 0
Mögliche Werte liegen zwischen 100 (ganz am Anfang) und -100 (ganz am Ende). Existieren auch Produktabhängigkeiten, so beeinflussen diese zusätzlich die Installationsreihenfolge.

Abhängigkeiten. Hier können Abhängigkeiten zwischen Podukten definiert werden.

Abbildung 11.9. opsi-setup-detector Dependency Editor

Dependency Editor

Productid
Productid (Bezeichner) des Produkts zu dem eine Abhängigkeit besteht.
Abhängigkeits Modus
Sie können entweder die Aktion setup anfordern oder (siehe unten) den Status (installed).
Aktion oder Status
Für Status: Status den das Produkt, zu dem eine Abhängigkeit besteht, haben soll (installed). Liegt ein anderer Status vor, so wird das Produkt auf setup gestellt.
Für Aktion: Aktionsanforderung welche bei dem Produkt, zu dem eine Abhängigkeit besteht, gesetzt werden soll (setup)
Abhängigkeits typ
Installationsreihenfolge. Wenn das Produkt, zu dem eine Abhängigkeit besteht, installiert sein muss bevor mit der Installation des aktuellen Produkts begonnen werden kann, dann ist dies before. Muss es nach dem aktuellen Produkt installiert werden so ist dies after. Ist die Reihenfolge egal so muss hier nichts eingetragen werden.

Hinweis:

Leider gibt es derzeit keinen generischen Mechanismus für Deinstallations-Produktabhängigkeiten. Zuverlässig ist der ProductDependency-Mechanismus nur für action: setup und die hierbei zu triggernden (before- oder after-) setup Aktionen und installed Status. Ein requiredAction: uninstall führt leider definitiv zu Fehlern.

Noch ein Hinweis:

Die tatsächliche Installationsreihenfolge ermittelt sich aus einer Kombination von Produktabhängigkeiten und Produktpriorisierung. Details hierzu finden Sie im opsi-Handbuch im Kapitel Beeinflussung der Installationsreihenfolge durch Prioritäten und Produktabhängigkeiten

Opsi-setup-detector: Poperties

Hier können veränderbare Eigenschaften (Produktvariablen) für das Produkt definiert werden.

Abbildung 11.10. opsi-setup-detector Property Editor

Property Editor

Feld / Funktion

Beschreibung

Hinweise

Property Name

Name der Produktvariable

Dieser Bezeichner wird in der Produktkonfiguration im opsi-configed angezeigt und ist innerhalb der Skripte mit der Funktion GetProductProperty auslesbar.

Property Type

Variablentyp

Mögliche Werte: Text / bool

Multivalue

Bestimmt, ob die Produktvariable nur genau einen oder mehrere Werte annehmen kann

Nur bei Typ Text verfügbar

Editierbar

Bestimmt, ob die Vorgabewerte mit neuen oder zusätzlichen Werten überschrieben werden können oder nicht

Nur bei Typ Text verfügbar

Beschreibung

Beschreibung der Variablenfunktion

Wird im opsi-configed als Tooltip angezeigt

Possible Werte

Komma-separiert Liste der möglichen Eingabewerte

Falls Editierbar auf “True” gesetzt wurde, kann die Liste später innerhalb von opsi-configed ergänzt werden.
Nur bei Typ Text verfügbar

Default Wert

Vorgabewert

Auswahlliste; Nur bei Typ Text verfügbar: Freitextfeld. Nur bei Typ Multivalue verfügbar: Mehrfachauswahl

Abbildung 11.11. opsi-setup-detector Produktkonfiguration 3 (Icon)

Produktkonfiguration 3 (Icon)

Hier kann ein Icon für die Anzeige während der Installation ausgewählt werden oder Sie übernehmen mit Nächster Schritt das DefaultIcon (Zahnrad) und wechseln zum nächsten Reiter..

Um ein anderes Icon auszuwählen wählen Sie über den Button Öffne Icon Verzeichnis in Verzeichnis aus in dem Sie Icons erwarten. Als Vorauswahl bekommen Sie einbeim opsi-setup-detector mitgeliefertes Verzeichnis von open source Icons: 128x128. Wählen Sie ein Unterverzeichnis und die Icons werden angezeigt.
Nun können Sie aus der Anzeige ein Icon auswählen.

Nachdem die Produktkonfiguration vollständig ist, kann nun das Produkt erzeugt werden.

Opsi-setup-detector: Produkt erzeugen

Abbildung 11.12. opsi-setup-detector Produkt erzeugen

Produkt erzeugen

  • Pfad zur opsi-workbench ist ein Laufwerksbuchstabe oder UNC Pfad auf dem der share opsi_workbench Ihres opsi-servers gemounted ist.
  • aus Sicherheitsgründen kann ein opsi Paket nur dann neu erzeugt werden, wenn es noch nicht vorhanden ist. Falls ein bestehendes Paket überschrieben werden soll, muss zuerst das Verzeichnis von der opsi Workbench gelöscht werden.
  • Links neben dem Button Erzeuge opsi Paket befinden sich drei mögliche Auswahl Optionen, die sich auf die Funktion des Buttons beziehen:
  • Erstellungs-Modus ist ein Auswahlbereich bei dem die Vorgänge bei der Paketerstellung bestimmt werden können:
  • Erstelle opsi Produkt Dateien erzeugt falls noch nicht vorhanden, den Verzeichnisbaum für das neue opsi Paket auf der gewählten opsi-Workbench. Die für das Pakte benötigten Dateien werden erzeugt bzw. kopiert.
  • Erstelle opsi Produkt Dateien und baue opsi Paket führt die im ersten Punkt angeführten Vorgänge durch.
    Zusätzlich wird der {opsi-package-builder} aufgerufen um aus dem erstellen Verzeichnisbaum das opsi-Paket zu erstellen. Die genauen Abläufe werden dabei durch das Auswahlfeld Baumodus bestimmt:

    • nur bauen startet den {opsi-package-builder} ohne interaktive GUI, erstellt aus dem Verzeichnisbaum per Server Befehl opsi-makepackage ein opsi Paket und beendet den {opsi-package-builder} nach getaner Arbeit wieder.
    • bauen und installieren startet den {opsi-package-builder} ohne interaktive GUI, erstellt aus dem Verzeichnisbaum per Server Befehl opsi-makepackage ein opsi Paket installiert das Paket per Server Befehl opsi-package-manager und beendet den {opsi-package-builder} nach getaner Arbeit wieder.
  • Erstelle opsi Produkt Dateien und starte interaktiven Packagebuilder führt die im ersten Punkt angeführten Vorgänge durch.
    Zusätzlich wird der {opsi-package-builder} interaktiv aufgerufen.
    Sie müssen diesen selbst beenden um zu dem opsi-setup-detector zurückzukehren Zu Installation, Konfiguration und Bedienung des Community Projektes opsi PackageBuilder siehe https://forum.opsi.org/viewforum.php?f=22
  • opsi-Paket erstellen ist der Button welcher die Paketerstellung veranlasst. Aus Sicherheitsgründen kann ein opsi Paket nur dann neu erzeugt werden, wenn es noch nicht vorhanden ist. Ist bereits ein Paket mit diesem Namen vorhanden, so erscheint eine Rückfrage ob das vorhandene Verzeichnis gelöscht werden darf.

Mehr Details zum opsi-setup-detector finden Sie im opsi-manual:
https://download.uib.de/opsi4.2/documentation/html/opsi-manual-v4.2/opsi-manual-v4.2.html#opsi-setup-detector

11.2.3. Das Programm opsi PackageBuilder zum modifizieren eines Scriptes

Beim ersten Start nach der Installation startet der opsi PackageBuilder im Offline Modus, da noch wichtige Konfigurationsdaten für die Verbindung mit dem opsi-server fehlen.

Abbildung 11.13. opsi PackageBuilder Erster Start: Offline Modus

Erster Start

Sollte der der Start auf diese Weise nicht funktionieren und das Startmenü nicht reagieren (beobachtet unter Linux / KDE), so probieren sie es von der Kommandozeile unter Angabe irgend eines Pfades und bestätigen die Fehlermeldung das der Pfad nicht gefunden wurde:

opsipackagebuilder --path /home

Initiale Konfiguration des opsi PackageBuilder

Um die fehlenden Konfigurationsdaten einzugeben öffnen Sie die Einstellungen.

Abbildung 11.14. opsi PackageBuilder Einstellungen: Allgemein

Einstellungen: Allgemein

Im Reiter Allgemein machen Sie bitte folgende Einstellungen:

  • Konfigserver : Vollständiger Name (FQDN) Ihres opsi-configservers (z.B. opsi.mycompany.org)
  • opsiadmin Benutzer: username eines Mitglieds der Gruppe opsiadmin (Am besten Ihr username)
  • opsiadmin Passwort: das Passwort des oben angegeben Benutzers. Dieses wird nicht angezeigt und verschlüsselt gespeichert. Es ist notwendig damit der opsi PackageBuilder mit dem opsi-server kommunizieren kann.
  • opsi Server Version: opsi 4.1 oder höher
  • opsi Workbench : /var/lib/opsi/workbench
  • Kompatibilität der Befehlsausführung : opsi 4.0.4 oder neuer / Sudo ohne Passwort
  • Benutzer : Ihr voller Name (wird in changelogs verwendet)
  • EMail : Ihre eMail Adresse (wird in changelogs verwendet)

Abbildung 11.15. opsi PackageBuilder Einstellungen: Programm

Einstellungen: Programm

Im Reiter Programm machen Sie bitte folgende Einstellungen:

  • Bestehendes Netzlaufwerk verwenden : Häkchen setzen
  • Entwicklungsordner : Pfad zum Verzeichnis in dem die opsi-Pakete erstellt werden sollen. Dies ist idealerweise der Pfad zu der Stelle an der die opsi_workbench Ihres opsi-servers gemountet ist.
  • Skripteditor :
    Den Skripteditor des opsi PackageBuilder gibt es leider nur für Windows.

    • Unter Windows belassen Sie es bei den Voreinstellungen
    • Unter Linux: Externer Editor: /usr/local/bin/jedit
      Kommandozeilenoptionen: (leer)
    • Unter MacOS: Externer Editor: /Application/jedit
      Kommandozeilenoptionen: (leer)

Abbildung 11.16. opsi PackageBuilder Einstellungen: Verwaltung

Einstellungen: Verwaltung

Im Reiter Verwaltung empfehlen wir folgende Einstellung abweichend vom Default

  • Paketieren : opsi-makepackage -v

Speichern Sie die Einstellungen und starten Sie den opsi PackageBuilder neu. Der opsi PackageBuilder sollte nun nicht mehr Offline Modus melden.

Mit dem opsi PackageBuilder Pakete modifizieren, packen und Installieren

Abbildung 11.17. opsi PackageBuilder Start

Start

Verwenden Sie Paket öffnen (F2) und wählen Sie das Verzeichnis in dem das Sie mit dem opsi-setup-detector erstellt haben. (z.B.: w:\newprod2 )
Dann öffnet sich das Produktfenster mit verschiedenen Reitern. Der default Reiter ist Paket.

Abbildung 11.18. opsi PackageBuilder Reiter Packet

Reiter Packet

In desem Reiter sehen auf der Linken Seite die allgemeinen Metadaten des opsi-Produktes wie Sie auch schon in „Opsi-setup-detector: Produktkonfiguration 1“ erläutert wurden.

Auf der rechten Seite sehen Sie die Scriptdateien und daneben den Button:

Abbildung 11.19. opsi PackageBuilder Button Edit

Button Edit

Mit dem Button können Sie die Datei in dem in der Konfiguration angegebenen Scripteditor aufrufen und das Script modifizieren. Unter Windows ist das der Scripteditor des opsi PackageBuilder.

Abbildung 11.20. opsi PackageBuilder Scripteditor unter Windows

Scripteditor

Wesentliche Merkmale:

  • Farbige Syntaxhervorhebung
  • “Falten” des Quellcodes (optional: kompakt, mit Kommentaren)
  • Lexerdefinition anpassbar (dazu muss der Editor per Startmenü Eintrag aufgerufen werden)
  • Autocomplete für Syntaxelemente und Variablen
  • Frei definierbare und wiederverwendbare Codeblöcke (“Snippets”)

Die Kernkomponente des Editors bildet das Modul Scintilla, welches auch in andere bekannten Editoren, wie bspw. Notepad++, verwendet wird. Die lexikalischen Elemente (Syntaxhervorhebung und Faltung) zur Darstellung der für opsi gültigen Scriptsprache sind allerdings komplett in AutoIt geschrieben, da Scintilla für opsi Skripte kein eigenes Darstellungsmodul mitliefert. Dadurch, dass AutoIt eine Interpretersprache ist, ist er damit langsamer als andere Editoren und eignet sich daher nur bedingt zur Bearbeitung sehr großer Skripte, vor allem bei eingeschalteter Quellcode Faltung. In den Einstellungen lässt sich jedoch vorgeben, ob der Editor mit diesen Funktionen überhaupt aufgerufen wird oder nicht, sofern der Aufruf direkt über den Skriptbaum erfolgt. Bei einem Aufruf über den Link im Startmenü sind Syntaxhervorhebung und Faltung generell beim Start ausgeschaltet und können über das Editormenü “Ansicht” aktiviert werden.

(Der Editor kann auch über die Kommandozeile aufgerufen werden. Weitere Informationen zu den möglichen Kommandozeilenparametern können mit der Option “–help” aufgerufen werden.)

Abbildung 11.21. opsi PackageBuilder Reiter Produktvariablen (Properties)

Reiter Produktvariablen (Properties)

In desem Reiter sehen auf der Linken Seite die Produkt Properties des opsi-Produktes wie Sie auch schon in „Opsi-setup-detector: Poperties“ erläutert wurden.

Abbildung 11.22. opsi PackageBuilder Reiter Abhängigkeiten

Reiter Abhängigkeiten

In desem Reiter sehen auf der Linken Seite die Produkt Abhängigkeiten des opsi-Produktes wie Sie auch schon in „Opsi-setup-detector: Priorität und Abhängigkeiten“ erläutert wurden.

Abbildung 11.23. opsi PackageBuilder Button: Packen

Button: Packen

Dieser Button startet eine SSH-Verbindung vom Server und ruft dort den Paketierungsbefehl auf.
Sie können das selbe auch in einem Terminal selber machen wie in Packen mit opsi-makepackage beschrieben.

Abbildung 11.24. opsi PackageBuilder Button: Installieren

Button: Installieren

Dieser Button startet eine SSH-Verbindung vom Server und ruft dort den Installationsbefehl auf um das Produkt auf dem Server zu installieren.
Sie können das selbe auch in einem Terminal selber machen wie in Installieren mit opsi-package-manager beschrieben.

Abbildung 11.25. opsi PackageBuilder Button: Installieren + Setup

Button: Installieren + Setup

Finger weg

11.2.4. Testen und verbessern eines opsi-script Skriptes

Zum Testen und Verbessern eines Scriptes / Produktes gibt es zwei verschiedene Varianten:

  • Testen des erstellten Scriptes Standalone also ohne es auf dem opsi-server zu installieren und es von dort auf den Client auszurollen
  • Integrierte Tests des kompletten Produktes mit Installation auf dem Server und Ausrollen auf einem Client

In beiden Fällen gehen wir hier davon aus, das Sie ein Projekt mit dem opsi-setup-detector erstellt haben.

Standalone Tests

Starten Sie die Anwendung opsi-script-gui: per Doppelklick.

  • Windows: Die Datei opsi-script.exe per Doppelklick.
    (Beim Starten des Programms auf einem Windows 7 / 10 Client muss "ausführen als Administrator" über die rechte Maustaste verwendet werden.) Wenn der opsi-client-agent bereits auf Ihrem Rechner installiert ist, finden Sie diese unter C:\Program files (x86)\opsi.org\opsi-client-agent\opsi-winst\winst32.exe Wenn nicht, kopieren Sie sich das Verzeichnis opsi-winst vom share \\<opsiserver\opsi_depot, aus dem Verzeichnis opsi-winst\files.
  • Linux: Starten sie Datei /usr/bin/opsi-script-gui
  • MacOS: Starten sie die Anwendung /Applications/opsi-script-gui

Sie sehen dann folgendes Fenster:

Abbildung 11.26. opsi-script-gui im interaktiven Modus

Screenshot: opsi-script-gui im interaktiven Modus

  • Über Select Script können Sie das Skript auswählen, dass Sie ausführen möchten.
  • Mit Start können Sie das Script starten. Dabei wird das Script auf diesem Rechner ausgeführt.
  • Öffnen Sie nun mit dem opsi-logviewer die Log-Datei an, um nachzuvollziehen, wie der opsi-script das Skript interpretiert.
    Achten Sie dabei darauf, das Sie hier mit dem Schieberegler rechts unten den angezeigten Loglevel einstellen können.
  • Öffenen Sie das Script setup.opsiscript in einem Editor und führen Sie gewünschte Änderungen durch (Speichern nicht vergessen). Dazu gibt es mehrere Möglichkeiten:

    • Öffnen Sie das Projekt im {opsi-package-builder} und öffnen von dort den Editor.
    • Im Prinzip können Sie auch jeden anderen beliebigen Editor verwenden.
      Wir empfehlen den Editor jEdit mit opsi-script Syntax-Highlighting, wie Sie ihn in der Grundausstattung der opsi-Produkte finden.

Abbildung 11.27. jEdit mit einem opsi script

jEdit with a opsi script

  • Sie können nun das Skript im Editor anpassen und speichern (Sie können den Editor geöffnet lassen).
    Wechseln Sie zum opsi-script-Fenster und starten Sie das Skript erneut über den Knopf Start (das Skript muss nicht neu ausgewählt werden).
    Schauen Sie sich das auf Basis Ihrer Änderungen im Skript veränderte Log über opsi-logviewer an. (Neu laden über Kontext Menü oder Button in der Symbolleiste nicht vergessen).
  • Auf diese Art und Weise, also über die Wiederholung der Punkte:

    • Anpassung des Skriptes und speichern
    • Skript ausführen
    • Log überprüfen
      können Sie nach und nach Ihre Skripte so anpassen, dass sie das tun, was Sie wünschen.

Hinweise zur Lösung von Detail-Problemen finden Sie im nächsten Kapitel. Im übernächsten Kapitel wird erklärt, wie Sie aus den so erstellten Skripten ein opsi-Produkt erstellen, das Sie auf dem opsi-server installieren können.

Integrierte Tests

Bei den integrierten Test wird immer gleich das ganze Projekt per opsi auf einem Testclient ausgeführt. Gehen Sie dazu wie folgt vor:

  • Öffnen Sie das Script setup.opsiscript in einem Editor und führen Sie gewünschte Änderungen durch (Speichern nicht vergessen). Dazu gibt es mehrere Möglichkeiten:

    • Öffnen Sie das Projekt im ‚opsi PackageBuilder‘ und öffnen von dort den Editor.
    • Im Prinzip können Sie auch jeden anderen beliebigen Editor verwenden.
      Wir empfehlen den Editor jEdit mit opsi-script Syntax-Highlighting, wie Sie ihn in der Grundausstattung der opsi-Produkte finden.
  • Produkt Packen

    • Variante 1: Öffnen Sie das Projekt im {opsi-package-builder} und starten Sie das Packen über den Button Packen.
    • Variante 2: Melden Sie sich per Terminal (z.B. Putty) auf dem opsi-server an und wechseln Sie in das Projektverzeichnis auf der Workbench. Packen Sie das Produkt per Befehl opsi-makepackage.
  • Produkt auf dem opsi-server installieren.

    • Variante 1: Starten Sie das Installieren im {opsi-package-builder} über den Button Installieren.
    • Variante 2: Starten Sie das Installieren im Terminal im Projektverzeichnis mit dem Befehl opsi-package-manager -i <myproctid_version.opsi>. Dabei ist <myproctid_version.opsi> der Dateiname der im vorherigen Schritt beim packen ausgegeben wurde.
  • Produkt über opsi-configed auswählen und starten

    1. Im Tab Clients den Testclient auswählen
    2. Im Tab Produktkonfiguration das Produkt auswählen. Sollte das Produkt nicht sichtbar sein (was nach dem ersten Installieren normal ist) einmal über das Menü Datei / Alle Daten neu laden bzw. den Button ganz links in der Symbolleiste die Daten neu laden
    3. Für das gewählte Produkt die Aktionsanforderung setup setzen und speichern.
    4. Den Client starten oder bei laufenden Client per Kontextmenü on_demand starten.
    5. Abwarten bis das Produkt auf dem Client durchgelaufen ist.

      • Im Tab Logfiles / instlog die Log-Datei inspizieren, um nachzuvollziehen, wie der opsi-script das Skript interpretiert.
        Achten Sie dabei darauf, das Sie hier mit dem Schieberegler rechts unten den angezeigten Loglevel einstellen können.
  • Auf diese Art und Weise, also über die Wiederholung der Punkte:

    • Anpassung des Skriptes und speichern
    • Produkt packen
    • Produkt auf dem Server installieren
    • Produkt auf dem Client ausführen
    • Log überprüfen
      können Sie nach und nach Ihre Skripte so anpassen, dass sie das tun, was Sie wünschen.

11.2.5. Packen mit opsi-makepackage

Danach können Sie das Produkt packen. Gehen Sie dazu in das Stammverzeichnis des Produkts und rufen Sie opsi-makepackage auf. Es wird nun das Produkt gepackt.

Es ist zu empfehlen die Pakete gleich mit einer zugehörigen md5-Prüfsummendatei zu erstellen. Diese Datei wird unter anderem vom opsi-package-updater genutzt, um nach der Paketübertragung die Paketintegrität sicher zu stellen. Eine solche Datei wird automatisch erstellt, aber für besondere Einsatzszenarien kann die Erstellung unterdrückt werden.

Bei der Übertragung von Paketen auf opsi-depotserver kann auf zsync zurück gegriffen werden, um nur Unterschiede zwischen verschiedenen Paketen zu übertragen. Damit dieses Verfahren verwendet werde kann, wird eine Datei besondere .zsync-Datei benötigt. Eine solche Datei wird automatisch erstellt, aber für besondere Einsatzszenarien kann die Erstellung unterdrückt werden.

Wenn es beim Erstellen großer Pakete zu Platzproblemen im temporären Verzeichnis /tmp kommt, ist es möglich mittels --temp-directory ein abweichendes temporäres Verzeichnis anzugeben.

Wenn schon ein Paket dieser Version existiert, so zeigt opsi-makepackage eine Rückfrage:

Package file '/var/lib/opsi/workbench/mytest/mytest_3.14-1.opsi' already exists.
Press <O> to overwrite, <C> to abort or <N> to specify a new version:

Mit o wählen Sie überschreiben, mit c brechen Sie den Vorgang ab und mit n können Sie wählen, dass Sie nach einer neuen Product- bzw. Package-Version gefragt werden.

Das gepackte Paket können Sie mit opsi-package-manager --install <paketdatei> auf dem Server installieren.

Mehr Details zum opsi-makepackage finden Sie im opsi-manual:
https://download.uib.de/opsi4.1/documentation/html/opsi-manual-v4.1/opsi-manual-v4.1.html#opsi-manual-configuration-tools

11.2.6. Installieren mit opsi-package-manager

Um das gepackte Produkt zu installieren gibt es den Befehl opsi-package-manager . Gehen Sie dazu in das Stammverzeichnis des Produkts und rufen Sie folgenden Befehl auf.

opsi-package-manager -i <myproductid_version.opsi>

Mehr Details zum opsi-package-manager finden Sie im opsi-manual:
https://download.uib.de/opsi4.1/documentation/html/opsi-manual-v4.1/opsi-manual-v4.1.html#opsi-manual-configuration-tools

11.2.7. Beispiel einer control Datei

[Package]
version: 1
depends:

[Product]
type: localboot
id: mytest
name: My Test
description: A test product
advice:
version: 3.14
priority: 10
licenseRequired: False
productClasses:
setupScript: setup.ins
uninstallScript:
updateScript:
alwaysScript:
onceScript:
customScript:
userLoginScript:

[ProductDependency]
action: setup
requiredProduct: javavm
requiredStatus: installed

[ProductProperty]
type: unicode
name: mytextprop
multivalue: False
editable: True
description: hint
values: ["off", "on"]
default: ["off"]

[ProductProperty]
type: bool
name: myboolprop
description: yes or no
default: False

[Changelog]
mytest (3.14-1) testing; urgency=low

  * Initial package

 -- jane doe <j.doe@opsi.org>  Mi, 14 Jul 2010 12:47:53 +0000

11.2.8. Erstellen eines opsi-paketes mit dem CLI tool opsi-newprod

opsi-newprod ist ein Kommandozeilen Werkzeug zum Erstellen eines opsi-product Gerüstes.

Zum Erstellen wechselt man in dieses Verzeichnis und ruft opsi-newprod auf. Das Programm fragt daraufhin nach dem Typ des zu erstellenden Paketes. Dies ist üblicherweise der Typ localboot für Produkte, die über den opsi-client-agent/opsi-winst installiert werden. Der Typ netboot steht für Produkte, die über das opsi-Linux-Bootimage ausgeführt werden (wie z.B. die Betriebssystem-Installationen).

Abbildung 11.28. Auswahl des Produkttyps: localboot

Screenshot: Auswahl des Produkttyps: localboot

Wählen Sie nun mit Tab OK (oder bestätigen mit F12). Nun müssen Sie die wesentlichen Produktdaten eingeben. Am oberen Rand ist hierzu eine Hilfe, die erläutert was die Felder bedeuten.

Abbildung 11.29. Eingabe der Produktinformationen

Screenshot: Eingabe der Produktinformationen

Product Id
ist ein eindeutiger Bezeichner für das Produkt in der Regel unabhängig von der Version
Bitte nur Kleinbuchstaben verwenden, keine Umlaute, keine Leerzeichen, keine Sonderzeichen - - ist als Trenner erlaubt.
Product name
ist der Klartextname des Produkts (wir empfehlen die Vermeidung von Umlauten, - ist erlaubt, keine Leerzeichen).
Description
ist eine ergänzende Beschreibung zum Produkt, die z.B. im opsi-Configeditor unter Beschreibung angezeigt wird.
Advice
ist eine ergänzende Beschreibung, in der Regel zum Umgang mit dem Produkt, die zu beachten ist und im opsi-Configeditor unter Notiz angezeigt wird.
Product version
ist die Version der eingepackten Software (max. 32 Zeichen).
Package Version
ist die Version des Paketes für die Produktversion. Sie dient dazu, Pakete mit gleicher Produktversion, aber z.B. korrigiertem opsi-winst-Skript zu unterscheiden.
License required
hat bei localboot Produkten keinen Einfluss. Bei netboot Produkten entscheidet diese Option, ob ein Lizenzkey aus dem Lizenzmanagement geholt wird.
Priority
beeinflusst die Installationsreihenfolge. Mögliche Werte liegen zwischen 100 (ganz am Anfang) und -100 (ganz am Ende). Existieren auch Produktabhängigkeiten, so beeinflussen diese zusätzlich die Installationsreihenfolge.

Abbildung 11.30. Eingabe der opsi-winst-Skript Namen für unterschiedliche Aktionen

Screenshot: Eingabe der opsi-winst-Skript Namen für unterschiedliche Aktionen

Nach Eingabe der Produktinformationen werden Sie aufgefordert, die Skripte anzugeben, die Sie für die unterschiedlichen möglichen Aktionen bereit stellen werden.

Üblicherweise heißt das Setup script gleich setup.opsiscript.

Üblicherweise heißt das Uninstall script gleich uninstall.ins.

Ein Update-Script dient zur geringfügigen Veränderung einer existierenden großen Installation. Wird das Produkt auf setup gestellt, so wird nach dem Abarbeiten des Setup-Skriptes automatisch auch das Update-Skript ausgeführt.

Ein Always-Script wird bei jedem aktiv werden des opsi-Clientagenten ausgeführt (z.B. bei jedem Boot).

Ein Once-Script hat den Folgestatus not_installed. Es handelt sich hierbei um einen sehr selten verwendeten Schalter, den Sie ignorieren sollten, wenn Sie nicht genau wissen, was Sie damit tun wollen.

Ein Custom-Script verändert weder Folgeaktion noch Folgestatus. Es handelt sich hierbei um einen sehr selten verwendeten Schalter, den Sie ignorieren sollten, wenn Sie nicht genau wissen, was Sie damit tun wollen.

Ein userLoginScript dient dazu nach dem Login des users Modifikationen am Profil des eingeloggten users vorzunehmen. Dies Funktioniert nur im Zusammenhang mit der opsi Erweiterung User Profile Management und ist im entsprechenden Kapitel des opsi-Handbuchs beschrieben.

Typ

Folgestatus

Folgeaktion

setup

installed

none

uninstall

not_installed

none

update

installed

none

always

installed

always

once

not_installed

none

custom

unverändert

unverändert

User login

unverändert

unverändert

Nachdem nun das Produkt selber beschrieben ist, können Sie eine oder mehrere Produktabhängigkeiten definieren. Wollen Sie keine Produktabhängigkeit definieren so geben Sie No ein.

Abbildung 11.31. Eine (weitere) Produktabhängigkeit definieren: Ja / Nein

Screenshot: Eine (weitere) Produktabhängigkeit definieren: Ja / Nein

Zur Erstellung einer Produktabhängigkeit geben Sie die folgenden Daten an. Beachten Sie auch die Hilfe im oberen Teil des Fensters:

Abbildung 11.32. Eingabe der Daten zur Erstellung einer Produktabhängigkeit

Screenshot: Eingabe der Daten zur Erstellung einer Produktabhängigkeit

Dependency for Action
Für welche Aktion des Produktes, welches Sie gerade erstellen, soll die Abhängigkeit gelten (nur setup implementiert).
Required product id
Productid (Bezeichner) des Produkts zu dem eine Abhängigkeit besteht.
Required action
Sie können entweder die Aktion setup anfordern oder (siehe unten) den Status (installed).
Required installation status
Status den das Produkt, zu dem eine Abhängigkeit besteht, haben soll (installed). Liegt ein anderer Status vor, so wird das Produkt auf setup gestellt.
Requirement type
Installationsreihenfolge. Wenn das Produkt, zu dem eine Abhängigkeit besteht, installiert sein muss bevor mit der Installation des aktuellen Produkts begonnen werden kann, dann ist dies before. Muss es nach dem aktuellen Produkt installiert werden so ist dies after. Ist die Reihenfolge egal so muss hier nichts eingetragen werden.

Hinweis:

Leider gibt es derzeit keinen generischen Mechanismus für Deinstallations-Produktabhängigkeiten. Zuverlässig ist der ProductDependency-Mechanismus nur für action: setup und die hierbei zu triggernden (before- oder after-) setup Aktionen und installed Status. Ein requiredAction: uninstall führt leider definitiv zu Fehlern.

Nachdem eine Produktabhängigkeit definiert ist, werden Sie wieder gefragt, ob Sie eine (weitere) Produktabhängigkeit definieren wollen. Wenn ja, wiederholt sich der Vorgang; wenn nein, so werden Sie gefragt, ob Sie eine Produkteigenschaft (Zusatzschalter) definieren wollen mit dem Sie die Installation des Produktes modifizieren können.

Noch ein Hinweis:

Die tatsächliche Installationsreihenfolge ermittelt sich aus einer Kombination von Produktabhängigkeiten und Produktpriorisierung. Details hierzu finden Sie im opsi-Handbuch im Kapitel Beeinflussung der Installationsreihenfolge durch Prioritäten und Produktabhängigkeiten

Abbildung 11.33. Eine (weitere) Produkteigenschaft definieren

Screenshot: Eine (weitere) Produkteigenschaft definieren

Antworten Sie ja, so müssen Sie die Produkteigenschaft beschreiben:

Die Produkteigenschaft wird clientspezifisch gespeichert und besteht aus einem Namen (key) der verschiedene Werte (Values) zugeordnet bekommen kann und die dann vom opsi-winst-Skript abgefragt werden können.

Zunächst müssen Sie angeben, ob es sich um ein Textwert (unicode) oder um einen logische Wert also wahr/falsch (boolean) handelt. Wenn Sie unsicher sind, wählen Sie unicode.

Abbildung 11.34. Datentyp der Produkteigenschaft wählen

Screenshot: Datentyp der Produkteigenschaft wählen

Weiterhin wird eine Beschreibung benötigt, die im opsi-configed als Hilfe angezeigt wird. Weiterhin müssen Sie, durch Kommas getrennt, alle Werte angeben, die der Key annehmen darf. Wird hier nichts angegeben, so kann später im opsi-Configeditor ein beliebiger Wert eingegeben werden. Über Editable (true/false) können Sie entscheiden, ob neben der vorgegebenen Liste auch andere Werte eingegeben werden dürfen.

Anmerkung

Enthält ein Wert einen Backslash \, so muss dieser doppelt angegeben werden.
Eine Pfadangabe kann beispielsweise wie folgt aussehen: C:\\temp

Abbildung 11.35. Beschreibung der Produkteigenschaft

Screenshot: Beschreibung der Produkteigenschaft

Im Folgefenster müssen Sie festlegen, was der Defaultwert dieser Produkteigenschaft ist.

Abbildung 11.36. Festlegung des Defaultwerts der Produkteigenschaft

Screenshot: Festlegung des Defaultwerts der Produkteigenschaft

Wenn Sie als Typ boolean wählen, so reduziert sich die Beschreibung auf Property name und Property description.

Abbildung 11.37. Beschreibung eines boolschen Properties

Screenshot: Beschreibung eines boolschen Properties

Nachdem eine Produkteigenschaft definiert ist, werden Sie wieder gefragt, ob Sie eine (weitere) Produkteigenschaft definieren wollen. Wenn ja, wiederholt sich der Vorgang; wenn nein, so werden Sie als nächstes nach Name und Mail-Adresse gefragt. Diese werden im Changelog des Paketes verwendet und müssen angegeben werden.

Abbildung 11.38. Eingabe der Maintainer Daten

Screenshot: Eingabe der Maintainer Daten

Danach ist das Grundgerüst des Produktes fertig gestellt.

Mit Hilfe des ls Befehls finden Sie die oben beschriebene Verzeichnis Struktur. Wechseln Sie in den OPSI-Ordner und setzen Sie erneut den ls Befehl ab. Hier befindet sich unter anderem die control-Datei, welche die eben eingegebenen Daten enthält und Ihnen auch die Möglichkeit bietet, diese im Editor zu kontrollieren oder zu modifizieren.

Kapitel 12. Allgemeine Hinweise zu Windows

12.1. Die opsi Verzeichnisse auf Windows

Wesentliche opsi Verzeichnisse und Dateien auf dem Windows-Client

  • c:\program files (x86)\opsi.org\opsi-client-agent
  • c:\opsi.org (sonstige opsi Log und andere variable files)

Kapitel 13. Weitere Informationen

Das opsi-Handbuch enthält eine Fülle von weiteren Informationen, die für den produktiven Betrieb wichtig sind. Wenn Sie ihren opsi-Server produktiv einsetzen empfehlen wir Ihnen besonders sich mit dem Werkzeug opsi-backup vertraut zu linuxhen, um eine Sicherung Ihrer Daten erstellen zu können.

Wenn Sie dort nicht fündig werden oder Hilfe benötigen, wenden Sie sich an die opsi Community.

Für produktive Installationen empfehlen wir professionelle Unterstützung durch uib im Rahmen eines Pflege- und Supportvertrages.