55 lines
2.0 KiB
Docker
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"] |