- 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
132 lines
2.7 KiB
Markdown
132 lines
2.7 KiB
Markdown
# Ubuntu 26.04 Qt6 Build Container
|
|
|
|
Base build container for Qt6-migrated Legatus project on Ubuntu 26.04 with Qt 6.10.2.
|
|
|
|
## Components
|
|
|
|
- **Base Image:** Ubuntu 26.04 (resolute)
|
|
- **Qt Version:** 6.10.2
|
|
- **Compiler:** GCC 13 (Ubuntu default)
|
|
- **Build Tools:** CMake, Ninja, Clang
|
|
|
|
## Included Dependencies
|
|
|
|
### Qt6 Modules (via aqtinstall)
|
|
- Qt6 Core
|
|
- Qt6 Multimedia
|
|
- Qt6 SerialPort
|
|
- Qt6 ImageFormats
|
|
- Qt6 WebSockets
|
|
- Qt6 WebEngine
|
|
- Qt6 PDF
|
|
- Qt6 WebView
|
|
- Qt5 Compatibility
|
|
- Qt6 WebChannel
|
|
- Qt6 Positioning
|
|
- Qt6 Location
|
|
- Qt6 Sensors
|
|
- Qt6 SVG (via apt: libqt6svg6-dev)
|
|
|
|
### Third-Party Libraries
|
|
- KDReports 2.3.0
|
|
- Log4Qt 2.0.0
|
|
- Grantlee (Qt6 build)
|
|
- GoogleTest (Ubuntu package)
|
|
|
|
### Development Tools
|
|
- build-essential
|
|
- cmake
|
|
- ninja-build
|
|
- clang
|
|
- pkg-config
|
|
- git
|
|
- python3 + pip
|
|
- aqtinstall
|
|
|
|
### System Libraries
|
|
- PostgreSQL 18 (client libraries)
|
|
- VLC media library
|
|
- Boost
|
|
- Botan cryptography
|
|
- GeographicLib
|
|
- Poppler PDF
|
|
- KDE Frameworks 6 (text template)
|
|
|
|
## Usage
|
|
|
|
### Pull Pre-built Image
|
|
|
|
```bash
|
|
docker pull harbor.sl.defence-elec.de/proxydockerhub/legatus-build-container:ubuntu26-qt6.10.2
|
|
```
|
|
|
|
### Build Locally
|
|
|
|
```bash
|
|
docker build -t legatus-build-container:ubuntu26-qt6.10.2 .
|
|
```
|
|
|
|
### Run Container
|
|
|
|
```bash
|
|
docker run -it --rm \
|
|
-v $(pwd):/repo \
|
|
-v /repo/external/rti_connext_dds-7.7.0:/opt/RTI \
|
|
-v /repo/external/ArcGIS:/opt/ArcGIS \
|
|
-e DDS_PATH=/opt/RTI \
|
|
-e ARCGIS_SDK_ROOT=/opt/ArcGIS/MapsSDK_Qt_300.0.0 \
|
|
legatus-build-container:ubuntu26-qt6.10.2 \
|
|
bash
|
|
```
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Purpose | Example |
|
|
|----------|---------|---------|
|
|
| `DDS_PATH` | RTI Connext DDS installation | `/opt/RTI` |
|
|
| `ARCGIS_SDK_ROOT` | ArcGIS Maps SDK root | `/opt/ArcGIS/MapsSDK_Qt_300.0.0` |
|
|
| `QT_QPA_PLATFORM` | Qt platform plugin | `offscreen` (for headless) |
|
|
| `CMAKE_PREFIX_PATH` | Qt6 installation path | `/opt/Qt/6.10.2/gcc_64` |
|
|
|
|
## Proxy Configuration
|
|
|
|
For air-gapped environments, set:
|
|
|
|
```bash
|
|
export http_proxy=http://proxy.internal:8080
|
|
export https_proxy=http://proxy.internal:8080
|
|
export no_proxy=localhost,127.0.0.1,.sl.defence-elec.de
|
|
```
|
|
|
|
## Verification
|
|
|
|
```bash
|
|
# Check Qt6 version
|
|
qmake6 --version
|
|
|
|
# Check KDReports
|
|
pkg-config --modversion KDReports-qt6
|
|
|
|
# Check Log4Qt
|
|
pkg-config --modversion Log4Qt
|
|
|
|
# Check Grantlee
|
|
grantlee-view --version
|
|
```
|
|
|
|
## SBOM
|
|
|
|
Software Bill of Materials available at:
|
|
- `sbom/ubuntu26-qt6-build-container-sbom.json` (CycloneDX)
|
|
- `sbom/ubuntu26-qt6-build-container-provenance.json` (SLSA)
|
|
- `sbom/ubuntu26-qt6-build-container-licenses.md`
|
|
|
|
## License
|
|
|
|
- Ubuntu: GPL
|
|
- Qt6: LGPL/GPL/Commercial
|
|
- KDReports: GPL/Commercial
|
|
- Log4Qt: LGPL
|
|
- Grantlee: LGPL
|
|
|
|
See individual component licenses for details. |