Building OTOBO & Znuny Packages (.opm)

Step-by-step: From directory structure to the .sopm manifest and the final .opm file for OTOBO, Znuny, and OTRS CE.

Building OTOBO & Znuny Packages (.opm)

An .opm package is an XML container that bundles Perl code, configuration, database changes, and frontend files. It is built from a .sopm source manifest along with the corresponding files. OTOBO, Znuny, and OTRS Community Edition use the same format. The primary difference is the root element (otobo_package vs. otrs_package).

1. Creating the Directory Structure

Create your files in the paths where they should reside on the target system:

text
MyPackage/
├── MyPackage.sopm
├── Kernel/
│   └── Config/
│       └── Files/
│           └── XML/
│               └── MyPackage.xml
└── var/
    └── httpd/
        └── htdocs/
            └── js/
                └── MyPackage.js

2. Creating the .sopm Manifest

The manifest declares metadata, compatible frameworks, and the complete file list. Use the .sopm Generator to generate a valid manifest via a form:

xml
<?xml version="1.0" encoding="utf-8" ?>
<otobo_package version="1.1">
    <Name>MyPackage</Name>
    <Version>1.0.0</Version>
    <Framework>11.0.x</Framework>
    <Framework>7.0.x</Framework>
    <Vendor>Example GmbH</Vendor>
    <URL>https://example.com/</URL>
    <License>GPL-3.0</License>
    <Description Lang="en">A short description.</Description>
    <Description Lang="de">Eine kurze Beschreibung.</Description>
    <Filelist>
        <File Permission="660" Location="Kernel/Config/Files/XML/MyPackage.xml" />
        <File Permission="644" Location="var/httpd/htdocs/js/MyPackage.js" />
    </Filelist>
</otobo_package>

Every file on disk must be listed in the <Filelist> and vice versa. The .sopm Validator checks the most important rules directly in your browser.

3. Building the Package

With a running OTOBO/Znuny installation:

bash
# OTOBO
bin/otobo.Console.pl Dev::Package::Build /path/to/MyPackage.sopm /target/directory/

# Znuny / OTRS
bin/otrs.Console.pl Dev::Package::Build /path/to/MyPackage.sopm /target/directory/

Without an installed ticketing system (e.g., in CI/CD), use opmbuild from the OPM::Maker CPAN module:

bash
cpanm OPM::Maker
opmbuild build --output /target/directory/ /path/to/MyPackage.sopm

Find details in the CI/CD Guide.

4. Installing & Testing

Install the generated .opm via the package manager (Admin → Package Manager → Install Package) or via the console:

bash
bin/otobo.Console.pl Admin::Package::Install /target/directory/MyPackage-1.0.0.opm

Next Steps