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, die neue Erweiterungen enthalten, welche 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

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.

2. Einführung macOS Clients in opsi

Diese Anleitung beschreibt den Betrieb von macOS Clients in opsi.

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

Wesentliche Themen dieser Anleitung:

  1. Aufnahme und Einbindung von Mac-Rechnern in opsi (Installation des opsi-mac-client-agent)

  2. Bereitstellung von opsi Standardsoftware für Mac auf dem opsi-server

  3. Installation von Standard Software auf den Mac-Clients

  4. opsi-Standardsoftware für Mac unter opsi

  5. Paketierung eigener Software

  6. Erstellung von opsi-Paketen

  7. Hinweise zu Mac Clients

    1. Spezielle Befehle für macOS

    2. Directories die Sie verwenden dürfen

    3. Der pseudo user opsisetupadmin

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

Einzelne Befehle oder Dateinamen werden so hervorgehoben: opsi-set-rights oder /Applications/opsi-script.

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

3. Voraussetzungen für macOS Clients

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

Der opsi-mac-client-agent ist eine opsi Erweiterung.
Das bedeutet, dass Sie zum Einsatz eine Freischaltdatei benötigen. Diese Freischaltung erhalten Sie wenn Sie die Erweiterung kaufen. Zu Evaluierungszwecken stellen wir Ihnen auch eine zeitlich befristete Freischaltung kostenlos zur Verfügung ( → mail an info@uib.de).
Weitere Details hierzu finden Sie in
https://download.uib.de/opsi4.2/documentation/html/opsi-manual-v4.2/opsi-manual-v4.2.html#opsi-manual-extensions

Technische Voraussetzungen ist ein opsi-server mit opsi 4.1. oder höher.

Unterstützte macOS Versionen:

3.1. Supported as opsi-client: MacOS

Stand 16.02.2022

Tabelle 1. Unterstützte MacOS als Client in opsi 4.2 und 4.1

Distribution

client-agent

MacOS 10.13 HighSierra

discontinued

MacOS 10.14 Mojave

discontinued

MacOS 10.15 Catalina

supported

MacOS 11 BigSur

supported

MacOS 12 Monterey

supported

supported: Supported unsupported: Unsupported develop: Under Development discontinued: Discontinued

Bei Verwendung der arm64 Architektur (Apple Silicium, M1) ist derzeit die Installation des opsi-client-agent der 'Dynamic Binary Translators' namens rosetta2 notwendig. Diesen können Sie Installieren mit:
softwareupdate --install-rosetta --agree-to-license Die erfolgreiche Installation können Sie Überprüfen mit:
pkgutil --pkgs | grep Rosetta
com.apple.pkg.RosettaUpdateAuto.

Die native Unterstützung der arm64 Architektur (Apple Silicium) ist in Planung. Hierzu sind die notwendigen Referenz Geräte bestellt. Aussagen wann die Bereitstellung für diese Plattform erfolgt können im Moment (Januar 2021) noch nicht getroffen werden.

4. Einspielen der minimalen macOS 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.

4.1. opsi-Standardsoftware für macOS unter opsi

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

  • opsi-mac-client-agent

  • swaudit

  • hwaudit

  • m-homebrew (siehe auch: Das opsi Produkt m-homebrew)

  • m-system-update

  • opsi-configed

  • opsi-logviewer

  • opsi-auto-update

  • m-javavm

  • opsi-setup-detector

  • windomain

4.2. Automatisches Einspielen der minimalen macOS 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 Mac-Clients findet sich im Verzeichnis /etc/opsi/package-updater.repos.d/ in den Dateien uib-mac-testing.repo und uib-mac.repo.

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

Listing 1. /etc/opsi/package-updater.repos.d/uib-mac-testing.repo
; This repository provides testing opsi products for managing macOS
; clients with opsi.

[repository_uib_macos_testing]
description = opsi macOS packages in testing
active = true
baseUrl = http://download.uib.de
dirs = opsi4.2/testing/packages/macos/localboot/
autoInstall = false
autoUpdate = true
autoSetup = false
; Set Proxy handler like: http://10.10.10.1:8080
proxy =
Listing 2. /etc/opsi/package-updater.repos.d/uib-mac.repo
; This repository provides table opsi roducts for managing macOS
; clients with opsi.

[repository_uib_macos_stable]
description = opsi macOS packages in stable
active = true
baseUrl = http://download.uib.de
dirs = opsi4.2/stable/packages/macos/localboot/
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_macos_stable install

bzw.

opsi-package-updater -v --repo uib_macos_testing 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_macos_stable]
…
proxy =

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

opsi-package-updater -v update

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

4.3. Manuelles Einspielen der macOS 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/macos/localboot bzw. unter https://download.uib.de/opsi4.2/testing/packages/macos/localboot.

Wir empfehlen die .opsi-Dateien unter /var/lib/opsi/repository zu speichern. Zum Sicherstellen, dass 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.

5. 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 Betriebssysteminstallation durch.

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

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

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

5.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.2/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:

Screenshot: Startbild opsi-client-boot-cd
Abbildung 1. 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.

Screenshot: bootimage/boot-cd Konfigurationsmaske
Abbildung 2. bootimage/boot-cd Konfigurationsmakse

Wählen Sie dann OK.

Screenshot: bootimage/boot-cd Auswahl Erstellungsmethode
Abbildung 3. 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.

Screenshot: bootimage/boot-cd Authentifizierungsmaske
Abbildung 4. bootimage/boot-cd Authentifizierungsmaske

Sie erhalten daher eine Loginmaske, bei der Sie sich als ein Mitglied der Gruppe opsiadmin-Gruppe 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.

Screenshot: bootimage/boot-cd netboot Produktauswahl
Abbildung 5. bootimage/boot-cd netboot Produktauswahl

5.2. Integration vorhandener macOS-Clients in opsi

Um vorhandene macOS-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 Agenten 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 Agenten eignet sich grundsätzlich der opsi-deploy-client-agent besser, wenn die dazu nötigen Freischaltungen auf den Mac-Clients vorhanden sind.

Falls bereits eine andere Möglichkeit existiert Software zu verteilen, so ist es ebenfalls möglich darüber den opsi-client-agent zu verteilen.

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

5.2.1. Verwendung des opsi-client-agent-installer auf macOS

  1. Loggen Sie sich mit auf dem Client ein.

  2. Laden Sie den Installer von ihrem configserver herunter. Der Installer liegt unter https://<fqdn_oder_ip_des_configservers>:4447/public/opsi-client-agent/ und hat den Dateinamen:
    Windows: opsi-client-agent-installer.exe
    Linux: opsi-linux-client-agent-installer.sh
    macOS: opsi-mac-client-agent-installer.sh

oca_installer_download
  1. Führen Sie den Installer aus (bei linux und macOS sind dabei root-Rechte erforderlich, also ggfs mit sudo - bei windows folgt später ggfs eine UAC Anfrage)

  2. Der Installer entpackt sich dann in ein temporäres lokales Verzeichnis und startet den enthaltenen oca-installation-helper.

oca_installer_start

Dieser zeigt ein Nutzer-Interface mit Eingabefeldern für Client-ID, Opsi Service URL, Username und Password. Soweit möglich (z.B. wenn auf dem Client eine vorhandene opsiclientd.conf gefunden wird) sind diese Felder vorausgefüllt, müssen aber gegebenenfalls noch manuell ergänzt oder angepasst werden.

  • Die Client-ID entspricht in der Regel dem FQDN des Clients.

  • Die opsi Service URL sollte das Format https://<fqdn_oder_ip_des_configservers>:4447 haben.

  • Username und Passwort sollten im Fall einer Erstinstallation des clients von einem Mitglied der Gruppe opsiadmin sein. Für eine Reinstallation kann hier auch die Client-Id und der pckey verwendet werden.

Nach dem Start des Installers über den Button Install, nimmt per opsi-Webservice Kontakt zum Server auf, um den Client beim Server zu registrieren. Anschließend wird das im Installer enthaltene opsi-script aufgerufen um den opsi-client-agent auf der Maschine zu installieren.

oca_installer_run

Nach Abschluß der Installation beendet sich der Installer.

Weitere Informationen zum opsi-client-agent Installer und seinen Kommandozeilenparametern und weiteren Möglichkeiten den opsi-client-agent zu installieren finden Sie im opsi-Handbuch im Kapitel Nachträgliche Installation des opsi-client-agents
https://download.uib.de/4.2/documentation/html/opsi-manual-v4.2/opsi-manual-v4.2.html#opsi-manual-clientagent-subsequent-installation

5.2.2. Verwendung von service_setup.sh auf macOS (Veraltet)

Die nachfolgend eschriebenen Methoden: service_setup / silent_setup dienen nur noch zur Abwärtskompatibilität zu opsi 4.1 und den entsprechenden opsi-client-agent Versionen 4.1. Bitte verwenden Sie soweit möglich den opsi-client-agent Installer.

Verwendung von service_setup.sh auf macOS (Erstinstallation)

Aufgrund der Sicherheitsrestriktionen von macOS ist die Möglichkeit Scripte von gemounteten shares auszuführen eingeschränkt. Der Versuch den im folgenden beschriebenen Vorgang mit über den Finder nach /Volumes (oder so) gemounteten share zu machen wird daher (je nach macOS Version) scheitern.

  • Loggen Sie sich auf dem Client ein.

  • Starten Sie das Terminal-Programm

  • Für die folgenden Befehle müssen Sie die folgenden Platzhalter ersetzen:

    • <username> mit Ihrem login Namen

    • <mnt> durch ein Verzeichnisnamen der noch nicht existiert z.B. 'mnt'

    • <serviceuser> durch einen Usernamen der auf dem opsi-server bekannt ist.

    • <servicepass> durch das Passwort des <serviceuser>. Sie können :<servicepass> zusammen mit der mount-Option -N auch weglassen, dann werden Sie nach dem Passwort gefragt

    • <opsi-server> durch den Namen oder die IP-Nummer des opsi-servers

sudo su
cd /Users/<username>
mkdir <mnt>
mount_smbfs //<serviceuser>@<opsi-server>/opsi_depot /Users/<username>/<mnt>
cd /Users/<username>/<mnt>/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/<username>/<mnt>

bzw. ohne Passwortabfrage

sudo su
cd /Users/<username>
mkdir <mnt>
mount_smbfs -N //<serviceuser>:<servicepass>@<opsi-server>/opsi_depot /Users/<username>/<mnt>
cd /Users/<username>/<mnt>/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/<username>/<mnt>

Beispiel:

sudo su
cd /Users/uib
mkdir mnt
mount_smbfs  //adminuser@sepia/opsi_depot /Users/uib/mnt
cd /Users/uib/mnt/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/uib/mnt
  1. Starten Sie von dem gemounteten share das Script opsi-mac-client-agent\service_setup.sh
    Bestätigen Sie mit 2 x Enter

  2. Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script.

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

Der Client benötigt nach der Installation ein Reboot um aktiv zu werden.
Der Reboot wird nicht automatisch ausgelöst.
Verwendung von service_setup.sh auf macOS (Reperaturinstallation)
  • Loggen Sie sich auf dem Client ein.

  • Starten Sie das Terminal-Programm

  • Für die folgenden Befehle müssen Sie die folgenden Platzhalter ersetzen:

    • <serviceuser> durch einen Usernamen der auf dem opsi-server bekannt ist.

    • <servicepass> durch das Passwort des <serviceuser>. Sie können :<servicepass> auch weglassen, dann werden Sie nach dem Passwort gefragt

    • <opsi-server> durch den Namen oder die IP-Nummer des opsi-servers

  • Bei der Erstinstallation hat opsi einen Versteckten Pseudo user Namens opsisetupadmin angelegt, in dessen 'Heimatverzeichnis' /var/opsisetupadmin sich auch das mount directory befindet.

sudo su
mount_smbfs -N //<serviceuser>:<servicepass>@<opsi-server>/opsi_depot /var/opsisetupadmin/opsi_depot
cd /var/opsisetupadmin/opsi_depot/opsi-mac-client-agent
./service_setup.sh
cd
umount /var/opsisetupadmin/opsi_depot

Beispiel:

sudo su
mount_smbfs -N //adminuser:linux123@sepia/opsi_depot /var/opsisetupadmin/opsi_depot
cd /var/opsisetupadmin/opsi_depot/opsi-mac-client-agent
./service_setup.sh
cd
umount /var/opsisetupadmin/opsi_depot
  1. Starten Sie das Script opsi-mac-client-agent\service_setup.sh
    Bestätigen Sie mit 2 x Enter

  2. Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script.

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

Der Client benötigt nach der Installation ein Reboot um aktiv zu werden.
Der Reboot wird nicht automatisch ausgelöst.

5.2.3. Verwendung von opsi-deploy-client-agent für macOS

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:

  • Administrativer User mit Passwort

  • ein aktivierter ssh Zugang

Leider sind bei macOS die ssh Zugänge per default deaktiviert. Zur Verwendung des opsi-deploy-client-agent Befehls müssen diese Zugange daher erst aktiviert werden.

Die kann interaktiv in den 'System preferences / sharing' gemacht werden:

Aktivierung des ssh Zugangs

Auf der Kommandozeile kann dies wie folgt gemacht werden:

sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

Eine Konrolle des aktuellen Status des ssh Zugangs ist möglich mit dem Befehl:

sudo systemsetup -getremotelogin

Die Deaktivierung des ssh Zugangs auf der Kommandozeile sieht wie folgt aus:

sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist

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 oder als ein user, der Teil der Gruppe "opsifileadmins" ist. 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.
Die Installation läuft im Hintergrund ohne das ein User davon etwas bemerken muß.

Der Befehl opsi-deploy-client-agent hat eine Fülle von Aufrufparametern.
Bei allen nachfolgenden Beispielen wird davon ausgegangen, das Sie in das Stammverzeichnis des opsi-client-agent Produktes gewechselt sind:

cd /var/lib/opsi/depot/opsi-mac-client-agent

Typische Aufrufe sind:

  • Für einen einzelnen Client:

./opsi-deploy-client-agent -v --user=uib uib-mmini1

Ergibt folgende Ausgabe:

Password is required for deployment.
Password:
[5] [2021-02-04 16:43:43.121] [               ] Starting deployment to host uib-mmini1.uib.local   (posix.py:84)
[5] [2021-02-04 16:43:43.121] [               ] Querying for ip address of host uib-mmini1.uib.local   (common.py:158)
[5] [2021-02-04 16:43:43.122] [               ] Got ip address 192.168.10.70 from syscall   (common.py:167)
[5] [2021-02-04 16:43:43.123] [               ] Pinging host 192.168.10.70 ...   (common.py:183)
[5] [2021-02-04 16:43:44.146] [               ] Host 192.168.10.70 is up   (common.py:194)
[5] [2021-02-04 16:43:44.153] [               ] Patching config.ini   (posix.py:91)
[5] [2021-02-04 16:43:44.157] [               ] Copying installation scripts...   (posix.py:107)
[5] [2021-02-04 16:43:48.316] [               ] Running installation script...   (posix.py:147)
[5] [2021-02-04 16:43:53.382] [               ] opsi-client-agent successfully installed on uib-mmini1.uib.local   (posix.py:176)
[5] [2021-02-04 16:43:53.395] [               ] Restarting opsiclientd service on computer: uib-mmini1   (posix.py:331)
[5] [2021-02-04 16:43:55.620] [               ] 1/1 deployments successfully   (__init__.py:210)
  • Für eine Liste von Clients:

./opsi-deploy-client-agent -v --user=uib --hosts-from-file HOSTFILE.TXT  --skip-existing-clients

Hier ist HOSTFILE.TXT eine Datei mit einem Clientnamen (FQDN) pro Zeile. Soweit die Clients dem opsi-server noch nicht bekannt sind, wird versucht den opsi-mac-client-agent auf dieser Maschine zu installieren

  • Anzeigen alle Kommandozeilen Parameter:

./opsi-deploy-client-agent --help

6. Rollout existierender Produkte auf macOS

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

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

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

6.2. Verteilung von opsi Standard Produkten: m-homebrew

Dieses Produkt installiert das Paketverwaltungsprogramm homebrew welches von verschiedenen anderen opsi-Produkten für macOS verwendet wird, z.B. zur Installation von Java.

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

Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt m-homebrew, 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) oder pushen Sie die Installation per on_demand Er sollte jetzt den opsi-client-agent starten und das Produkt m-homebrew installieren.

6.3. Verteilung von opsi Standard Produkten: m-javavm

Dieses Produkt installiert die Java Runtime Umgebung welche von verschiedenen anderen opsi-Produkten für macOS verwendet wird, z.B. opsi-configed, opsi-logviewer

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

Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt m-javavm, 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) oder pushen Sie die Installation per on_demand Er sollte jetzt den opsi-client-agent starten und das Produkt _m-javavm installieren.

6.4. Verteilung von opsi Standard Produkten: opsi-configed

Achtung: m-homebrew und m-javavm müssen bereits installiert sein!

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 unter Applications den Punkt opsi-configed finden.

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

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

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

Auch zu finden über:
https://uib.de/de/opsi-dokumentation/dokumentationen/
Besonders wichtig:
opsi-script-reference-card und opsi-script-Handbuch

Wiki (Scripte, Tipps, Links):

https://forum.opsi.org/wiki

Support Forum:

siehe https://forum.opsi.org

7.1.2. Methoden der nicht interaktiven Softwareinstallation bei MacOS

Apple hat (im Gegensatz zu Microsoft) sehr früh die Methoden zur Software Installation standardisiert. Im Kern gibt es zwei Methoden:

  • application Directory:
    Es handelt sich um ein Verzeichnis nach dem Muster: <Application name>.app Ein solches Verzeichnis wird aber im Finder nicht als Verzeichnis angezeigt, sondern als 'Anwendung'. Innerhalb dieses Verzeichnisses müssen sich nach einem bestimmten Muster die Dateien der Anwendung befinden. Ein typischer Aufbau wäre:

opsi-script-gui.app
  |--Contents
       |-Info.plist
       |-PkgInfo
       |-MacOS
       |  |-opsi-script-gui
       |
       |-Resources
          |- (....)

Ein solches Verzeichnis muß zur Installation nur in das Verzeichnis /Applications kopiert werden. Evtl. müssen noch Dateien im Verzeichnis MacOS ausführbar gemacht werden.
Solche *.app Verzeichnisse werden zum Download zumeist gepackt angeboten.

  • PKG file:
    Diese Dateien enthalten Software die über einen speziellen Befehl installiert werden müssen.

In beiden Fällen ist eine unattended (also nicht interaktive) Installation kein Problem.

Häufig wird macOS Software in gepackten Formaten angeboten wie *.zip, *.dmg oder auch *.tgz.

Alle bisher genannten Varianten können per opsi-script direkt installiert werden, außer *.tgz welches vorher ausgepackt werden muß.

7.1.3. Struktur eines opsi-script Skripts

Im folgenden werden die wesentlichen Elemente eines opsi-script Skriptes an Beispielen für Windows erläutert.

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

[Actions]
WinBatch_tightvnc_silent_install

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

Ein opsi-script-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 tightvnc-1.3.9-setup.exe mit dem Parameter /silent gestartet.

7.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 elseif else endif Anweisungen

  • for Schleifen über Stringlisten

  • Funktionen

Abbildung: Vermeidung doppelten Codes über ausgegliederte Sub
Abbildung 6. Vermeidung doppelten Codes über ausgegliederte Sub

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

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

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

7.1.8. Elementare Befehle für primäre Sektionen

String-Variable
Variablen-Deklaration

DefVar <variable name> [= <initial value>]

Variablen-Zuweisung

Set <variable name> = <value>

Beispiel:

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

oder

DefVar $ProductId$ = "firefox"
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-script ausgeführt werden (DosBatch / Execwith) problemlos mit opsi-script-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 [elseif] [else] endif

Syntax:

if <condition>
	;statement(s)
[elseif <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
requiredOpsiscriptVersion

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

Weitere wichtige opsi-script Funktionen

Einen Überblick über die opsi-script Funktionen gibt die Referencecard:
https://download.uib.de/opsi_stable/doc/opsi-script-reference-card-en.pdf

Eine detaillierte Dokumentation ist im opsi-script Handbuch zu finden:
http://download.uib.de/opsi_stable/doc/opsi-script-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-script-Dokus.

ExitWindows:

Neustart/Herunterfahren des Systems und Beendung des opsi-script.

  • ExitWindows /Reboot
    Rechner-Neustart nach Abschluss des laufenden Skriptes.

  • ExitWindows /ImmediateReboot
    Sofortiger Neustart.

  • ExitWindows /ImmediateLogout
    Sofortige Beendigung der Skript-Bearbeitung und Beendung des opsi-script.

Produkteigenschaften:

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-

Spezielle Kommandos für macOS
  • GetOS // liefert: Linux or Windows_NT or macos [W/L/M]

  • getMacosVersionInfo [M]

  • getMacosVersionMap [M]

In den folgenden Kapiteln werden spezielle opsi MacOS Befehle zur Installation von Software vorgestellt welche aus der opsi-script Library uib_macosinstalllib stammen. Diese Dokumentation ist in Englisch, da sie direkt aus dem Quellcode automatisch generiert wurde.

Documentation of opsi library: uib_macosinstalllib.opsiscript

Documentation of local function install_macos_app
Definition

install_macos_app($myapp$ : string) : string

Description

try to install the app given by $myapp$

Example:

[Actions]
importlib "uib_macosinstalllib"

DefVar $installfile$
DefVar $installresult$

comment "we have a *.app (directory) and install with install_macos_app"
set $installfile$ = "%scriptpath%/files/my_macos_app.app"
set $installresult$ = install_macos_app($installfile$)
if stringtobool($installresult$)
	comment "installation succseeded"
else
	LogError "installation failed"
endif

Documentation of local function install_macos_pkg
Definition

install_macos_pkg($mypkg$ : string) : string

Description

try to install the pkg file given by $mypkg$

Example:

[Actions]
importlib "uib_macosinstalllib"

DefVar $installfile$
DefVar $installresult$

comment "we have a *.pkg and install with install_macos_pkg"
set $installfile$ = "%scriptpath%/files/my_macos_app.pkg"
set $installresult$ = install_macos_pkg($installfile$)
if stringtobool($installresult$)
	comment "installation succseeded"
else
	LogError "installation failed"
endif

Documentation of local function install_macos_dmg
Definition

install_macos_dmg($mydmg$ : string) : string

Description

try to install the dmg file given by $mydmg$

Example:

[Actions]
importlib "uib_macosinstalllib"

DefVar $installfile$
DefVar $installresult$

comment "we have a *.dmg and install with install_macos_dmg"
set $installfile$ = "%scriptpath%/files/my_macos_app.dmg"
set $installresult$ = install_macos_dmg($installfile$)
if stringtobool($installresult$)
	comment "installation succseeded"
else
	LogError "installation failed"
endif

Documentation of local function install_macos_zip
Definition

install_macos_zip($myzip$ : string) : string

Description

try to install the zip file given by $myzip$ unzips the file and try to find a installable part (*.app, *.pkg, *.dmg) and try to install this

Example:

[Actions]
importlib "uib_macosinstalllib"

DefVar $installfile$
DefVar $installresult$

comment "we have a *.zip and install with install_macos_zip"
set $installfile$ = "%scriptpath%/files/my_macos_app.zip"
set $installresult$ = install_macos_zip($installfile$)
if stringtobool($installresult$)
	comment "installation succseeded"
else
	LogError "installation failed"
endif

Documentation of local function install_macos_generic
Definition

install_macos_generic($myfile$ : string) : string

Description

try to install the file given by $myfile$ Checks if the file is a well known installable (*.app, *.pkg, *.dmg, *.zip) and try to install this

Example:

see: install_macos_generic
[Actions]
importlib "uib_macosinstalllib"

DefVar $installfile$
DefVar $installresult$

comment "we have a *.* and install with install_macos_generic"
set $installfile$ = "%scriptpath%/files/opsi-script.app"
set $installresult$ = install_macos_generic($installfile$)
if stringtobool($installresult$)
	comment "installation succseeded"
else
	Error "installation failed"
endif

7.1.9. Beispiel: MacOS-Template m-opsi-template

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

Listing 3. declarations.opsiinc: Variable Declaration
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org    https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------

; -------------------------------------
; include file for opsi-setup-detector products
; Define all variables here
;---------------------------
DefVar $arch$
DefVar $errorstring$
DefVar $exitcode$
DefVar $iconfile$
DefVar $installerSourceDir$
DefVar $installCommand$
DefVar $installSuccess$
DefVar $installdir$
DefVar $installdir1$
DefVar $installdir2$
DefVar $installerfile$
DefVar $minimumspace$
DefVar $oldProgFound$
DefVar $os$
DefVar $osshort$
DefVar $ProdVersion$
DefVar $productid$
DefVar $targetfile$
DefVar $tmpstr$

DefVar $targetprogram$
Listing 4. setup.opsiscript: Installation Script
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org    https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8

[Actions]
requiredOpsiscriptVersion >= "4.12.4.23"

importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"
importlib "uib_macosinstalllib.opsiscript"


; All variables are defined here:
include_insert "declarations.opsiinc"

; ----------------------------------------------------------------
; Please edit the following values:
; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a separator
Set $ProductId$		 = "m-opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$	= "/Applications/<product.app>"
Set $InstallDir$		= "/Applications/<productid.app>"
; ----------------------------------------------------------------

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

set $OS$ = GetOS

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

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



if FileExists("%ScriptPath%\delinc.opsiinc")
	comment "Start uninstall part"
	include_insert "%ScriptPath%\delinc.opsiinc"
endif

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

set $installerSourceDir$ = ""


comment "Start installer "
ChangeDirectory $installerSourceDir$
;----------------------------------------------
set $installSuccess$ = install_macos_generic("%SCRIPTPATH%/files1/<my macos install file>")
;----------------------------------------------
if $installSuccess$  = "false"
	LogError "Installation failed"
	isfatalerror "Installation failed"
else
	Comment "Installation success"
endif



comment "Copy files"
Files_install

[Files_uninstall]
del -sf "$InstallDir$/"


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



; ----------------------------------------------------------------
; ----------------------------------------------------------------
Listing 5. delinc.opsiinc: Deinstallation Include Script
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org    https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8

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

comment "Start the Uninstall check:"
set $oldProgFound$ = "false"
if directoryExists($InstallDir$)
	set $oldProgFound$ = "true"
endif

f $oldProgFound$ = "true"
comment "Is the Installdir in the Applications directory ?"
if "1" = strPos(lower($InstallDir$),lower("/Applications/"))
	comment "Do not delete the whole /Applications dir ..."
	if not(lower($InstallDir$) = lower('/Applications/'))
		Message "Uninstalling " + $ProductId$ + " ..."
		Files_uninstall
	endif
endif
endif;-----------------------------------------------------
Listing 6. uninstall.opsiscript: Deinstallation Script
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org    https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8

[Actions]
requiredOpsiscriptVersion >= "4.12.4.23"

importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"
importlib "uib_macosinstalllib.opsiscript"


; All variables are defined here:
include_insert "declarations.opsiinc"

; ----------------------------------------------------------------
; Please edit the following values:
; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a separator
Set $ProductId$		 = "m-opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$	= "/Applications/<product.app>"
Set $InstallDir$	= "/Applications/<productid.app>"
; ----------------------------------------------------------------

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

set $OS$ = GetOS

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

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



if FileExists("%ScriptPath%\delinc.opsiinc")
	comment "Start uninstall part"
	include_insert "%ScriptPath%\delinc.opsiinc"
endif



[Files_uninstall]
del -sf "$InstallDir$/"


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

7.2. Erstellen eines opsi-Produkt-Pakets

7.2.1. Installation des opsi-package-builder

Den opsi-package-builder 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.

Sie können den opsi-package-builder auch per opsi installieren:

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

opsi-package-updater install opsipackagebuilder_wlm

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

7.2.2. Installation des opsi-setup-detector

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

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.2/misc/helper/

Die Basis Funktionalität des opsi-setup-detector auf den unterschiedlichen Betriebssystemen ist gleich. Bei der Analyse einer Installationsdatei werden aber eventuell Hilfprogramme aufgerufen, welche nicht überall verfügbar bzw. lauffähig sind.

  • Genauere Analyse von Inno-Setups verwendet innounpack.exe unter Windows.

  • Genauere Analyse von wix-setups verwendet dark.exe unter Windows.

  • .deb bzw. .rpm Dateien werden mit den entsprechenden Linux Werkzeugen analysiert.

Das opsi-Produkt opsi-setup-detector hat eine Abhängigkeit zu dem opsi-Produkt opsi-package-builder_wlm. 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.

7.2.3. 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.2/misc/helper/

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

7.2.4. Das Programm opsi-setup-detector zum Erstellen eines macOS Scriptes

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

Konfigurationsdialog
Abbildung 7. opsi-setup-detector Notwendige Konfiguration beim ersten Start

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.

Optional: Verbindungsdaten zu dem opsi-webservice:

  • Service_URL :Die URL des opsi webservice (wie: https://:<opsi-server>:4447)

  • Service_user : Der user name für die Verbindung zum opsi Webservice

  • Service_pass : Das Passwort des angegebenen users für die Verbindung zum opsi webservice.
    ACHTUNG SICHERHEITSRISIKO: Auch wenn das Passwort verschlüsselt abgespeichert wird, so läßt es sich doch nach einer Analyse des (offenen) Quellcodes entschlüsseln. Es wird nach dem Passwort gefragt, wenn hier nichts steht.

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

Startpage
Abbildung 8. opsi-setup-detector Start

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:

  • OS unabhängig

  • Windows

  • Linux

  • MacOS

  • Multiplattform

Die angebotenen Aufgaben für macOS:

  1. Analysiere Datei und erzeuge ein opsi Paket
    Hier wird von einer macOS Installer-Datei ausgegangen und der gesamte Ablauf bis zur Erzeugung eines opsi-Paketes durchlaufen. Dieser Prozeß ist analog dem für Windows im nächsten Kapitel beschrieben.

  2. Eine opsi Paketvorlage (Template) erzeugen
    Dieser Punkt fragt nicht nach einer Setup-Datei, sondern erstellt ein opsi template Produkt für macOS bei dem die Angaben aus der Produktkonfiguration bereits übernommen werden.

Die nun folgenden Screenshots zeigen zwar die Verwendung von Windows-Installer Dateien, sie sehen aber analog aus bei der Verwendung von MacOS Installer Dateien wie *.app, *.dmg, *.zip.

7.2.6. opsi-setup-detector: Analysiere eine Datei und erzeuge ein opsi Paket

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