Acknowledgements

What oPBWeb takes from uib GmbH: components, ported code, data and documentation

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

ComponentWhere in oPBWebSourceLicence
python-opsi 4.3.32.1Backend 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/DockerfileAGPL-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.

PartWhere in oPBWebBasis in the opsi-setup-detectorHow it was adopted
Installer table: detection patterns, parameters for silent and unattended installation, uninstaller path, exit code function, hintsresources/installers.tomlosdbasedata.pasconverted 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.opsiscriptresources/templatesfolder template-filestaken unchanged
Analysis of an installer: type detection, metadata, command lines, check for an existing installationanalyze.py, scan.py, models.pyosdanalyzewin.pas (Analyze, get_*_info), AnalyzeLin, AnalyzeMac, osdanalyzegeneral.pas, osdanalyze_by_die.pas, TSetupFileported (Python)
Generating the package files from the templates, placeholders #@name*#generate.pyosdcreate.pas (fillPatchList, patchScript, createClientFiles, createOpsiFiles), osdmeta.pasported (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

DataWhere in oPBWebSourceLicence
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 summarizedfrontend/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.opsiscriptsame file@Description comments of the file in opsi-org/lazarusAGPL-3.0

Emulated interfaces

WhatWhere in oPBWebModel
Launcher opsipackagebuilder for the hand-off from the opsi-setup-detectortools/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.