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"]