- Create external-dependencies directory structure with per-package pipelines - Add DEPENDENCIES-INVENTORY.md with comprehensive dependency tracking - Create ubuntu-26.04-build-container base image with all dependencies - Add per-package Jenkinsfiles: log4qt, grantlee, googletest, postgresql, qt6-framework, kdreports - Add SBOM generation script (generate-sbom.sh) for CycloneDX, SLSA v1.0, and license reports - Integrate SBOM generation into all Jenkins pipelines - Add external-dependencies/README.md with usage and security documentation - Exclude proprietary license files (rti_license.dat) from git tracking Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Entire-Checkpoint: 01M6KNFNMSPW4SY4J4SQTTPVBP
14 KiB
External Dependencies Inventory
This document inventories all external dependencies for the Qt6-migrated Legatus project, following Ubuntu 26.04 standards with independently versioned, reproducible CI/CD pipelines.
Dependency Classification
| Category | Description | Examples |
|---|---|---|
| OS/Base Image | Ubuntu 26.04 base container | ubuntu:26.04 |
| APT Packages | Ubuntu packages via apt-get | build-essential, cmake, libboost-dev |
| Upstream Binaries | Pre-built binaries via package managers | Qt6 (aqtinstall) |
| Source-Built | Built from source in container | KDReports, Log4Qt, Grantlee |
| Proprietary | Commercial licenses, runtime-mounted | RTI Connext DDS, ArcGIS Maps SDK |
Complete Dependency Inventory
1. Base Image
| Dependency | Version | Source | License | SBOM Required |
|---|---|---|---|---|
| Ubuntu Base Image | 26.04 (resolute) | harbor.sl.defence-elec.de/proxydockerhub/library/ubuntu:26.04 | GPL | Yes |
CI/CD Pipeline: external-dependencies/ubuntu-26.04-build-container/
2. Qt6 Framework
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| Qt6 Core | 6.10.2 | aqtinstall (Qt mirrors) | LGPL/GPL/Commercial | aqt install-qt linux desktop 6.10.2 linux_gcc_64 |
| Qt6 Multimedia | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtmultimedia |
| Qt6 SerialPort | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtserialport |
| Qt6 ImageFormats | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtimageformats |
| Qt6 WebSockets | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtwebsockets |
| Qt6 WebEngine | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtwebengine |
| Qt6 PDF | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtpdf |
| Qt6 WebView | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtwebview |
| Qt5 Compatibility | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qt5compat |
| Qt6 WebChannel | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtwebchannel |
| Qt6 Positioning | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtpositioning |
| Qt6 Location | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtlocation |
| Qt6 Sensors | 6.10.2 | aqtinstall | LGPL/GPL/Commercial | Module: qtsensors |
| Qt6 SVG | 6.10.2 | Ubuntu apt | LGPL/GPL/Commercial | Package: libqt6svg6-dev |
CI/CD Pipeline: external-dependencies/qt6-framework/
Installation Command:
pip3 install --break-system-packages --quiet aqtinstall
aqt install-qt linux desktop 6.10.2 linux_gcc_64 \
-m qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine \
qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation qtsensors \
--outputdir /opt/Qt
Notes:
- Qt6 SVG is NOT available via aqtinstall; provided by libqt6svg6-dev apt package
- Requires proxy configuration for air-gapped environments
- Qt6Location requires Qt6Positioning as dependency
3. KDReports
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| KDReports | 2.3.0 (kdreports-2.3.0 tag) | https://github.com/KDAB/KDReports | GPL/Commercial | Source build via CMake |
CI/CD Pipeline: external-dependencies/kdreports/
Installation:
git clone --depth 1 --branch kdreports-2.3.0 https://github.com/KDAB/KDReports.git /tmp/KDReports
cd /tmp/KDReports
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_PREFIX_PATH=/opt/Qt/6.10.2/gcc_64 \
-DKDReports_QT6=ON ..
cmake --build . -j$(nproc)
cmake --install .
Notes:
- Qt6 support via
-DKDReports_QT6=ONflag - Header alias required:
ln -sfn KDReports-qt6 /usr/local/include/KDReports - Legacy sources use
<KDReports/...>includes
4. Log4Qt
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| Log4Qt | 2.0.0 (v2.0.0 tag) | https://github.com/MEONMedical/Log4Qt | LGPL | Source build via CMake |
CI/CD Pipeline: external-dependencies/log4qt/
Installation:
git clone --depth 1 --branch v2.0.0 https://github.com/MEONMedical/Log4Qt.git /tmp/Log4Qt
cd /tmp/Log4Qt
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_PREFIX_PATH=/opt/Qt/6.10.2/gcc_64 ..
cmake --build . -j$(nproc)
cmake --install .
Notes:
- Qt6 support in v2.0.0 tag
- Logging framework for Qt applications
5. Grantlee
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| Grantlee | master branch (Qt6) | https://github.com/steveire/grantlee | LGPL | Source build via CMake |
CI/CD Pipeline: external-dependencies/grantlee/
Installation:
git clone --depth 1 https://github.com/steveire/grantlee.git /tmp/grantlee
cd /tmp/grantlee
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DCMAKE_PREFIX_PATH=/opt/Qt/6.10.2/gcc_64 \
-DGRANTLEE_BUILD_WITH_QT6=ON ..
cmake --build . -j$(nproc)
cmake --install .
Notes:
- Ubuntu
grantlee5-develis Qt5-based; must build Qt6 version from source - Qt6 support via
-DGRANTLEE_BUILD_WITH_QT6=ONflag - Template engine for Qt
6. GoogleTest
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| GoogleTest | Ubuntu package version | Ubuntu apt | BSD 3-Clause | apt-get install libgtest-dev libgmock-dev |
CI/CD Pipeline: external-dependencies/googletest/
Installation:
apt-get update
apt-get install -y --no-install-recommends libgtest-dev libgmock-dev
Notes:
- Provided by Ubuntu 26.04 repositories
- Version depends on Ubuntu release
7. PostgreSQL
| Dependency | Version | Source | License | Installation Method |
|---|---|---|---|---|
| PostgreSQL Client | 18 | Ubuntu apt | PostgreSQL License | apt-get install libpq-dev postgresql-server-dev-all |
| PostgreSQL Server | 18 | Ubuntu apt | PostgreSQL License | apt-get install postgresql-18 (optional) |
CI/CD Pipeline: external-dependencies/postgresql/
Installation:
# Client libraries (required for build)
apt-get update
apt-get install -y --no-install-recommends libpq-dev postgresql-server-dev-all
# Server (optional, for local testing)
apt-get install -y --no-install-recommends postgresql-18
Notes:
- Client libraries required for Qt SQL module
- Server optional for local development/testing
- Default roles: postgres, ctc_sv
- Default databases: lts_ets_pro, dbAdmin
8. APT Packages (Complete List)
| Package | Purpose | Required For |
|---|---|---|
| build-essential | Compiler toolchain | All C++ builds |
| cmake | Build system | CMake-based builds |
| ninja-build | Build backend | Faster builds |
| clang | Alternative compiler | Optional |
| gnupg | GPG signing | Package verification |
| curl | HTTP client | Downloads |
| jq | JSON processor | Scripting |
| openssh-client | SSH client | Git over SSH |
| pkg-config | Build configuration | Dependency discovery |
| libgl1-mesa-dev | OpenGL | Qt GUI |
| libxkbcommon-x11-0 | Keyboard handling | Qt GUI |
| libfontconfig1 | Font configuration | Qt GUI |
| libdbus-1-3 | D-Bus messaging | Qt D-Bus |
| libpulse0 | Audio | Qt Multimedia |
| libxcb-glx0 | X11 GLX | Qt GUI |
| libxcb-cursor0 | X11 cursor | Qt GUI |
| libbz2-dev | BZip2 compression | Compression |
| libpoppler-dev | PDF library | PDF support |
| libpoppler-qt6-dev | PDF Qt6 bindings | PDF in Qt6 |
| libboost-dev | Boost libraries | Boost support |
| libgeographiclib-dev | Geographic calculations | Geospatial |
| libbotan-3-dev | Cryptography | Security |
| libssl-dev | SSL/TLS | Security |
| libxml2-dev | XML parsing | XML support |
| libicu-dev | Unicode support | Internationalization |
| libqt6svg6-dev | SVG support | Qt SVG |
| unzip | Archive extraction | Downloads |
| python3 | Python runtime | Scripts |
| python3-venv | Python virtualenv | Python isolation |
| python3-pip | Python package manager | aqtinstall |
| libkf6texttemplate-dev | KDE text templates | KDE Frameworks 6 |
| libqt6core6 | Qt6 Core library | Qt6 runtime |
| libqt6gui6 | Qt6 GUI library | Qt6 runtime |
| libqt6widgets6 | Qt6 Widgets library | Qt6 runtime |
| libqt6sql6 | Qt6 SQL library | Database access |
| libqt6sql6-psql | Qt6 PostgreSQL driver | PostgreSQL |
| libqt6test6 | Qt6 Test library | Unit tests |
| qt6-base-dev | Qt6 base development | Qt6 dev |
| qt6-l10n-tools | Qt6 localization | i18n |
| qt6-serialport-dev | Qt6 SerialPort dev | Serial communication |
| qt6-svg-dev | Qt6 SVG development | SVG support |
| qt6-tools-dev-tools | Qt6 tools | Qt6 dev |
| qt6-tools-dev | Qt6 tools development | Qt6 dev |
| qt6-websockets-dev | Qt6 WebSockets dev | WebSocket support |
| libvlc-dev | VLC media library | Multimedia |
| vlc-plugin-base | VLC plugins | Multimedia |
| rpm | RPM packaging | RPM builds |
Installation Command:
apt-get update
apt-get install -y --no-install-recommends \
build-essential cmake libboost-dev libkf6texttemplate-dev \
libqt6core6 libqt6gui6 libqt6widgets6 libqt6sql6 libqt6sql6-psql libqt6test6 \
qt6-base-dev qt6-l10n-tools qt6-serialport-dev qt6-svg-dev \
qt6-tools-dev-tools qt6-tools-dev qt6-websockets-dev \
libgtest-dev libpq-dev postgresql-server-dev-all \
libvlc-dev vlc-plugin-base git python3-pip \
[additional packages as needed]
9. Proprietary Dependencies (Runtime-Mounted)
| Dependency | Version | Source | License | Mount Path |
|---|---|---|---|---|
| RTI Connext DDS | 7.7.0 Pro | RTI Commercial License | Commercial | /opt/RTI (container) /repo/external/rti_connext_dds-7.7.0 (host) |
| ArcGIS Maps SDK for Qt | 300.0.0 | Esri Commercial License | Commercial | /opt/ArcGIS (container) /repo/external/ArcGIS (host) |
Notes:
- NOT installed in container - mounted at runtime via Docker volumes
- RTI license file:
/repo/external/rti_connext_dds-7.7.0/rti_license.dat - ArcGIS SDK path:
/repo/external/ArcGIS/MapsSDK_Qt_300.0.0/ArcGIS_Maps_SDK_Qt_300.0.0/qt300.0.0/sdk - Environment variables:
DDS_PATH=/opt/RTI(container)ARCGIS_SDK_ROOT=/opt/ArcGIS/MapsSDK_Qt_300.0.0(container)
Docker Mount Example:
docker run -v /repo/external/rti_connext_dds-7.7.0:/opt/RTI \
-v /repo/external/ArcGIS:/opt/ArcGIS \
[other options] \
build-container
Dependency Graph
ubuntu:26.04 (base)
├── APT Packages (build-essential, cmake, etc.)
│ └── GoogleTest (libgtest-dev)
│ └── PostgreSQL (libpq-dev)
├── Python 3 + pip
│ └── aqtinstall
│ └── Qt6 Framework (6.10.2)
│ ├── KDReports (2.3.0) - requires Qt6
│ ├── Log4Qt (2.0.0) - requires Qt6
│ └── Grantlee (master) - requires Qt6
└── Runtime Mounts (proprietary)
├── RTI Connext DDS 7.7.0 Pro
└── ArcGIS Maps SDK 300.0.0
SBOM Generation Requirements
Each CI/CD pipeline must generate:
-
CycloneDX SBOM (Software Bill of Materials)
- Format: JSON
- Includes: All direct and transitive dependencies
- Location:
sbom/<package>-<version>-sbom.json
-
Provenance Manifest
- Format: SLSA v1.0
- Includes: Build instructions, source URLs, commit hashes, checksums
- Location:
sbom/<package>-<version>-provenance.json
-
License Compliance Report
- Format: Markdown/JSON
- Includes: License types, compatibility analysis, attribution requirements
- Location:
sbom/<package>-<version>-licenses.md
Version Pinning Strategy
| Dependency Type | Pinning Method | Update Frequency |
|---|---|---|
| Ubuntu Base Image | Tag: 26.04 | Quarterly |
| APT Packages | Ubuntu 26.04 repository freeze | Security updates only |
| Qt6 Framework | Version: 6.10.2 (pinned in aqtinstall) | Per Qt LTS release |
| KDReports | Git tag: kdreports-2.3.0 | As needed |
| Log4Qt | Git tag: v2.0.0 | As needed |
| Grantlee | Git commit hash (master branch) | As needed |
| GoogleTest | Ubuntu package version | Ubuntu updates |
| PostgreSQL | Ubuntu package version (18) | Ubuntu updates |
| Proprietary | License version (RTI 7.7.0, ArcGIS 300.0.0) | Per license agreement |
Security Considerations
-
No Secrets in Containers
- Proprietary licenses mounted at runtime
- No credentials committed to Git
- Use Jenkins credentials for registry access
-
Air-Gapped Environment Support
- Internal Nexus repository:
remote-repo.sl.defence-elec.de:8081 - Internal Harbor registry:
harbor.sl.defence-elec.de - Proxy configuration via environment variables
- Internal Nexus repository:
-
Checksum Verification
- All git clones use
--depth 1with specific tags/commits - SBOM includes SHA256 checksums
- APT packages signed by Ubuntu keys
- All git clones use
-
License Compliance
- LGPL components dynamically linked
- Commercial licenses runtime-mounted
- Attribution in SBOM
Next Steps
-
Create per-package CI/CD pipelines:
external-dependencies/<package>/Dockerfileexternal-dependencies/<package>/Jenkinsfileexternal-dependencies/<package>/README.md
-
Generate SBOMs for each package
-
Create build container pipeline:
external-dependencies/ubuntu-26.04-build-container/
-
Update
new_docker_build.shwith--docker-mount-rootoption -
Verify no secrets or proprietary files committed
Document Version: 1.0
Last Updated: 2025-11-04
Author: Copilot (Qt6 Migration Pipeline)