Lokales Repository (Rocky Linux 9)

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Lokales Repository (Rocky Linux 9)

In abgeschotteten oder eingeschränkten Netzen (kein bzw. nur gefilterter Internet-Zugang) steht der Standard-Spiegel mirrors.rockylinux.org nicht zur Verfügung. Ein lokales Repository stellt die Pakete von BaseOS, AppStream und Extras im internen Netz bereit – Voraussetzung für Updates, Software-Installation und automatisierte Provisionierung (Kickstart).

ℹ️ Hinweis: Dieser Artikel bezieht sich bewusst auf Rocky Linux 9. Rocky 10 wird im Kurs (noch) nicht eingesetzt.

Voraussetzungen

  • Ein Server mit ausreichend Plattenplatz (siehe Achtung-Box)
  • Paket httpd (Apache) für die Bereitstellung im Netz
  • dnf-plugins-core (liefert dnf reposync) und createrepo_c
  • Einmaliger Internet-Zugang ODER ein vollständiges DVD-ISO zum Befüllen

⚠️ Achtung: Ein vollständiger Spiegel von BaseOS + AppStream + Extras belegt grob 25–40 GB und wächst mit jedem Update. Die VM-Platte entsprechend dimensionieren.

Werkzeuge installieren

dnf install -y dnf-plugins-core createrepo_c httpd

Pakete spiegeln

Verzeichnis und Spiegelung (auf dem Spiegel-Server, mit Internet-Zugang)
REPODIR=/var/www/html/repo/rocky/9

for repo in baseos appstream extras; do
    dnf reposync --repoid=$repo \
        --download-metadata \
        --downloadcomps \
        --newest-only \
        -p "$REPODIR"
done

ℹ️ Hinweis:

  • --download-metadata lädt die fertige repodata gleich mit – ein nachträgliches createrepo_c ist dann nicht nötig.
  • --downloadcomps holt die Gruppen-Definitionen (für dnf group install bzw. @^Minimal Install in Kickstart).
  • --newest-only spart Platz, indem nur die jeweils aktuellste Paketversion gespiegelt wird. Für ein Archiv mit Versionsverlauf weglassen.

ℹ️ Hinweis: {{{1}}}

Offline-Befüllung aus dem ISO

Im echt abgeschotteten Netz lässt sich der Spiegel nicht aus dem Internet befüllen. Das Installations-ISO liefert die Pakete inklusive fertiger repodata/ – damit läuft der Spiegel sofort, ganz ohne Internet und ohne reposync:

mount -o loop,ro /pfad/Rocky-9.x-x86_64-dvd1.iso /mnt/iso
rsync -av /mnt/iso/BaseOS/    /var/www/html/repo/rocky/9/baseos/
rsync -av /mnt/iso/AppStream/ /var/www/html/repo/rocky/9/appstream/

ℹ️ Hinweis: Die DVD enthält kein eigenes Extras-Repo. Für Updates später per reposync (siehe oben) nachziehen, sobald einmalig Internet-Zugang besteht.

Eigenes Repo aus einzelnen RPMs (optional)

Für eine selbst zusammengestellte Paketsammlung (z. B. interne RPMs) die Metadaten manuell erzeugen:

mkdir -p /var/www/html/repo/custom
cp *.rpm /var/www/html/repo/custom/
createrepo_c /var/www/html/repo/custom/

Nach jeder Änderung an den RPMs createrepo_c --update auf das Verzeichnis anwenden.

Bereitstellung über Apache

Dienst starten und aktivieren
systemctl enable --now httpd
Firewall öffnen (firewalld)
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
SELinux-Kontext (nur falls das Repo NICHT unterhalb von /var/www/html liegt)
semanage fcontext -a -t httpd_sys_content_t "/srv/repo(/.*)?"
restorecon -Rv /srv/repo

ℹ️ Hinweis: Liegt das Repo wie hier unter /var/www/html, stimmt der SELinux-Kontext (httpd_sys_content_t) bereits – kein Eingriff nötig.

GPG-Schlüssel für Clients bereitstellen

Damit Clients schon vor der Installation prüfen können, den Rocky-Schlüssel in den Webroot legen:

cp /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 /var/www/html/repo/

Client-Konfiguration

Datei /etc/yum.repos.d/local.repo auf den Clients (Hostname/IP des Spiegels anpassen, hier repo.it2XX.lab):

[baseos-local]
name=Rocky 9 - BaseOS (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/baseos/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9

[appstream-local]
name=Rocky 9 - AppStream (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/appstream/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9

[extras-local]
name=Rocky 9 - Extras (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/extras/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9

⚠️ Achtung: Die mitgelieferten Standard-Repos zeigen auf mirrors.rockylinux.org und schlagen im abgeschotteten Netz fehl. Vor dem ersten dnf-Lauf deaktivieren:

dnf config-manager --set-disabled baseos appstream extras crb
dnf clean all
dnf repolist
dnf makecache

Spiegel aktuell halten

Den Spiegel regelmäßig nachziehen – per systemd-Timer (passt zum Units-Thema):

Service-Unit /etc/systemd/system/reposync.service
[Unit]
Description=Rocky 9 Repo-Spiegel aktualisieren
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/reposync-rocky9.sh
Timer-Unit /etc/systemd/system/reposync.timer
[Unit]
Description=Repo-Spiegel taeglich aktualisieren

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true

[Install]
WantedBy=timers.target
Skript /usr/local/sbin/reposync-rocky9.sh
#!/bin/bash
REPODIR=/var/www/html/repo/rocky/9
for repo in baseos appstream extras; do
    dnf reposync --repoid=$repo --download-metadata --downloadcomps --newest-only -p "$REPODIR"
done
Aktivieren
chmod +x /usr/local/sbin/reposync-rocky9.sh
systemctl daemon-reload
systemctl enable --now reposync.timer

Test und Fehlersuche

Erreichbarkeit und Inhalt prüfen
curl -s http://repo.it2XX.lab/repo/rocky/9/baseos/repodata/repomd.xml | head
dnf repolist
dnf makecache
dnf install -y tree
Symptom Ursache / Lösung
Status code: 404 beim repomd.xml Pfad in baseurl falsch oder repodata/ fehlt → bei eigenem Repo createrepo_c ausführen
GPG check FAILED Falscher/fehlender Schlüssel → gpgkey-URL prüfen, ggf. rpm --import
Cannot prepare internal mirrorlist Standard-Repos noch aktiv und nicht erreichbar → --set-disabled nicht ausgeführt
403 Forbidden SELinux-Kontext oder Dateirechte → restorecon -Rv, Apache-Logs (/var/log/httpd/error_log) prüfen

Integration mit Kickstart

Im Kickstart-Profil den lokalen Spiegel als Installationsquelle nutzen:

url --url="http://repo.it2XX.lab/repo/rocky/9/baseos/"
repo --name="appstream" --baseurl="http://repo.it2XX.lab/repo/rocky/9/appstream/"
repo --name="extras"    --baseurl="http://repo.it2XX.lab/repo/rocky/9/extras/"

ℹ️ Hinweis: Siehe auch Kickstart und Softwareverwaltung mit dnf.