Files
metabuilder/deployment/base-images/Dockerfile.apt
2026-03-09 22:30:41 +00:00

152 lines
5.0 KiB
Docker

# metabuilder/base-apt
#
# Ubuntu 24.04 with every apt package used across all MetaBuilder Dockerfiles.
# Build once — all Ubuntu-based app images FROM this and skip apt entirely.
#
# Build: docker build -f Dockerfile.apt -t metabuilder/base-apt:latest ../../
# ~5 min cold, instant on cache hit.
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive TZ=UTC
# Retry loop: handles 400/EOF errors from Ubuntu mirrors on flaky connections.
# Backoff: 10s → 20s → 30s → 40s between attempts.
RUN for i in 1 2 3 4 5; do \
apt-get update && apt-get install -y --no-install-recommends \
\
# ── Build toolchain ───────────────────────────────────────────────
build-essential \
cmake \
ninja-build \
ccache \
pkg-config \
gcc \
g++ \
clang-18 \
clang-tidy-18 \
clang-format-18 \
lldb-18 \
lld \
\
# ── Python ────────────────────────────────────────────────────────
python3 \
python3-pip \
python3-venv \
python3-dev \
python3-setuptools \
\
# ── Version control ───────────────────────────────────────────────
git \
git-lfs \
\
# ── Debugging ─────────────────────────────────────────────────────
gdb \
valgrind \
strace \
ltrace \
\
# ── Networking / download ─────────────────────────────────────────
curl \
wget \
ca-certificates \
netcat-openbsd \
\
# ── Core dev libraries ────────────────────────────────────────────
libssl-dev \
libffi-dev \
libsqlite3-dev \
libsqlite3-0 \
libpq-dev \
libpq5 \
libmysqlclient-dev \
libmysqlclient21 \
libc-ares-dev \
libc-ares2 \
libbrotli-dev \
libcurl4-openssl-dev \
libcurl4 \
uuid-dev \
zlib1g-dev \
libfmt-dev \
\
# ── Graphics / display (game engine, Qt6) ─────────────────────────
libegl-dev \
libegl1-mesa-dev \
libgl-dev \
libgl1-mesa-dev \
libwayland-dev \
libxcb-util-dev \
libxkbcommon-dev \
libxrandr-dev \
libx11-dev \
libx11-xcb-dev \
libudev-dev \
# Qt6 X11/xcb system requirements
libfontenc-dev \
libice-dev \
libsm-dev \
libxaw7-dev \
libxcomposite-dev \
libxcursor-dev \
libxdamage-dev \
libxfixes-dev \
libxi-dev \
libxinerama-dev \
libxkbfile-dev \
libxmu-dev \
libxmuu-dev \
libxpm-dev \
libxss-dev \
libxt-dev \
libxtst-dev \
libxv-dev \
libxxf86vm-dev \
libxcb-glx0-dev \
libxcb-render0-dev \
libxcb-render-util0-dev \
libxcb-xkb-dev \
libxcb-icccm4-dev \
libxcb-image0-dev \
libxcb-keysyms1-dev \
libxcb-randr0-dev \
libxcb-shape0-dev \
libxcb-sync-dev \
libxcb-xfixes0-dev \
libxcb-xinerama0-dev \
libxcb-dri3-dev \
libxcb-cursor-dev \
libxcb-present-dev \
libxcb-composite0-dev \
libxcb-ewmh-dev \
libxcb-res0-dev \
\
# ── Media processing (media_daemon) ───────────────────────────────
# texlive-xetex + texlive-fonts-recommended are 60MB+ — kept in
# media_daemon/Dockerfile only (not the base) to keep this image lean.
ffmpeg \
imagemagick \
pandoc \
fonts-liberation \
tini \
\
# ── Java (for Android/Gradle builds) ──────────────────────────────
openjdk-17-jdk-headless \
\
# ── Shell utilities ───────────────────────────────────────────────
vim \
nano \
less \
tree \
htop \
unzip \
zip \
jq \
&& break \
|| (echo "apt-get failed (attempt $i/5), retrying in $((i*10))s..." && sleep $((i*10))); \
done \
&& rm -rf /var/lib/apt/lists/*
LABEL org.metabuilder.image="base-apt" \
org.metabuilder.description="All apt packages for MetaBuilder builds"