<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Lokales_Repository_%28Rocky_Linux_9%29</id>
	<title>Lokales Repository (Rocky Linux 9) - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Lokales_Repository_%28Rocky_Linux_9%29"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Lokales_Repository_(Rocky_Linux_9)&amp;action=history"/>
	<updated>2026-07-05T17:53:56Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Lokales_Repository_(Rocky_Linux_9)&amp;diff=71539&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= Lokales Repository (Rocky Linux 9) =  In abgeschotteten oder eingeschränkten Netzen (kein bzw. nur gefilterter Internet-Zugang) steht der Standard-Spiegel &lt;…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Lokales_Repository_(Rocky_Linux_9)&amp;diff=71539&amp;oldid=prev"/>
		<updated>2026-06-29T18:52:26Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Lokales Repository (Rocky Linux 9) =  In abgeschotteten oder eingeschränkten Netzen (kein bzw. nur gefilterter Internet-Zugang) steht der Standard-Spiegel &amp;lt;…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Lokales Repository (Rocky Linux 9) =&lt;br /&gt;
&lt;br /&gt;
In abgeschotteten oder eingeschränkten Netzen (kein bzw. nur gefilterter Internet-Zugang) steht der Standard-Spiegel &amp;lt;code&amp;gt;mirrors.rockylinux.org&amp;lt;/code&amp;gt; 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).&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Dieser Artikel bezieht sich bewusst auf '''Rocky Linux 9'''. Rocky 10 wird im Kurs (noch) nicht eingesetzt.}}&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
&lt;br /&gt;
* Ein Server mit ausreichend Plattenplatz (siehe Achtung-Box)&lt;br /&gt;
* Paket &amp;lt;code&amp;gt;httpd&amp;lt;/code&amp;gt; (Apache) für die Bereitstellung im Netz&lt;br /&gt;
* &amp;lt;code&amp;gt;dnf-plugins-core&amp;lt;/code&amp;gt; (liefert &amp;lt;code&amp;gt;dnf reposync&amp;lt;/code&amp;gt;) und &amp;lt;code&amp;gt;createrepo_c&amp;lt;/code&amp;gt;&lt;br /&gt;
* Einmaliger Internet-Zugang ODER ein vollständiges DVD-ISO zum Befüllen&lt;br /&gt;
&lt;br /&gt;
{{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.}}&lt;br /&gt;
&lt;br /&gt;
== Werkzeuge installieren ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install -y dnf-plugins-core createrepo_c httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Pakete spiegeln ==&lt;br /&gt;
&lt;br /&gt;
;Verzeichnis und Spiegelung (auf dem Spiegel-Server, mit Internet-Zugang)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPODIR=/var/www/html/repo/rocky/9&lt;br /&gt;
&lt;br /&gt;
for repo in baseos appstream extras; do&lt;br /&gt;
    dnf reposync --repoid=$repo \&lt;br /&gt;
        --download-metadata \&lt;br /&gt;
        --downloadcomps \&lt;br /&gt;
        --newest-only \&lt;br /&gt;
        -p &amp;quot;$REPODIR&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
* &amp;lt;code&amp;gt;--download-metadata&amp;lt;/code&amp;gt; lädt die fertige &amp;lt;code&amp;gt;repodata&amp;lt;/code&amp;gt; gleich mit – ein nachträgliches &amp;lt;code&amp;gt;createrepo_c&amp;lt;/code&amp;gt; ist dann nicht nötig.&lt;br /&gt;
* &amp;lt;code&amp;gt;--downloadcomps&amp;lt;/code&amp;gt; holt die Gruppen-Definitionen (für &amp;lt;code&amp;gt;dnf group install&amp;lt;/code&amp;gt; bzw. &amp;lt;code&amp;gt;@^Minimal Install&amp;lt;/code&amp;gt; in Kickstart).&lt;br /&gt;
* &amp;lt;code&amp;gt;--newest-only&amp;lt;/code&amp;gt; spart Platz, indem nur die jeweils aktuellste Paketversion gespiegelt wird. Für ein Archiv mit Versionsverlauf weglassen.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Das Repo '''CRB''' (CodeReady Builder, früher PowerTools) ist standardmäßig deaktiviert. Bei Bedarf zusätzlich spiegeln: &amp;lt;code&amp;gt;--repoid=crb&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=== Offline-Befüllung aus dem ISO ===&lt;br /&gt;
&lt;br /&gt;
Im echt abgeschotteten Netz lässt sich der Spiegel nicht aus dem Internet befüllen. Das Installations-ISO liefert die Pakete inklusive fertiger &amp;lt;code&amp;gt;repodata/&amp;lt;/code&amp;gt; – damit läuft der Spiegel sofort, ganz ohne Internet und ohne reposync:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mount -o loop,ro /pfad/Rocky-9.x-x86_64-dvd1.iso /mnt/iso&lt;br /&gt;
rsync -av /mnt/iso/BaseOS/    /var/www/html/repo/rocky/9/baseos/&lt;br /&gt;
rsync -av /mnt/iso/AppStream/ /var/www/html/repo/rocky/9/appstream/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die DVD enthält kein eigenes Extras-Repo. Für Updates später per reposync (siehe oben) nachziehen, sobald einmalig Internet-Zugang besteht.}}&lt;br /&gt;
&lt;br /&gt;
=== Eigenes Repo aus einzelnen RPMs (optional) ===&lt;br /&gt;
&lt;br /&gt;
Für eine selbst zusammengestellte Paketsammlung (z. B. interne RPMs) die Metadaten manuell erzeugen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /var/www/html/repo/custom&lt;br /&gt;
cp *.rpm /var/www/html/repo/custom/&lt;br /&gt;
createrepo_c /var/www/html/repo/custom/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach jeder Änderung an den RPMs &amp;lt;code&amp;gt;createrepo_c --update&amp;lt;/code&amp;gt; auf das Verzeichnis anwenden.&lt;br /&gt;
&lt;br /&gt;
== Bereitstellung über Apache ==&lt;br /&gt;
&lt;br /&gt;
;Dienst starten und aktivieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl enable --now httpd&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Firewall öffnen (firewalld)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --add-service=http&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;SELinux-Kontext (nur falls das Repo NICHT unterhalb von /var/www/html liegt)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
semanage fcontext -a -t httpd_sys_content_t &amp;quot;/srv/repo(/.*)?&amp;quot;&lt;br /&gt;
restorecon -Rv /srv/repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Liegt das Repo wie hier unter &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt;, stimmt der SELinux-Kontext (&amp;lt;code&amp;gt;httpd_sys_content_t&amp;lt;/code&amp;gt;) bereits – kein Eingriff nötig.}}&lt;br /&gt;
&lt;br /&gt;
;GPG-Schlüssel für Clients bereitstellen&lt;br /&gt;
Damit Clients schon vor der Installation prüfen können, den Rocky-Schlüssel in den Webroot legen:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /etc/pki/rpm-gpg/RPM-GPG-KEY-Rocky-9 /var/www/html/repo/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Client-Konfiguration ==&lt;br /&gt;
&lt;br /&gt;
Datei &amp;lt;code&amp;gt;/etc/yum.repos.d/local.repo&amp;lt;/code&amp;gt; auf den Clients (Hostname/IP des Spiegels anpassen, hier &amp;lt;code&amp;gt;repo.it2XX.lab&amp;lt;/code&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[baseos-local]&lt;br /&gt;
name=Rocky 9 - BaseOS (Lokaler Spiegel)&lt;br /&gt;
baseurl=http://repo.it2XX.lab/repo/rocky/9/baseos/&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9&lt;br /&gt;
&lt;br /&gt;
[appstream-local]&lt;br /&gt;
name=Rocky 9 - AppStream (Lokaler Spiegel)&lt;br /&gt;
baseurl=http://repo.it2XX.lab/repo/rocky/9/appstream/&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9&lt;br /&gt;
&lt;br /&gt;
[extras-local]&lt;br /&gt;
name=Rocky 9 - Extras (Lokaler Spiegel)&lt;br /&gt;
baseurl=http://repo.it2XX.lab/repo/rocky/9/extras/&lt;br /&gt;
enabled=1&lt;br /&gt;
gpgcheck=1&lt;br /&gt;
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Die mitgelieferten Standard-Repos zeigen auf &amp;lt;code&amp;gt;mirrors.rockylinux.org&amp;lt;/code&amp;gt; und schlagen im abgeschotteten Netz fehl. Vor dem ersten &amp;lt;code&amp;gt;dnf&amp;lt;/code&amp;gt;-Lauf deaktivieren:}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf config-manager --set-disabled baseos appstream extras crb&lt;br /&gt;
dnf clean all&lt;br /&gt;
dnf repolist&lt;br /&gt;
dnf makecache&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Spiegel aktuell halten ==&lt;br /&gt;
&lt;br /&gt;
Den Spiegel regelmäßig nachziehen – per systemd-Timer (passt zum Units-Thema):&lt;br /&gt;
&lt;br /&gt;
;Service-Unit &amp;lt;code&amp;gt;/etc/systemd/system/reposync.service&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rocky 9 Repo-Spiegel aktualisieren&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
After=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/reposync-rocky9.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Timer-Unit &amp;lt;code&amp;gt;/etc/systemd/system/reposync.timer&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Repo-Spiegel taeglich aktualisieren&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=*-*-* 03:00:00&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Skript &amp;lt;code&amp;gt;/usr/local/sbin/reposync-rocky9.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
REPODIR=/var/www/html/repo/rocky/9&lt;br /&gt;
for repo in baseos appstream extras; do&lt;br /&gt;
    dnf reposync --repoid=$repo --download-metadata --downloadcomps --newest-only -p &amp;quot;$REPODIR&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Aktivieren&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x /usr/local/sbin/reposync-rocky9.sh&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now reposync.timer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Test und Fehlersuche ==&lt;br /&gt;
&lt;br /&gt;
;Erreichbarkeit und Inhalt prüfen&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -s http://repo.it2XX.lab/repo/rocky/9/baseos/repodata/repomd.xml | head&lt;br /&gt;
dnf repolist&lt;br /&gt;
dnf makecache&lt;br /&gt;
dnf install -y tree&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Symptom !! Ursache / Lösung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Status code: 404&amp;lt;/code&amp;gt; beim repomd.xml || Pfad in &amp;lt;code&amp;gt;baseurl&amp;lt;/code&amp;gt; falsch oder &amp;lt;code&amp;gt;repodata/&amp;lt;/code&amp;gt; fehlt → bei eigenem Repo &amp;lt;code&amp;gt;createrepo_c&amp;lt;/code&amp;gt; ausführen&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;GPG check FAILED&amp;lt;/code&amp;gt; || Falscher/fehlender Schlüssel → &amp;lt;code&amp;gt;gpgkey&amp;lt;/code&amp;gt;-URL prüfen, ggf. &amp;lt;code&amp;gt;rpm --import&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;Cannot prepare internal mirrorlist&amp;lt;/code&amp;gt; || Standard-Repos noch aktiv und nicht erreichbar → &amp;lt;code&amp;gt;--set-disabled&amp;lt;/code&amp;gt; nicht ausgeführt&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;403 Forbidden&amp;lt;/code&amp;gt; || SELinux-Kontext oder Dateirechte → &amp;lt;code&amp;gt;restorecon -Rv&amp;lt;/code&amp;gt;, Apache-Logs (&amp;lt;code&amp;gt;/var/log/httpd/error_log&amp;lt;/code&amp;gt;) prüfen&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Integration mit Kickstart ==&lt;br /&gt;
&lt;br /&gt;
Im Kickstart-Profil den lokalen Spiegel als Installationsquelle nutzen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
url --url=&amp;quot;http://repo.it2XX.lab/repo/rocky/9/baseos/&amp;quot;&lt;br /&gt;
repo --name=&amp;quot;appstream&amp;quot; --baseurl=&amp;quot;http://repo.it2XX.lab/repo/rocky/9/appstream/&amp;quot;&lt;br /&gt;
repo --name=&amp;quot;extras&amp;quot;    --baseurl=&amp;quot;http://repo.it2XX.lab/repo/rocky/9/extras/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Siehe auch [[Kickstart]] und [[Softwareverwaltung mit dnf]].}}&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Rocky Linux]]&lt;br /&gt;
[[Kategorie:Linux]]&lt;br /&gt;
[[Kategorie:Softwareverwaltung]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>