<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>oPBWeb Handbuch</title><link>/opbweb/manual/</link><description>Recent content on oPBWeb Handbuch</description><generator>Hugo</generator><language>de</language><atom:link href="/opbweb/manual/index.xml" rel="self" type="application/rss+xml"/><item><title>Architektur</title><link>/opbweb/manual/technical-admin/architektur/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/architektur/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;oPBWeb läuft als ein Docker-Compose-Projekt mit dem Namen &lt;code&gt;opbweb&lt;/code&gt;. Die Datei &lt;code&gt;docker-compose.yml&lt;/code&gt; beschreibt den Produktivbetrieb, &lt;code&gt;docker-compose.dev.yml&lt;/code&gt; ergänzt sie für die Entwicklung. Dieses Kapitel zeigt, welche Dienste es gibt, wie sie miteinander verbunden sind und wo welche Daten liegen.&lt;/p&gt;
&lt;h2 id="dienste"&gt;Dienste&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Dienst&lt;/th&gt;
 &lt;th&gt;Container&lt;/th&gt;
 &lt;th&gt;Image&lt;/th&gt;
 &lt;th&gt;Aufgabe&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;frontend&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-frontend&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-frontend:latest&lt;/code&gt; (nginx:stable-alpine)&lt;/td&gt;
 &lt;td&gt;liefert die Weboberfläche und das Handbuch aus, leitet &lt;code&gt;/api&lt;/code&gt; an die API weiter; einziger Dienst mit veröffentlichten Ports&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;api&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-api&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-backend:latest&lt;/code&gt; (python:3.13-slim)&lt;/td&gt;
 &lt;td&gt;REST-API und WebSocket (FastAPI/uvicorn auf Port 8000), Anmeldung, Datenbankmigrationen beim Start, erstes Administrator-Konto&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;worker&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-worker&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-backend:latest&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;führt alle Jobs aus (arq auf Redis); einziger Dienst, der mit den opsi-Configservern spricht und deren Passwörter entschlüsselt&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;db&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-db&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;mariadb:11.4&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;alle Anwendungsdaten (Pakete, Versionen, Benutzer, Jobs, Protokoll, Einstellungen)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;redis&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-redis&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;redis:7-alpine&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Job-Warteschlange, Heartbeat des Workers, Status der opsi-Verbindung, Sperrliste abgemeldeter Tokens, Depot-Sperren&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;garage&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-garage&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;dxflrs/garage:v2.2.0&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;S3-kompatibler Objektspeicher (ein Knoten, Replikationsfaktor 1) für Dateiinhalte und gebaute Pakete&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;garage-init&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-garage-init&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-garage-init:1.0.0&lt;/code&gt; (alpine:3.21)&lt;/td&gt;
 &lt;td&gt;richtet bei jedem Start Layout, Zugangsschlüssel &lt;code&gt;opbweb&lt;/code&gt; und Bucket &lt;code&gt;packages&lt;/code&gt; ein und beendet sich dann&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;API und Worker verwenden dasselbe Image; der Worker startet nur mit einem anderen Befehl (&lt;code&gt;./start-worker.sh&lt;/code&gt;). Das Image von garage-init trägt auch im Produktivbetrieb das Tag &lt;code&gt;:dev&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Benutzer und Rollen</title><link>/opbweb/manual/functional-admin/benutzer-und-rollen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/benutzer-und-rollen/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Unter &lt;strong&gt;Benutzer und Rollen&lt;/strong&gt; verwaltest du alle Konten, die sich an oPBWeb anmelden können. Jedes Konto hat genau eine Rolle, die festlegt, was es in der Oberfläche darf. Neben lokalen Konten, die du selbst anlegst, gibt es Verzeichniskonten aus LDAP, deren Rolle sich aus den Gruppen im Verzeichnis ergibt.&lt;/p&gt;
&lt;p&gt;Den Bereich öffnest du über das Symbol &lt;strong&gt;Benutzer und Rollen&lt;/strong&gt; unten in der Aktivitätsleiste. Er hat zwei Reiter: &lt;strong&gt;Benutzer&lt;/strong&gt; (mit der Anzahl der Konten) und &lt;strong&gt;Protokoll&lt;/strong&gt;. Das Protokoll ist im Kapitel &lt;a href="/opbweb/manual/functional-admin/protokoll/"&gt;Protokoll&lt;/a&gt;
 beschrieben.&lt;/p&gt;</description></item><item><title>Erste Schritte</title><link>/opbweb/manual/user-guide/erste-schritte/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/erste-schritte/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Dieses Kapitel zeigt dir, wie du dich anmeldest, wie die Oberfläche von oPBWeb aufgebaut ist und wie du mit der Suche schnell zu Paketen, Dateien und Befehlen springst. Am Ende findest du eine kurze Übersicht über Rollen und den Lebenszyklus eines Pakets.&lt;/p&gt;
&lt;h2 id="anmelden"&gt;Anmelden&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Öffne oPBWeb im Browser. Ohne gültige Sitzung landest du auf der Anmeldeseite.&lt;/li&gt;
&lt;li&gt;Gib deinen &lt;strong&gt;Benutzernamen&lt;/strong&gt; und dein &lt;strong&gt;Passwort&lt;/strong&gt; ein.&lt;/li&gt;
&lt;li&gt;Klick auf &lt;strong&gt;Anmelden&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Nach der Anmeldung öffnet sich die Paketliste, oder die Seite, die du ursprünglich aufrufen wolltest. Auf der Anmeldeseite kannst du oben in der Ecke schon die Sprache (DE/EN) und Hell/Dunkel umschalten.&lt;/p&gt;</description></item><item><title>Voraussetzungen</title><link>/opbweb/manual/installation/voraussetzungen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/installation/voraussetzungen/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Dieses Kapitel listet alles, was vor der Installation bereitstehen muss: ein Docker-Host, freie Ports, eine Netzwerkverbindung zum opsi-Configserver und ein technischer opsi-Benutzer. Prüfe die Punkte der Reihe nach, bevor du mit der &lt;a href="/opbweb/manual/installation/installation/"&gt;Installation&lt;/a&gt;
 beginnst.&lt;/p&gt;
&lt;h2 id="host"&gt;Host&lt;/h2&gt;
&lt;p&gt;oPBWeb läuft auf jedem Linux-Host mit Docker. Du kannst den Stack direkt auf dem opsi-Configserver betreiben oder auf einem eigenen Host, der den Configserver per HTTPS erreicht.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Betriebssystem:&lt;/strong&gt; Linux mit aktuellem Docker Engine.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker Compose:&lt;/strong&gt; das Compose-Plugin (Version 2, Aufruf &lt;code&gt;docker compose&lt;/code&gt;). Das alte eigenständige &lt;code&gt;docker-compose&lt;/code&gt; (Version 1) reicht nicht, weil die Compose-Datei Funktionen wie Datei-Secrets und &lt;code&gt;service_completed_successfully&lt;/code&gt; nutzt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bash und OpenSSL:&lt;/strong&gt; Die Skripte &lt;code&gt;setup-opbweb.sh&lt;/code&gt;, &lt;code&gt;start.sh&lt;/code&gt;, &lt;code&gt;stop.sh&lt;/code&gt; und &lt;code&gt;scripts/init-secrets.sh&lt;/code&gt; sind Bash-Skripte, die Secrets werden mit &lt;code&gt;openssl&lt;/code&gt; erzeugt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git:&lt;/strong&gt; zum Holen der Quellen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Speicherplatz:&lt;/strong&gt; Der Objektspeicher wächst mit den Paketdateien. Plane genug Platz für die Docker-Volumes ein (Datenbank, Objektspeicher). Feste Mindestwerte für CPU, Arbeitsspeicher oder Plattenplatz gibt es nicht; die Container laufen ohne Ressourcenlimits.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="ports"&gt;Ports&lt;/h2&gt;
&lt;p&gt;Nach außen öffnet der Stack nur den Frontend-Container. Alle anderen Dienste kommunizieren in internen Docker-Netzen.&lt;/p&gt;</description></item><item><title>Installation</title><link>/opbweb/manual/installation/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/installation/installation/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Die Installation besteht aus wenigen Schritten: Quellen holen, &lt;code&gt;./setup-opbweb.sh&lt;/code&gt; ausführen (es schreibt die Konfigurationsdatei &lt;code&gt;.env&lt;/code&gt; und erzeugt die Secrets), optional ein TLS-Zertifikat ablegen und den Stack starten. Die Images baust du dabei entweder lokal mit &lt;code&gt;./start.sh --build&lt;/code&gt; oder ziehst sie fertig aus einer Registry. Danach prüfst du, ob alle Dienste laufen, und machst mit der &lt;a href="/opbweb/manual/installation/ersteinrichtung/"&gt;Ersteinrichtung&lt;/a&gt;
 in der Oberfläche weiter.&lt;/p&gt;
&lt;p&gt;Alle Befehle führst du im Projektverzeichnis auf dem Docker-Host aus. Prüfe vorher die &lt;a href="/opbweb/manual/installation/voraussetzungen/"&gt;Voraussetzungen&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Konfiguration</title><link>/opbweb/manual/technical-admin/konfiguration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/konfiguration/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;oPBWeb trennt die Konfiguration in drei Ebenen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;.env&lt;/code&gt;&lt;/strong&gt; im Projektverzeichnis: nicht geheime Einstellungen wie Ports, LDAP-Server, Zeitlimits. Docker Compose liest die Datei und setzt die Werte in &lt;code&gt;docker-compose.yml&lt;/code&gt; ein.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;secrets/&lt;/code&gt;&lt;/strong&gt;: alle Passwörter und Schlüssel als einzelne Dateien. Sie erreichen die Container als Docker-Secrets und werden nie in der &lt;code&gt;.env&lt;/code&gt; abgelegt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Oberfläche&lt;/strong&gt;: die Verbindungen zu den opsi-Configservern (URL, technischer Benutzer, Passwort, Stufe, CA-Zertifikat; in der Ansicht &lt;strong&gt;Depots&lt;/strong&gt;) und die Vorgaben für neue Pakete. Diese Einstellungen liegen in der Datenbank, siehe &lt;a href="/opbweb/manual/functional-admin/opsi-server/"&gt;Configserver&lt;/a&gt;
 und &lt;a href="/opbweb/manual/functional-admin/einstellungen/"&gt;Einstellungen für neue Pakete&lt;/a&gt;
.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Die &lt;code&gt;.env&lt;/code&gt; und die fehlenden Secrets erzeugt &lt;code&gt;./setup-opbweb.sh&lt;/code&gt;, siehe &lt;a href="/opbweb/manual/installation/installation/"&gt;Installation&lt;/a&gt;
. Du kannst die &lt;code&gt;.env&lt;/code&gt; danach direkt bearbeiten oder das Skript erneut aufrufen; die vorhandenen Werte sind dann die Vorgaben. Änderungen an &lt;code&gt;.env&lt;/code&gt; werden mit dem nächsten &lt;code&gt;./start.sh&lt;/code&gt; wirksam; Docker Compose erzeugt dabei die betroffenen Container neu.&lt;/p&gt;</description></item><item><title>Pakete</title><link>/opbweb/manual/user-guide/pakete/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/pakete/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Der Bereich &lt;strong&gt;Pakete&lt;/strong&gt; ist die Startseite von oPBWeb. Hier siehst du alle Pakete mit ihrer neuesten Version, prüfst in den Paketdetails, auf welchen Depots sie installiert sind, und legst neue Pakete an. Als Leser kannst du die Liste und die Details ansehen; Anlegen, Importieren und alle ändernden Aktionen brauchen mindestens die Rolle Packager.&lt;/p&gt;
&lt;h2 id="die-paketliste"&gt;Die Paketliste&lt;/h2&gt;
&lt;p&gt;&lt;img src="/opbweb/manual/images/de/user-guide/pakete-liste-01.png" alt="Paketliste mit Statusfiltern, Tabelle und Paketdetails rechts" /&gt;
&lt;/p&gt;
&lt;p&gt;Die Tabelle zeigt pro Paket die neueste Version:&lt;/p&gt;</description></item><item><title>Protokoll</title><link>/opbweb/manual/functional-admin/protokoll/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/protokoll/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Das Protokoll hält fest, wer wann welche wichtige Aktion in oPBWeb ausgelöst hat: Anmeldungen, Änderungen an Konten, Paketen, Depots und Einstellungen. Du findest es unter &lt;strong&gt;Benutzer und Rollen&lt;/strong&gt; im Reiter &lt;strong&gt;Protokoll&lt;/strong&gt;. Nur Administratoren können es lesen.&lt;/p&gt;
&lt;p&gt;Einträge lassen sich in der Oberfläche weder ändern noch löschen. Auch wenn du ein Benutzerkonto löschst, bleiben seine Einträge mit dem Benutzernamen erhalten.&lt;/p&gt;
&lt;h2 id="das-protokoll-lesen"&gt;Das Protokoll lesen&lt;/h2&gt;
&lt;p&gt;&lt;img src="/opbweb/manual/images/de/functional-admin/protokoll-liste-01.png" alt="Reiter „Protokoll“ mit Filterfeldern und Einträgen" /&gt;
&lt;/p&gt;</description></item><item><title>Configserver</title><link>/opbweb/manual/functional-admin/opsi-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/opsi-server/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;oPBWeb arbeitet mit beliebig vielen opsi-Configservern, zum Beispiel einem Test-, einem Staging- und einem Produktivsystem. Über jeden Configserver liest oPBWeb dessen Depots, installiert Pakete und greift auf &lt;code&gt;/repository&lt;/code&gt;, &lt;code&gt;/workbench&lt;/code&gt; und &lt;code&gt;/depot&lt;/code&gt; zu. Jedes Depot gehört zu genau einem Configserver.&lt;/p&gt;
&lt;p&gt;Die Configserver verwaltest du in der Ansicht &lt;strong&gt;Depots&lt;/strong&gt; in der Aktivitätsleiste. Solange kein Configserver eingerichtet ist, funktionieren Depots, Installieren und die Workbench nicht, und die Statusleiste zeigt „Kein Configserver eingerichtet“.&lt;/p&gt;</description></item><item><title>Ersteinrichtung</title><link>/opbweb/manual/installation/ersteinrichtung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/installation/ersteinrichtung/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Nach der &lt;a href="/opbweb/manual/installation/installation/"&gt;Installation&lt;/a&gt;
 ist oPBWeb erreichbar, kennt aber noch keinen opsi-Server und hat nur ein Konto: den ersten Administrator. In der Ersteinrichtung meldest du dich mit diesem Konto an, änderst sein Passwort, verbindest oPBWeb mit einem oder mehreren opsi-Configservern, legst die Stufen der Depots fest und richtest die ersten Benutzer ein.&lt;/p&gt;
&lt;p&gt;Du brauchst dafür das Admin-Passwort aus &lt;code&gt;secrets/admin_password.txt&lt;/code&gt;, die Zugangsdaten des technischen opsi-Benutzers und einen Shell-Zugang zum Configserver, um den Fingerabdruck des CA-Zertifikats zu prüfen.&lt;/p&gt;</description></item><item><title>LDAP-Anmeldung</title><link>/opbweb/manual/technical-admin/ldap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/ldap/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Neben lokalen Konten kann oPBWeb Benutzer gegen ein LDAP-Verzeichnis oder Active Directory anmelden. Die Rolle in oPBWeb ergibt sich dann aus den Gruppenmitgliedschaften im Verzeichnis. Du konfigurierst die Anbindung über &lt;code&gt;LDAP_*&lt;/code&gt;-Variablen in der &lt;code&gt;.env&lt;/code&gt; und das Passwort des Dienstkontos in &lt;code&gt;secrets/ldap_bind_password.txt&lt;/code&gt;. In der Oberfläche gibt es dafür keine Einstellungen.&lt;/p&gt;
&lt;h2 id="so-läuft-die-anmeldung-ab"&gt;So läuft die Anmeldung ab&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Gibt es in oPBWeb ein &lt;strong&gt;lokales&lt;/strong&gt; Konto mit dem eingegebenen Benutzernamen, meldet oPBWeb ausschließlich lokal an. Das Verzeichnis wird nicht gefragt, auch wenn das Passwort falsch ist.&lt;/li&gt;
&lt;li&gt;Sonst, bei &lt;code&gt;LDAP_ENABLED=true&lt;/code&gt;, verbindet sich oPBWeb mit dem Dienstkonto (&lt;code&gt;LDAP_BIND_DN&lt;/code&gt;) oder anonym, wenn kein Bind-DN gesetzt ist.&lt;/li&gt;
&lt;li&gt;oPBWeb sucht mit &lt;code&gt;LDAP_USER_FILTER&lt;/code&gt; unterhalb von &lt;code&gt;LDAP_USER_SEARCH_BASE&lt;/code&gt; (leer: &lt;code&gt;LDAP_BASE_DN&lt;/code&gt;). Die Suche muss genau einen Eintrag liefern.&lt;/li&gt;
&lt;li&gt;Mit dem gefundenen DN und dem eingegebenen Passwort meldet sich oPBWeb als Benutzer an und prüft so das Passwort.&lt;/li&gt;
&lt;li&gt;Aus dem Attribut &lt;code&gt;memberOf&lt;/code&gt; bestimmt oPBWeb die Rolle (siehe unten). Ohne passende Gruppe gibt es keinen Zugang.&lt;/li&gt;
&lt;li&gt;Beim ersten erfolgreichen Login legt oPBWeb das Konto mit der Herkunft „Verzeichnis (LDAP)“ an. Anzeigename (&lt;code&gt;displayName&lt;/code&gt;), E-Mail (&lt;code&gt;mail&lt;/code&gt;) und Rolle werden bei &lt;strong&gt;jeder&lt;/strong&gt; Anmeldung neu aus dem Verzeichnis übernommen.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lokale Konten bleiben also immer lokal, auch das erste Administrator-Konto. So kommst du auch bei einem Ausfall des Verzeichnisses noch an oPBWeb heran.&lt;/p&gt;</description></item><item><title>Paket-Editor</title><link>/opbweb/manual/user-guide/paket-editor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/paket-editor/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Im Paket-Editor bearbeitest du eine Paketversion: die control-Daten (Produktangaben, Scripte, Abhängigkeiten, Properties), den Changelog und die Dateien des Pakets. Dieses Kapitel beschreibt den Reiter &lt;strong&gt;control&lt;/strong&gt;. Wie du mit Dateien und Scripten arbeitest, steht in &lt;a href="/opbweb/manual/user-guide/dateien/"&gt;Dateien des Pakets&lt;/a&gt;
 und &lt;a href="/opbweb/manual/user-guide/scripteditor/"&gt;Scripteditor&lt;/a&gt;
.&lt;/p&gt;
&lt;p&gt;Bearbeiten kannst du nur &lt;strong&gt;Entwürfe&lt;/strong&gt;, und nur mit mindestens der Rolle Packager. Als Leser und bei freigegebenen Versionen sind alle Felder gesperrt; ansehen kannst du alles.&lt;/p&gt;
&lt;h2 id="editor-öffnen"&gt;Editor öffnen&lt;/h2&gt;
&lt;p&gt;Du öffnest den Editor auf einem dieser Wege:&lt;/p&gt;</description></item><item><title>Betrieb und Aktualisierung</title><link>/opbweb/manual/technical-admin/betrieb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/betrieb/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Für den täglichen Betrieb brauchst du zwei Skripte im Projektverzeichnis: &lt;code&gt;start.sh&lt;/code&gt; und &lt;code&gt;stop.sh&lt;/code&gt;. Dieses Kapitel beschreibt außerdem, wo du Logs und Zustand der Dienste findest, wie du oPBWeb aktualisierst und was du auf der opsi-Seite beachten musst. Alle Befehle führst du im Projektverzeichnis aus.&lt;/p&gt;
&lt;h2 id="stack-starten-und-stoppen"&gt;Stack starten und stoppen&lt;/h2&gt;
&lt;h3 id="startsh"&gt;start.sh&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;./start.sh &lt;span style="color:#f92672"&gt;[&lt;/span&gt;--build&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;--logs&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;--dev | --test&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;[&lt;/span&gt;--lang de|en&lt;span style="color:#f92672"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Option&lt;/th&gt;
 &lt;th&gt;Wirkung&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;(keine)&lt;/td&gt;
 &lt;td&gt;startet den Produktiv-Stack (&lt;code&gt;docker-compose.yml&lt;/code&gt;) mit den vorhandenen Images&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--build&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;baut die eigenen Images vor dem Start neu&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--logs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;folgt nach dem Start den Logs aller Container (&lt;code&gt;logs -f --tail=50&lt;/code&gt;); Strg+C beendet nur die Anzeige&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--dev&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;nimmt &lt;code&gt;docker-compose.dev.yml&lt;/code&gt; hinzu (Entwicklungs-Stack, siehe unten); nur im Klon mit Quellen&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--test&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;nimmt &lt;code&gt;docker-compose.test.yml&lt;/code&gt; hinzu: zwei opsi-Mocks als Configserver Test und Produktion, siehe &lt;a href="/opbweb/manual/installation/testumgebung/"&gt;Testumgebung&lt;/a&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;--lang de&lt;/code&gt; bzw. &lt;code&gt;--lang en&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sprache der Ausgaben für diesen Aufruf (sonst &lt;code&gt;OPBWEB_LANG&lt;/code&gt; aus der &lt;code&gt;.env&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;-h&lt;/code&gt;, &lt;code&gt;--help&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;zeigt die Hilfe&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ablauf: Das Skript bricht ab, wenn &lt;code&gt;.env&lt;/code&gt; fehlt („.env fehlt – bitte ./setup-opbweb.sh ausführen (im Entwickler-Checkout: ./setup-opbweb.sh &amp;ndash;dev).“), ruft &lt;code&gt;scripts/init-secrets.sh&lt;/code&gt; auf, führt &lt;code&gt;docker compose up -d&lt;/code&gt; aus und zeigt mit &lt;code&gt;docker compose ps&lt;/code&gt; den Status. Laufende Container, deren Konfiguration sich nicht geändert hat, bleiben dabei unberührt. &lt;code&gt;start.sh&lt;/code&gt; holt keine neuen Fremd-Images; dafür siehe &lt;a href="#aktualisieren"&gt;Aktualisieren&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Dateien des Pakets</title><link>/opbweb/manual/user-guide/dateien/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/dateien/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Packager&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Jede Paketversion besteht aus den drei Bereichen &lt;code&gt;OPSI/&lt;/code&gt;, &lt;code&gt;CLIENT_DATA/&lt;/code&gt; und &lt;code&gt;SERVER_DATA/&lt;/code&gt;. Im Paket-Editor siehst du sie links unter dem Reiter &lt;strong&gt;Dateien&lt;/strong&gt;. Dort legst du Dateien und Ordner an, lädst Installer hoch, benennst um, verschiebst und löschst. Der Reiter &lt;strong&gt;Struktur&lt;/strong&gt; daneben zeigt, welche Scripte welche anderen Scripte einbinden.&lt;/p&gt;
&lt;p&gt;Ändern kannst du Dateien nur in einer Version mit dem Status &lt;em&gt;Entwurf&lt;/em&gt; und mit mindestens der Rolle Packager. In freigegebenen Versionen und mit der Rolle Leser ist der Dateibaum schreibgeschützt: Öffnen und Herunterladen funktionieren weiterhin, alle ändernden Einträge im Kontextmenü sind ausgegraut.&lt;/p&gt;</description></item><item><title>Einstellungen für neue Pakete</title><link>/opbweb/manual/functional-admin/einstellungen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/einstellungen/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Unter &lt;strong&gt;Einstellungen&lt;/strong&gt; legst du fest, mit welchen Werten neue Pakete und Meta-Pakete starten und welche Mail-Adresse Changelog-Einträge ohne E-Mail bekommen. Die Werte gelten für alle Benutzer. Ändern dürfen sie nur Administratoren.&lt;/p&gt;
&lt;p&gt;Die Vorgaben wirken nur beim Anlegen. Bestehende Pakete und importierte Pakete (&lt;code&gt;.opsi&lt;/code&gt; oder Workbench) behalten ihre eigenen Werte, und jeder Packager kann die Vorgaben im Paket-Editor überschreiben.&lt;/p&gt;
&lt;p&gt;Die Verbindung zu den opsi-Configservern richtest du nicht hier ein, sondern in der Ansicht &lt;strong&gt;Depots&lt;/strong&gt;, siehe &lt;a href="/opbweb/manual/functional-admin/opsi-server/"&gt;Configserver&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Testumgebung</title><link>/opbweb/manual/installation/testumgebung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/installation/testumgebung/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration, alle, die oPBWeb ausprobieren wollen&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Die Testumgebung startet oPBWeb zusammen mit zwei nachgebauten opsi-Servern (opsiconfd-Mocks). Damit probierst du den Editor und den ganzen Ablauf aus, vom Import aus der Workbench über das Bauen bis zur Übernahme von Test nach Produktion, ohne einen echten opsi-Server.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Configserver in oPBWeb&lt;/th&gt;
 &lt;th&gt;Stufe&lt;/th&gt;
 &lt;th&gt;Depots&lt;/th&gt;
 &lt;th&gt;Mock-Container&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;opsi-test&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Test&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opsi-test.mock&lt;/code&gt; (Configserver), &lt;code&gt;depot-test.mock&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-opsi-mock-test&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;opsi-prod&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Produktion&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opsi-prod.mock&lt;/code&gt; (Configserver), &lt;code&gt;depot-prod.mock&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;opbweb-opsi-mock-prod&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Die Mocks laufen mit dem Backend-Image von oPBWeb, ihr Code kommt aus &lt;code&gt;tools/opsi-mock/opsi_mock.py&lt;/code&gt;. Beides liegt im Klon des Repositorys und im &lt;a href="/opbweb/manual/technical-admin/build-und-auslieferung/#stack-zip"&gt;Stack-ZIP&lt;/a&gt;
. Die Kurzfassung dieser Anleitung steht als &lt;code&gt;START-TEST-ENVIRONMENT_de.md&lt;/code&gt; daneben.&lt;/p&gt;</description></item><item><title>Depot-Verwaltung</title><link>/opbweb/manual/functional-admin/depot-verwaltung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/depot-verwaltung/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Welche Depots es gibt, liest oPBWeb von den eingerichteten opsi-Configservern. Jedes Depot gehört zu genau einem Configserver. Als Administrator legst du für jedes Depot fest, in welcher &lt;strong&gt;Stufe&lt;/strong&gt; es läuft, unter welcher &lt;strong&gt;Dienst-URL&lt;/strong&gt; oPBWeb es erreicht und ob es überhaupt verwendet wird (&lt;strong&gt;Aktiv&lt;/strong&gt;). Die Stufe entscheidet, welche Rolle auf dem Depot installieren darf.&lt;/p&gt;
&lt;p&gt;Du findest die Einstellungen unter &lt;strong&gt;Depots&lt;/strong&gt;. Die linke Liste ist nach Configservern gegliedert: Jeder Configserver steht als fett gedruckte Zeile, darunter eingerückt seine Depots mit Stufen-Abzeichen und der Zahl der Produkte, beim Depot des Configservers selbst zum Beispiel „Configserver · 120 Produkte“. Zusätze wie „deaktiviert“ oder „nicht mehr vorhanden“ stehen ebenfalls in der zweiten Zeile. Wie du Configserver anlegst und pflegst, steht in &lt;a href="/opbweb/manual/functional-admin/opsi-server/"&gt;Configserver&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Scripteditor</title><link>/opbweb/manual/user-guide/scripteditor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/scripteditor/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Packager&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Textdateien des Pakets öffnest du per Klick im Dateibaum (siehe &lt;a href="/opbweb/manual/user-guide/dateien/"&gt;Dateien des Pakets&lt;/a&gt;
). Sie erscheinen als eigener Reiter neben dem Reiter &lt;strong&gt;control&lt;/strong&gt; im Scripteditor. Für opsi-Scripte bietet der Editor Vervollständigung, Fehlerprüfung, Hilfe zu den Befehlen und Snippets. Alle anderen Textformate bekommen eine Syntaxhervorhebung. Die Farben der Hervorhebung legst du pro Dateityp unter &lt;a href="/opbweb/manual/user-guide/konto-und-sprache/#syntaxfarben-im-editor"&gt;Mein Konto&lt;/a&gt;
 fest.&lt;/p&gt;
&lt;p&gt;Bearbeiten kannst du Dateien nur in einer Version mit dem Status &lt;em&gt;Entwurf&lt;/em&gt; und mindestens mit der Rolle Packager. Sonst ist der Editor schreibgeschützt; Lesen, Suchen, Hilfe und das Kopieren von Text funktionieren trotzdem.&lt;/p&gt;</description></item><item><title>Sicherung und Wiederherstellung</title><link>/opbweb/manual/technical-admin/sicherung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/sicherung/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Die Daten von oPBWeb liegen an zwei Stellen, die zusammengehören: In der Datenbank stehen alle Metadaten, im Objektspeicher die Dateiinhalte. Die Datenbank verweist über SHA-256-Prüfsummen und Schlüssel auf Objekte im Speicher (&lt;code&gt;blobs/…&lt;/code&gt;, &lt;code&gt;artifacts/…&lt;/code&gt;). Eine Sicherung ist nur brauchbar, wenn beide Teile &lt;strong&gt;aus demselben Zeitpunkt&lt;/strong&gt; stammen und die &lt;strong&gt;passenden Secrets&lt;/strong&gt; dabei sind.&lt;/p&gt;
&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Hinweis&lt;/div&gt;
&lt;p&gt;Die Befehle in diesem Kapitel sind Beispiele. Die Datenbank-Sicherung mit &lt;code&gt;mariadb-dump&lt;/code&gt; und das Sichern der Garage-Volumes bei gestopptem Stack sind der vorgesehene Weg; die konkreten Befehle für Volumes und Wiederherstellung sind daraus abgeleitet. Passe Pfade und Namen an deine Umgebung an und teste die Wiederherstellung, bevor du dich darauf verlässt.&lt;/p&gt;</description></item><item><title>Bauen und verteilen</title><link>/opbweb/manual/user-guide/bauen-und-verteilen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/bauen-und-verteilen/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Packager, Releaser&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Dieses Kapitel beschreibt den Weg einer Paketversion vom Entwurf bis auf die Depots: &lt;strong&gt;Bauen&lt;/strong&gt; erzeugt die &lt;code&gt;.opsi&lt;/code&gt;-Datei, &lt;strong&gt;Installieren …&lt;/strong&gt; bringt sie auf ein oder mehrere Depots und gibt die Version dabei frei, &lt;strong&gt;Übernehmen …&lt;/strong&gt; bringt eine getestete Version unverändert auf die Depots der nächsten Stufe. Alle Aktionen findest du in der Werkzeugleiste des Reiters &lt;strong&gt;control&lt;/strong&gt; im &lt;a href="/opbweb/manual/user-guide/paket-editor/"&gt;Paket-Editor&lt;/a&gt;
 und im Menü &lt;strong&gt;⋯&lt;/strong&gt; (Weitere Aktionen).&lt;/p&gt;
&lt;p&gt;Bauen, Installieren auf Test- und Staging-Depots und die übrigen Aktionen in diesem Kapitel brauchen mindestens die Rolle Packager. Für produktive Depots ist die Rolle Releaser nötig. Mit der Rolle Leser kannst du gebaute Pakete nur herunterladen.&lt;/p&gt;</description></item><item><title>Fehlersuche</title><link>/opbweb/manual/technical-admin/fehlersuche/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/fehlersuche/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Dieses Kapitel ordnet typische Störungen nach Symptom. Zu jedem Symptom findest du die wahrscheinliche Ursache und die Abhilfe. Am Ende steht eine Tabelle mit wichtigen Fehlermeldungen. Die Meldungen des Servers erscheinen in der Sprache der Oberfläche; dieses Kapitel zitiert sie in der deutschen Fassung.&lt;/p&gt;
&lt;h2 id="erste-anlaufstellen"&gt;Erste Anlaufstellen&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Quelle&lt;/th&gt;
 &lt;th&gt;Inhalt&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Seite &lt;strong&gt;Systemstatus&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Zustand von Datenbank, Redis, Objektspeicher, Worker und opsi-Server, siehe &lt;a href="/opbweb/manual/functional-admin/systemstatus/"&gt;Systemstatus&lt;/a&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Seite &lt;strong&gt;Jobs&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;vollständiges Protokoll jedes Jobs mit Fehlermeldung, siehe &lt;a href="/opbweb/manual/user-guide/jobs/"&gt;Jobs&lt;/a&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;docker compose ps -a&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;welche Container laufen, welche beendet sind (mit Exit-Code)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-api&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Start, Migrationen, Anmeldung, LDAP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-worker&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Jobs, opsi-Verbindung&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-garage-init&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Einrichtung des Objektspeichers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Statusleiste der Oberfläche&lt;/td&gt;
 &lt;td&gt;„Backend nicht verbunden“, wenn die API nicht antwortet; orangefarbener Hinweis bei Problemen mit dem opsi-Server&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="stack-startet-nicht"&gt;Stack startet nicht&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Symptom&lt;/th&gt;
 &lt;th&gt;Ursache&lt;/th&gt;
 &lt;th&gt;Abhilfe&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;start.sh&lt;/code&gt; meldet „.env fehlt – bitte ./setup-opbweb.sh ausführen (im Entwickler-Checkout: ./setup-opbweb.sh &amp;ndash;dev).“&lt;/td&gt;
 &lt;td&gt;keine &lt;code&gt;.env&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;./setup-opbweb.sh&lt;/code&gt; (oder &lt;code&gt;cp .env.example .env&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API startet nicht, Log: „Secret file not found: …“&lt;/td&gt;
 &lt;td&gt;Secret-Datei fehlt, etwa weil der Stack mit &lt;code&gt;docker compose&lt;/code&gt; statt mit &lt;code&gt;./start.sh&lt;/code&gt; gestartet wurde&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;./start.sh&lt;/code&gt; verwenden oder &lt;code&gt;./scripts/init-secrets.sh&lt;/code&gt; ausführen&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;API beendet sich nach etwa 60 Sekunden, Log: „Database not reachable: …“&lt;/td&gt;
 &lt;td&gt;MariaDB nicht bereit oder Passwort passt nicht zum Volume&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-db&lt;/code&gt; prüfen; bei geändertem &lt;code&gt;db_password.txt&lt;/code&gt; siehe &lt;a href="/opbweb/manual/technical-admin/konfiguration/"&gt;Konfiguration&lt;/a&gt;
&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;api, worker und frontend starten nicht, garage-init mit Exit-Code ungleich 0&lt;/td&gt;
 &lt;td&gt;Einrichtung des Objektspeichers fehlgeschlagen&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-garage-init&lt;/code&gt;; „ERROR: No admin token found“ bedeutet fehlendes &lt;code&gt;secrets/garage_admin_token.txt&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;garage-init meldet dauerhaft „Not ready yet, retrying in 2s&amp;hellip;“&lt;/td&gt;
 &lt;td&gt;Garage startet nicht oder das Admin-Token passt nicht&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;docker logs opbweb-garage&lt;/code&gt;; Token in &lt;code&gt;secrets/&lt;/code&gt; nicht nachträglich ändern&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Log der API: „No users and no ADMIN_PASSWORD configured - no initial admin created“&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;secrets/admin_password.txt&lt;/code&gt; leer oder fehlt bei leerer Benutzertabelle&lt;/td&gt;
 &lt;td&gt;Datei füllen bzw. von &lt;code&gt;init-secrets.sh&lt;/code&gt; anlegen lassen, Stack neu starten&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="anmeldung"&gt;Anmeldung&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;„Benutzername oder Passwort falsch.“&lt;/strong&gt; Bei lokalen Konten zählt jeder Fehlversuch. Nach 5 Fehlversuchen von derselben Adresse ist das Konto für diese Adresse 15 Minuten gesperrt: „Konto gesperrt bis HH:MM Uhr.“ Von anderen Adressen kann sich der Benutzer weiter anmelden; für alle gesperrt wird das Konto erst nach 50 Fehlversuchen. Nach 20 Fehlversuchen von einer Adresse (über alle Konten) antwortet oPBWeb mit „Zu viele fehlgeschlagene Anmeldungen von dieser Adresse.“ Ein Administrator hebt die Sperre unter &lt;strong&gt;Benutzer und Rollen&lt;/strong&gt; mit &lt;strong&gt;Sperre aufheben&lt;/strong&gt; auf; auch &lt;strong&gt;Passwort setzen&lt;/strong&gt; entsperrt das Konto. Siehe &lt;a href="/opbweb/manual/functional-admin/benutzer-und-rollen/"&gt;Benutzer und Rollen&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Systemstatus</title><link>/opbweb/manual/functional-admin/systemstatus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/functional-admin/systemstatus/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rolle:&lt;/strong&gt; Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Der Bereich &lt;strong&gt;Systemstatus&lt;/strong&gt; zeigt, ob alle Dienste von oPBWeb laufen, und gibt Administratoren Einblick in die Belegung von Datenbank und Objektspeicher. Du öffnest ihn über das Symbol &lt;strong&gt;Systemstatus&lt;/strong&gt; unten in der Aktivitätsleiste.&lt;/p&gt;
&lt;p&gt;Die Tabelle der Dienste sehen alle Rollen. Die Abschnitte &lt;strong&gt;Datenbank&lt;/strong&gt;, &lt;strong&gt;Objektspeicher&lt;/strong&gt; mit &lt;strong&gt;Bereinigen …&lt;/strong&gt; und &lt;strong&gt;Bucket-Inhalt&lt;/strong&gt; sehen nur Administratoren.&lt;/p&gt;
&lt;h2 id="dienste-prüfen"&gt;Dienste prüfen&lt;/h2&gt;
&lt;p&gt;&lt;img src="/opbweb/manual/images/de/functional-admin/systemstatus-dienste-01.png" alt="Systemstatus mit der Tabelle der Dienste" /&gt;
&lt;/p&gt;
&lt;p&gt;In der Werkzeugleiste fasst ein Abzeichen den Zustand zusammen: „Alle Dienste erreichbar“, „Mindestens ein Dienst ist nicht erreichbar“ oder „API nicht erreichbar“. Daneben steht „Stand HH:MM:SS“. Die Tabelle aktualisiert sich alle zehn Sekunden von selbst; mit &lt;strong&gt;Aktualisieren&lt;/strong&gt; lädst du sofort neu.&lt;/p&gt;</description></item><item><title>Build und Auslieferung</title><link>/opbweb/manual/technical-admin/build-und-auslieferung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/technical-admin/build-und-auslieferung/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zielgruppe:&lt;/strong&gt; Technische Administration&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;oPBWeb besteht aus drei eigenen Images: Backend (für api und worker), Frontend (nginx mit Oberfläche und Handbuch) und garage-init. Du baust sie entweder lokal mit &lt;code&gt;./start.sh --build&lt;/code&gt; oder lässt sie von der GitLab-CI bauen und in die Projekt-Registry schieben. Die CI erzeugt außerdem das Handbuch als PDF. Dieses Kapitel beschreibt die Images, die Pipeline und wie du das Handbuch lokal baust.&lt;/p&gt;
&lt;h2 id="images"&gt;Images&lt;/h2&gt;
&lt;p&gt;Alle Dockerfiles verwenden das Projektverzeichnis als Build-Kontext. &lt;code&gt;.dockerignore&lt;/code&gt; hält unter anderem &lt;code&gt;secrets/&lt;/code&gt;, &lt;code&gt;certs/&lt;/code&gt;, &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;node_modules/&lt;/code&gt; sowie die Hugo-Ausgaben und &lt;code&gt;manual/.doc-state/&lt;/code&gt; aus dem Kontext heraus.&lt;/p&gt;</description></item><item><title>Snippets</title><link>/opbweb/manual/user-guide/snippets/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/snippets/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Snippets sind Textbausteine für opsi-script, die du im Scripteditor per Doppelklick, Autovervollständigung oder Kontextmenü einfügst. Die Ansicht &lt;strong&gt;Snippets&lt;/strong&gt; in der Aktivitätsleiste ist der Ort, an dem du sie verwaltest: Kategorien anlegen, Snippets schreiben und testen, Dateien importieren und exportieren.&lt;/p&gt;
&lt;p&gt;Leser sehen alle Snippets, können aber nichts ändern. Ab der Rolle Packager legst du eigene Snippets an und pflegst die gemeinsamen Kategorien.&lt;/p&gt;
&lt;h2 id="globale-und-eigene-snippets"&gt;Globale und eigene Snippets&lt;/h2&gt;
&lt;p&gt;Jedes Snippet hat eine &lt;strong&gt;Sichtbarkeit&lt;/strong&gt;:&lt;/p&gt;</description></item><item><title>Depots</title><link>/opbweb/manual/user-guide/depots/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/depots/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Die Ansicht &lt;strong&gt;Depots&lt;/strong&gt; zeigt alle opsi-Configserver, die in oPBWeb eingerichtet sind, und ihre Depots so, wie oPBWeb sie zuletzt gelesen hat. Du siehst, welche Produkte in welcher Version installiert sind, räumst das Repository auf, bearbeitest Dateien direkt auf dem Server und vergleichst die Depots untereinander.&lt;/p&gt;
&lt;p&gt;Leser sehen alles, können aber nichts verändern. Was Packager und Releaser auf einem Depot ändern dürfen, hängt von dessen Stufe ab (siehe &lt;a href="#stufen-und-rollen"&gt;Stufen und Rollen&lt;/a&gt;
). Configserver hinzufügen, bearbeiten und entfernen können nur Administratoren, siehe &lt;a href="/opbweb/manual/functional-admin/opsi-server/"&gt;opsi-Server&lt;/a&gt;
.&lt;/p&gt;</description></item><item><title>Jobs</title><link>/opbweb/manual/user-guide/jobs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/jobs/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Alles, was länger dauert oder mit einem opsi-Server spricht, führt oPBWeb als &lt;strong&gt;Job&lt;/strong&gt; im Hintergrund aus. Du startest die Aktion, arbeitest weiter und verfolgst den Fortschritt in der Statusleiste, im Paket-Editor oder in der Ansicht &lt;strong&gt;Jobs&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Alle Benutzer sehen alle Jobs, auch die der Kollegen, samt Protokoll. So lässt sich nachvollziehen, wer wann was gebaut oder verteilt hat.&lt;/p&gt;
&lt;h2 id="welche-aktionen-laufen-als-job"&gt;Welche Aktionen laufen als Job?&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Aktion&lt;/th&gt;
 &lt;th&gt;Anzeige in der Spalte &lt;strong&gt;Aktion&lt;/strong&gt;&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;.opsi&lt;/code&gt;-Paket importieren&lt;/td&gt;
 &lt;td&gt;Import&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Bauen&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Bauen&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Installieren …&lt;/strong&gt;, &lt;strong&gt;Übernehmen …&lt;/strong&gt; auf andere Stufe&lt;/td&gt;
 &lt;td&gt;Installieren&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Deinstallieren …&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Deinstallieren&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Abgleichen&lt;/strong&gt; der Depots (ein Configserver oder alle)&lt;/td&gt;
 &lt;td&gt;Depot-Abgleich&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Bereinigen …&lt;/strong&gt; des Objektspeichers (nur Administratoren)&lt;/td&gt;
 &lt;td&gt;Bereinigung&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Workbench einlesen, importieren, exportieren&lt;/td&gt;
 &lt;td&gt;technischer Name, z. B. &lt;code&gt;scan_workbench&lt;/code&gt;, &lt;code&gt;import_workbench&lt;/code&gt;, &lt;code&gt;import_workbench_many&lt;/code&gt; (Import mehrerer Projektordner), &lt;code&gt;export_workbench&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Mit Workbench abgleichen …&lt;/strong&gt;: vergleichen, übernehmen&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;compare_workbench&lt;/code&gt;, &lt;code&gt;apply_workbench&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Repository lesen, Repository-Dateien löschen&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;list_repository&lt;/code&gt;, &lt;code&gt;delete_repository_files&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Produkte entsperren&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;unlock_products&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dateien im Tab &lt;strong&gt;Dateien&lt;/strong&gt; der Depots hoch- und herunterladen&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;files_upload&lt;/code&gt;, &lt;code&gt;files_download&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CA-Zertifikat holen, Verbindung testen (nur Administratoren)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;fetch_opsi_ca&lt;/code&gt;, &lt;code&gt;check_opsi_server&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Nur die ersten sechs Aktionen haben einen übersetzten Namen; alle anderen erscheinen mit ihrem technischen Namen. Titel und Protokollzeilen der Jobs kommen vom Server und erscheinen in der Sprache der Oberfläche. Jobs, die vor Version 0.15.0 entstanden sind, behalten ihre deutschen Titel und Protokollzeilen.&lt;/p&gt;</description></item><item><title>Konto und Sprache</title><link>/opbweb/manual/user-guide/konto-und-sprache/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/opbweb/manual/user-guide/konto-und-sprache/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rollen:&lt;/strong&gt; Leser, Packager, Releaser, Administrator&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;
&lt;p&gt;Die Einstellungen zu deinem eigenen Konto erreichst du über das Avatar-Symbol mit deinen Initialen ganz rechts in der Kopfleiste. Daneben findest du in der Kopfleiste die Umschalter für Sprache und Hell-/Dunkel-Darstellung sowie den Zugang zu diesem Handbuch.&lt;/p&gt;
&lt;p&gt;Diese Funktionen stehen allen Benutzern zur Verfügung, unabhängig von der Rolle.&lt;/p&gt;
&lt;h2 id="das-benutzermenü"&gt;Das Benutzermenü&lt;/h2&gt;
&lt;p&gt;Klick auf das Avatar-Symbol, um das Benutzermenü zu öffnen.&lt;/p&gt;
&lt;p&gt;&lt;img src="/opbweb/manual/images/de/user-guide/konto-menue-01.png" alt="Geöffnetes Benutzermenü mit Standardsprache, Mein Konto, Passwort ändern und Abmelden" /&gt;
&lt;/p&gt;</description></item></channel></rss>