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, die neue Erweiterungen enthalten, welche noch unter Kofinanzierung stehen, also noch nicht bezahlt sind.
siehe auch: opsi-Erweiterungen als Kofinanzierungsprojekte
Der restliche Quellcode ist veröffentlicht unter der AGPLv3:
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.
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:
-
Aufnahme und Einbindung von Mac-Rechnern in opsi (Installation des opsi-mac-client-agent)
-
Bereitstellung von opsi Standardsoftware für Mac auf dem opsi-server
-
Installation von Standard Software auf den Mac-Clients
-
opsi-Standardsoftware für Mac unter opsi
-
Paketierung eigener Software
-
Erstellung von opsi-Paketen
-
Hinweise zu Mac Clients
-
Spezielle Befehle für macOS
-
Directories die Sie verwenden dürfen
-
Der pseudo user opsisetupadmin
-
2.1. Konventionen dieses Dokuments
Befehle werden gesondert hervorgehoben:
dies ist ein Befehl
Im Rahmen der Installation und Konfiguration können Sie die Befehle aus diesen Feldern in der Regel der Reihe nach per copy & paste aus diesem Dokument kopieren und ausführen.
Einzelne Befehle oder Dateinamen werden so hervorgehoben: opsi-set-rights
oder /Applications/opsi-script
.
Das ist ein opsi-script Code:
Message "Installing "+ $ProductId$ +" ..."
Kapitel welche den Namen einer bestimmten Plattform enthalten sind spezifisch für diese Plattform. Die unterstützen Plattformen sind:
-
Windows
-
Linux
-
macOS
3. Voraussetzungen für macOS Clients
Nachfolgend werden die Voraussetzungen für das Management von macOS Clients unter opsi beschrieben.
Der opsi-mac-client-agent ist eine
opsi Erweiterung.
Das bedeutet, dass Sie zum Einsatz eine Freischaltdatei benötigen. Diese Freischaltung erhalten Sie wenn Sie die Erweiterung kaufen. Zu Evaluierungszwecken stellen wir Ihnen auch eine zeitlich befristete Freischaltung kostenlos zur Verfügung ( → mail an info@uib.de).
Weitere Details hierzu finden Sie in
https://download.uib.de/opsi4.2/documentation/html/opsi-manual-v4.2/opsi-manual-v4.2.html#opsi-manual-extensions
Technische Voraussetzungen ist ein opsi-server mit opsi 4.1. oder höher.
Unterstützte macOS Versionen:
3.1. Supported as opsi-client: MacOS
Stand 16.02.2022
Distribution |
client-agent |
MacOS 10.13 HighSierra |
|
MacOS 10.14 Mojave |
|
MacOS 10.15 Catalina |
|
MacOS 11 BigSur |
|
MacOS 12 Monterey |
: 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 (Januar 2021) noch nicht getroffen werden.
4. Einspielen der minimalen macOS opsi-Produkte
Zur Verteilung von Software mit opsi stehen fertige Produkte zur Installation bereit. Diese beinhalten unter anderem den Agent ('opsi-client-agent'), welcher für das Management auf Clients installiert werden muss.
Es gibt eine automatische und manuelle Möglichkeit dies zu tun. Der automatisierte Weg wird empfohlen.
4.1. opsi-Standardsoftware für macOS unter opsi
Folgende Produkte werden von opsi für macOS als Standard zur Verfügung gestellt:
-
opsi-mac-client-agent
-
swaudit
-
hwaudit
-
m-homebrew
(siehe auch: Das opsi Produkt m-homebrew) -
m-system-update
-
opsi-configed
-
opsi-logviewer
-
opsi-auto-update
-
m-javavm
-
opsi-setup-detector
-
windomain
4.2. Automatisches Einspielen der minimalen macOS opsi-Produkte
Zur automatischen Installation der opsi-Produkte gibt es das Werkzeug opsi-package-updater
, welches wie in '/etc/opsi/opsi-package-updater.conf' bzw. /etc/opsi/package-updater.repos.d/
konfiguriert, automatisch die aktuellen Pakete vom opsi Repository holt und auf dem Server installiert.
Die Konfiguration der opsi Repositories für Mac-Clients findet sich im Verzeichnis /etc/opsi/package-updater.repos.d/
in den Dateien uib-mac-testing.repo
und uib-mac.repo
.
Aktivieren Sie die gewünschten repos in dem Sie in der gewünschten *.repo Datei den Eintrag active = true
setzen.
/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 =
/etc/opsi/package-updater.repos.d/uib-mac.repo
; This repository provides table opsi roducts for managing macOS
; clients with opsi.
[repository_uib_macos_stable]
description = opsi macOS packages in stable
active = true
baseUrl = http://download.uib.de
dirs = opsi4.2/stable/packages/macos/localboot/
autoInstall = false
autoUpdate = true
autoSetup = false
; Set Proxy handler like: http://10.10.10.1:8080
proxy =
Installieren Sie die Pakete auf dem Server durch die Ausführung des Befehls als root:
opsi-package-updater -v --repo uib_macos_stable install
bzw.
opsi-package-updater -v --repo uib_macos_testing install
Nach erfolgreicher Installation müssen Sie beim opsi-configed ein erneutes laden aller Daten ausführen, damit die neuen Produkte dort sichtbar werden.
Muss für den Zugriff auf das Internet die Verbindung über einen Proxy geleitet werden, so muss dieser in den .repo
-Konfigurationsdateien unter /etc/opsi/package-updater.repos.d/
als Wert für proxy
eingetragen werden.
Ab Version 4.1.1.33 von opsi-utils kann ein globaler Proxy in /etc/opsi/opsi-package-updater.conf
konfiguriert werden.
[repository_uib_macos_stable]
…
proxy =
Sollen später installierte Pakete aktualisiert werden, so kann dies mit dem folgenden Befehl gemacht werden:
opsi-package-updater -v update
Weitere Informationen zum opsi-package-updater
können im Handbuch gefunden werden.
4.3. Manuelles Einspielen der macOS opsi-Produkte
Es gibt auch die Möglichkeit manuell die Pakete herunter zu laden und zu installieren.
Holen Sie sich die aktuellen opsi-Pakete im .opsi
-Paketformat.
Die Pakete finden Sie unter https://download.uib.de/opsi4.2/stable/packages/macos/localboot bzw. unter https://download.uib.de/opsi4.2/testing/packages/macos/localboot
.
Wir empfehlen die .opsi-Dateien unter /var/lib/opsi/repository
zu speichern.
Zum Sicherstellen, dass opsiconfd auf die Dateien zugreifen kann, sollte opsi-set-rights /var/lib/opsi/repository
ausgeführt werden.
Nach dem Download müssen Sie die Pakete auf dem Server mit dem Befehl opsi-package-manager -i <paketname>.opsi
installieren.
5. Clients zu opsi hinzufügen
Damit Rechner mit opsi verwaltet werden können, müssen Sie dem System bekannt sein. Außerdem muss auf diesen Rechnern ein Agent laufen, damit eine Kommunikation zwischen Server und Client möglich ist. Ohne diesen Agent ist keine Verwaltung möglich.
Je nachdem in welcher Umgebung opsi eingesetzt werden soll, gibt es unterschiedliche Vorgehensweisen. Existieren in der Umgebung bereits Clients mit installiertem Betriebssystem, die ab sofort mit opsi verwaltet werden sollen, so können diese auf unterschiedlichen Wegen integriert werden.
Die Alternative hierzu ist, dass die zu verwalteten Rechner von opsi aus mit einem neuen Betriebssystem ausgestattet werden. Im Rahmen dieser Betriebssysteminstallation wird von opsi der benötigte Agent gleich mitinstalliert, allerdings wird dabei alle eventuell vorher vorhandene Software (inkl. Betriebssystem) entfernt. Bei diesem Vorgehen fügen Sie zuerst einen Client zu opsi hinzu und führen anschließend eine Betriebssysteminstallation durch.
5.1. Anlegen eines neuen opsi-Clients
Zur Verwaltung von Rechnern müssen diese dem opsi-Server bekannt sein. Dieses Kapitel beschreibt unterschiedliche Möglichkeiten einen Client in opsi für eine spätere Verwaltung anzulegen. Dies ist besonders dann hilfreich, wenn anschließend auf dem Rechner mittels opsi ein Betriebssystem installiert werden soll.
Für die Aufnahme von Clients mit bereits installiertem Betriebssystem lesen Sie bitte das Kapitel zur Integration vorhandener Clients.
5.1.1. Anlegen eines neuen opsi-Clients über die grafische Management-Oberfläche
Den Client können Sie mit der grafischen Oberfläche opsi-configed zum opsi-Server hinzufügen.
Wählen Sie den Menü-Punkt OpsiClient / Neuen opsi-Client erstellen und geben Sie ein:
-
Client-Name
-
DNS Domäne (falls abweichend von der Vorgabe)
-
Beschreibung
-
IP-Adresse (wird benötigt, falls kein DNS zur Namensauflösung für diesen Client verwendet werden kann)
-
MAC-Adresse (wird benötigt, falls der opsi-Server DHCP-Server ist oder PXE boot mit dem Client durchgeführt werden soll).
Nach Eingabeabschluss wird der Client dem opsi-Server bekanntgemacht und gleichzeitig, falls der opsi-Server DHCP Server ist, in der DHCP-Konfiguration als PXE-Client angelegt.
Die Liste der eingerichteten opsi-Clients kann jederzeit im opsi-configed Modus Client-Konfiguration unter dem Reiter Client-Auswahl eingesehen werden.
5.1.2. Anlegen eines neuen opsi-Clients über die Kommandozeile
Ein Client kann auf der Kommandozeile per opsi-admin
erzeugt werden.
Die Syntax ist die folgende:
opsi-admin -d method host_createOpsiClient <client-id> [opsiHostKey] [description] [notes] [hardwareAddress] [ipAddress] [inventoryNumber] [oneTimePassword] [created] [lastSeen]
Fehlende Werte verwenden in der Regel einen Standardwert - die meisten Felder sind dann leer.
Der folgende Befehl wird den Client testclient.domain.local
mit einem zufälligen Host Schlüssel,
der Beschreibung Testclient
, keinen Notizen, der MAC-Addresse 00:0c:29:12:34:56
und der IP-Adresse 192.0.2.1
anlegen:
opsi-admin -d method host_createOpsiClient testclient.domain.local "null" "Testclient" "" 00:0c:29:12:34:56 192.0.2.1
5.1.3. Anlegen eines neuen opsi-Clients mithilfe der opsi-client-bootcd
Auf der Downloadseite von uib finden Sie unter https://download.uib.de/opsi4.2/boot-cd/ verschiedene ISO-Abbilder der 'opsi-client-boot-cd'. Laden Sie sich das Neueste herunter und brennen es auf eine CD.
Starten Sie den Rechner von der CD. Sie sollten dann folgendes Bild sehen:
Wählen Sie Opsi starten. Nach einer Weile wird folgender Bildschirm erscheinen. Wenn Ihr DHCP-Server IP-Adressen an unbekannte Rechner vergibt ist die Maske schon weitgehend ausgefüllt. Ansonsten müssen Sie es von Hand tun. In der Regel müssen Sie mindestens den Hostnamen vergeben.
Wählen Sie dann OK.
Wählen Sie dann Admin account. Sie erklären damit, dass der Client sich selbst beim opsi-Server anmelden und erstellen soll. Dieser Vorgang muss natürlich autorisiert werden.
Sie erhalten daher eine Loginmaske, bei der Sie sich als ein Mitglied der Gruppe opsiadmin-Gruppe authentifizieren müssen. Wenn dies Erfolgreich war, so teilt der Client dem Server seine Daten mit und der Client wird auf der Serverseite automatisch erstellt. Als nächstes fragt der Client die Liste der verfügbaren netboot Produkte ab und stellt Sie Ihnen zur Auswahl zur Verfügung.
5.2. Integration vorhandener macOS-Clients in opsi
Um vorhandene macOS-Clients in opsi aufzunehmen, muss auf diesen der opsi-client-agent installiert werden. Dies kann auf mehrere Arten durchgeführt werden. Nachdem Sie, wie im Folgenden beschrieben, den opsi-client-agent installiert haben, erscheint der Client auch in der Client-Liste des opsi-configed, sofern Sie ihn dort noch nicht hinzugefügt hatten.
Grundsätzlich gibt es die Möglichkeit die Installation des Agenten auf dem Client auszuführen oder vom Server aus die Installation anzustoßen.
Das Ausführen der Installation direkt auf dem Client eignet sich für einzelne Rechner. Für einen Massen-Rollout des Agenten eignet sich grundsätzlich der opsi-deploy-client-agent besser, wenn die dazu nötigen Freischaltungen auf den Mac-Clients vorhanden sind.
Falls bereits eine andere Möglichkeit existiert Software zu verteilen, so ist es ebenfalls möglich darüber den opsi-client-agent zu verteilen.
Sobald der Agent installiert ist, können vorhandene opsi-Produkte auf diesen Clients installiert werden.
5.2.1. Verwendung des opsi-client-agent-installer auf macOS
-
Loggen Sie sich mit auf dem Client ein.
-
Laden Sie den Installer von ihrem configserver herunter. Der Installer liegt unter https://<fqdn_oder_ip_des_configservers>:4447/public/opsi-client-agent/ und hat den Dateinamen:
Windows: opsi-client-agent-installer.exe
Linux: opsi-linux-client-agent-installer.sh
macOS: opsi-mac-client-agent-installer.sh
-
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)
-
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://<fqdn_oder_ip_des_configservers>:4447 haben.
-
Username und Passwort sollten im Fall einer Erstinstallation des clients von einem Mitglied der Gruppe opsiadmin sein. Für eine Reinstallation kann hier auch die Client-Id und der pckey verwendet werden.
Nach dem Start des Installers über den Button Install
, nimmt per opsi-Webservice Kontakt zum Server auf, um den Client beim Server zu registrieren. Anschließend wird das im Installer enthaltene opsi-script
aufgerufen um den opsi-client-agent auf der Maschine zu installieren.
Nach Abschluß der Installation beendet sich der Installer.
Weitere Informationen zum opsi-client-agent Installer und seinen Kommandozeilenparametern und weiteren Möglichkeiten den opsi-client-agent zu installieren finden Sie im opsi-Handbuch im Kapitel Nachträgliche Installation des opsi-client-agents
https://download.uib.de/4.2/documentation/html/opsi-manual-v4.2/opsi-manual-v4.2.html#opsi-manual-clientagent-subsequent-installation
5.2.2. Verwendung von service_setup.sh auf macOS (Veraltet)
Die nachfolgend eschriebenen Methoden: service_setup / silent_setup dienen nur noch zur Abwärtskompatibilität zu opsi 4.1 und den entsprechenden opsi-client-agent Versionen 4.1. Bitte verwenden Sie soweit möglich den opsi-client-agent Installer.
Verwendung von service_setup.sh auf macOS (Erstinstallation)
Aufgrund der Sicherheitsrestriktionen von macOS ist die Möglichkeit Scripte von gemounteten shares auszuführen eingeschränkt. Der Versuch den im folgenden beschriebenen Vorgang mit über den Finder
nach /Volumes
(oder so) gemounteten share zu machen wird daher (je nach macOS Version) scheitern.
-
Loggen Sie sich auf dem Client ein.
-
Starten Sie das Terminal-Programm
-
Für die folgenden Befehle müssen Sie die folgenden Platzhalter ersetzen:
-
<username>
mit Ihrem login Namen -
<mnt>
durch ein Verzeichnisnamen der noch nicht existiert z.B. 'mnt' -
<serviceuser>
durch einen Usernamen der auf dem opsi-server bekannt ist. -
<servicepass>
durch das Passwort des <serviceuser>. Sie können:<servicepass>
zusammen mit der mount-Option-N
auch weglassen, dann werden Sie nach dem Passwort gefragt -
<opsi-server>
durch den Namen oder die IP-Nummer des opsi-servers
-
sudo su
cd /Users/<username>
mkdir <mnt>
mount_smbfs //<serviceuser>@<opsi-server>/opsi_depot /Users/<username>/<mnt>
cd /Users/<username>/<mnt>/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/<username>/<mnt>
bzw. ohne Passwortabfrage
sudo su
cd /Users/<username>
mkdir <mnt>
mount_smbfs -N //<serviceuser>:<servicepass>@<opsi-server>/opsi_depot /Users/<username>/<mnt>
cd /Users/<username>/<mnt>/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/<username>/<mnt>
Beispiel:
sudo su
cd /Users/uib
mkdir mnt
mount_smbfs //adminuser@sepia/opsi_depot /Users/uib/mnt
cd /Users/uib/mnt/opsi-mac-client-agent
./service_setup.sh
cd
umount /Users/uib/mnt
-
Starten Sie von dem gemounteten share das Script
opsi-mac-client-agent\service_setup.sh
Bestätigen Sie mit 2 x Enter -
Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script.
-
Das Skript nimmt per opsi-Webservice Kontakt zum Server auf um serverseitig den Client zu erzeugen und den pckey zu erfahren. Dies erfolgt zunächst mit der in der config.ini eingetragenen user/password Kombination. Schlägt dies fehl, so erscheint ein Login-Fenster mit Service-URL (opsi-configserver), Benutzername und Passwort. Hier wird ein Benutzer benötigt, der Mitglied der Gruppe 'opsiadmin' ist. Möglich ist auch ein Benutzer, welcher nur die Methode
host_createOpsiClient
ausführen darf.
Der Client benötigt nach der Installation ein Reboot um aktiv zu werden. Der Reboot wird nicht automatisch ausgelöst. |
Verwendung von service_setup.sh auf macOS (Reperaturinstallation)
-
Loggen Sie sich auf dem Client ein.
-
Starten Sie das Terminal-Programm
-
Für die folgenden Befehle müssen Sie die folgenden Platzhalter ersetzen:
-
<serviceuser>
durch einen Usernamen der auf dem opsi-server bekannt ist. -
<servicepass>
durch das Passwort des <serviceuser>. Sie können:<servicepass>
auch weglassen, dann werden Sie nach dem Passwort gefragt -
<opsi-server>
durch den Namen oder die IP-Nummer des opsi-servers
-
-
Bei der Erstinstallation hat opsi einen Versteckten Pseudo user Namens opsisetupadmin angelegt, in dessen 'Heimatverzeichnis'
/var/opsisetupadmin
sich auch das mount directory befindet.
sudo su
mount_smbfs -N //<serviceuser>:<servicepass>@<opsi-server>/opsi_depot /var/opsisetupadmin/opsi_depot
cd /var/opsisetupadmin/opsi_depot/opsi-mac-client-agent
./service_setup.sh
cd
umount /var/opsisetupadmin/opsi_depot
Beispiel:
sudo su
mount_smbfs -N //adminuser:linux123@sepia/opsi_depot /var/opsisetupadmin/opsi_depot
cd /var/opsisetupadmin/opsi_depot/opsi-mac-client-agent
./service_setup.sh
cd
umount /var/opsisetupadmin/opsi_depot
-
Starten Sie das Script
opsi-mac-client-agent\service_setup.sh
Bestätigen Sie mit 2 x Enter -
Das Skript kopiert die notwendigen Dateien in ein temporäres lokales Verzeichnis und startet dann zur eigentlichen Installation opsi-script.
-
Das Skript nimmt per opsi-Webservice Kontakt zum Server auf um serverseitig den Client zu erzeugen und den pckey zu erfahren. Dies erfolgt zunächst mit der in der config.ini eingetragenen user/password Kombination. Schlägt dies fehl, so erscheint ein Login-Fenster mit Service-URL (opsi-configserver), Benutzername und Passwort. Hier wird ein Benutzer benötigt, der Mitglied der Gruppe 'opsiadmin' ist. Möglich ist auch ein Benutzer, welcher nur die Methode
host_createOpsiClient
ausführen darf.
Der Client benötigt nach der Installation ein Reboot um aktiv zu werden. Der Reboot wird nicht automatisch ausgelöst. |
5.2.3. Verwendung von opsi-deploy-client-agent für macOS
Das opsi-deploy-client-agent
Skript verteilt den opsi-client-agent direkt vom opsi-Server auf die Clients.
Es ist hiermit einfach möglich eine große Menge an Clients vom Server aus in eine opsi-Umgebung zu integrieren.
Voraussetzung hierfür sind bei den Clients:
-
Administrativer User mit Passwort
-
ein aktivierter ssh Zugang
Leider sind bei macOS die ssh Zugänge per default deaktiviert.
Zur Verwendung des opsi-deploy-client-agent
Befehls müssen diese Zugange daher erst aktiviert werden.
Die kann interaktiv in den 'System preferences / sharing' gemacht werden:
Auf der Kommandozeile kann dies wie folgt gemacht werden:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
Eine Konrolle des aktuellen Status des ssh Zugangs ist möglich mit dem Befehl:
sudo systemsetup -getremotelogin
Die Deaktivierung des ssh Zugangs auf der Kommandozeile sieht wie folgt aus:
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
Das opsi-deploy-client-agent
Skript findet sich unter /var/lib/opsi/depot/opsi-client-agent
Führen Sie das Script mit 'root' Rechten aus oder als ein user, der Teil der Gruppe "opsifileadmins" ist.
Falls das Script nicht ausführbar ist, so können Sie dieses Problem mit dem folgenden Befehl beheben:
opsi-set-rights /var/lib/opsi/depot/opsi-client-agent/opsi-deploy-client-agent
Das Skript erzeugt serverseitig den Client, kopiert die Installations-Dateien und Konfigurationsinformationen, wie bspw. den pckey, auf den Client und startet dort die Installation.
Die Installation läuft im Hintergrund ohne das ein User davon etwas bemerken muß.
Der Befehl opsi-deploy-client-agent
hat eine Fülle von Aufrufparametern.
Bei allen nachfolgenden Beispielen wird davon ausgegangen, das Sie in das Stammverzeichnis des opsi-client-agent Produktes gewechselt sind:
cd /var/lib/opsi/depot/opsi-mac-client-agent
Typische Aufrufe sind:
-
Für einen einzelnen Client:
./opsi-deploy-client-agent -v --user=uib uib-mmini1
Ergibt folgende Ausgabe:
Password is required for deployment.
Password:
[5] [2021-02-04 16:43:43.121] [ ] Starting deployment to host uib-mmini1.uib.local (posix.py:84)
[5] [2021-02-04 16:43:43.121] [ ] Querying for ip address of host uib-mmini1.uib.local (common.py:158)
[5] [2021-02-04 16:43:43.122] [ ] Got ip address 192.168.10.70 from syscall (common.py:167)
[5] [2021-02-04 16:43:43.123] [ ] Pinging host 192.168.10.70 ... (common.py:183)
[5] [2021-02-04 16:43:44.146] [ ] Host 192.168.10.70 is up (common.py:194)
[5] [2021-02-04 16:43:44.153] [ ] Patching config.ini (posix.py:91)
[5] [2021-02-04 16:43:44.157] [ ] Copying installation scripts... (posix.py:107)
[5] [2021-02-04 16:43:48.316] [ ] Running installation script... (posix.py:147)
[5] [2021-02-04 16:43:53.382] [ ] opsi-client-agent successfully installed on uib-mmini1.uib.local (posix.py:176)
[5] [2021-02-04 16:43:53.395] [ ] Restarting opsiclientd service on computer: uib-mmini1 (posix.py:331)
[5] [2021-02-04 16:43:55.620] [ ] 1/1 deployments successfully (__init__.py:210)
-
Für eine Liste von Clients:
./opsi-deploy-client-agent -v --user=uib --hosts-from-file HOSTFILE.TXT --skip-existing-clients
Hier ist HOSTFILE.TXT eine Datei mit einem Clientnamen (FQDN) pro Zeile. Soweit die Clients dem opsi-server noch nicht bekannt sind, wird versucht den opsi-mac-client-agent
auf dieser Maschine zu installieren
-
Anzeigen alle Kommandozeilen Parameter:
./opsi-deploy-client-agent --help
6. Rollout existierender Produkte auf macOS
Für den Rollout von Software auf Clients muss auf diesen der opsi-client-agent installiert sein. Dieser kann auf bestehende Rechner ausgerollt werden.
Nachfolgend wird die Management-Oberfläche opsi-configed verwendet, um Software auf Clients zu verteilen.
6.1. Inventarisierung mit dem localboot-Produkten hwaudit und swaudit
Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Clients den betreffenden Client aus.
Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configeds mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons.
Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt hwaudit, daraufhin öffnet sich eine Liste/Dropdown-Menü und dort wählen Sie die Aktion setup. Wiederholen Sie das für das Produkt swaudit.
Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-Server übermittelt, im Anschluss ist seine Farbe wieder grün.
Starten Sie dann den Client (neu). Er sollte jetzt den opsi-client-agent starten und die Produkte hwaudit und swaudit installieren. Bei hwaudit und swaudit werden Hard- bzw. Softwareinformationen erhoben und zum opsi-Server übermittelt. Die gesammelten Informationen werden unter den Tabs Hardwareinformationen bzw. Software-Inventarisierung angezeigt.
6.2. Verteilung von opsi Standard Produkten: m-homebrew
Dieses Produkt installiert das Paketverwaltungsprogramm homebrew
welches von verschiedenen anderen opsi-Produkten für macOS verwendet wird, z.B. zur Installation von Java.
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.
6.3. Verteilung von opsi Standard Produkten: m-javavm
Dieses Produkt installiert die Java Runtime Umgebung welche von verschiedenen anderen opsi-Produkten für macOS verwendet wird, z.B. opsi-configed, opsi-logviewer
Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Clients den betreffenden Client aus.
Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt m-javavm, daraufhin öffnet sich eine Liste/Dropdown-Menü und dort wählen Sie die Aktion setup.
Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-Server übermittelt, im Anschluss ist seine Farbe wieder grün.
Starten Sie dann den Client (neu) oder pushen Sie die Installation per on_demand Er sollte jetzt den opsi-client-agent starten und das Produkt _m-javavm installieren.
6.4. Verteilung von opsi Standard Produkten: opsi-configed
Achtung: m-homebrew und m-javavm müssen bereits installiert sein!
Zu den Standard-Produkten gehört das Produkt opsi-configed welches das opsi Management Interface als Anwendung auf einem Rechner installiert. Da diese Anwendung eine Java-Anwendung ist, wird ein JavaRE mitgeliefert.
Wählen Sie im opsi-configed, Modus Client-Konfiguration, unter dem Reiter Clients den betreffenden Client aus.
Wenn noch nicht geschehen, aktualisieren Sie den Datenbestand des opsi-configeds mittels Datei/Daten neu laden bzw. Anklicken des entsprechenden Icons.
Wechseln Sie zum Reiter Produktkonfiguration, klicken Sie in die Spalte Angefordert für das Produkt opsi-configed, daraufhin öffnet sich eine Liste/Dropdown-Menü und dort wählen Sie die Aktion setup.
Der Haken in der Icon-Menüleiste sollte seine Farbe auf Rot wechseln. Wenn Sie ihn anklicken, werden die neuen Einstellungen zum opsi-Server übermittelt, im Anschluss ist seine Farbe wieder grün.
Starten Sie dann den Client (neu).
Er sollte jetzt den opsi-client-agent starten und das Produkt opsi-configed installieren.
Nach Abschluß der Installation sollten Sie unter Applications
den Punkt opsi-configed
finden.
7. Einbindung eigener Software in die Softwareverteilung von opsi
Die Installation von Software erfolgt bei opsi durch den opsi-client-agent und insbesondere durch das Script gesteuerte Setup Programm opsi-script. Daher muss zu jedem opsi-Produkt ein opsi-script-Script erstellt werden. Danach werden dieses Script, die Installationsdateien und die Metadaten zu einem opsi-Produkt gepackt, welches sich schließlich auf dem opsi-Server installieren lässt.
7.1. Ein kleines Tutorial zur Erstellung eines opsi-script Scriptes
7.1.1. Einführung
Dieses Tutorial kann keine Schulung oder das Studium der Handbücher ersetzen. Es dient nur dazu eine Einführung zu bekommen. Daher als erstes der Verweis auf weiterführende Quellen:
Die uib GmbH bietet opsi-Schulungen in Mainz und Inhouse Schulungen an:
https://uib.de/de/support-schulung/schulung/
https://docs.opsi.org/opsi-docs-de/4.2/index.html
Besonders wichtig:
https://docs.opsi.org/opsi-docs-de/4.2/opsi-script-manual/opsi-script-manual.html
Auch zu finden über:
https://uib.de/de/opsi-dokumentation/dokumentationen/
Besonders wichtig:
opsi-script-reference-card und opsi-script-Handbuch
siehe https://forum.opsi.org
7.1.2. Methoden der nicht interaktiven Softwareinstallation bei MacOS
Apple hat (im Gegensatz zu Microsoft) sehr früh die Methoden zur Software Installation standardisiert. Im Kern gibt es zwei Methoden:
-
application Directory:
Es handelt sich um ein Verzeichnis nach dem Muster:<Application name>.app
Ein solches Verzeichnis wird aber imFinder
nicht als Verzeichnis angezeigt, sondern als 'Anwendung'. Innerhalb dieses Verzeichnisses müssen sich nach einem bestimmten Muster die Dateien der Anwendung befinden. Ein typischer Aufbau wäre:
opsi-script-gui.app |--Contents |-Info.plist |-PkgInfo |-MacOS | |-opsi-script-gui | |-Resources |- (....)
Ein solches Verzeichnis muß zur Installation nur in das Verzeichnis /Applications
kopiert werden. Evtl. müssen noch Dateien im Verzeichnis MacOS
ausführbar gemacht werden.
Solche *.app Verzeichnisse werden zum Download zumeist gepackt angeboten.
-
PKG file:
Diese Dateien enthalten Software die über einen speziellen Befehl installiert werden müssen.
In beiden Fällen ist eine unattended
(also nicht interaktive) Installation kein Problem.
Häufig wird macOS Software in gepackten Formaten angeboten wie *.zip, *.dmg oder auch *.tgz.
Alle bisher genannten Varianten können per opsi-script direkt installiert werden, außer *.tgz welches vorher ausgepackt werden muß.
7.1.3. Struktur eines opsi-script Skripts
Im folgenden werden die wesentlichen Elemente eines opsi-script Skriptes an Beispielen für Windows erläutert.
Zunächst ein Beispiel für ein einfaches opsi-script-Skript:
[Actions]
WinBatch_tightvnc_silent_install
[WinBatch_tightvnc_silent_install]
"%ScriptPath%\tightvnc-1.3.9-setup.exe" /silent
Ein opsi-script-Skript besteht aus primären und sekundären Sektionen.
Sektionen werden, wie von ini-Dateien bekannt, mit einem Sektions-Namen in eckigen Klammern eingeleitet.
Die eigentlichen Arbeiten zur Software-Installation finden in den sekundären Sektionen statt,
die von den primären Sektionen aufgerufen werden.
Die sekundären Sektionen sind „Themen-spezifisch“ und verfügen jeweils über eine spezielle Syntax.
Der Sektionsname einer sekundären Sektion beginnt mit deren Typ, gefolgt von einem frei definierbaren Namen.
Im Beispiel ruft die primären Sektion [Actions]
eine sekundäre Sektion [WinBatch_tightvnc_silent_install]
auf.
Die sekundäre Sektion ist vom Typ WinBatch
. Der Inhalt einer WinBatch
-Sektion wird über die Windows-API ausgeführt.
In diesem Fall wird also das Setup-Programm tightvnc-1.3.9-setup.exe
mit dem Parameter /silent
gestartet.
7.1.4. Primäre Sektionen
- Actions/Aktionen
-
Die
[Actions]
Sektion ist das eigentliche Hauptprogramm. Hier beginnt die Skript-Verarbeitung. - Sub-Sektionen
-
Programmabschnitte, die wiederholt benötigt werden, können in Sub-Sektionen (Unterprogramme) ausgelagert werden. Es besteht die Möglichkeit Sub-Sektionen in externe Dateien auszulagern.
Die primären Sektionen sind das Hauptprogramm in dem der Ablauf des Skripts gesteuert wird. Hierzu gibt es:
-
Variablen: Strings und Stringlisten
-
if
elseif
else
endif
Anweisungen -
for
Schleifen über Stringlisten -
Funktionen
7.1.5. Wichtige sekundäre Sektionen
- Files
-
Datei-Operationen, wie:
-
kopieren (mit Versionskontrolle, rekursiv …)
-
löschen
-
Verzeichnisse anlegen
-
…
-
- WinBatch
-
Dient zum Aufrufen von Programmen über die Windows-API. Beispielsweise werden Aufrufe von Setup-Programmen im silent mode in diesen Sektionen durchgeführt.
- ShellInAnIcon
-
Der Inhalt dieser Sektion wird der Betriebssystemtypischen shell zur Ausführung übergeben. Diese shell ist bei Windows die
cmd.exe
, bei Linux und bei macOS diebash
. Hier können also normale Batch-Skripte abgelegt werden.
Namensvarianten vonShellInAnIcon
mit identischem Verhalten sindShellbatch
,DOSBatch
undDOSInAnIcon
. - ExecWith
-
Der Inhalt dieser Sektionen wird einem externen Programm (Interpreter) zur Ausführung übergeben. Beispielsweise können über
ExecWith
AutoIt-Skripte http://www.autoitscript.com direkt in das opsi-script-Skript integriert werden. - Registry
-
Die Registry-Sektionen dienen dem Bearbeiten der Registry.
- LinkFolder
-
LinkFolder-Sektionen dienen dem Erstellen und Entfernen von Verknüpfungen. Es können beispielsweise Verknüpfungen auf dem Desktop oder im Startmenü erstellt werden.
7.1.6. Globale Konstanten
Globale Konstanten sind Text-Platzhalter, die in primären und sekundären Sektionen eingesetzt werden können
und zur Laufzeit textuell durch ihre Werte ersetzt werden.
Über die Verwendung von Platzhaltern kann sichergestellt werden,
dass Pfade in unterschiedlichen Umgebungen (z.B. auf System mit unterschiedlichen Sprachen oder Betriebssystem-Versionen) richtig gesetzt sind.
Beispiele:
- %ProgramFiles32Dir%
-
c:\programme
- %Systemroot%
-
c:\windows
- %System%
-
c:\windows\system32
- %opsiTmpDir%
-
c:\
- %Scriptpath%
-
<Pfad zu laufenden Script>
7.1.7. Zweites Beispiel: tightvnc
Zur Erläuterung nun ein einfaches Script zur Installation von tightvnc. Eigentlich würde dieses Script mit dem Aufruf der Silent-Installation in der Winbatch-Sektion auskommen. Bei einer wiederholten Installation erscheint hier (wegen des Neustarts eines laufenden Services) jedoch ein interaktiver Dialog. Dieses Dialog-Fenster wird (so es auftaucht) mithilfe von AutoIt geschlossen.
[Actions]
Message "Installiere tightvnc 1.3.9 ..."
ExecWith_autoit_confirm "%ScriptPath%\autoit3.exe" WINST /letThemGo
WinBatch_tightvnc_silent_install
KillTask "autoit3.exe"
[WinBatch_tightvnc_silent_install]
"%ScriptPath%\tightvnc-1.3.9-setup.exe" /silent
[ExecWith_autoit_confirm]
; Wait for the confirm dialog which only appears if tightvnc was installed before as service
; Waiting for the window to appear
WinWait("Confirm")
; Activate (move focus to) window
WinActivate("Confirm")
; Choose answer no
Send("N")
7.1.8. Elementare Befehle für primäre Sektionen
String-Variable
- Variablen-Deklaration
-
DefVar <variable name> [= <initial value>]
- Variablen-Zuweisung
-
Set <variable name> = <value>
Beispiel:
DefVar $ProductId$
Set $ProductId$ = "firefox"
oder
DefVar $ProductId$ = "firefox"
Stringvariablen werden in primären und sekundären Sektionen unterschiedlich behandelt.
In primären Sektionen sind Stringvariablen eigenständige Objekte.
Nur hier können sie deklariert und ihnen Werte zugewiesen werden.
Entsprechend ist die Verbindung von Variablen und Strings zu einem Stringausdruck mit einem Operator "+" durchzuführen.Beispiel: "Installing "+ $ProductId$ +" …" In sekundären Sektionen werden Stringvariablen vor der Ausführung der Sektion durch den Inhalt der Variable ersetzt. Beispiel: "Installing $ProductId$ …" Dies ist zu beachten, wenn entsprechende Stringausdrücke per Cut&Paste im Skript kopiert werden. Der Vorteil dieser Konstruktion ist, dass in Sektionen die außerhalb des opsi-script ausgeführt werden (DosBatch / Execwith) problemlos mit opsi-script-Variablen gearbeitet werden kann. |
Message / ShowBitmap
Zur Textausgabe während der Installation:
Message <string>
Beispiel:
Message "Installing "+ $ProductId$ +" ..."
Zur Ausgabe einer Grafik während der Installation:
ShowBitmap <filename> <subtitle>
Beispiel:
ShowBitmap "%ScriptPath%\python.png" "Python"
if [elseif] [else] endif
Syntax:
if <condition>
;statement(s)
[elseif <condition>
;statement(s)]
[
else
;statement(s)
]
endif
Funktionen
- HasMinimumSpace
-
Prüft auf freien Platz auf der Festplatte.
- FileExists
-
Prüft auf Existenz einer Datei oder eines Verzeichnisses.
Fehler, Logging und Kommentare
- Kommentarzeichen ';'
-
Zeilen, die mit einem Semikolon (';') beginnen, werden nicht interpretiert.
- Comment
-
Schreibt eine Kommentar-Meldung in die Log-Datei.
- LogError
-
Schreibt eine Fehlermeldung in die Log-Datei.
- IsFatalError
-
Bricht die Ausführung des laufenden Skriptes ab und meldet die Installation als gescheitert zurück.
Bedingung zur Ausführung
- requiredOpsiscriptVersion
-
gibt die (mindestens) benötigte opsi-script Version an.
Weitere wichtige opsi-script Funktionen
Einen Überblick über die opsi-script Funktionen gibt die Referencecard:
https://docs.opsi.org/opsi-docs-de/4.2/opsi-script-manual/reference-card.html
Eine detaillierte Dokumentation ist im opsi-script Handbuch zu finden:
https://docs.opsi.org/opsi-docs-de/4.2/opsi-script-manual/opsi-script-manual.html
Hier noch einige Hinweise auf besonders wichtige Elemente:
Stringlisten sind sehr mächtig, insbesondere zur Auswertung von Ausgaben externer Programme. Lesen Sie dazu die opsi-script-Dokus.
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.
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
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://docs.opsi.org/opsi-docs-de/4.2/opsi-script-manual/reference-card.html#opsi-script-rc-macos-specific
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
- 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
-
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
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
7.1.9. Beispiel: MacOS-Template m-opsi-template
Dieses Template können Sie sich mit dem opsi-setup-detector
erstellen.
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
; -------------------------------------
; include file for opsi-setup-detector products
; Define all variables here
;---------------------------
DefVar $arch$
DefVar $errorstring$
DefVar $exitcode$
DefVar $iconfile$
DefVar $installerSourceDir$
DefVar $installCommand$
DefVar $installSuccess$
DefVar $installdir$
DefVar $installdir1$
DefVar $installdir2$
DefVar $installerfile$
DefVar $minimumspace$
DefVar $oldProgFound$
DefVar $os$
DefVar $osshort$
DefVar $ProdVersion$
DefVar $productid$
DefVar $targetfile$
DefVar $tmpstr$
DefVar $targetprogram$
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8
[Actions]
requiredOpsiscriptVersion >= "4.12.4.23"
importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"
importlib "uib_macosinstalllib.opsiscript"
; All variables are defined here:
include_insert "declarations.opsiinc"
; ----------------------------------------------------------------
; Please edit the following values:
; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a separator
Set $ProductId$ = "m-opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$ = "/Applications/<product.app>"
Set $InstallDir$ = "/Applications/<productid.app>"
; ----------------------------------------------------------------
Message "Installing " + $ProductId$ + " ..."
set $OS$ = GetOS
if not(($OS$ = "macos"))
logError "Installation aborted: wrong OS version: only MacOS"
isFatalError "wrong OS"
endif
comment "Show product picture"
ShowBitmap "%ScriptPath%/" + $ProductId$ + ".png" $ProductId$
if FileExists("%ScriptPath%\delinc.opsiinc")
comment "Start uninstall part"
include_insert "%ScriptPath%\delinc.opsiinc"
endif
Message "Installing " + $ProductId$ + " ..."
set $installerSourceDir$ = ""
comment "Start installer "
ChangeDirectory $installerSourceDir$
;----------------------------------------------
set $installSuccess$ = install_macos_generic("%SCRIPTPATH%/files1/<my macos install file>")
;----------------------------------------------
if $installSuccess$ = "false"
LogError "Installation failed"
isfatalerror "Installation failed"
else
Comment "Installation success"
endif
comment "Copy files"
Files_install
[Files_uninstall]
del -sf "$InstallDir$/"
[Files_install]
; Example of recursively copying some files into the installation directory:
;
; copy -s "%ScriptPath%\files\*.*" "$InstallDir$"
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8
Message "Check for existing installation of " + $ProductId$ + " ..."
comment "Start the Uninstall check:"
set $oldProgFound$ = "false"
if directoryExists($InstallDir$)
set $oldProgFound$ = "true"
endif
f $oldProgFound$ = "true"
comment "Is the Installdir in the Applications directory ?"
if "1" = strPos(lower($InstallDir$),lower("/Applications/"))
comment "Do not delete the whole /Applications dir ..."
if not(lower($InstallDir$) = lower('/Applications/'))
Message "Uninstalling " + $ProductId$ + " ..."
Files_uninstall
endif
endif
endif;-----------------------------------------------------
; ----------------------------------------------------------------
; This is a opsi-script file.
; See https://opsi.org https://uib.de
; This code was originally created by opsi-setup-detector 4.2.1.5
; ----------------------------------------------------------------
encoding=utf8
[Actions]
requiredOpsiscriptVersion >= "4.12.4.23"
importlib "uib_exitcode.opsiscript"
importlib "osd-lib.opsiscript"
importlib "uib_macosinstalllib.opsiscript"
; All variables are defined here:
include_insert "declarations.opsiinc"
; ----------------------------------------------------------------
; Please edit the following values:
; ----------------------------------------------------------------
; $ProductId$ is the name of the product in opsi, only lower letters, no umlauts, no white spaces, use '-' as a separator
Set $ProductId$ = "m-opsi-template"
; the path were we find the product after the installation
;Set $InstallDir$ = "/Applications/<product.app>"
Set $InstallDir$ = "/Applications/<productid.app>"
; ----------------------------------------------------------------
Message "Uninstalling " + $ProductId$ + " ..."
set $OS$ = GetOS
if not(($OS$ = "macos"))
logError "Installation aborted: wrong OS version: only macos"
isFatalError "wrong OS"
endif
comment "Show product picture"
ShowBitmap "%ScriptPath%/" + $ProductId$ + ".png" $ProductId$
if FileExists("%ScriptPath%\delinc.opsiinc")
comment "Start uninstall part"
include_insert "%ScriptPath%\delinc.opsiinc"
endif
[Files_uninstall]
del -sf "$InstallDir$/"
; ----------------------------------------------------------------
; ----------------------------------------------------------------
7.2. Erstellen eines opsi-Produkt-Pakets
7.2.1. Installation des opsi 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.
Sie können den opsi PackageBuilder auch per opsi installieren:
Das Paket opsipackagebuilder_wlm gehört zu den opsi Standardprodukten und sollte auf Ihrem opsi-server installiert sein. Falls nicht, mit:
opsi-package-updater install opsipackagebuilder_wlm
können Sie es auf dem opsi-server installieren.
7.2.2. Installation des opsi-setup-detector
Den opsi-setup-detector gibt es derzeit für Windows, Linux und MacOS.
Sie können den opsi-setup-detector per opsi installieren:
Das Paket opsi-setup-detector gehört zu den opsi Standardprodukten und sollte auf Ihrem opsi-server installiert sein. Falls nicht, mit:
opsi-package-updater install opsi-setup-detector
können Sie es auf dem opsi-server installieren.
Ein Setup-Programm um den opsi-setup-detector auf Windows auch ohne opsi zu installieren, finden sie unter :
https://download.uib.de/opsi4.2/misc/helper/
Die Basis Funktionalität des opsi-setup-detector auf den unterschiedlichen Betriebssystemen ist gleich. Bei der Analyse einer Installationsdatei werden aber eventuell Hilfprogramme aufgerufen, welche nicht überall verfügbar bzw. lauffähig sind.
-
Genauere Analyse von Inno-Setups verwendet innounpack.exe unter Windows.
-
Genauere Analyse von wix-setups verwendet dark.exe unter Windows.
-
.deb
bzw..rpm
Dateien werden mit den entsprechenden Linux Werkzeugen analysiert.
Das opsi-Produkt opsi-setup-detector hat eine Abhängigkeit zu dem opsi-Produkt opsipackagebuilder_wlm. Der opsi-setup-detector verwendet den opsi PackageBuilder wenn vorhanden, funktioniert in weiten Teilen aber auch ohne. Die Installation des opsi PackageBuilder ist aber empfohlen.
7.2.3. Installation des opsi-logviewer
Den opsi-logviewer gibt es derzeit für Windows, Linux und MacOS.
Sie können den opsi-logviewer per opsi installieren:
Das Paket opsi-logviewer gehört zu den opsi Standardprodukten und sollte auf Ihrem opsi-server installiert sein. Falls nicht, mit:
opsi-package-updater install opsi-logviewer
können Sie es auf dem opsi-server installieren.
Ein Setup-Programm um den opsi-setup-detector auf Windows auch ohne opsi zu installieren, finden sie unter :
https://download.uib.de/opsi4.2/misc/helper/
Das opsi-produkt opsi-logviewer hat eine Abhängigkeit zu dem opsi-Produkt javavm.
7.2.4. Das Programm opsi-setup-detector zum Erstellen eines macOS Scriptes
7.2.5. Opsi-setup-detector Start und notwendige Konfigurationen
Der opsi-setup-detector kann gestartet werden aus der Programm Menü und findet sich dort unter opsi.org
. Der opsi-setup-detector wird unter Windows auch in das Kontextmenü des Explorers eingebunden, um so per Rechte Maustaste Setup-Programm direkt zur Analyse aufrufen zu können.
Nach dem erstmaligen Start des opsi-setup-detector erscheint ein Konfigurationsmaske. Hier sind die folgenden Angaben erforderlich:
-
fullname : (Wird verwendet für Einträge in die changelog.txt)
-
email_address (Wird verwendet für Einträge in die changelog.txt)
-
workbench_path : Pfad zum Verzeichnis in dem die opsi-Pakete erstellt werden sollen. Dies ist idealerweise der Pfad zu der Stelle an der die
opsi_workbench
Ihres opsi-servers gemountet ist.
Optional: Verbindungsdaten zu dem opsi-webservice:
-
Service_URL :Die URL des opsi webservice (wie: https://<opsi-server>:4447)
-
Service_user : Der user name für die Verbindung zum opsi Webservice
-
Service_pass : Das Passwort des angegebenen users für die Verbindung zum opsi webservice.
ACHTUNG SICHERHEITSRISIKO: Auch wenn das Passwort verschlüsselt abgespeichert wird, so läßt es sich doch nach einer Analyse des (offenen) Quellcodes entschlüsseln. Es wird nach dem Passwort gefragt, wenn hier nichts steht.
Nachdem Sie die notwendigen Konfigurationsangaben gemacht und gespeichert haben, erscheint die Startseite.
Auf der Startseite wählen Sie die gewünschte Aufgabe und folgen den Dialogen bzw. wählen den Button 'Nächster Schritt'.
Die angebotenen Aufgaben sind gruppiert nach:
-
OS unabhängig
-
Windows
-
Linux
-
MacOS
-
Multiplattform
Die angebotenen Aufgaben für macOS:
-
Analysiere Datei und erzeuge ein opsi Paket
Hier wird von einer macOS Installer-Datei ausgegangen und der gesamte Ablauf bis zur Erzeugung eines opsi-Paketes durchlaufen. Dieser Prozeß ist analog dem für Windows im nächsten Kapitel beschrieben. -
Eine opsi Paketvorlage (Template) erzeugen
Dieser Punkt fragt nicht nach einer Setup-Datei, sondern erstellt ein opsi template Produkt für macOS bei dem die Angaben aus der Produktkonfiguration bereits übernommen werden.
Die nun folgenden Screenshots zeigen zwar die Verwendung von Windows-Installer Dateien, sie sehen aber analog aus bei der Verwendung von MacOS Installer Dateien wie *.app, *.dmg, *.zip.
7.2.6. opsi-setup-detector: Analysiere eine Datei und erzeuge ein opsi Paket
Im folgenden wird der Ablauf anhand des Punktes Analysiere eine Datei und erzeuge ein opsi Paket erläutert.