Dateien nach "mirror" hochladen

This commit is contained in:
2026-09-03 14:40:58 +02:00
parent 89a8f46b7c
commit aab58f5b6c
4 changed files with 778 additions and 0 deletions
+54
View File
@@ -0,0 +1,54 @@
FROM almalinux:10
# dnf-plugins-core -> dnf download, repoquery, config-manager
# createrepo_c -> Repo-Metadaten bauen
# rpm-sign, gnupg2 -> Pakete umsignieren
# git, openssh-clients -> packages.yaml vor jedem Sync aus einem Git-Repo ziehen
# python3-pyyaml, jq -> packages.yaml (YAML) nach JSON wandeln und auswerten
# cpio -> Pakete fuer die AppStream-Erzeugung teilweise entpacken
# rsync -> privaten Paketstand pflegen + alle Fremdrepos zu
# einem gemeinsamen Repo zusammenfuehren
# 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 \
git \
openssh-clients \
python3-pyyaml \
util-linux-core \
findutils \
cpio \
rsync \
procps-ng \
jq \
&& dnf clean all
# AppStream-Metadaten fuer Discover/GNOME Software werden mit `appstreamcli`
# gebaut. Dessen "compose"-Kommando steckt NICHT im Basispaket `appstream`,
# sondern im separaten Subpaket `appstream-compose` (gleiches AlmaLinux-10-
# AppStream-Repo). Ohne dieses Subpaket bricht `appstreamcli compose` zur
# Laufzeit mit "AppStream Compose binary ... was not found" ab.
RUN dnf -y install appstream appstream-compose \
&& 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"]