Opsi macOS client manual - uib gmbh

Die Seite wird erstellt Malin Bittner
 
WEITER LESEN
Opsi macOS client manual - uib gmbh
opsi macOS client manual
                   uib gmbh
Opsi macOS client manual - uib gmbh
Inhaltsverzeichnis
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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6. Integration vorhandener macOS-Clients in opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
     6.1. Verwendung des opsi-client-agent-installer auf macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
     6.2. Verwendung von service_setup.sh auf macOS (Veraltet) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
          6.2.1. Verwendung von service_setup.sh auf macOS (Erstinstallation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
          6.2.2. Verwendung von service_setup.sh auf macOS (Reperaturinstallation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
     6.3. Verwendung von opsi-deploy-client-agent für macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7. Rollout existierender Produkte auf macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
     7.1. Inventarisierung mit dem localboot-Produkten hwaudit und swaudit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
     7.2. Verteilung von opsi Standard Produkten: m-homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
     7.3. Verteilung von opsi Standard Produkten: m-javavm. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
     7.4. Verteilung von opsi Standard Produkten: opsi-configed. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
8. Einbindung eigener Software in die Softwareverteilung von opsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
     8.1. Ein kleines Tutorial zur Erstellung eines opsi-script Scriptes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
          8.1.1. Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
          8.1.2. Methoden der nicht interaktiven Softwareinstallation bei macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
          8.1.3. Struktur eines opsi-script Skripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
          8.1.4. Primäre Sektionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
          8.1.5. Wichtige sekundäre Sektionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
          8.1.6. Globale Konstanten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
          8.1.7. Zweites Beispiel: tightvnc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
          8.1.8. Elementare Befehle für primäre Sektionen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
          8.1.9. Drittes Beispiel: macOS-Template m-opsi-template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
     8.2. Erstellen eines opsi-Produkt-Pakets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
          8.2.1. Installation des opsi-setup-detector, opsi PackageBuilder und opsi-logviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
          8.2.2. Das Programm opsi-setup-detector zum Erstellen eines macOS Scriptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
          8.2.3. Das Programm opsi PackageBuilder zum modifizieren eines Scriptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
          8.2.4. Testen und verbessern eines opsi-script Skriptes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
          8.2.5. Packen mit opsi-makepackage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
          8.2.6. Installieren mit opsi-package-manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
          8.2.7. Beispiel einer 'control' Datei. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
          8.2.8. Erstellen eines opsi-paketes mit dem CLI tool opsi-newprod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
9. Allgemeine Hinweise zu macOS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
     9.1. Das Keyboard unter macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
     9.2. Das opsi Produkt m-homebrew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
     9.3. Der macOS pseudo user opsisetupadmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
     9.4. Die opsi Verzeichnisse auf macOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
     9.5. macOS Directory Struktur mit 'go' und 'nogo' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
10. Weitere Informationen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Opsi macOS client manual - uib gmbh
1. Copyright                                                                                                              1 / 60

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
2. Einführung macOS Clients in opsi                                                                     2 / 60

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
3. Konventionen dieses Dokuments                                                                                                 3 / 60

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.

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

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

macOS Version                                                                    Opsi 4.2             Opsi 4.1

12.0 (Monterey)

11.0 (Big Sur)

10.15 (Catalina)

10.14 (Mojave)

10.13 (High Sierra)

   : Supported     : Unsupported    : Under development      : 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 (April 2022) noch nicht getroffen werden.
Opsi macOS client manual - uib gmbh
5. Einspielen der minimalen macOS opsi-Produkte                                                                                   5 / 60

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.

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

/etc/opsi/package-updater.repos.d/uib-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 =
Opsi macOS client manual - uib gmbh
5. Einspielen der minimalen macOS opsi-Produkte                                                                              6 / 60

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

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.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 .opsi installieren.
Opsi macOS client manual - uib gmbh
6. Integration vorhandener macOS-Clients in opsi                                                                                         7 / 60

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.

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

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

  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.

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://:4447 haben.
Opsi macOS client manual - uib gmbh
6. Integration vorhandener macOS-Clients in opsi                                                                                  8 / 60

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

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

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

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

 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
6. Integration vorhandener macOS-Clients in opsi                                                                               9 / 60

 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.

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

6.2.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
6. Integration vorhandener macOS-Clients in opsi                                                                              10 / 60

    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.

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

Auf der Kommandozeile kann dies wie folgt gemacht werden:

 sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
6. Integration vorhandener macOS-Clients in opsi                                                                                       11 / 60

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:

 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
7. Rollout existierender Produkte auf macOS                                                                                        12 / 60

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 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
7. Rollout existierender Produkte auf macOS                                                                                       13 / 60

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.

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.
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                              14 / 60

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

 opsi-script.app
   |--Contents
        |-Info.plist
        |-PkgInfo
        |-MacOS
        | |-opsi-script
          | |-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.
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                              15 / 60

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

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

   • for Schleifen über Stringlisten

   • Funktionen
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                          16 / 60

Abbildung 1. Vermeidung doppelten Codes über ausgegliederte Sub

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

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

unterschiedlichen Sprachen oder Betriebssystem-Versionen) richtig gesetzt sind.

Beispiele:

%ProgramFiles32Dir%
    c:\programme

%Systemroot%
    c:\windows

%System%
    c:\windows\system32

%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:

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

oder

 DefVar $ProductId$ = "firefox"
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                            18 / 60

                    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 

Beispiel:

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

Zur Ausgabe einer Grafik während der Installation:
ShowBitmap  

Beispiel:

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

if [elseif] [else] endif

Syntax:

 if 
      ;statement(s)
 [elseif 
 ;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.
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                           19 / 60

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.

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:
https://download.uib.de/opsi_stable/doc/html/opsi-script-manual/opsi-script-manual.html#opsi-script-rc-macos-specific
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                             20 / 60

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

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

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

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:

 [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
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                                        22 / 60

      • Copyright: AGPLv3

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

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

 [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
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                                        23 / 60

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:

 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.
8. Einbindung eigener Software in die Softwareverteilung von opsi   24 / 60

define_vars_multi.opsiscript: Variablen deklaration
 ;   ----------------------------------------------------------------
 ;   This is a opsi-script file.
 ;   See https://opsi.org    https://uib.de
 ;   This code was originally created by opsi-setup-detector 4.2.0.10
 ;   ----------------------------------------------------------------

 ; -------------------------------------
 ; include file for opsi-setup-detector products
 ; Define all variables here
 ;---------------------------
 DefVar $arch$
 DefVar $distCodeName$
 DefVar $distRelease$
 DefVar $distroName$
 DefVar $distrotype$
 DefVar $errorstring$
 DefVar $exitcode$
 DefVar $iconfile$
 DefVar $installCommand$
 DefVar $installSuccess$
 DefVar $installdir$
 DefVar $installdir1$
 DefVar $installdir2$
 DefVar $installerfile$
 DefVar $licensekey$
 DefVar $licensepool$
 DefVar $licenserequired$
 DefVar $minimumspace$
 DefVar $msiid$
 DefVar $oldProgFound$
 DefVar $os$
 DefVar $osshort$
 DefVar $productid$
 DefVar $targetfile$
 DefVar $tmpstr$
 DefVar $uninstallprogram$

 DefStringlist $ListOfPackageNames$
 DefStringList $osinfomap$
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                          25 / 60

setup.opsiscript: Installationsscript
 ; ----------------------------------------------------------------
 ; This is a opsi-script file.
 ; See https://opsi.org    https://uib.de
 ; This code was originally created by opsi-setup-detector 4.2.0.10
 ; ----------------------------------------------------------------
 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 "define_vars_multi.opsiscript"

 ; ----------------------------------------------------------------
 ; 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 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/")
 ;----------------------------------------------
 if $installSuccess$ = "false"
      LogError "Installation failed"
      isfatalerror "Installation failed"
 else
      Comment "Installation success"
 endif

 comment "Copy files"
 Files_install

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

 ; ----------------------------------------------------------------
 ; ----------------------------------------------------------------
8. Einbindung eigener Software in die Softwareverteilung von opsi                                                          26 / 60

delsub.opsiscript: Ausgelagerte Deinstallations-Sub-Sektion
 ; ----------------------------------------------------------------
 ; This is a opsi-script file.
 ; See https://opsi.org    https://uib.de
 ; This code was originally created by opsi-setup-detector 4.2.0.10
 ; ----------------------------------------------------------------
 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$/"
 ;-----------------------------------------------------

uninstall.opsiscript: Deinstallations-Skript
 ; ----------------------------------------------------------------
 ; This is a opsi-script file.
 ; See https://opsi.org    https://uib.de
 ; This code was originally created by opsi-setup-detector 4.2.0.10
 ; ----------------------------------------------------------------
 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 "define_vars_multi.opsiscript"

 ; ----------------------------------------------------------------
 ; 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 seperator
 Set $ProductId$      = "m-opsi-template"
 ; 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$

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

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

 if $LicenseRequired$ = "true"
     comment "Licensing required, free license used"
     Set $tmpstr$ = FreeLicense($LicensePool$)
 endif
Sie können auch lesen