Rocky Repo auf www
Version vom 8. Juli 2026, 13:01 Uhr von Thomas.will (Diskussion | Beiträge) (→Repo live ziehen (reposync statt DVD))
Lokales Repo aus DVD-ISO erstellen
- Ziel
- Der www-Server stellt den Inhalt der Rocky-9-Installations-DVD als lokales dnf-Repo bereit, damit Client-VMs im abgeschotteten DMZ-Netz ohne Internetzugang installieren können.
Platte vergrössern
- Die DVD ist 14 GB gross, die bestehende Root-Partition hat dafür nicht genug Platz – die virtuelle Disk muss erst vergrössert werden
- Virtualbox
- Werkzeuge
- Burgermenu
- Medien
- www.vdi auswählen
- 50GB
- www.vdi auswählen
- Medien
- Burgermenu
- Werkzeuge
Booten
- Nach dem Vergrössern in VirtualBox sieht die VM die neue Disk-Grösse erst nach einem Neustart
- fdisk -l
- Zeigt
- Disk ist jetzt 50 GiB, aber die LVM-Partition (sda2) ist noch auf der alten Grösse
Partition vergrössern
- growpart erweitert die Partitionstabelle auf die neue Disk-Grösse
- dnf install -y cloud-utils-growpart
- growpart /dev/sda 2
- fdisk -l
- Kontrolle – sda2 reicht jetzt bis ans Ende der Disk. growpart zieht bei einer LVM-Partition automatisch ein pvresize nach, das PV meldet danach schon die neue Grösse
LV vergrössern
- Freien Platz komplett dem root-LV zuschlagen. -l (klein) rechnet in Extents/Prozent statt in fester GB-Zahl – bei "alles" ist +100%FREE genauer als eine geschätzte GB-Angabe. Das -r löst automatisch xfs_growfs mit aus
- lvextend -r -l +100%FREE /dev/rlm/root
Checken
- lvs
- lvdisplay
- df -h /
- Root-Partition zeigt jetzt die volle Grösse
Daten besorgen
- DVD einlegen
- mount /dev/sr0 /mnt/
Index Datei entfernen
- rm -f /var/repo/index.php
Kopieren
- cp -vr /mnt/* /var/repo/
- Kopiert den kompletten DVD-Inhalt (BaseOS, AppStream, repodata etc.) direkt in die DocumentRoot
Directory-Listing erlauben
- Damit Unterverzeichnisse wie /BaseOS/ ohne eigene index.html als Listing angezeigt werden (sonst 403). Options +Indexes im bestehenden Directory-Block ergänzen
- vi /etc/httpd/conf.d/www.conf
<Directory /var/www/html>
Options +Indexes
AllowOverride None
Require all granted
</Directory>
- apachectl configtest
- systemctl restart httpd
SELinux
- Kopierte Dateien können vom cp-Vorgang einen falschen Kontext mitbringen
- semanage fcontext -a -t httpd_sys_content_t "/var/repo/(.*)?"
- restorecon -Rv /var/repo
Test auf dem Server
- curl -k https://www.it2XX.int/
- Zeigt Directory-Listing mit BaseOS/, AppStream/ usw.
Repo-Metadaten
- repodata/ ist bereits fertig auf der DVD enthalten (repomd.xml, primary/filelists/other, comps) – kein eigenes createrepo_c nötig
- ls /var/repo/BaseOS/repodata/
- ls /var/repo/AppStream/repodata/
Client-Konfiguration
- Auf jeder Client-VM das lokale Repo eintragen. https statt http verwenden – der Server leitet HTTP automatisch auf HTTPS um, und dnf folgt diesem Redirect bei Metadaten nicht zuverlässig
- vi /etc/yum.repos.d/local.repo
[local-baseos] name=Local BaseOS baseurl=https://www.it2XX.int/BaseOS/ enabled=1 gpgcheck=0 [local-appstream] name=Local AppStream baseurl=https://www.it2XX.int/AppStream/ enabled=1 gpgcheck=0
- gpgcheck=0 reicht für den Kurs – kein GPG-Key-Import nötig. Die KIT-CA ist bereits im System-Trust-Store der Client-VMs verankert, TLS läuft ohne Zertifikatswarnung
Standard-Repos deaktivieren
- Damit dnf sichtbar nur noch die lokalen Repos nutzt und nicht parallel vom (in der DMZ ohnehin nicht erreichbaren) Internet zieht
- dnf config-manager --set-disabled baseos appstream extras epel epel-cisco-openh264
Test auf dem Client
- dnf clean all
- dnf repolist
- dnf install -y mc
- local-baseos und local-appstream erscheinen in der Liste, Installation läuft über das lokale Repo
Demo: Repo isoliert testen
- Alle Standard-Repos deaktivieren, damit nur noch die lokalen Repos übrig bleiben – zeigt dass die Installation tatsächlich über das eigene Repo läuft und nicht übers Internet
- dnf config-manager --set-disabled baseos appstream extras epel epel-cisco-openh264
- dnf repolist
- Nur noch local-baseos und local-appstream sichtbar
- Installation testen – funktioniert nur über das lokale Repo
- dnf install -y mc
- Standard-Repos wieder aktivieren
- dnf config-manager --set-enabled baseos appstream extras epel epel-cisco-openh264
- dnf repolist
- Alle Repos wieder sichtbar
Repo live ziehen (reposync statt DVD)
- Alternative zur DVD-Kopie
- Repo direkt von einem Mirror synchronisieren. Der Rechner, der reposync ausführt, braucht dafür Internetzugang – im Gegensatz zum DMZ-www-Server selbst
- dnf install -y dnf-plugins-core createrepo_c
- mkdir -p /var/repo/{BaseOS,AppStream}
- dnf reposync --repoid=baseos --download-metadata -p /var/repo/BaseOS --newest-only
- dnf reposync --repoid=appstream --download-metadata -p /var/repo/AppStream --newest-only
- --download-metadata zieht repodata/ gleich mit, sonst müsste createrepo_c manuell nachlaufen.
- --newest-only verhindert, dass alte Paketversionen mitgeschleppt werden
Repo synchronisieren (aktuell halten)
- Gleicher Befehl mit --delete, damit ausgemusterte Pakete auch lokal entfernt werden
- dnf reposync --repoid=baseos --download-metadata -p /var/www/html/BaseOS --newest-only --delete
- dnf reposync --repoid=appstream --download-metadata -p /var/www/html/AppStream --newest-only --delete
Automatisierung per systemd-Timer
- Statt cron.weekly – Persistent=true holt einen verpassten Lauf (z. B. VM war aus) beim nächsten Boot nach
- vi /usr/local/bin/repo-sync.sh
#!/bin/bash dnf reposync --repoid=baseos --download-metadata -p /var/www/html/BaseOS --newest-only --delete dnf reposync --repoid=appstream --download-metadata -p /var/www/html/AppStream --newest-only --delete restorecon -Rv /var/www/html
- chmod +x /usr/local/bin/repo-sync.sh
- vi /etc/systemd/system/repo-sync.service
[Unit] Description=Sync lokales Rocky-Repo (BaseOS/AppStream) Wants=network-online.target After=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/repo-sync.sh
- vi /etc/systemd/system/repo-sync.timer
[Unit] Description=Wöchentlicher Sync des lokalen Rocky-Repos [Timer] OnCalendar=weekly Persistent=true [Install] WantedBy=timers.target
- systemctl daemon-reload
- systemctl enable --now repo-sync.timer
Test
- systemctl list-timers repo-sync.timer
- Zeigt nächsten geplanten Lauf und ob NEXT/LEFT korrekt gesetzt sind