summaryrefslogtreecommitdiff
path: root/docs/handbook/images4docker/base-images.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/handbook/images4docker/base-images.md')
-rw-r--r--docs/handbook/images4docker/base-images.md825
1 files changed, 825 insertions, 0 deletions
diff --git a/docs/handbook/images4docker/base-images.md b/docs/handbook/images4docker/base-images.md
new file mode 100644
index 0000000000..e28aa89aac
--- /dev/null
+++ b/docs/handbook/images4docker/base-images.md
@@ -0,0 +1,825 @@
+# images4docker — Base Images
+
+## Overview
+
+This document provides an exhaustive reference for every base image used by
+images4docker. Each entry covers the upstream `FROM` reference, the package
+manager used, the install and cleanup commands, the Qt6 search paths, and
+notes about distribution-specific behaviour.
+
+All 40 Dockerfiles share the same template structure (see
+[Architecture](architecture.md)). The differences are:
+
+1. The `FROM` image reference.
+2. The native package-manager command.
+3. The default cache-cleanup command.
+4. The Qt6 binary search `PATH` extensions.
+
+---
+
+## RHEL / Enterprise Linux Family
+
+### AlmaLinux 9
+
+**File:** `dockerfiles/alma-9.Dockerfile`
+**FROM:** `almalinux:9`
+**Package manager:** `dnf`
+
+```dockerfile
+# syntax=docker/dockerfile:1.7
+FROM almalinux:9
+
+ARG PACKAGES=
+ARG CUSTOM_INSTALL=
+ARG UPDATE_CMD=
+ARG CLEAN_CMD=
+
+SHELL ["/bin/sh", "-lc"]
+
+RUN set -eux; \
+ ... \
+ dnf install -y ${PACKAGES}; \
+ ... \
+ dnf clean all || true; \
+ export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib64/qt6/bin:/opt/qt6/bin:/root/.nix-profile/bin"; \
+ <qt6 verification>
+
+CMD ["/bin/sh"]
+```
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Binary-compatible rebuild of RHEL 9.
+- Qt6 packages typically available via EPEL or CRB repositories (enabled via `CUSTOM_INSTALL`).
+- CRB (CodeReady Builder) / PowerTools sometimes needs explicit enablement: `dnf config-manager --enable crb`.
+
+---
+
+### AlmaLinux 10
+
+**File:** `dockerfiles/alma-10.Dockerfile`
+**FROM:** `almalinux:10`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- RHEL 10 compatible rebuild.
+- Qt6 packages expected to be more widely available in RHEL 10 repositories compared to RHEL 9.
+
+---
+
+### CentOS Stream 9
+
+**File:** `dockerfiles/centos-stream9.Dockerfile`
+**FROM:** `quay.io/centos/centos:stream9`
+**Package manager:** `dnf`
+
+```dockerfile
+FROM quay.io/centos/centos:stream9
+```
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Official CentOS Stream images are hosted on **Quay.io**, not Docker Hub.
+- CentOS Stream 9 is the upstream development branch for RHEL 9.
+- The `quay.io/centos/centos` namespace replaced the former `centos` Docker Hub image.
+
+---
+
+### CentOS Stream 10
+
+**File:** `dockerfiles/centos-stream10.Dockerfile`
+**FROM:** `quay.io/centos/centos:stream10`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Upstream development branch for RHEL 10.
+- Hosted on Quay.io at `quay.io/centos/centos:stream10`.
+
+---
+
+### Oracle Linux 8
+
+**File:** `dockerfiles/oraclelinux-8.Dockerfile`
+**FROM:** `oraclelinux:8`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+**Notes:**
+- RHEL 8 compatible. Oracle Linux 8 may have limited Qt6 availability.
+- Has the extended Qt6 path including `/usr/libexec/qt6` where Oracle may place Qt6 binaries.
+- May require `CUSTOM_INSTALL` to enable additional repositories for Qt6.
+
+---
+
+### Oracle Linux 9
+
+**File:** `dockerfiles/oraclelinux-9.Dockerfile`
+**FROM:** `oraclelinux:9`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+
+---
+
+### Oracle Linux 10
+
+**File:** `dockerfiles/oraclelinux-10.Dockerfile`
+**FROM:** `oraclelinux:10`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+
+---
+
+### Rocky Linux 9
+
+**File:** `dockerfiles/rocky-9.Dockerfile`
+**FROM:** `rockylinux/rockylinux:9`
+**Package manager:** `dnf`
+
+```dockerfile
+FROM rockylinux/rockylinux:9
+```
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rocky Linux images are under the `rockylinux/rockylinux` namespace on Docker Hub.
+- RHEL 9 binary-compatible community rebuild (successor to CentOS Linux).
+
+---
+
+### Rocky Linux 10
+
+**File:** `dockerfiles/rocky-10.Dockerfile`
+**FROM:** `rockylinux/rockylinux:10`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+## Amazon Linux
+
+### Amazon Linux 2
+
+**File:** `dockerfiles/amazonlinux-2.Dockerfile`
+**FROM:** `amazonlinux:2`
+**Package manager:** `yum`
+
+```dockerfile
+FROM amazonlinux:2
+
+RUN set -eux; \
+ ... \
+ yum install -y ${PACKAGES}; \
+ ... \
+ yum clean all || true; \
+ ...
+```
+
+**Install command:** `yum install -y ${PACKAGES}`
+**Cleanup command:** `yum clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- This is the **only** image that uses `yum` instead of `dnf`.
+- Amazon Linux 2 is based on RHEL 7 / CentOS 7 era packages.
+- Qt6 availability is **very limited** on Amazon Linux 2. This image is likely
+ excluded from the active CI matrix (the README states ~35 of 40 are active).
+- May require a `CUSTOM_INSTALL` command to build Qt6 from source or use a
+ third-party repository.
+
+---
+
+### Amazon Linux 2023
+
+**File:** `dockerfiles/amazonlinux-2023.Dockerfile`
+**FROM:** `amazonlinux:2023`
+**Package manager:** `dnf`
+
+```dockerfile
+FROM amazonlinux:2023
+
+RUN set -eux; \
+ ... \
+ dnf install -y ${PACKAGES}; \
+ ... \
+ dnf clean all || true; \
+ export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib64/qt6/bin:/usr/libexec/qt6:/opt/qt6/bin:/root/.nix-profile/bin"; \
+ ...
+```
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+**Notes:**
+- Amazon Linux 2023 uses `dnf` (not `yum`), aligning with modern Fedora/RHEL.
+- Has the extended `/usr/libexec/qt6` path, suggesting Qt6 packages may install to libexec on AL2023.
+
+---
+
+## Fedora
+
+### Fedora 40
+
+**File:** `dockerfiles/fedora-40.Dockerfile`
+**FROM:** `fedora:40`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Fedora has excellent Qt6 support. Packages like `qt6-qtbase-devel` are available
+ directly in the default repositories.
+
+---
+
+### Fedora 41
+
+**File:** `dockerfiles/fedora-41.Dockerfile`
+**FROM:** `fedora:41`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### Fedora 42
+
+**File:** `dockerfiles/fedora-42.Dockerfile`
+**FROM:** `fedora:42`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### Fedora Latest
+
+**File:** `dockerfiles/fedora-latest.Dockerfile`
+**FROM:** `fedora:latest`
+**Package manager:** `dnf`
+
+**Install command:** `dnf install -y ${PACKAGES}`
+**Cleanup command:** `dnf clean all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rolling tag that always points to the newest stable Fedora release.
+
+---
+
+## Debian Family
+
+### Debian Bookworm (12)
+
+**File:** `dockerfiles/debian-bookworm.Dockerfile`
+**FROM:** `debian:bookworm`
+**Package manager:** `apt`
+
+```dockerfile
+FROM debian:bookworm
+
+RUN set -eux; \
+ ... \
+ apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}; \
+ ... \
+ rm -rf /var/lib/apt/lists/*; \
+ ...
+```
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Debian 12 "Bookworm" is the current stable release.
+- Full variant — includes documentation, man pages, standard utilities.
+- Qt6 packages are available as `qt6-base-dev`, `qmake6`, etc.
+- `--no-install-recommends` is critical for keeping image size down.
+
+---
+
+### Debian Bookworm Slim
+
+**File:** `dockerfiles/debian-bookworm-slim.Dockerfile`
+**FROM:** `debian:bookworm-slim`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Minimal Debian 12 — roughly half the size of the full variant.
+- No man pages, no documentation packages.
+- Preferred for CI where download speed matters.
+
+---
+
+### Debian Bullseye (11)
+
+**File:** `dockerfiles/debian-bullseye.Dockerfile`
+**FROM:** `debian:bullseye`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Debian 11 "Bullseye" (old stable).
+- Qt6 availability is **limited** — Bullseye shipped with Qt 5.15 in main.
+ Qt6 may require backports or `CUSTOM_INSTALL`.
+- Likely excluded from active CI matrix due to unreliable Qt6.
+
+---
+
+### Debian Bullseye Slim
+
+**File:** `dockerfiles/debian-bullseye-slim.Dockerfile`
+**FROM:** `debian:bullseye-slim`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Minimal variant of Debian 11.
+- Same Qt6 limitations as the full Bullseye variant.
+
+---
+
+### Debian Stable Slim
+
+**File:** `dockerfiles/debian-stable-slim.Dockerfile`
+**FROM:** `debian:stable-slim`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rolling tag pointing to current Debian stable (currently Bookworm).
+- Automatically upgrades when a new Debian stable is released.
+
+---
+
+### Debian Trixie Slim
+
+**File:** `dockerfiles/debian-trixie-slim.Dockerfile`
+**FROM:** `debian:trixie-slim`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Debian 13 "Trixie" (testing).
+- Provides the latest packages, including recent Qt6 versions.
+- Good for catching regressions early with newer toolchains.
+
+---
+
+## Devuan
+
+### Devuan Chimaera
+
+**File:** `dockerfiles/devuan-chimaera.Dockerfile`
+**FROM:** `devuan/devuan:chimaera`
+**Package manager:** `apt`
+
+```dockerfile
+FROM devuan/devuan:chimaera
+```
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Devuan 4 "Chimaera" — based on Debian Bullseye but **without systemd**.
+- Uses `sysvinit` or OpenRC as init system.
+- Images are under `devuan/devuan` namespace on Docker Hub.
+- Qt6 availability mirrors Debian Bullseye (limited).
+
+---
+
+### Devuan Daedalus
+
+**File:** `dockerfiles/devuan-daedalus.Dockerfile`
+**FROM:** `devuan/devuan:daedalus`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Devuan 5 "Daedalus" — based on Debian Bookworm without systemd.
+- Qt6 availability mirrors Debian Bookworm (good).
+
+---
+
+## Ubuntu
+
+### Ubuntu 20.04 LTS (Focal Fossa)
+
+**File:** `dockerfiles/ubuntu-2004.Dockerfile`
+**FROM:** `ubuntu:20.04`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Ubuntu 20.04 LTS does **not** ship Qt6 in its default repositories.
+- Qt6 requires PPAs, the Qt online installer, or building from source.
+- Likely excluded from the active CI matrix.
+
+---
+
+### Ubuntu 22.04 LTS (Jammy Jellyfish)
+
+**File:** `dockerfiles/ubuntu-2204.Dockerfile`
+**FROM:** `ubuntu:22.04`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Ubuntu 22.04 ships Qt 6.2 LTS in the `universe` repository.
+- Packages: `qt6-base-dev`, `qmake6`, `qt6-tools-dev`, etc.
+
+---
+
+### Ubuntu 24.04 LTS (Noble Numbat)
+
+**File:** `dockerfiles/ubuntu-2404.Dockerfile`
+**FROM:** `ubuntu:24.04`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Ubuntu 24.04 ships Qt 6.4+ in the default repositories.
+- Full Qt6 development support out of the box.
+
+---
+
+### Ubuntu Latest
+
+**File:** `dockerfiles/ubuntu-latest.Dockerfile`
+**FROM:** `ubuntu:latest`
+**Package manager:** `apt`
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rolling tag pointing to the latest Ubuntu LTS release.
+
+---
+
+## Kali Linux
+
+### Kali Rolling
+
+**File:** `dockerfiles/kali-rolling.Dockerfile`
+**FROM:** `kalilinux/kali-rolling:latest`
+**Package manager:** `apt`
+
+```dockerfile
+FROM kalilinux/kali-rolling:latest
+```
+
+**Install command:** `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}`
+**Cleanup command:** `rm -rf /var/lib/apt/lists/*`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Kali is Debian-based, so it uses the same `apt` install pattern.
+- Images are under `kalilinux/kali-rolling` on Docker Hub.
+- Kali's rolling release usually has recent Qt6 packages.
+
+---
+
+## Alpine Linux
+
+### Alpine 3.19
+
+**File:** `dockerfiles/alpine-319.Dockerfile`
+**FROM:** `alpine:3.19`
+**Package manager:** `apk`
+
+```dockerfile
+FROM alpine:3.19
+
+RUN set -eux; \
+ ... \
+ apk add --no-cache ${PACKAGES}; \
+ ... \
+ true; \
+ ...
+```
+
+**Install command:** `apk add --no-cache ${PACKAGES}`
+**Cleanup command:** `true` (no-op — `--no-cache` handles cleanup)
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Alpine uses `musl libc`, not `glibc`.
+- Qt6 packages: `qt6-qtbase-dev`, `qt6-qttools-dev`, etc.
+- No `libsystemd-dev` equivalent (Alpine does not use systemd).
+- Very small base images (~7 MB compressed).
+
+---
+
+### Alpine 3.20
+
+**File:** `dockerfiles/alpine-320.Dockerfile`
+**FROM:** `alpine:3.20`
+**Package manager:** `apk`
+
+**Install command:** `apk add --no-cache ${PACKAGES}`
+**Cleanup command:** `true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### Alpine 3.21
+
+**File:** `dockerfiles/alpine-321.Dockerfile`
+**FROM:** `alpine:3.21`
+**Package manager:** `apk`
+
+**Install command:** `apk add --no-cache ${PACKAGES}`
+**Cleanup command:** `true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### Alpine 3.22
+
+**File:** `dockerfiles/alpine-322.Dockerfile`
+**FROM:** `alpine:3.22`
+**Package manager:** `apk`
+
+**Install command:** `apk add --no-cache ${PACKAGES}`
+**Cleanup command:** `true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### Alpine Latest
+
+**File:** `dockerfiles/alpine-latest.Dockerfile`
+**FROM:** `alpine:latest`
+**Package manager:** `apk`
+
+**Install command:** `apk add --no-cache ${PACKAGES}`
+**Cleanup command:** `true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rolling tag pointing to the latest Alpine stable release.
+
+---
+
+## openSUSE
+
+### openSUSE Leap 15.5
+
+**File:** `dockerfiles/opensuse-leap-155.Dockerfile`
+**FROM:** `opensuse/leap:15.5`
+**Package manager:** `zypper`
+
+```dockerfile
+FROM opensuse/leap:15.5
+
+RUN set -eux; \
+ ... \
+ zypper --non-interactive refresh; \
+ zypper --non-interactive install --no-recommends ${PACKAGES}; \
+ ... \
+ zypper clean --all || true; \
+ ...
+```
+
+**Install command:** `zypper --non-interactive refresh; zypper --non-interactive install --no-recommends ${PACKAGES}`
+**Cleanup command:** `zypper clean --all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- openSUSE Leap 15.5 — enterprise-grade stability.
+- Qt6 availability depends on the OBS (Open Build Service) repositories.
+- `--non-interactive` prevents zypper from blocking on prompts.
+- `--no-recommends` skips recommended packages (equivalent to `--no-install-recommends` in apt).
+
+---
+
+### openSUSE Leap 15.6
+
+**File:** `dockerfiles/opensuse-leap-156.Dockerfile`
+**FROM:** `opensuse/leap:15.6`
+**Package manager:** `zypper`
+
+**Install command:** `zypper --non-interactive refresh; zypper --non-interactive install --no-recommends ${PACKAGES}`
+**Cleanup command:** `zypper clean --all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+
+---
+
+### openSUSE Tumbleweed
+
+**File:** `dockerfiles/opensuse-tumbleweed.Dockerfile`
+**FROM:** `opensuse/tumbleweed:latest`
+**Package manager:** `zypper`
+
+**Install command:** `zypper --non-interactive refresh; zypper --non-interactive install --no-recommends ${PACKAGES}`
+**Cleanup command:** `zypper clean --all || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- openSUSE Tumbleweed is a rolling release with the latest packages.
+- Excellent Qt6 support, typically ships the latest Qt6 version.
+
+---
+
+## Arch Linux
+
+### Arch Latest
+
+**File:** `dockerfiles/arch-latest.Dockerfile`
+**FROM:** `archlinux:latest`
+**Package manager:** `pacman`
+
+```dockerfile
+FROM archlinux:latest
+
+RUN set -eux; \
+ ... \
+ pacman -Syu --noconfirm --needed ${PACKAGES}; \
+ ... \
+ pacman -Scc --noconfirm || true; \
+ ...
+```
+
+**Install command:** `pacman -Syu --noconfirm --needed ${PACKAGES}`
+**Cleanup command:** `pacman -Scc --noconfirm || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Notes:**
+- Rolling release with bleeding-edge packages.
+- `-Syu` performs a full system update before installing, which is mandatory on
+ Arch to avoid partial-upgrade breakage.
+- `--needed` skips packages that are already installed at the latest version.
+- Qt6 packages: `qt6-base`, `qt6-tools`, etc.
+- `pacman -Scc --noconfirm` removes all cached packages and unused repositories,
+ significantly reducing image size.
+
+---
+
+## Gentoo
+
+### Gentoo Stage 3
+
+**File:** `dockerfiles/gentoo-stage3.Dockerfile`
+**FROM:** `gentoo/stage3:latest`
+**Package manager:** `emerge`
+
+```dockerfile
+FROM gentoo/stage3:latest
+
+RUN set -eux; \
+ ... \
+ emerge --sync; emerge ${PACKAGES}; \
+ ... \
+ true; \
+ export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib64/qt6/bin:/usr/libexec/qt6:/opt/qt6/bin:/root/.nix-profile/bin"; \
+ ...
+```
+
+**Install command:** `emerge --sync; emerge ${PACKAGES}`
+**Cleanup command:** `true` (no-op)
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+**Notes:**
+- Gentoo Stage 3 is a minimal Gentoo installation from which packages are compiled.
+- `emerge --sync` refreshes the Portage tree (package database).
+- Package compilation from source makes builds **very slow** compared to binary distributions.
+- Has the extended `/usr/libexec/qt6` path.
+- Qt6 packages in Gentoo: `dev-qt/qtbase`, `dev-qt/qttools`, etc.
+
+---
+
+## NixOS / Nix
+
+### Nix Latest
+
+**File:** `dockerfiles/nix-latest.Dockerfile`
+**FROM:** `nixos/nix:latest`
+**Package manager:** `nix-env`
+
+```dockerfile
+FROM nixos/nix:latest
+
+RUN set -eux; \
+ ... \
+ nix-env -iA ${PACKAGES}; \
+ ... \
+ nix-collect-garbage -d || true; \
+ export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib64/qt6/bin:/usr/libexec/qt6:/opt/qt6/bin:/root/.nix-profile/bin"; \
+ ...
+```
+
+**Install command:** `nix-env -iA ${PACKAGES}`
+**Cleanup command:** `nix-collect-garbage -d || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, **`/root/.nix-profile/bin`**
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+**Notes:**
+- Uses the Nix package manager, not a traditional FHS layout.
+- `-iA` installs packages by attribute path (e.g., `nixpkgs.qt6.qtbase`).
+- `nix-collect-garbage -d` removes old generations and unreferenced store paths.
+- `/root/.nix-profile/bin` is the primary binary path for Nix-installed packages.
+ This is where `qmake6` / `qtpaths6` would be found after `nix-env -iA`.
+- The `-l` flag in `SHELL ["/bin/sh", "-lc"]` is especially important here to
+ source `/root/.nix-profile/etc/profile.d/nix.sh`.
+
+---
+
+## Void Linux
+
+### Void Latest
+
+**File:** `dockerfiles/void-latest.Dockerfile`
+**FROM:** `voidlinux/voidlinux:latest`
+**Package manager:** `xbps`
+
+```dockerfile
+FROM voidlinux/voidlinux:latest
+
+RUN set -eux; \
+ ... \
+ xbps-install -Sy ${PACKAGES}; \
+ ... \
+ xbps-remove -O || true; \
+ export PATH="$PATH:/usr/lib/qt6/bin:/usr/lib64/qt6/bin:/usr/libexec/qt6:/opt/qt6/bin:/root/.nix-profile/bin"; \
+ ...
+```
+
+**Install command:** `xbps-install -Sy ${PACKAGES}`
+**Cleanup command:** `xbps-remove -O || true`
+**Qt6 PATH:** `/usr/lib/qt6/bin`, `/usr/lib64/qt6/bin`, **`/usr/libexec/qt6`**, `/opt/qt6/bin`, `/root/.nix-profile/bin`
+**Qt6 extra checks:** Also checks `/usr/libexec/qt6/qmake` and `/usr/libexec/qt6/qtpaths`
+**Notes:**
+- Void Linux is an independent rolling-release distribution.
+- XBPS (X Binary Package System) is Void's native package manager.
+- `-S` syncs the repository data; `-y` assumes yes to all prompts.
+- `xbps-remove -O` removes orphaned packages and old cached downloads.
+- Qt6 packages in Void: `qt6-base-devel`, `qt6-tools-devel`, etc.
+
+---
+
+## Package Manager Summary Table
+
+| Package Manager | Command in Dockerfile | Cleanup Command | Distros using it |
+|-----------------|-------------------------------------------------------------------------------|-------------------------------------|---------------------------|
+| `apt` | `apt-get update; apt-get install -y --no-install-recommends ${PACKAGES}` | `rm -rf /var/lib/apt/lists/*` | Debian, Ubuntu, Devuan, Kali |
+| `dnf` | `dnf install -y ${PACKAGES}` | `dnf clean all \|\| true` | Fedora, Alma, CentOS, Rocky, Oracle, AL2023 |
+| `yum` | `yum install -y ${PACKAGES}` | `yum clean all \|\| true` | Amazon Linux 2 |
+| `apk` | `apk add --no-cache ${PACKAGES}` | `true` | Alpine |
+| `zypper` | `zypper --non-interactive refresh; zypper --non-interactive install --no-recommends ${PACKAGES}` | `zypper clean --all \|\| true` | openSUSE |
+| `pacman` | `pacman -Syu --noconfirm --needed ${PACKAGES}` | `pacman -Scc --noconfirm \|\| true` | Arch |
+| `emerge` | `emerge --sync; emerge ${PACKAGES}` | `true` | Gentoo |
+| `nix-env` | `nix-env -iA ${PACKAGES}` | `nix-collect-garbage -d \|\| true` | NixOS/Nix |
+| `xbps` | `xbps-install -Sy ${PACKAGES}` | `xbps-remove -O \|\| true` | Void |
+
+---
+
+## Related Documentation
+
+- [Overview](overview.md) — project summary and image inventory
+- [Architecture](architecture.md) — structural details
+- [Qt6 Verification](qt6-verification.md) — the verification gate
+- [CI/CD Integration](ci-cd-integration.md) — workflow details
+- [Creating New Images](creating-new-images.md) — adding new distributions
+- [Troubleshooting](troubleshooting.md) — debugging builds