From 4ed748229dcdd19b5f673b2b3428d43b8a1342b5 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 09:39:45 +1000 Subject: [PATCH 1/6] fix: install kitware keyring Prevents apt breakages if making any local changes to the build container. --- dev/Dockerfile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dev/Dockerfile b/dev/Dockerfile index b139716..f55ee7c 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -9,12 +9,14 @@ ARG OS_CODENAME ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ - apt-get install --yes --no-install-recommends software-properties-common gpg wget && \ + apt-get install --yes --no-install-recommends software-properties-common gpg wget ca-certificates && \ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \ gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \ echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${OS_CODENAME} main" | \ tee /etc/apt/sources.list.d/kitware.list >/dev/null && \ - add-apt-repository ppa:git-core/ppa --yes && \ + apt-get update && \ + apt-get install kitware-archive-keyring && \ + add-apt-repository ppa:git-core/ppa --yes --no-update && \ apt-get update && \ apt-get install --yes --no-install-recommends \ build-essential \ From 3d9b1d8db32281686d016e68abe2f003bdc1721c Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 09:40:01 +1000 Subject: [PATCH 2/6] chore: store keyrings in recommended folders --- dev/Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/dev/Dockerfile b/dev/Dockerfile index f55ee7c..25aefe9 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -10,9 +10,10 @@ ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install --yes --no-install-recommends software-properties-common gpg wget ca-certificates && \ + mkdir -p /etc/apt/keyrings && \ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \ - gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \ - echo "deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${OS_CODENAME} main" | \ + gpg --dearmor - | tee /etc/apt/keyrings/kitware-archive-keyring.gpg >/dev/null && \ + echo "deb [signed-by=/etc/apt/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${OS_CODENAME} main" | \ tee /etc/apt/sources.list.d/kitware.list >/dev/null && \ apt-get update && \ apt-get install kitware-archive-keyring && \ From edd2e4135d0c06161a9b92881c6685b4f8d91bf2 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 10:45:22 +1000 Subject: [PATCH 3/6] chore: add nodejs for font generation --- dev/Dockerfile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/dev/Dockerfile b/dev/Dockerfile index 25aefe9..2560ff5 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -16,6 +16,11 @@ RUN apt-get update && \ echo "deb [signed-by=/etc/apt/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${OS_CODENAME} main" | \ tee /etc/apt/sources.list.d/kitware.list >/dev/null && \ apt-get update && \ + wget -O - https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key 2>/dev/null | \ + gpg --dearmor - | tee /etc/apt/keyrings/nodesource.gpg >/dev/null && \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | \ + tee /etc/apt/sources.list.d/nodesource.list >/dev/null && \ + apt-get update && \ apt-get install kitware-archive-keyring && \ add-apt-repository ppa:git-core/ppa --yes --no-update && \ apt-get update && \ @@ -32,6 +37,8 @@ RUN apt-get update && \ python3-pip \ python3-dev \ gawk \ + # for font generation and cfn sorting + nodejs \ # Install dfu-util and libusb dfu-util \ # Install dependencies required by Qt libs From 1267e0c93844ffa1ee885b90d44357c79206125b Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 10:45:48 +1000 Subject: [PATCH 4/6] chore: add and generate locales, install lv_font_conv --- dev/Dockerfile | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/dev/Dockerfile b/dev/Dockerfile index 2560ff5..4e32ed0 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -39,6 +39,7 @@ RUN apt-get update && \ gawk \ # for font generation and cfn sorting nodejs \ + locales\ # Install dfu-util and libusb dfu-util \ # Install dependencies required by Qt libs @@ -46,7 +47,14 @@ RUN apt-get update && \ gstreamer1.0-plugins-base \ # linuxdeploy-plugin-qt requires libxcb1 and supporting libs awesome && \ - rm -rf /var/lib/apt/lists/* + apt-get clean && rm -rf /var/lib/apt/lists/* + +# Generate locales for cfn sorting and install lv_font_conv +RUN locale-gen zh_CN.UTF-8 cs_CZ.UTF-8 da_DK.UTF-8 de_DE.UTF-8 es_ES.UTF-8 \ + en_US.UTF-8 fi_FI.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 it_IT.UTF-8 \ + ja_JP.UTF-8 ko_KR.UTF-8 nl_NL.UTF-8 pl_PL.UTF-8 pt_PT.UTF-8 \ + ru_RU.UTF-8 sv_SE.UTF-8 zh_TW.UTF-8 uk_UA.UTF-8 && \ + npm i lv_font_conv -g RUN python3 -m pip install -U pip setuptools \ && python3 -m pip install \ From 502c67ef0d17db61241daa476b28cd32b4a0ded8 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 11:24:36 +1000 Subject: [PATCH 5/6] chore: final cleanup, optimisation, more comments --- dev/Dockerfile | 98 ++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/dev/Dockerfile b/dev/Dockerfile index 4e32ed0..9032062 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -2,27 +2,34 @@ ARG OS_CODENAME=focal FROM ubuntu:${OS_CODENAME} -# need to redeclare inside FROM with no value assignment -# refer https://docs.docker.com/engine/reference/builder/#understand-how-arg-and-from-interact +# Redeclare ARGs after FROM ARG OS_CODENAME - ARG DEBIAN_FRONTEND=noninteractive +ARG QT_VERSION=5.15.2 +ARG QT_MODULES= +ARG QT_HOST=linux +ARG QT_TARGET=desktop +ARG QT_INSTALL_DIR=/opt/qt +ARG GCC_ARM_VERSION=14.2.rel1 +ARG NODE_VERSION=20.x +# Setup package repositories and install all dependencies in a single layer RUN apt-get update && \ apt-get install --yes --no-install-recommends software-properties-common gpg wget ca-certificates && \ mkdir -p /etc/apt/keyrings && \ + # Set up Kitware repository wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | \ gpg --dearmor - | tee /etc/apt/keyrings/kitware-archive-keyring.gpg >/dev/null && \ echo "deb [signed-by=/etc/apt/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${OS_CODENAME} main" | \ tee /etc/apt/sources.list.d/kitware.list >/dev/null && \ - apt-get update && \ + # Set up NodeSource repository wget -O - https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key 2>/dev/null | \ gpg --dearmor - | tee /etc/apt/keyrings/nodesource.gpg >/dev/null && \ - echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | \ + echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION} nodistro main" | \ tee /etc/apt/sources.list.d/nodesource.list >/dev/null && \ - apt-get update && \ - apt-get install kitware-archive-keyring && \ - add-apt-repository ppa:git-core/ppa --yes --no-update && \ + # Set up Git PPA + add-apt-repository ppa:git-core/ppa --yes && \ + # Install all required packages apt-get update && \ apt-get install --yes --no-install-recommends \ build-essential \ @@ -30,6 +37,7 @@ RUN apt-get update && \ libfox-1.6-dev python3-clang-10 \ libsdl2-dev \ cmake \ + kitware-archive-keyring \ git \ zip \ unzip \ @@ -37,54 +45,41 @@ RUN apt-get update && \ python3-pip \ python3-dev \ gawk \ + dfu-util \ # for font generation and cfn sorting nodejs \ - locales\ - # Install dfu-util and libusb - dfu-util \ + locales \ # Install dependencies required by Qt libs libssl-dev \ gstreamer1.0-plugins-base \ # linuxdeploy-plugin-qt requires libxcb1 and supporting libs awesome && \ - apt-get clean && rm -rf /var/lib/apt/lists/* - -# Generate locales for cfn sorting and install lv_font_conv -RUN locale-gen zh_CN.UTF-8 cs_CZ.UTF-8 da_DK.UTF-8 de_DE.UTF-8 es_ES.UTF-8 \ + # Generate all required locales + locale-gen zh_CN.UTF-8 cs_CZ.UTF-8 da_DK.UTF-8 de_DE.UTF-8 es_ES.UTF-8 \ en_US.UTF-8 fi_FI.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 it_IT.UTF-8 \ ja_JP.UTF-8 ko_KR.UTF-8 nl_NL.UTF-8 pl_PL.UTF-8 pt_PT.UTF-8 \ ru_RU.UTF-8 sv_SE.UTF-8 zh_TW.UTF-8 uk_UA.UTF-8 && \ - npm i lv_font_conv -g - -RUN python3 -m pip install -U pip setuptools \ - && python3 -m pip install \ - asciitree \ - jinja2 \ - pillow==7.2.0 \ - aqtinstall \ - lz4 \ - pyelftools - -# Qt installation adapted from -# see https://github.com/miurahr/aqtinstall/ -# see https://github.com/vslotman/docker-aqtinstall - -ARG QT_VERSION=5.15.2 -# if modules use syntax -m MODULE [MODULE] -ARG QT_MODULES= -# supported versions of dependencies -ARG QT_HOST=linux -ARG QT_TARGET=desktop -ARG QT_INSTALL_DIR=/opt/qt -ARG QT_BASE_DIR=${QT_INSTALL_DIR}/${QT_VERSION}/gcc_64 - -# cmd 1 installs Qt dev -# cmd 2 Workaround for "libQt5Core.so.5 not found" issue -# see https://www.gitmemory.com/issue/Microsoft/WSL/3023/488329451 - -RUN aqt install-qt --outputdir ${QT_INSTALL_DIR} ${QT_HOST} ${QT_TARGET} ${QT_VERSION} ${QT_ARCH} ${QT_MODULES} && \ - strip --remove-section=.note.ABI-tag ${QT_BASE_DIR}/lib/libQt5Core.so.${QT_VERSION} + # Install global npm package + npm i lv_font_conv -g && \ + # Clean up + apt-get clean && rm -rf /var/lib/apt/lists/* +# Python packages installation +RUN python3 -m pip install -U pip setuptools && \ + python3 -m pip install \ + asciitree \ + jinja2 \ + pillow==7.2.0 \ + aqtinstall \ + lz4 \ + pyelftools && \ + # Clean pip cache + python3 -m pip cache purge + +# Install Qt - adapted from +# https://github.com/miurahr/aqtinstall/ +# https://github.com/vslotman/docker-aqtinstall +ENV QT_BASE_DIR=${QT_INSTALL_DIR}/${QT_VERSION}/gcc_64 ENV PATH=${QT_BASE_DIR}/bin:$PATH ENV QT_PLUGIN_PATH=${QT_BASE_DIR}/plugins/ ENV QML_IMPORT_PATH=${QT_BASE_DIR}/qml/ @@ -92,17 +87,18 @@ ENV QML2_IMPORT_PATH=${QT_BASE_DIR}/qml/ ENV LD_LIBRARY_PATH=${QT_BASE_DIR}/lib:$LD_LIBRARY_PATH ENV PKG_CONFIG_PATH=${QT_BASE_DIR}/lib/pkgconfig:$PKG_CONFIG_PATH -RUN wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi.tar.xz -O - \ - | tar -xJ -C /opt +RUN aqt install-qt --outputdir ${QT_INSTALL_DIR} ${QT_HOST} ${QT_TARGET} ${QT_VERSION} ${QT_ARCH} ${QT_MODULES} && \ + strip --remove-section=.note.ABI-tag ${QT_BASE_DIR}/lib/libQt5Core.so.${QT_VERSION} -ENV PATH=/opt/arm-gnu-toolchain-14.2.rel1-x86_64-arm-none-eabi/bin/:${PATH} - -VOLUME ["/src"] +# Install ARM toolchain +RUN wget --quiet https://developer.arm.com/-/media/Files/downloads/gnu/${GCC_ARM_VERSION}/binrel/arm-gnu-toolchain-${GCC_ARM_VERSION}-x86_64-arm-none-eabi.tar.xz -O - \ + | tar -xJ -C /opt +ENV PATH=/opt/arm-gnu-toolchain-${GCC_ARM_VERSION}-x86_64-arm-none-eabi/bin/:${PATH} ENV ASAN_OPTIONS="detect_leaks=0" - # HINTS for cmake find_package ENV LIBUSB1_ROOT_DIR=/usr/lib/x86_64-linux-gnu ENV LIBSSL1_ROOT_DIR=/usr/lib/x86_64-linux-gnu +VOLUME ["/src"] ENTRYPOINT ["/usr/bin/dumb-init", "--"] From ac60175807f916a1a3f8295940b6dcbbbfc4c1e0 Mon Sep 17 00:00:00 2001 From: Peter Feerick Date: Sun, 27 Apr 2025 11:35:02 +1000 Subject: [PATCH 6/6] chore: re-add comment --- dev/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev/Dockerfile b/dev/Dockerfile index 9032062..a5ca8a7 100644 --- a/dev/Dockerfile +++ b/dev/Dockerfile @@ -45,8 +45,9 @@ RUN apt-get update && \ python3-pip \ python3-dev \ gawk \ + # Install dfu-util and libusb dfu-util \ - # for font generation and cfn sorting + # For font generation and cfn sorting nodejs \ locales \ # Install dependencies required by Qt libs