Thanks to uib GmbH
My sincere thanks go to uib GmbH for making opsi available as open source. oPBWeb builds directly on their work in several places: on the python-opsi library, on the sources of the opsi-setup-detector and on the opsi-script manual. Without this foundation, oPBWeb would not have been possible in this form.
The tables below show exactly what oPBWeb takes from uib GmbH, where it lives in oPBWeb and under which licence it is published. Paths refer to the oPBWeb source repository.
Components used directly
| Component | Where in oPBWeb | Source | Licence |
|---|---|---|---|
| python-opsi 4.3.32.1 | Backend image (services api and worker): reading and writing control files, as INI and as TOML (backend/src/packages/control.py); building .opsi files and their .zsync file (backend/src/packages/builder.py, backend/src/workbench/release.py). Also in the opsiconfd mock of the development environment (tools/opsi-mock) to read uploaded packages. | opsi-org/python-opsi
, tag 4.3.32.1, installed in backend/Dockerfile | AGPL-3.0 |
oPBWeb does not use python-opsi for the connection to opsiconfd (JSON-RPC and WebDAV, own client in backend/src/opsi) or for extracting uploaded packages (backend/src/packages/archive.py): python-opsi extracts without protection against paths outside the target folder, and it does not know the old cpio packages of opsi 4.0.
Ported and adopted code: opsi-setup-detector
The From installer … assistant, the Analyse installer function and the Templates view are based on the opsi-setup-detector by uib GmbH. The basis is the repository opsi-org/lazarus
, folder opsi-misc/opsisetupdetector, commit 5b79e669 of 2026-11-03, licence AGPL-3.0. The code lives in backend/src/detector.
| Part | Where in oPBWeb | Basis in the opsi-setup-detector | How it was adopted |
|---|---|---|---|
| Installer table: detection patterns, parameters for silent and unattended installation, uninstaller path, exit code function, hints | resources/installers.toml | osdbasedata.pas | converted automatically with backend/tools/osd_installers_to_toml.py |
Script templates: 110 files of the channels training, default and structured, including the library osd-lib.opsiscript | resources/templates | folder template-files | taken unchanged |
| Analysis of an installer: type detection, metadata, command lines, check for an existing installation | analyze.py, scan.py, models.py | osdanalyzewin.pas (Analyze, get_*_info), AnalyzeLin, AnalyzeMac, osdanalyzegeneral.pas, osdanalyze_by_die.pas, TSetupFile | ported (Python) |
Generating the package files from the templates, placeholders #@name*# | generate.py | osdcreate.pas (fillPatchList, patchScript, createClientFiles, createOpsiFiles), osdmeta.pas | ported (Python) |
oPBWeb’s own parts are the five winget templates (setupwinget.opsiscript, delincwinget.opsiinc, uninstallwinget.opsiscript, HandleWingetSections.opsiscript, osd-winget-exitcode.opsiscript): the opsi-setup-detector refers to them, but they are missing from the repository. Their header carries the note “created for oPBWeb”. Deliberate deviations from the original are commented with “not copied” in the code.
Adopted data and documentation
| Data | Where in oPBWeb | Source | Licence |
|---|---|---|---|
opsi-script language data for the script editor: statements, functions, section types and commands, constants, functions of the uib libraries (uib_exitcode.opsiscript etc.); the descriptions are summarized | frontend/src/editor/opsiscript-reference.json (completion, hover, help) | opsi-script manual 4.3, repository opsi-org/documentation
, branch v4.3 (identical to docs.opsi.org
) | CC BY-SA 4.0 |
Functions of the library osd-lib.opsiscript | same file | @Description comments of the file in opsi-org/lazarus | AGPL-3.0 |
Emulated interfaces
| What | Where in oPBWeb | Model |
|---|---|---|
Launcher opsipackagebuilder for the hand-off from the opsi-setup-detector | tools/opb-launcher (own code in Go) | call opsipackagebuilder -p=<workbench>/<productId> and search paths of the opsi-setup-detector (detect_opb_path in osdhelper.pas); the launcher’s opsi package uses the install paths of the uib package opsipackagebuilder_wlm 8.5.0-1 |
oPBWeb replaces opsiPackageBuilder and ScriptEditor. If you work with the opsi-setup-detector, the launcher takes you to oPBWeb instead of opsiPackageBuilder.
Licence
oPBWeb is licensed under the AGPL-3.0 because it uses python-opsi; the sources of the opsi-setup-detector that the installer assistant is based on are under the same licence. The language data derived from the opsi-script manual is under CC BY-SA 4.0.