Files
dnf-repo-test/docker/Dockerfile
T

55 lines
2.0 KiB
Docker

FROM almalinux:10
# Ohne UTF-8-Locale verstuemmeln appstreamcli und andere Tools Umlaute in
# ihrer Ausgabe ("?ber" statt "über").
ENV LANG=C.UTF-8 \
LC_ALL=C.UTF-8
# createrepo_c bringt auch modifyrepo_c mit.
# python3 + PyYAML werden von appstream-gen.py gebraucht - nicht darauf
# verlassen, dass das Basisimage sie zufaellig mitbringt.
# gnupg2/rpm-sign sind fuer die spaetere Signierung vorgesehen.
RUN dnf install -y \
dnf-plugins-core \
createrepo_c \
appstream \
git \
jq \
openssh-clients \
python3 \
python3-pyyaml \
gnupg2 \
rpm-sign \
findutils \
util-linux-core \
curl \
&& dnf clean all
# yq (Go-Variante) fuer das YAML-Parsing in sync.sh.
# Version gepinnt: "latest" macht Builds nicht reproduzierbar und kann bei
# einem Breaking Change der yq-Syntax den Sync stillschweigend zerlegen.
ARG YQ_VERSION=v4.44.3
RUN curl -fsSL -o /usr/local/bin/yq \
"https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_amd64" \
&& chmod +x /usr/local/bin/yq
COPY sync.sh /usr/local/bin/sync.sh
COPY appstream-gen.py /usr/local/bin/appstream-gen.py
COPY sync_helpers.py /usr/local/bin/sync_helpers.py
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/sync.sh \
/usr/local/bin/appstream-gen.py \
/usr/local/bin/entrypoint.sh
# Bewusst KEIN "VOLUME /srv/repo":
# Ein VOLUME im Dockerfile legt beim Start ein anonymes Volume an. Wird in
# docker-compose.yml ein benanntes Volume auf einen ANDEREN Pfad gemountet,
# schreibt der Sync ins anonyme Volume, waehrend nginx das benannte (leere)
# ausliefert. Genau dieser Fall ist hier schon einmal aufgetreten.
# Das Mount kommt ausschliesslich aus docker-compose.yml.
# Ebenfalls bewusst nicht enthalten: nginx und cronie.
# nginx laeuft als eigener Container (siehe docker-compose.yml), das
# Sync-Intervall steuert entrypoint.sh per Sleep-Schleife.
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]