Rocky Repo auf www: Unterschied zwischen den Versionen
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/* | =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, 15: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
- 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/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