7.9 KiB
DEB Package Build Pipelines
This directory contains DEB package build configurations for all 8 external dependencies used in the Legatus project.
Overview
All external dependencies are packaged as native DEB packages (format: 3.0 native) and stored in the internal SCM repository. During CI/CD, packages are installed via apt instead of copying files into Docker containers. This approach provides:
- Reproducible builds: Standard Ubuntu packaging with debhelper
- Version management: Semantic versioning with proper dependencies
- Air-gapped support: Packages stored in internal SCM repository at
http://remote-repo.sl.defence-elec.de:8081/repository/external-rpms/general/ - Compliance: License files included in packages where required
- Maintainability: Standard Ubuntu package management tools
- Clean Dockerfiles: No COPY commands for proprietary dependencies
Directory Structure
deb-packages/
├── README.md # This file
├── Jenkinsfile # Jenkins pipeline for building and uploading
├── avs/ # AVS DEB package
│ ├── debian/ # Debian control files
│ │ ├── control # Package metadata and dependencies
│ │ ├── rules # Build rules with override_dh_auto_install
│ │ ├── changelog # Version history
│ │ └── source/
│ │ └── format # Package format (3.0 native)
├── arcgis/ # ArcGIS Runtime SDK DEB package
├── buildingmodels/ # BuildingModels DEB package
├── geographiclib/ # GeographicLib DEB package
├── schusstafel/ # Schusstafel DEB package
├── dtentity/ # dtEntity DEB package
├── rti-connext-dds/ # RTI Connext DDS DEB package (includes license)
└── tmsif/ # tmsif DEB package
Package Names
| Directory | DEB Package Name | Version | Description |
|---|---|---|---|
| avs | libavs-dev |
1.0.0 | AVS library development files |
| arcgis | libarcgis-dev |
1.0.0 | ArcGIS Runtime SDK for Qt |
| buildingmodels | libbuildingmodels-dev |
1.0.0 | Building models library |
| geographiclib | libgeographiclib-dev |
1.0.0 | Geographic calculations library |
| schusstafel | libschusstafel-dev |
1.0.0 | Schusstafel library |
| dtentity | libdtentity-dev |
1.0.0 | dtEntity game engine |
| rti-connext-dds | librti-connext-dds-7.7.0-dev |
7.7.0 | RTI Connext DDS middleware (includes license) |
| tmsif | libtmsif-dev |
1.0.0 | TMSIF library |
Building DEB Packages
Prerequisites
- Ubuntu 26.04 build environment
devscriptspackagedebhelper(>= 12) package- Build dependencies for each package (see
debian/control)
Manual Build
cd external-dependencies/deb-packages/geographiclib
debuild -us -uc -b
This creates a binary-only DEB package without signing in the parent directory.
Build Scripts
Build single package:
cd external-dependencies/deb-packages
./build-package.sh geographiclib 1.0.0
Build all packages:
cd external-dependencies/deb-packages
./build-all-packages.sh
Build output is stored in external-dependencies/deb-packages/output/
Jenkins Pipeline
Use the Jenkinsfile to build and upload packages:
# In Jenkins, select package name and version
# Pipeline will build and upload to SCM repository automatically
Package Structure
Control File Example (AVS)
Source: avs
Section: libs
Priority: optional
Maintainer: Legatus Team <legatus@defence-elec.de>
Build-Depends: debhelper (>= 12), qt6-base-dev, ...
Package: libavs-dev
Architecture: amd64
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: AVS library development files
Development files and headers for the AVS library
used in the Legatus project.
Vcs-Browser: https://internal-repo.sl.defence-elec.de
Vcs-Git: https://internal-repo.sl.defence-elec.de/git/avs.git
Installation Path
All packages install to /opt/{DependencyName} directory structure:
- Installation root:
/opt/{DependencyName}/ - Headers:
/opt/{DependencyName}/include/ - Libraries:
/opt/{DependencyName}/lib/ - CMake configs:
/opt/{DependencyName}/cmake/ - Licenses:
/opt/{DependencyName}/(RTI) or/usr/share/doc/<package>/copyright
Uploading to SCM Repository
Jenkins Pipeline
The Jenkinsfile automates building and uploading:
// Parameters:
// - PACKAGE_NAME: avs, arcgis, buildingmodels, etc.
// - PACKAGE_VERSION: 1.0.0
// - SCM_URL: http://remote-repo.sl.defence-elec.de:8081/repository/external-rpms/general/
// - CREDENTIALS_ID: Jenkins credentials ID for SCM authentication
pipeline {
agent any
parameters {
choice(name: 'PACKAGE_NAME', choices: ['avs', 'arcgis', 'buildingmodels', 'geographiclib', 'schusstafel', 'dtentity', 'rti-connext-dds', 'tmsif'])
string(name: 'PACKAGE_VERSION', defaultValue: '1.0.0')
}
stages {
stage('Build') {
steps {
sh "cd external-dependencies/deb-packages/\${PACKAGE_NAME} && debuild -us -uc -b"
}
}
stage('Upload') {
steps {
sh "curl -u \${SCM_CREDENTIALS} --upload-file ../lib\${PACKAGE_NAME}-dev_\${PACKAGE_VERSION}_amd64.deb \${SCM_URL}"
}
}
}
}
Manual Upload
curl -u <username>:<password> \
--upload-file libavs-dev_1.0.0_amd64.deb \
http://remote-repo.sl.defence-elec.de:8081/repository/external-rpms/general/
License Handling
RTI Connext DDS
The RTI package includes the commercial license file:
rti_license.datincluded in DEB package at/opt/rti_connext_dds-7.7.0/rti_license.dat- DEB package installs to
/opt/rti_connext_dds-7.7.0/ - FlexLM license validated at runtime
ArcGIS Runtime SDK
- Map-specific licenses embedded in .ini files
- Licenses included in DEB package
- Located in
/opt/ArcGIS/MapsSDK_Qt_300.0.0/
AVS & tmsif
- Customer lifetime license contracts
- No license files required in DEB package
- License contracts maintained separately by customer
Other Packages
- Open source or internal licenses
- Standard copyright file in
/usr/share/doc/<package>/copyright
Verification
After installation, verify packages:
# Check installed packages
dpkg -l | grep libavs-dev
# List installed files
dpkg -L libavs-dev
# Check package info
apt-cache show libavs-dev
# Verify installation path
ls -la /opt/AVS/
# Verify dependencies
ldd /opt/AVS/lib/libavs.so
Usage in Dockerfiles
Example Dockerfile using DEB packages from SCM:
FROM ubuntu:26.04
# Configure APT repository for internal SCM
RUN echo "deb [trusted=yes] http://remote-repo.sl.defence-elec.de:8081/repository/external-rpms/general/ /" > /etc/apt/sources.list.d/scm.list
# Install all external dependencies
RUN apt-get update && apt-get install -y \
libavs-dev \
libarcgis-dev \
libbuildingmodels-dev \
libgeographiclib-dev \
libschusstafel-dev \
libdtentity-dev \
librti-connext-dds-7.7.0-dev \
libtmsif-dev \
&& rm -rf /var/lib/apt/lists/*
# Verify installation
RUN ls -la /opt/AVS /opt/ArcGIS /opt/RTI
Security Considerations
- Include license files in DEB packages where required (RTI, ArcGIS)
- Sign packages with internal signing key before distribution
- Verify checksums after upload to repository
- Maintain chain of custody for proprietary packages
- Use HTTPS for SCM repository access in production