Rocky Repo auf www: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=Platte vergrössern=
+
= Lokales Repo aus DVD-ISO erstellen =
*Virtualbox
+
 
**Werkzeuge
+
;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.
***Burgermenu
+
 
****Medien
+
= Platte vergrössern =
*****www.vdi auswählen
+
;Die DVD ist 14 GB gross, die bestehende Root-Partition hat dafür nicht genug Platz – die virtuelle Disk muss erst vergrössert werden
******50GB
+
* Virtualbox
=Booten=
+
** Werkzeuge
*fdisk -l
+
*** Burgermenu
=Partition vergrössern=
+
**** Medien
*dnf install -y cloud-utils-growpart
+
***** www.vdi auswählen
*growpart /dev/sda 2
+
****** 50GB
*fdisk -l
+
 
=LV vergrössern=
+
= Booten =
*lvextend -r -l +100%FREE /dev/rlm/root
+
;Nach dem Vergrössern in VirtualBox sieht die VM die neue Disk-Grösse erst nach einem Neustart
=Checken=
+
* fdisk -l
*lvs
+
;Zeigt: Disk ist jetzt 50 GiB, aber die LVM-Partition (sda2) ist noch auf der alten Grösse
*lvdisplay
+
 
=Daten besorgen=
+
= 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
 
;DVD einlegen
*mount /dev/sr0 /mnt/
+
* mount /dev/sr0 /mnt/
=Kopieren=
+
 
*cp -vr /mnt/* /var/www/html/
+
=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
 +
<pre>
 +
    <Directory /var/www/html>
 +
        Options +Indexes
 +
        AllowOverride None
 +
        Require all granted
 +
    </Directory>
 +
</pre>
 +
* 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
 +
<pre>
 +
[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
 +
</pre>
 +
;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/repo/BaseOS --newest-only --delete
 +
* dnf reposync --repoid=appstream --download-metadata -p /var/repo/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
 +
<pre>
 +
#!/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
 +
</pre>
 +
* chmod +x /usr/local/bin/repo-sync.sh
 +
 
 +
* vi /etc/systemd/system/repo-sync.service
 +
<pre>
 +
[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
 +
</pre>
 +
 
 +
* vi /etc/systemd/system/repo-sync.timer
 +
<pre>
 +
[Unit]
 +
Description=Wöchentlicher Sync des lokalen Rocky-Repos
 +
 
 +
[Timer]
 +
OnCalendar=weekly
 +
Persistent=true
 +
 
 +
[Install]
 +
WantedBy=timers.target
 +
</pre>
 +
 
 +
* 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

Aktuelle Version vom 8. Juli 2026, 13:02 Uhr

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

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

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/repo/BaseOS --newest-only --delete
  • dnf reposync --repoid=appstream --download-metadata -p /var/repo/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