59 lines
2.3 KiB
Docker
59 lines
2.3 KiB
Docker
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 dem gemeinsamen
|
|
# Freigabe-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 mirror
|
|
|
|
COPY gpg-import.sh /usr/local/lib/gpg-import.sh
|
|
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 /etc/mirror-gpg \
|
|
&& chown -R mirror:mirror /srv/dnf /var/cache/mirror /etc/mirror-gpg
|
|
|
|
ENV HOME=/var/lib/mirror
|
|
# Gemeinsamer Signing-Key: entrypoint.sh kopiert ihn beim Start aus dem
|
|
# read-only gemounteten /run/secrets/gpg hierher - derselbe Key, mit dem der
|
|
# flatpak-mirror-Container signiert.
|
|
ENV GNUPGHOME=/etc/mirror-gpg
|
|
|
|
# Bleibt root: entrypoint.sh uebernimmt den gemounteten Key und die
|
|
# Verzeichnisrechte und wechselt danach per setpriv fest zu "mirror". Alles
|
|
# Weitere (Sync-Loop, git, dnf download, gpg) laeuft unprivilegiert.
|
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|