Files
qt6-migration-pipeline/external-dependencies/EXTERNAL-DEPENDENCIES-README.md
T

5.7 KiB

External Dependencies CI/CD Pipelines

This directory contains CI/CD pipelines for 8 external dependencies required for the Legatus project in air-gapped environments.

Overview

Dependency Version License Type Pipeline Status
AVS 1.0.0 Contract-based (lifetime) ✅ Complete
ArcGIS 300.0.0 Embedded ini-file licenses (lifetime) ✅ Complete
BuildingModels 1.0.0 Proprietary ✅ Complete
GeographicLib 1.52 MIT ✅ Complete
Schusstafel 1.0.0 Proprietary ✅ Complete
dtEntity 1.0.0 Open Source ✅ Complete
RTI Connext DDS 7.7.0 Commercial license file (lifetime) ✅ Complete
tmsif 1.0.0 Contract-based (lifetime) ✅ Complete

Directory Structure

external-dependencies/
├── avs/                    # AVS dependency pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── arcgis/                 # ArcGIS Runtime SDK pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── buildingmodels/         # BuildingModels dependency pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── geographiclib/          # GeographicLib dependency pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── schusstafel/            # Schusstafel dependency pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── dtentity/               # dtEntity game engine pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── rti-connext-dds/        # RTI Connext DDS pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── tmsif/                  # TMSIF dependency pipeline
│   ├── Dockerfile
│   └── Jenkinsfile
├── scripts/
│   ├── generate-sbom.sh    # SBOM generation script
│   ├── download-all-dependencies.sh
│   ├── download-deb-packages.sh
│   └── verify-offline-cache.sh
├── offline-cache/          # Downloaded packages (excluded from git)
├── DEPENDENCIES-INVENTORY.md
├── AIRGAP-SUMMARY.md
└── README.md

License Handling

RTI Connext DDS (File-Based)

  • License File: rti_license.dat (repository root)
  • Type: FlexLM commercial license
  • Handling:
    • License file copied into container during build
    • RTI_LICENSE_FILE environment variable set
    • Jenkinsfile copies license from repository root to build context
  • Location in Container: /opt/rti_license.dat

AVS (Contract-Based)

  • Type: Lifetime license contract
  • Handling: No license file required
  • Notes: License managed at contract level, not file-based

ArcGIS (Embedded Ini-File Licenses)

  • Type: Map-specific embedded licenses
  • Handling: Licenses embedded in 19 .ini files
  • Location: Lts/Viewer/SituationMap/Map/*.ini
  • Notes: Licenses travel with map configuration files

tmsif (Contract-Based)

  • Type: Lifetime license contract
  • Handling: No license file required
  • Notes: License managed at contract level, not file-based

Other Dependencies

  • BuildingModels, Schusstafel: Proprietary, contract-based
  • GeographicLib: MIT license (open source)
  • dtEntity: Open source

Air-Gapped Environment Configuration

All Dockerfiles include:

  • Internal Nexus repository: remote-repo.sl.defence-elec.de:8081
  • Proxy configuration: http://10.198.80.130:3128
  • Harbor registry: harbor.sl.defence-elec.de/proxydockerhub
  • Internal CA certificates
  • User creation (ctc, rme)

SBOM Generation

All pipelines generate:

  • CycloneDX SBOM (sbom.json)
  • SLSA provenance (provenance.json)
  • License report (licenses.txt)

SBOM files are stored in sbom/ subdirectory for each dependency.

Usage

Building a Specific Dependency

cd external-dependencies/<dependency-name>
docker build -t <image-name>:<version> .

Running Jenkins Pipeline

  1. Ensure offline cache is available at /opt/offline-cache/
  2. Configure Harbor credentials in Jenkins
  3. Run pipeline from respective Jenkinsfile

Offline Installation

For air-gapped environments:

  1. Run scripts/download-all-dependencies.sh in connected environment
  2. Transfer offline-cache/ via secure media (encrypted USB)
  3. Mount offline cache in Jenkins container
  4. Pipelines will use cached packages

Verification

Each pipeline includes verification stage:

  • AVS: Checks /opt/AVS/ directory
  • ArcGIS: Verifies SDK installation and directory structure
  • RTI: Validates license file and environment variable
  • Others: Verify installation directories and basic functionality

Troubleshooting

License Issues (RTI)

  • Ensure rti_license.dat is in repository root
  • Check RTI_LICENSE_FILE environment variable in container
  • Verify license server connectivity (if using network license)

Offline Cache Issues

  • Verify cache structure: qt6/, src/, deb/
  • Check file permissions in mounted volumes
  • Ensure all required packages are downloaded

Build Failures

  • Check proxy configuration in Dockerfile
  • Verify internal repository accessibility
  • Review CA certificate installation

Security Considerations

  • License files (e.g., rti_license.dat) excluded from git via .gitignore
  • Offline cache (2.3GB) excluded from version control
  • Transfer sensitive files via encrypted media only
  • Harbor credentials managed via Jenkins credentials store
  • All containers run as non-root user (ctc)
  • DEPENDENCIES-INVENTORY.md - Complete dependency inventory
  • AIRGAP-SUMMARY.md - Air-gapped environment adaptation details
  • offline-cache/README.md - Offline cache structure and usage
  • scripts/README.md - Script documentation