- 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
194 lines
6.7 KiB
Docker
194 lines
6.7 KiB
Docker
# Ubuntu 26.04 Qt6 Build Container
|
|
FROM harbor.sl.defence-elec.de/proxydockerhub/library/ubuntu:26.04
|
|
|
|
LABEL maintainer="Legatus Team"
|
|
LABEL description="Qt6 build container for Legatus project"
|
|
LABEL version="ubuntu26-qt6.10.2"
|
|
|
|
# Prevent interactive prompts during package installation
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV TZ=Europe/Berlin
|
|
|
|
# Proxy configuration for air-gapped environments
|
|
ARG HTTP_PROXY=""
|
|
ARG HTTPS_PROXY=""
|
|
ARG NO_PROXY="localhost,127.0.0.1,.sl.defence-elec.de"
|
|
|
|
ENV http_proxy=${HTTP_PROXY}
|
|
ENV https_proxy=${HTTPS_PROXY}
|
|
ENV no_proxy=${NO_PROXY}
|
|
|
|
# =============================================================================
|
|
# Base Development Tools
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
build-essential \
|
|
cmake \
|
|
ninja-build \
|
|
clang \
|
|
gnupg \
|
|
curl \
|
|
jq \
|
|
openssh-client \
|
|
pkg-config \
|
|
git \
|
|
ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# Python 3 and aqtinstall for Qt6
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
python3 \
|
|
python3-venv \
|
|
python3-pip \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN pip3 install --break-system-packages --quiet aqtinstall
|
|
|
|
# =============================================================================
|
|
# Qt6 Framework via aqtinstall
|
|
# =============================================================================
|
|
ARG QT_VERSION=6.10.2
|
|
ARG QT_MODULES="qtmultimedia qtserialport qtimageformats qtwebsockets qtwebengine qtpdf qtwebview qt5compat qtwebchannel qtpositioning qtlocation qtsensors"
|
|
|
|
RUN aqt install-qt linux desktop ${QT_VERSION} linux_gcc_64 \
|
|
-m ${QT_MODULES} \
|
|
--outputdir /opt/Qt \
|
|
&& ln -sfn /opt/Qt/${QT_VERSION}/gcc_64/bin/* /usr/local/bin/
|
|
|
|
ENV QT_HOME=/opt/Qt/${QT_VERSION}/gcc_64
|
|
ENV PATH=${QT_HOME}/bin:${PATH}
|
|
ENV CMAKE_PREFIX_PATH=${QT_HOME}/lib/cmake
|
|
|
|
# =============================================================================
|
|
# Qt6 SVG (not available via aqtinstall - use apt package)
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libqt6svg6-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# KDReports 2.3.0
|
|
# =============================================================================
|
|
ARG KDREPORTS_VERSION=2.3.0
|
|
|
|
RUN git clone --depth 1 --branch kdreports-${KDREPORTS_VERSION} \
|
|
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=${QT_HOME} \
|
|
-DKDReports_QT6=ON .. \
|
|
&& cmake --build . -j$(nproc) \
|
|
&& cmake --install . \
|
|
&& rm -rf /tmp/KDReports
|
|
|
|
# Create header alias for legacy includes
|
|
RUN ln -sfn /usr/local/include/KDReports-qt6 /usr/local/include/KDReports
|
|
|
|
# =============================================================================
|
|
# Log4Qt 2.0.0
|
|
# =============================================================================
|
|
ARG LOG4QT_VERSION=2.0.0
|
|
|
|
RUN git clone --depth 1 --branch v${LOG4QT_VERSION} \
|
|
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=${QT_HOME} .. \
|
|
&& cmake --build . -j$(nproc) \
|
|
&& cmake --install . \
|
|
&& rm -rf /tmp/Log4Qt
|
|
|
|
# =============================================================================
|
|
# Grantlee (Qt6 build from master)
|
|
# =============================================================================
|
|
RUN 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=${QT_HOME} \
|
|
-DGRANTLEE_BUILD_WITH_QT6=ON .. \
|
|
&& cmake --build . -j$(nproc) \
|
|
&& cmake --install . \
|
|
&& rm -rf /tmp/grantlee
|
|
|
|
# =============================================================================
|
|
# GoogleTest
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libgtest-dev \
|
|
libgmock-dev \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# PostgreSQL 18 Client Libraries
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libpq-dev \
|
|
postgresql-server-dev-all \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# Additional System Libraries
|
|
# =============================================================================
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
libgl1-mesa-dev \
|
|
libxkbcommon-x11-0 \
|
|
libfontconfig1 \
|
|
libdbus-1-3 \
|
|
libpulse0 \
|
|
libxcb-glx0 \
|
|
libxcb-cursor0 \
|
|
libbz2-dev \
|
|
libpoppler-dev \
|
|
libpoppler-qt6-dev \
|
|
libboost-dev \
|
|
libgeographiclib-dev \
|
|
libbotan-3-dev \
|
|
libssl-dev \
|
|
libxml2-dev \
|
|
libicu-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 \
|
|
libvlc-dev \
|
|
vlc-plugin-base \
|
|
rpm \
|
|
unzip \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# =============================================================================
|
|
# Runtime Mount Points for Proprietary Dependencies
|
|
# =============================================================================
|
|
RUN mkdir -p /opt/RTI /opt/ArcGIS
|
|
|
|
# =============================================================================
|
|
# Environment Variables
|
|
# =============================================================================
|
|
ENV DDS_PATH=/opt/RTI
|
|
ENV ARCGIS_SDK_ROOT=/opt/ArcGIS/MapsSDK_Qt_300.0.0
|
|
|
|
# =============================================================================
|
|
# Cleanup
|
|
# =============================================================================
|
|
RUN apt-get clean && rm -rf /var/cache/apt/*
|
|
|
|
# Default command
|
|
CMD ["/bin/bash"] |