Opsi MacOS client manual - uib gmbh

Die Seite wird erstellt Kristina Peters
 
WEITER LESEN
Opsi MacOS client manual - uib gmbh
opsi MacOS client manual
                   uib gmbh
Opsi MacOS client manual - uib gmbh
Table of Contents
1. Copyright . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2. Einführung MacOS Clients in opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Konventionen dieses Dokuments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4. Voraussetzungen für MacOS Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
5. Einspielen der minimalen MacOS opsi-Produkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.1. opsi-Standardsoftware für MacOS unter opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.2. Automatisches Einspielen der minimalen MacOS opsi-Produkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
    5.3. Manuelles Einspielen der MacOS opsi-Produkte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6. Integration vorhandener MacOS-Clients in opsi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
    6.1. Verwendung von service_setup.sh auf MacOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
        6.1.1. Verwendung von service_setup.sh auf MacOS (Erstinstallation) . . . . . . . . . . . . . . . . . . . . . . . . . 8
        6.1.2. Verwendung von service_setup.sh auf MacOS (Reperaturinstallation). . . . . . . . . . . . . . . . . . . 10
    6.2. Verwendung von opsi-deploy-client-agent für MacOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7. Rollout existierender Produkte auf MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
    7.1. Inventarisierung mit dem localboot-Produkten hwaudit und swaudit. . . . . . . . . . . . . . . . . . . . . . . 14
    7.2. Verteilung von opsi Standard Produkten: m-homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
    7.3. Verteilung von opsi Standard Produkten: m-javavm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
    7.4. Verteilung von opsi Standard Produkten: opsi-configed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
8. Einbindung eigener Software in die Softwareverteilung von opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
    8.1. Ein kleines Tutorial zur Erstellung eines opsi-script Scriptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
        8.1.1. Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
        8.1.2. Methoden der nicht interaktiven Softwareinstallation bei MacOS . . . . . . . . . . . . . . . . . . . . . . 17
        8.1.3. Struktur eines opsi-script Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
        8.1.4. Primäre Sektionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
        8.1.5. Wichtige sekundäre Sektionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
        8.1.6. Globale Konstanten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
        8.1.7. Zweites Beispiel: tightvnc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
        8.1.8. Elementare Befehle für primäre Sektionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
        8.1.9. Drittes Beispiel: MacOS-Template 'm-opsi-template' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
    8.2. Erstellen eines opsi-Produkt-Pakets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
        8.2.1. Installation des opsi-setup-detector, opsi PackageBuilder und opsi-logviewer . . . . . . . . . . . . 35
        8.2.2. Das Programm opsi-setup-detector zum Erstellen eines MacOS Scriptes . . . . . . . . . . . . . . . . . 37
        8.2.3. Das Programm opsi PackageBuilder zum modifizieren eines Scriptes . . . . . . . . . . . . . . . . . . . 48
        8.2.4. Testen und verbessern eines opsi-script Skriptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
        8.2.5. Packen mit opsi-makepackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
        8.2.6. Installieren mit opsi-package-manager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
        8.2.7. Beispiel einer 'control' Datei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Opsi MacOS client manual - uib gmbh
8.2.8. Erstellen eines opsi-paketes mit dem CLI tool opsi-newprod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
9. Allgemeine Hinweise zu MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
   9.1. Das Keyboard unter MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
   9.2. Das opsi Produkt m-homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
   9.3. Der MacOS pseudo user opsisetupadmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
   9.4. Die opsi Verzeichnisse auf MacOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
   9.5. MacOS Directory Struktur mit 'go' und 'nogo' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
10. Weitere Informationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Opsi MacOS client manual - uib gmbh
Chapter 1. Copyright                                                                        1 / 74

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

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:

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.
Opsi MacOS client manual - uib gmbh
Chapter 2. Einführung MacOS Clients in opsi                                                     2 / 74

Chapter 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

    a. Spezielle Befehle für MacOS

    b. Directories die Sie verwenden dürfen

    c. Der pseudo user opsisetupadmin
Opsi MacOS client manual - uib gmbh
Chapter 3. Konventionen dieses Dokuments                                                  3 / 74

Chapter 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
Opsi MacOS client manual - uib gmbh
Chapter 4. Voraussetzungen für MacOS Clients                                              4 / 74

Chapter 4. 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 kofinanzierte 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/opsi_stable/doc/html/opsi-manual/opsi-manual.html#opsi-manual-modules

Technische Voraussetzungen ist ein opsi-server mit opsi 4.1.

Als Mac-Clients werden unterstützt:

 • MacOS Versionen von 10.13 bis 11.0
   (High Sierra bis Big Sur) in der intel x64 Architektur

 • 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.
Opsi MacOS client manual - uib gmbh
Chapter 5. Einspielen der minimalen MacOS opsi-Produkte                                      5 / 74

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

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

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

Sollten diese Dateien bei Ihnen noch nicht installiert sein, so finden Sie diese unter:

Aktivieren Sie die gewünschten repos in dem Sie in der gewünschten *.repo Datei den Eintrag active
Opsi MacOS client manual - uib gmbh
Chapter 5. Einspielen der minimalen MacOS opsi-Produkte                               6 / 74

= true setzen.

/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.1/testing/packages/macos/localboot/
  autoInstall = false
  autoUpdate = true
  autoSetup = false
  ; Set Proxy handler like: http://10.10.10.1:8080
  proxy =

/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.1/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.
Opsi MacOS client manual - uib gmbh
Chapter 5. Einspielen der minimalen MacOS opsi-Produkte                                    7 / 74

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.

5.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.1/stable/packages/macos/localboot bzw. unter https://download.uib.de/
opsi4.1/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
.opsi installieren.
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                      8 / 74

Chapter 6. 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 und das im Paket mitgelieferte Script silent_setup.sh
auszuführen.

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

6.1. Verwendung von service_setup.sh auf MacOS
6.1.1. 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:

     ◦  mit Ihrem login Namen

     ◦  durch ein Verzeichnisnamen der noch nicht existiert z.B. 'mnt'

     ◦  durch einen Usernamen der auf dem opsi-server bekannt ist.

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

     ◦  durch den Namen oder die IP-Nummer des opsi-servers
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                   9 / 74

  sudo su
  cd /Users/
  mkdir 
  mount_smbfs //@/opsi_depot /Users//
  cd /Users///opsi-mac-client-agent
  ./service_setup.sh
  cd
  umount /Users//

bzw. ohne Passwortabfrage

  sudo su
  cd /Users/
  mkdir 
  mount_smbfs -N //:@/opsi_depot
  /Users//
  cd /Users///opsi-mac-client-agent
  ./service_setup.sh
  cd
  umount /Users//

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.
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                     10 / 74

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

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

     ◦  durch einen Usernamen der auf dem opsi-server bekannt ist.

     ◦  durch das Passwort des . Sie können : auch
       weglassen, dann werden Sie nach dem Passwort gefragt

     ◦  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 //:@/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
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                 11 / 74

   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.

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

Auf der Kommandozeile kann dies wie folgt gemacht werden:
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                          12 / 74

  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. 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:
Chapter 6. Integration vorhandener MacOS-Clients in opsi                                           13 / 74

  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
Chapter 7. Rollout existierender Produkte auf MacOS                                            14 / 74

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

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

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

Siehe auch: Das opsi Produkt m-homebrew

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
Chapter 7. Rollout existierender Produkte auf MacOS                                         15 / 74

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.

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

7.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'.
Chapter 7. Rollout existierender Produkte auf MacOS                                          16 / 74

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.
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                    17 / 74

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

8.1. Ein kleines Tutorial zur Erstellung eines opsi-script
Scriptes
8.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

8.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: .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:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                  18 / 74

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

8.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
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                       19 / 74

Windows-API ausgeführt.
In diesem Fall wird also das Setup-Programm 7z.exe mit dem Parameter /S gestartet.

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

Figure 1. Vermeidung doppelten Codes über ausgegliederte Sub

8.1.5. Wichtige sekundäre Sektionen

Files
   Datei-Operationen, wie:

     • kopieren (mit Versionskontrolle, rekursiv …)

     • löschen
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi              20 / 74

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

8.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
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                      21 / 74

%opsiTmpDir%
   c:\

%Scriptpath%
   
8.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")

8.1.8. Elementare Befehle für primäre Sektionen

String-Variable

Variablen-Deklaration
   'DefVar '

Variablen-Zuweisung
   'Set  = '

Beispiel:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                      22 / 74

  DefVar $ProductId$
  Set $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-winst'
                  ausgeführt werden (DosBatch / Execwith) problemlos mit opsi-winst-Variablen
                  gearbeitet werden kann.

Message / ShowBitmap

Zur Textausgabe während der Installation:
Message 

Beispiel:

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

Zur Ausgabe einer Grafik während der Installation:
ShowBitmap  

Beispiel:

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

if [else] endif

Syntax:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                   23 / 74

  if 
       ;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:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                    24 / 74

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-

Spezielle Kommandos für MacOS

 • GetOS // liefert: Linux or Windows_NT or macos [W/L/M]

 • getMacosVersionInfo [M]

 • getMacosVersionMap [M]

Siehe auch:
http://bonifax.uib.local/opsidoc/git-stable/html/opsi-winst-manual/opsi-winst-manual.html#opsi-winst-
macos-functions

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.
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                    25 / 74

Documentation of opsi library: uib_macosinstalllib.opsiscript

 • Email: d.oertel@uib.de

 • Version: 1.0

 • Copyright: AGPLv3

Documentation of local function install_macos_app

Definition
   install_macos_app($myapp$ : string) : string

Description
   try to install the app given by $myapp$

     • Parameter: $myapp$

         ◦ Type: String - Calltype: CallByValue

         ◦ Parameter $myapp$ Description:
           string with path to app to install

     • Returns: Returns string "true" if all is ok

     • OnError: Returns string "false"; error counter increased ; Error messages in the log

     • References:           [install_macos_pkg]             [install_macos_dmg]    [install_macos_zip]
       [install_macos_generic]

     • Author: detlef oertel

     • Date: 28.12.2020

     • Email: d.oertel@uib.de

     • Version: 1.0

     • Copyright: AGPLv3

Example:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                    26 / 74

  [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$

     • Parameter: $mypkg$

         ◦ Type: String - Calltype: CallByValue

         ◦ Parameter $mypkg$ Description:
           string with path to pkg file to install

     • Returns: Returns string "true" if all is ok

     • OnError: Returns string "false"; error counter increased ; Error messages in the log

     • References:           [install_macos_app]             [install_macos_dmg]    [install_macos_zip]
       [install_macos_generic]

     • Author: detlef oertel

     • Date: 28.12.2020

     • Email: d.oertel@uib.de

     • Version: 1.0

     • Copyright: AGPLv3

Example:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                    27 / 74

  [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$

     • Parameter: $mydmg$

         ◦ Type: String - Calltype: CallByValue

         ◦ Parameter $mydmg$ Description:
           string with path to dmg file to install

     • Returns: Returns string "true" if all is ok

     • OnError: Returns string "false"; error counter increased ; Error messages in the log

     • References:            [install_macos_app]             [install_macos_pkg]   [install_macos_zip]
       [install_macos_generic]

     • Author: detlef oertel

     • Date: 28.12.2020

     • Email: d.oertel@uib.de

     • Version: 1.0

     • Copyright: AGPLv3

Example:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                       28 / 74

  [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

     • Parameter: $myzip$

         ◦ Type: String - Calltype: CallByValue

         ◦ Parameter $myzip$ Description:
           string with path to zip file to install

     • Returns: Returns string "true" if all is ok

     • OnError: Returns string "false"; error counter increased ; Error messages in the log

     • References:           [install_macos_app]             [install_macos_dmg]     [install_macos_pkg]
       [install_macos_generic]

     • Author: detlef oertel

     • Date: 28.12.2020

     • Email: d.oertel@uib.de

     • Version: 1.0

     • Copyright: AGPLv3

Example:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                       29 / 74

  [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

     • Parameter: $myfile$

         ◦ Type: String - Calltype: CallByValue

         ◦ Parameter $myfile$ Description:
           string with path to pkg file to install

     • Returns: Returns string "true" if all is ok

     • OnError: Returns string "false"; error counter increased ; Error messages in the log

     • References: [install_macos_app] [install_macos_dmg] [install_macos_zip] [install_macos_pkg]

     • Author: detlef oertel

     • Date: 28.12.2020

     • Email: d.oertel@uib.de

     • Version: 1.0

     • Copyright: AGPLv3

Example:
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi   30 / 74

  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

8.1.9. Drittes Beispiel: MacOS-Template 'm-opsi-template'

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

setup.opsiscript: Installationsscript

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

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

  DefVar   $ProductId$
  DefVar   $InstallDir$
  DefVar   $MinimumSpace$
  DefVar   $ExitCode$
  DefVar   $ErrorString$
  DefVar   $LicenseRequired$
  DefVar   $LicenseKey$
  DefVar   $LicensePool$
  DefVar   $OS$
  DefVar   $oldProgFound$
  DefVar   $installSuccess$

  ; import complete file !
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi             31 / 74

importlib "uib_exitcode.opsiscript"
importlib "%scriptpath%\osd-lib.opsiscript"
importlib "%scriptpath%\uib_macosinstalllib.opsiscript"

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

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%\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 "
ChangeDirectory "%SCRIPTPATH%/files1"
;----------------------------------------------
set $installSuccess$ = install_macos_generic("%SCRIPTPATH%/files1/")
;----------------------------------------------
Sub_check_installSuccess
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi      32 / 74

comment "Copy files"
Files_install

[Sub_check_installSuccess]
if $installSuccess$ = "false"
     LogError "Installation failed"
     isfatalerror "Installation failed"
else
     Comment "Installation success"
endif

[Files_install]
; Example of recursively copying some files into the installation directory:
;
; copy -s "%ScriptPath%\files\*.*" "$InstallDir$"
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi         33 / 74

delsub.opsiscript: Ausgelagerte Deinstallations-Sub-Sektion

  ; 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$ + " ..."

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

  if $oldProgFound$ = "true"
      Message "Uninstalling " + $ProductId$ + " ..."
      if not(($InstallDir$ = '') or ($InstallDir$ = 'unknown') or ($InstallDir$ =
  '/Applications/'))
          Files_uninstall
      endif
  endif

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

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

  [Linkfolder_remove_desktop_icon]
  ; check delete_element
  set_basefolder common_desktopdirectory
  set_subfolder ""
  delete_element $productId$

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

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
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi          34 / 74

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

DefVar   $ProductId$
DefVar   $InstallDir$
DefVar   $MinimumSpace$
DefVar   $ExitCode$
DefVar   $ErrorString$
DefVar   $LicenseRequired$
DefVar   $LicenseKey$
DefVar   $LicensePool$
DefVar   $OS$
DefVar   $oldProgFound$

; import complete file !
importlib "uib_exitcode.opsiscript"
importlib "%scriptpath%\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$      = "m-opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$   = "/Applications/"
Set $InstallDir$    = "unknown"
Set $LicenseRequired$ = "False"
Set $LicensePool$     = ""
; ----------------------------------------------------------------

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$

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

if FileExists("%ScriptPath%\delsub.opsiscript")
    comment "Start uninstall sub section"
Chapter 8. Einbindung eigener Software in die Softwareverteilung von opsi                  35 / 74

      Sub "%ScriptPath%\delsub.opsiscript"
  endif

  if $LicenseRequired$ = "true"
      comment "Licensing required, free license used"
      Sub_free_license
  endif

  [Sub_free_license]
  comment "License management is enabled and will be used"

  comment "Trying to free license used for the product"
  DefVar $result$
  Set $result$ = FreeLicense($LicensePool$)
  ; If there is an assignment of a license pool to the product, it is possible to use
  ; Set $result$ = FreeLicense("", $ProductId$)
  ;
  ; If there is an assignment of a license pool to a windows software id, it is possible
  to use
  ; DefVar $WindowsSoftwareId$
  ; $WindowsSoftwareId$ = "..."
  ; set $result$ = FreeLicense("", "", $WindowsSoftwareId$)

8.2. Erstellen eines opsi-Produkt-Pakets
8.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 PackageBuilder 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 PackageBuilder kommt nicht von 'uib' sondern aus der opsi-community von Holger Pandel
(Danke!).

Der opsi PackageBuilder unterliegt einer OpenSource Lizenz:
https://github.com/pandel/opsiPackageBuilder/blob/master/LICENSE_DE

Der opsi PackageBuilder 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 auch lesen