# Open System Integration

opsi (Open System Integration) ist ein Clientmanagement-System zur Verwaltung heterogener IT-Umgebungen (Windows, Linux und macOS). Die zentrale Komponente ist ein Linux-Server, der sich um die automatische Installation der Betriebssysteme (nur Windows und Linux), die Verteilung von Software, das Patch-Management sowie die Inventarisierung von Hard- und Software auf den Clients kümmert. Dazu kommen Module, die den Funktionsumfang erweitern. Der Hersteller ist die Firma uib GmbH aus Mainz.
Alle Kernkomponenten sind Open Source; die opsi-Hauptbestandteile stehen unter der AGPLv3-Lizenz. Der Hersteller stellt darüber hinaus kostenpflichtige Erweiterungen bereit.

## Geschichte

opsi wurde ursprünglich unter dem Namen HUPSI (Hessische Umweltverwaltung PC Server Integration) für die interne Verwendung beim hessischen Umweltamt (heute Hessisches Landesamt für Naturschutz, Umwelt und Geologie) entwickelt. Die erste Version entstand 1994 und war spezialisiert auf die Verwaltung von Clients mit Windows NT 4 und Windows for Workgroups 3.11.
Um die Entwicklung voranzutreiben, wurde 1995 das Umwelt-Informatikbüro (uib) gegründet, das seit Juli 1999 eine Gesellschaft mit beschränkter Haftung (GmbH) ist. Nach der Abkündigung von HUPSI und einer Umbauphase der Software erschien 2004 die erste opsi-Version 2.0. Die Abkürzung stand damals für „Open PC Server Integration“. Im Juni 2005 folgte opsi 2.1 und im November 2005 die Version 2.2. Sie führte den grafischen Konfigurationseditor opsi-configed ein. Im Dezember 2005 erschien schließlich opsi 2.3. Mit dem Release von opsi 2.4 im Februar 2006 endete die 2.x-Reihe.
opsi 3.0 wurde im März 2007 veröffentlicht. Die Version führte den Webservice und das Kommandozeilentool opsi-admin ein. Version 3.1 vom September 2007 enthielt erstmals den Dienst opsipxeconfd und eine vereinfachte Treiberintegration. Im Januar 2008 erschien opsi 3.2 und im Juli 2008 dann opsi 3.3. Dieses Release bot zum ersten Mal die Möglichkeit, Software von mehreren Depotservern aus zu verteilen. Außerdem stellten die Entwickler mit opsi 3.3 das Werkzeug opsi-package-manager und das MySQL-Backend vor. Seit 2008 gibt es auch ein Community-Forum.
opsi 3.4 erschien im August 2009 und stellte das opsi-Lizenzmanagement sowie den Dienst opsiclientd vor. Für opsi begann eine neue Phase: Der Hersteller führte das sogenannte opsi-Kofinanzierungsmodell ein. Weiterentwicklungen standen zunächst nur denjenigen zur Verfügung, die sich an den Entwicklungskosten beteiligen. Sobald eine Komponente refinanziert war, wurde das Feature Open Source und zudem kostenfrei nutzbar. Bis 2020 hielt der Hersteller an diesem Modell fest, wechselte dann aber zu einem Subscriptions-Modell.
Im Oktober 2010 veröffentlichten die Entwickler opsi 4.0 mit einer vollständig überarbeiteten Serverbibliothek und stellten auf das Rolling-Release-Modell um. Im 4.0-Branch erschienen mehrere Servicereleases: 4.0.1 (Mai 2011), 4.0.2 (Mai 2012), 4.0.3 (März 2013), 4.0.4 (Februar 2014), 4.0.5 (November 2014), 4.0.6 (Oktober 2015) und 4.0.7 (August 2016).
Im Februar 2018 erschien opsi 4.1 mit einer erweiterten Serverkomponente, neuen und umbenannten Kommandozeilenwerkzeugen; systemd ist seitdem das einzige unterstützte Init-System. 2018 fand in Mainz die erste opsiconf statt, eine Konferenz für Entwickler und Anwenderinnen. Das Event wird seitdem alle zwei Jahre ausgerichtet.
Opsi 4.2 vom Mai 2021 wurde auf Python 3 portiert; der opsiconfd-Dienst basiert seitdem auf Uvicorn und nutzt die Webframeworks Starlette und FastAPI. opsi unterstützt seitdem mehrere Workerprozesse, die über Redis miteinander kommunizieren. Der opsi-Server ist damit nicht länger an eine einzelne Maschine gebunden, sondern kann parallel auf weiteren Instanzen betrieben werden (Lastverteilung). Alle Serverkomponenten sind seit opsi 4.2 in Docker-Containern lauffähig. Version 4.2 integriert sich schneller und besser in vorhandene Domänen, denn die LDAP- bzw. AD-Authentifizierung läuft nun direkt über den Webservice. Es ist nun möglich, einen LDAP- bzw. Samba/AD-Server in der Konfiguration anstelle von PAM anzugeben. Für eine sicherere Verifikation zwischen Server und Clients per TLS führt opsi 4.2 eine eigene opsi-CA ein. Linux-Clients können ab opsi 4.2 außer CIFS/SMB auch WebDAV-Freigaben mounten, was vor allem für die Anbindung von Clients außerhalb des LAN wichtig ist.
Im November 2023 gaben die Entwickler opsi 4.3 frei. Neben einem neuen Design und einem neuen Logo, dem neuen opsi-Message-Bus und einer Zwei-Faktor-Authentifizierung für opsi-Administratoren enthält die Version einen neuen Health-Check zum Überprüfen der opsi-Umgebung. Zwei bisher kostenpflichtige Erweiterungen (MySQL-Backend und UEFI-Support) stehen nun kostenfrei zur Verfügung. Die grafische Oberfläche opsi-configed wurde ebenfalls erneuert, und als alternative grafische Schnittstelle für den Browser gibt es die WebGUI.

## Unterstützte Betriebssysteme

opsi unterstützt 32- und 64-Bit-Betriebssysteme. Für den Server gibt es neben einer virtuellen Maschine und einem Docker-Container auch Pakete für gängige Linux-Distributionen. Der opsi-Server läuft unter AlmaLinux, Debian, openSUSE Leap, Oracle Linux, Red Hat Enterprise Linux, Rocky Linux, SUSE Linux Enterprise Server, Univention Corporate Server und Ubuntu.
Als Windows-Clients werden die meisten aktuellen Windows-Systeme unterstützt. Der kostenpflichtige Linux-Client läuft unter Debian, Ubuntu, Linux Mint, Red Hat Enterprise Linux, AlmaLinux, Rocky Linux, Oracle Linux, SUSE Linux Enterprise Server, openSUSE Leap und Univention Corporate Server. Seit 2021 gibt es einen macOS-Client (ebenfalls kostenpflichtig).

## Aufbau von opsi

Bei opsi gibt es zwei Servertypen, einen Configserver und einen Depotserver:
* Der Configserver ist die Steuerzentrale jeder opsi-Umgebung. Er verwaltet die Konfigurationsdaten der Clients stellt alle wichtigen Konfigurations- und Statusdaten bereit. In jeder Umgebung kann es nur einen opsi-Configserver geben. In den meisten Fällen übernimmt der Configserver zusätzlich die Rolle des opsi-Depotservers.
* Der Depotserver enthält zu verteilende Software, Betriebssysteme und Boot-Images, welche die Clients abrufen. Er ist über den opsi-Message-Bus direkt mit dem opsi-Configserver verbunden. Zur Unterstützung mehrerer Standorte bei zentraler Verwaltung können mehrere Depotserver an einen Configserver angebunden werden.
Eine API vernetzt alles miteinander: Server, Clients und die grafischen Management-Oberflächen. Alle opsi-Komponenten kommunizieren über den opsiconfd-Webservice. Dieser übermittelt Daten an den Backend-Manager, der sie ins Datenbank-Backend (MySQL/MariaDB) schreibt. Ab opsi 4.3 ist die MySQL-Datenbank das das einzige Backend; die alternative Datenhaltung in Dateien wurde mit diesem Release abgeschafft.
Damit opsi Rechner verwalten kann, muss auf diesen der Client-Agent installiert sein. Die Software ermöglicht eine Kommunikation zwischen Server und Client. Außerdem sind in einer opsi-Umgebung sogenannte Produkte (paketierte Software) zu finden. Es gibt zwei Arten von Produkten: Localboot-Produkte und Netboot-Produkte:
* Localboot-Produkte sind für Clients gebaut, auf denen bereits ein Betriebssystem installiert ist, etwa der Client-Agent, opsi-script, die Oberfläche opsi-configed sowie swaudit und hwaudit für Software- und Hardware-Inventarisierung.
* Netboot-Produkte sind für die Verteilung von Betriebssystemen über einen TFTP-Server gedacht. Dazu gehören die automatische Installation von Betriebssystemen für Windows- und Linux-Clients, ein Memory-Test zur Überprüfung des Arbeitsspeichers, Werkzeuge zur Hardware-Inventarisierung und das Tool wipedisk, das Festplatten löscht.

## Kernfunktionen

opsi bietet folgende Kernfunktionen:
* Automatische Softwareverteilung
* Patch-Management
* Automatische Betriebssystem-Installation (Windows und Linux)
* Inventarisierung (Hardware und Software)
* Steuerung über grafische Schnittstellen (opsi-configed und WebGUI)
* Unterstützung von verteilten Standorten

### Automatische Softwareverteilung

Um Software mit opsi zu installieren, muss die Installation in einem entsprechenden Skript beschrieben werden. opsi bringt dazu eine eigene Skriptsprache und den Interpreter opsi-script mit. In einem solchen Skript sind alle für die Softwareinstallation nötigen Schritte beschrieben, beispielsweise Aufrufe einer Unattended- oder Silent-Installation, Aufrufe von AutoIt- bzw. AutoHotkey-Skripten oder eine Folge von Kopier- und anderen Operationen zur Installation der Software.
Bei jedem Neustart des Clients (genau genommen beim Start der grafischen Oberfläche) nimmt der Client-Agent Verbindung zum Configserver auf und prüft, ob neue Software oder Updates installiert werden sollen. Der zentrale Client-Agent-Dienst opsiclientd läuft ständig im Hintergrund und führt in bestimmten Situationen Aktionen aus, die sogenannten Events. Der Dienst kann auch auf verschiedene Events im System reagieren. Sobald ein konfiguriertes Event eintritt, nimmt der opsiclientd Kontakt zum Configserver auf. Er fragt Einstellungen und anstehende Action Requests per JSON-RPC ab. Bei Bedarf stellt der Dienst eine Verbindung zum Depotserver her, aktualisiert die lokale opsi-script-Installation und startet opsi-script zur Bearbeitung der anstehenden Action Requests (Installation/Deinstallation von Paketen). Die Aktivierung des Client-Agents kann auch an andere Ereignisse gebunden werden oder vom opsi-Server aus aufgerufen werden (Push-Installation).

### Patch-Management

Über den Mechanismus der Softwareverteilung können neben kompletten Softwarepaketen auch Updates und Patches eingespielt werden. Auch diese werden als opsi-Produkte verteilt. Die Localboot-Produkte enthalten neben den Installationsdateien und den Metadaten das opsi-script, das sozusagen den Rohbau bildet. Admins erstellen solche Skripte entweder im Texteditor oder nutzen das grafische Programm opsi-Setup-Detector, das unter Windows, Linux und macOS läuft. Es analysiert Installationspakete und Setupdateien und erzeugt dazu passende Skripte. Es ist im Setup-Detector außerdem möglich, Eigenschaften und Abhängigkeiten von Produkten zu definieren.
Unter Windows verteilt opsi MSI-Pakete, Setupprogramme mit Silent-Schaltern und Windows-Updates. Auf Linux-Systemen unterstützt es Pakete im DEB- und RPM-Format, Third-Party-Installer und die Installation aus dem Quellcode. opsi verteilt auch macOS-Software als DMG-, ZIP-, PKG- oder TGZ-Datei.

### Automatische Betriebssystem-Installation

opsi kann Windows- und Linux-Rechner auf Laptops, Desktop-PCs, physischer oder virtueller Hardware installieren, vorausgesetzt der Client kann per Netzwerkboot starten. Alternativ kann das opsi-linux-bootimage auf ein USB-Medium übertragen und zum Start per USB genutzt werden.
Die vom Hersteller angebotenen Netboot-Produkte sind lediglich Wrapper, die noch um die jeweiligen Installations-Medien auf dem Depotserver ergänzt werden müssen. Über das Management Interface kann ausgewählt werden, auf welchen Clients bei deren nächsten Systemstart ein neues Betriebssystem installiert werden soll. Der Client stellt beim nächsten Systemstart eine Anfrage an den Depotserver und lädt von diesem ein Boot-Image. Das Boot-Image partitioniert das System und fordert die Installationsdateien bzw. -depots und die Konfigurationsinformationen vom Depotserver an. Nach einem Neustart des Clients installiert dieser automatisch das Betriebssystem auf Grundlage der angeforderten Konfigurationsinformationen. Die Betriebssysteminstallation kann dabei sowohl auf Basis einer unbeaufsichtigten Installation oder per Image erfolgen. Das Verfahren der unattended Installation wird dabei durch eine automatisierte Erkennung der notwendigen Treiber für PCI-, HD-Audio- und USB-Devices unterstützt.
Um mit opsi Windows zu installieren, ist neben einem Windows PE, das als Live-System genutzt wird, eine Steuerdatei namens unattend.xml für unbeaufsichtigte Installationen notwendig. Es ist möglich, zusätzliche Treiber zu integrieren. Der Windows-Produktschlüssel kann optional vor der Installation hinterlegt werden.
Auch die Netboot-Produkte von Linux-Clients müssen entsprechend ergänzt werden. opsi nutzt entweder den Installer der jeweiligen Distribution oder das opsi-linux-bootimage. Dieses enthält unter anderem ein Werkzeug zum Partitionieren der Festplatte des neuen Clients; es richtet eine Root- (/) und eine Swap-Partition (/swap) ein und formatiert diese. Danach erfolgt die Installation des Grundsystems (mit Netzwerkkonfiguration und SSH, aber ohne grafische Oberfläche).

### Inventarisierung (Hardware und Software)

Auch die Inventarisierung von Hard- und Software erfolgt über den opsi-Client-Agent. Dabei werden die Hardware-Informationen per WMI und die Software-Informationen aus der Registry erhoben und an den opsi-Server zurückgemeldet. Die Inventarisierungsdaten können über die Webservice-Schnittstelle zur Aktualisierung einer CMDB (etwa von OTRS) verwendet werden.

## Grafische Schnittstellen

Es gibt zwei grafische Benutzeroberflächen, um opsi-Umgebungen zu verwalten: die Management-Oberfläche opsi-configed und die opsi-WebGUI.

### opsi-configed

opsi-configed ist ein grafisches Interface, das per HTTPS mit dem opsi-Server kommuniziert und daher auf jedem Rechner läuft, der über dieses Protokoll Verbindung zum Server aufnehmen kann. Das Programm steht für Windows, Linux und macOS zur Verfügung – entweder als opsi-Paket (dazu muss auf dem Client bereits der Client-Agent laufen) oder als portable Anwendung, die ohne Installation läuft.
Die aktuelle Version unterstützt drei Sprachen (Deutsch, Englisch und Französisch), enthält ein helles und ein dunkles Theme und bietet drei Modi zur Client-, Depot- und Serverkonfiguration. Darüber hinaus ist das Arbeiten per SSH über eine Server-Konsole möglich.

### opsi-WebGUI

Die opsi-WebGUI ist eine alternative grafische Benutzeroberfläche zur Administration von opsi im Webbrowser. Sie bietet Zugriff auf alle opsi-Komponenten in einer responsiven Oberfläche und ist für Mobil- sowie Desktopgeräte optimiert. Die WebGUI benötigt einen aktuellen Browser, etwa Chrome/Chromium, Firefox, Safari oder Microsoft Edge. JavaScript muss im Browser aktiviert sein. Über die webbasierte Benutzeroberfläche können Admins den opsi-Server konfigurieren, neue opsi-Clients einrichten, Produkte verteilen und Logdateien einsehen.
Die opsi-WebGUI ist ein opsiconfd-Add-on. Nach der Installation befindet sich die Erweiterung auf dem opsi-Configserver im Verzeichnis /var/lib/ opsiconfd/addons/webgui. Die WebGUI nutzt FastAPI zum Lesen und Schreiben von Daten aus der MySQL-Datenbank. Das Frontend basiert auf dem Vue.js-Framework Nuxt.
Die WebGUI ist in Deutsch, Englisch und Französisch verfügbar und bietet ein helles und ein dunkles Theme.

## Erweiterungen

opsi-Module erweitern die Funktionalität. Für die kostenpflichtigen Erweiterungen ist eine Freischaltdatei erforderlich. Die kostenfreie opsi Basic-Lizenz erlaubt den Einsatz (fast) aller kostenpflichtigen Module auf bis zu 30 Clients. Ausgenommen sind die Erweiterungen: Scalability, WAN und macOS-Support.
Stand Juli 2024 gibt es die folgenden Erweiterungen:
* Directory Connector (kostenpflichtig): Zusammenarbeit mit Verzeichnisdienst überträgt Daten aus einem LDAP-fähigen Verzeichnisdienst in eine opsi-Installation. Da der Directory Connector im Hintergrund auf LDAP setzt, funktioniert er sowohl mit Active Directory als auch mit Samba 4.
* Dynamische Depotzuweisung (frei): Clients können in Multi-Depot-Umgebungen erkennen, von welchem Depotserver sie seine Software am besten beziehen können.
* Installation bei Shutdown (frei): Installiert Software nicht beim Systemstart eines Clients, sondern beim Shutdown; kann nicht zusammen mit der WAN/VPN-Erweiterung genutzt werden.
* Lizenzmanagement (kostenpflichtig): Erleichtert die Verwaltung von Lizenzen nicht-freier Software, die auf mit opsi verwalteten Clients installiert ist.
* Linux-Agent (kostenpflichtig): Support für Linux-Clients
* Local Image/VHD Reset (kostenpflichtig): Bringt viele opsi-Clients zurück auf einen bestimmten Stand; erstellt dazu ein Image, speichert es auf einer separaten Festplatten-Partition. Dieses Image kommt dann zur Wiederherstellung zum Einsatz. VHD Reset ergänzt die Erweiterung und arbeitet mit VHD-Containern (Virtual Hard Disk).
* macOS-Agent (kostenpflichtig): Support für macOS-Clients
* Mehrere Depotserver (frei): Einsatz mehrerer opsi-Depotserver, auch an unterschiedlichen Standorten
* Monitoring-Connector (kostenpflichtig): Schnittstelle für zu den Monitoring-Lösungen Nagios und Icinga
* MySQL-Backend (frei): Datenbank-Backend für Konfigurationsdaten; freigegeben seit opsi 4.3
* opsi-Clonezilla (frei): Image-basierte Installationen; nutzt die Software Clonezilla (klont ganze Rechnersysteme und erstellt Abbilder von Festplatten)
* opsi-Setup-Detector (frei): Grafisches Werkzeug zur Erstellung von opsi-Produkten auf Basis von Setupprogrammen
* Scalability (kostenpflichtig): Mehrere Worker-Prozesse
* Secure-Boot-Unterstützung (kostenpflichtig): Secure Boot für opsi-Clients (nur 64 Bit)
* SilentInstall-Feature (frei): Software installieren im laufenden Betrieb, ohne dass Anwender ihre Arbeit unterbrechen müssen
* Software On Demand (frei): Bietet opsi-Administratoren die Möglichkeit, ihren Anwendern bestimmte Produkte zur Verfügung zu stellen, die sie ohne Eingriff von einem Administrator installieren können.
* UEFI-Unterstützung (frei): opsi mit UEFI/GPT (nur 64 Bit); freigegeben seit opsi 4.3
* User Profile Management (frei): Erlaubt die Modifikation von Roaming Profiles (servergespeicherten Profilen).
* User Roles (kostenpflichtig): Verwaltung von Benutzerrollen und -rechten
* WAN/VPN-Erweiterung (kostenpflichtig): Verwaltung von Clients hinter langsamen/instabilen Verbindungen; kann nicht zusammen mit der Erweiterung Installation bei Shutdown genutzt werden.
* WIM Capture (kostenpflichtig): Speichert Installations-Einstellungen (inklusive aller Software, Hotfixes und Konfigurationen) von einem bestehenden Computer in einem WIM (Windows Imaging Format), das als Basis für zukünftige Installationen auf anderen Computern verwendet werden kann.