Dateien nach "mirror" hochladen
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
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: das noetige Werkzeug
|
||||
# unterscheidet sich je nach Alma-Version.
|
||||
# - AlmaLinux 9: appstream-glib (aus EPEL) liefert `appstream-builder`,
|
||||
# das direkt ein Verzeichnis voller .rpm-Dateien einliest.
|
||||
# - AlmaLinux 10: appstream-glib ist (Stand jetzt) weder in AlmaLinux 10
|
||||
# selbst noch in EPEL 10 paketiert. Stattdessen wird `appstreamcli`
|
||||
# genutzt - dessen "compose"-Kommando ist aber NICHT im Basispaket
|
||||
# `appstream` enthalten, sondern im separaten Subpaket
|
||||
# `appstream-compose` (liegt im selben AlmaLinux-10-AppStream-Repo).
|
||||
# Ohne dieses Subpaket bricht `appstreamcli compose` zur Laufzeit mit
|
||||
# "AppStream Compose binary ... was not found" ab.
|
||||
# sync.sh erkennt zur Laufzeit, welches der beiden Werkzeuge vorhanden ist.
|
||||
# Ist keins von beiden installierbar, bricht der Build NICHT ab - die
|
||||
# Discover-Katalogerzeugung wird dann zur Laufzeit einfach uebersprungen
|
||||
# (Pakete bleiben trotzdem ganz normal per dnf/pkcon installierbar).
|
||||
RUN (dnf -y install appstream-glib || dnf -y install appstream appstream-compose || dnf -y install appstream || \
|
||||
echo "WARNUNG (Build): weder appstream-glib noch appstream verfuegbar - AppStream/Discover-Metadaten werden zur Laufzeit uebersprungen.") \
|
||||
&& 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"]
|
||||
Reference in New Issue
Block a user