FROM almalinux:9 # dnf-plugins-core -> dnf download, repoquery, config-manager # createrepo_c -> Repo-Metadaten bauen # rpm-sign, gnupg2 -> Pakete umsignieren # appstream-glib -> appstream-builder, erzeugt AppStream-Metadaten fuer Discover # (kommt aus EPEL, daher epel-release zuerst) # git, openssh-clients -> packages.yaml vor jedem Sync aus einem Git-Repo ziehen # python3-pyyaml, jq -> packages.yaml (YAML) nach JSON wandeln und auswerten # util-linux-core -> stellt setpriv (root -> mirror-User droppen) sicher RUN dnf -y install epel-release \ && dnf -y install \ dnf-plugins-core \ createrepo_c \ rpm-sign \ gnupg2 \ appstream-glib \ git \ openssh-clients \ python3-pyyaml \ util-linux-core \ findutils \ procps-ng \ jq \ && dnf clean all RUN useradd -r -m -d /var/lib/mirror-gpg mirror COPY entrypoint.sh /usr/local/bin/entrypoint.sh COPY run-as-mirror.sh /usr/local/bin/run-as-mirror.sh COPY sync.sh /usr/local/bin/sync.sh RUN chmod +x /usr/local/bin/entrypoint.sh /usr/local/bin/run-as-mirror.sh /usr/local/bin/sync.sh RUN mkdir -p /srv/dnf /var/cache/mirror /var/lib/mirror-gpg \ && chown -R mirror:mirror /srv/dnf /var/cache/mirror /var/lib/mirror-gpg ENV HOME=/var/lib/mirror-gpg ENV GNUPGHOME=/var/lib/mirror-gpg/.gnupg # Bleibt root: entrypoint.sh chownt den bind-gemounteten ./gpg-Ordner (der dem # Host gehoert, nicht dem Image) und wechselt danach per setpriv fest zu # "mirror". Alles Weitere (Sync-Loop, git, dnf download, gpg) laeuft # unprivilegiert. ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]