6.4 Alles meins: »Mirror«
Im Gegensatz zum Proxy oder Cache wird bei einem Mirror das gesamte Repository gespiegelt. Dadurch können Sie ein vollständiges System installieren, ohne auch nur ein Paket aus dem Internet zu laden. Allerdings benötigt ein vollständiger Spiegel auch sehr viel Plattenplatz. Pro Sektion können schon mal 20 GB zusammenkommen. Achten Sie also darauf, dass Ihr System genügend Platz zur Verfügung hat.
6.4.1 »deb«-basierte Distributionen: »debmirror«
Installieren Sie folgende Pakete:
-
debmirror
-
ubuntu-keyring
(auf Ubuntu) oder debian-keyring (auf Debian) -
apache2
Die benötigten Abhängigkeiten werden automatisch mit installiert. Im Beispiel verwenden wir ein Ubuntu-System, passen Sie daher gegebenenfalls die Befehle Ihrer Umgebung an.
6.4.2 Konfiguration
Da debmirror kein eigener Dienst ist, sondern nur ein Programm zur Verfügung stellt, müssen Sie die Struktur selbst aufbauen. Dazu gehören folgende Arbeitsschritte:
-
Benutzer und Gruppe anlegen
-
Verzeichnisstruktur anlegen
-
Mirror-Skript erstellen (Ubuntu)
-
Cronjobs einrichten
-
Schlüssel importieren
-
Mirror erstellen
-
Mirror verfügbar machen – Webdienst konfigurieren
-
Clientkonfiguration
6.4.3 Benutzer und Gruppe anlegen
Erstellen Sie zunächst einen eigenen Benutzer, der für den Spiegel zuständig ist. Das hat den Vorteil, dass die Erzeugung des Spiegels nicht mit root-Rechten durchgeführt werden muss.
daniel@server:/# sudo groupadd mirror
daniel@server:/# sudo useradd -g mirror -d /var/www/mirror -s /bin/bash -m \
-c "Ubuntu Mirror" mirror
Listing 6.38 Benutzer und Gruppe »mirror« anlegen
In Listing 6.38 wird zunächst die Gruppe mirror angelegt. Anschließend wird der Benutzer mirror mit useradd erzeugt, die Parameter haben dabei nachstehende Bedeutung:
-
-g = weist den Benutzer einer Gruppe zu, hier mirror.
-
-d = Das Homeverzeichnis des Benutzers wird auf die nachstehende Pfadangabe geändert, hier /var/www/mirror. Da der Benutzer nur als Dienstgeber fungiert, sollte der Spiegel auch unter /var/ liegen und nicht unter /home/.
-
-s = setzt die Shell des Benutzers auf die Bash.
-
-m = Falls das angegebene Homeverzeichnis nicht existiert, wird es mit angelegt.
-
-c = Der Benutzer wird mit einem Kommentar versehen, hier »Ubuntu Mirror«.
-
mirror = gibt den Benutzernamen an, der erzeugt wird.
6.4.4 Verzeichnisstruktur anlegen
Nun können wir die Verzeichnisstruktur anlegen. Dazu wechseln wir mittels su zum neu angelegten Benutzer und erstellen die benötigten Verzeichnisse unter seinem Namen, wie es Listing 6.39 darstellt:
daniel@server:/# sudo su - mirror
mirror@server:/# mkdir -p ~/bin ~/ubuntu ~/ubuntu-security ~/ubuntu-updates \
~/ubuntu-backports
Listing 6.39 Verzeichnisse anlegen
Da die Verzeichnisse direkt als Benutzer mirror erzeugt wurden, sind die Rechte bereits korrekt gesetzt.
6.4.5 Mirror-Skript erstellen (Ubuntu)
Damit der Spiegel erstellt und regelmäßig aktualisiert wird, empfiehlt sich der Einsatz eines Skripts, das über den cron zyklisch gestartet wird. In unserem Beispiel erzeugen wir Skripte für das Spiegeln von Ubuntu.
Dazu erstellen wir ein zentrales Skript, das mit einem Parameter aufgerufen werden muss. Der Parameter gibt das zu spiegelnde Repository an. Erstellen Sie also zunächst die Datei /var/www/mirror/bin/mirror-ubuntu.sh mit dem Inhalt aus Listing 6.40, und geben Sie dem Skript mit chmod +x mirror-ubuntu.sh Ausführungsrechte:
#!/bin/bash
#
# Mirror Ubuntu-Repostiorys
#
# VARS
# $1 sets the repository name
REPO=$1
if [ -z $REPO ] ; then
logger -t mirror-$REPO[$$] ERROR no repository name given!
exit 1
fi
logger -t mirror-$REPO[$$] Updating $REPO
debmirror \
--passive \
--progress \
--nosource \
--host=de.archive.ubuntu.com \
-e http \
--root=ubuntu \
--dist=bionic,xenial \
--section=multiverse,universe,restricted,main \
--arch=i386,amd64 \
--verbose \
/var/www/mirror/$REPO
logger -t mirror-$REPO[$$] Finished Updating Ubuntu
Listing 6.40 Skript zum Laden der Spiegel: »mirror-ubuntu.sh«
Da dieses Skript zugegebenermaßen doch etwas umfangreicher ist, schauen wir uns die einzelnen Zeilen nun im Detail an:
-
Zeile 1
Der Shebang des Skripts gibt an, mit welcher Sprache es interpretiert werden soll. -
Zeile 2–7
Kommentare, die das Skript und dessen Variablen beschreiben -
Zeile 8
weist der Variablen REPO den ersten übergebenen Parameter ($1) zu. -
Zeile 9–12
prüft, ob ein Repository-Name übergeben wurde. Wenn nicht, wird mit einer Fehlermeldung abgebrochen. -
Zeile 14
protokolliert im Syslog, dass das Update begonnen hat. -
Zeile 16–27
führt das Update aus (die Details erläutern wir im Anschluss). -
Zeile 29
protokolliert im Syslog, dass das Update beendet wurde.
Der in Zeile 16–27 von Listing 6.40 dargestellte Aufruf von debmirror enthält viele Parameter, die wir uns nun genauer ansehen:
-
--passive
setzt den Download-Modus von FTP auf passiv. -
--progress
stellt einen Fortschrittsbalken beim Download dar. Dies ist nur relevant, wenn Sie das Skript von Hand auf einer Konsole ausführen. -
--nosource
gibt an, dass keine Quellen geladen werden sollen, sondern nur Binärpakete. -
--host
gibt den Server an, von dem der Spiegel geladen werden soll. Wählen Sie stets einen Server, der eine gute Verfügbarkeit hat und in Ihrer Nähe ist. Im Beispiel wurde de.archive.ubuntu.com verwendet, was eine gute Wahl ist, da sich dahinter stets mehrere verfügbare und vollständige Repositorys verbergen. -
-e
gibt das Übertragungsprotokoll an. Im Beispiel haben wir http verwendet. -
--root
setzt das Wurzelverzeichnis auf dem Quellserver, in dem die Ubuntu-Archive liegen. Wenn nicht anders angegeben, wird im Standard stets ubuntu verwendet. -
--dist
spezifiziert durch Komma getrennt, welche Distributionen geladen werden sollen. Das Beispielskript in Listing 6.40 lädt die LTS-Versionen Bionic und Xenial. Falls Sie ausschließlich die Version 16.04 im Einsatz haben, können Sie den Parameter entsprechend anpassen. -
--section
gibt die Sektionen an, die geladen werden sollen. -
--arch
spezifiziert durch Komma getrennt die Architektur. Falls Sie nur 64-Bit-Systeme betreiben, genügt es auch, nur diese Pakete zu spiegeln. -
--verbose
erweitert die Ausgabe. -
/var/www/mirror/$REPO
gibt den lokalen Speicherort des jeweiligen Spiegels an. Über den Parameter $REPO wird also auch das Verzeichnis angegeben. Soll zum Beispiel das ubuntu-security-Repository gespiegelt werden, dann finden Sie die Daten unter /var/www/mirror/ubuntu-security.
[+] Bei wenig Plattenplatz: »precleanup«
Falls Ihr Spiegelsystem nicht genügend Plattenplatz hat, können Sie dem Programm debmirror den Parameter --precleanup hinzufügen. Dieser sorgt dafür, dass vor dem Download Ihr lokaler Spiegel aufgeräumt wird. Die Entwickler warnen aber davor, dass dies zu einem inkonsistenten Spiegel führen kann. Setzen Sie diesen Parameter also nur im Notfall ein.
6.4.6 Cronjobs einrichten
Damit Sie nicht ständig alle Updates von Hand anstoßen müssen, können Sie mehrere Cronjobs einrichten, die das für Sie erledigen. Vorzugsweise sollte der Spiegel in der Nacht erzeugt werden, da in der Regel dann niemand Ihre Internetleitung benötigt.
Erzeugen Sie also für den Benutzer mirror die notwendigen Cronjobs. Dazu benutzen wir das Tool crontab so, wie in Listing 6.41 dargestellt:
daniel@server:/# sudo crontab -e -u mirror
Listing 6.41 Cronjobs des Benutzers »mirror« öffnen
Fügen Sie anschließend die Zeilen aus Listing 6.42 in den sich öffnenden Editor ein:
0 1 * * * bash -l -c "/var/www/mirror/bin/mirror-ubuntu.sh ubuntu"
0 2 * * * bash -l -c "/var/www/mirror/bin/mirror-ubuntu.sh ubuntu-security"
0 3 * * * bash -l -c "/var/www/mirror/bin/mirror-ubuntu.sh ubuntu-updates"
0 4 * * * bash -l -c "/var/www/mirror/bin/mirror-ubuntu.sh ubuntu-backports"
Listing 6.42 Cronkonfiguration
Damit geben Sie an, dass jede Nacht ab 01:00 Uhr stündlich die Updates laufen sollen. Über die Parameter nach dem Skript mirror-ubuntu.sh definieren Sie, welche Repositorys geladen werden sollen. Falls Sie also keine Pakete aus den Backports benötigen, können Sie die entsprechende Zeile einfach entfernen.
6.4.7 Schlüssel importieren
Damit der angelegte Benutzer mirror den Spiegel erstellen und aktualisieren kann, benötigt er die GPG-Schlüssel der Repositorys. Diese können wir einfach aus dem System importieren, wie in Listing 6.43 dargestellt:
mirror@server:~$ gpg --no-default-keyring --keyring trustedkeys.gpg \
--import /usr/share/keyrings/ubuntu-archive-keyring.gpg
gpg: Verzeichnis `/var/www/mirror/.gnupg' erzeugt
gpg: Die "Keybox" `/var/www/mirror/.gnupg/trustedkeys.gpg' wurde erstellt
gpg: key 3B4[…]F32: 3 Beglaubigungen wegen fehlender Schlüssel nicht geprüft
gpg: /var/www/mirror/.gnupg/trustdb.gpg: trust-db erzeugt
gpg: Schlüssel 3B4[…]F32: Öffentlicher Schlüssel "Ubuntu Archive Automatic \
Signing Key (2012) <ftpmaster@ubuntu.com>" importiert
gpg: key D94[…]092: 3 Beglaubigungen wegen fehlender Schlüssel nicht geprüft
gpg: Schlüssel D94[…]092: Öffentlicher Schlüssel "Ubuntu CD Image Automatic \
Signing Key (2012) <cdimage@ubuntu.com>" importiert
gpg: Anzahl insgesamt bearbeiteter Schlüssel: 2
gpg: importiert: 2
gpg: keine ultimativ vertrauenswürdigen Schlüssel gefunden
mirror@server:~$
Listing 6.43 GPG-Schlüssel für »mirror« importieren
[ ! ] Stolperfalle: richtiger Benutzer
Achten Sie darauf, dass der Import als Benutzer mirror durchgeführt wird! Ansonsten kann das System die GPG-Schlüssel nicht finden und bricht mit einer entsprechenden Fehlermeldung ab.
6.4.8 Mirror erstellen
Um zu prüfen, ob unser Skript auch funktionstüchtig ist, können wir es einfach ausführen. Fehler werden entsprechend in der Bash ausgegeben.
Falls Sie nicht direkt den Download starten wollen, können Sie temporär dem Befehl debmirror den zusätzlichen Parameter ---dry-run mitgeben. Damit läuft das gesamte Update, aber ohne Pakete herunterzuladen.
6.4.9 Mirror verfügbar machen – Webdienst konfigurieren
Damit Ihr Spiegel auch von Ihren Clients benutzt werden kann, müssen Sie diese verfügbar machen. In der Regel wird hierfür als Übertragungsprotokoll HTTP eingesetzt.
Falls Sie bereits einen Apache auf dem System betreiben, müssen Sie lediglich einen weiteren virtuellen Host anlegen und diesen so, wie in Listing 6.44 beschrieben, einrichten:
<VirtualHost *:80>
DocumentRoot /var/www/mirror/
<Directory "/var/www/mirror/»
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Listing 6.44 Apache-Konfiguration des Spiegels: »/etc/apache2/sites-available/mirror.conf«
Abschließend müssen Sie den neuen virtuellen Host noch aktivieren und den Apache so durchstarten, wie in Listing 6.45 dargestellt:
daniel@server:/# sudo a2ensite mirror
[…]
daniel@server:/# sudo systemctl reload apache2
Listing 6.45 Host aktivieren und Apache neu laden
6.4.10 Clientkonfiguration
Damit Ihre Server von nun an über Ihren eigenen Spiegel Updates laden, müssen Sie ihnen dieses mitteilen. Dafür müssen Sie die lokale Datei /etc/apt/sources.list anpassen.
Speichern Sie die aktuelle Version dieser Datei unter einem anderen Namen, und legen Sie eine neue Version mit dem Inhalt aus Listing 6.46 an:
deb http://<IP>/mirror/ubuntu bionic universe multiverse main restricted
deb http://<IP>/mirror/ubuntu-security bionic-security universe main \
restricted multiverse
deb http://<IP>/mirror/ubuntu-updates bionic-updates main restricted \
universe multiverse
deb http://<IP>/mirror/ubuntu-backports bionic-backports main restricted \
universe multiverse
Listing 6.46 Clientkonfiguration: »sources.list«
[ ! ] Release beachten!
Beachten Sie dabei, dass Sie das für das System zutreffende Release eintragen. Also biconic für Ubuntu 18.04 bzw. xenial für Ubuntu 16.04.
Ersetzen Sie <IP> durch die IP-Adresse oder den Hostnamen des Systems, auf dem Sie den Spiegel betreiben. Beachten Sie, dass die Zeilen aus Listing 6.46 aufgrund ihrer Länge umbrochen wurden, aber eigentlich in eine Zeile gehören. Anschließend werden alle Updates von Ihrem eigenen Mirror geladen.
6.4.11 rpm-basierte Distributionen
Um einen Spiegel einer rmp-basierten Distribution zu erstellen, wird kein gesondertes Softwarepaket benötigt. Die Spiegelung erfolgt einfach mittels rsync.
Im Beispiel werden wir einen Mirror für openSUSE einrichten – Abweichungen zu CentOS stellen wir entsprechend dar. Nachstehende Punkte müssen dafür abgearbeitet werden:
-
Benutzer und Gruppe anlegen
-
Verzeichnisstruktur anlegen
-
Mirror-Skript erstellen
-
Cronjobs einrichten
-
Mirror erstellen
-
Mirror verfügbar machen – Webdienst konfigurieren
-
Clientkonfiguration
Diese Schritte werden wir nun nacheinander abarbeiten.
6.4.12 Benutzer und Gruppe anlegen
Zunächst sollte ein Benutzer für den Spiegelvorgang eingerichtet werden:
leap:/ # groupadd mirror
leap:/ # useradd -g mirror -d /srv/pub/opensuse -m -c "Mirror User" mirror
leap:/ # chown -R mirror:mirror /srv/pub/opensuse
Listing 6.47 Benutzer und Gruppe »mirror« anlegen
Der erste Befehl aus Listing 6.47 legt die Gruppe mirror an. Im zweiten Befehl wird ein gleichnamiger Benutzer angelegt. Dieser wird direkt mit dem Parameter -g der Gruppe hinzugefügt. Mit dem Parameter -d wird das Heimatverzeichnis auf /srv/pub/opensuse festgelegt. Falls es nicht existiert, wird es durch die Angabe von -m direkt mit angelegt. Zu guter Letzt wird über den Parameter -c noch ein Kommentar für den Benutzer angegeben.
Abschließend werden dem angelegten Benutzer Rechte am erstellten Verzeichnis zugewiesen. Wenn Sie CentOS einsetzen, sollten Sie als Verzeichnis natürlich besser /srv/pub/CentOS verwenden.
6.4.13 Verzeichnisstruktur anlegen: »openSUSE Leap«
Der Mirror soll unter /srv/pub/opensuse abgelegt werden. Dafür müssen die entsprechenden Verzeichnisse erstellt und dem neu angelegten Benutzer zugeordnet werden. Setzen Sie dafür die Befehle aus Listing 6.48 ab:
root@server:/# mkdir -p /srv/pub/opensuse/update
Listing 6.48 openSUSE Leap: Verzeichnisse anlegen
6.4.14 Verzeichnisstruktur anlegen: »CentOS«
Bei CentOS soll der Mirror unter /srv/pub/CentOS abgelegt werden. Dafür müssen Sie die Verzeichnisse so erstellen, wie in Listing 6.49 gezeigt:
[root@centos /]# mkdir -p /srv/pub/CentOS/7.5.1804
[root@centos /]# cd /srv/pub/CentOS
[root@centos CentOS]# ln -s 7.5.1804 7
[root@centos CentOS]# cd 7.5.1804
[…]# mkdir -p {addons,centosplus,contrib,cr,extras,fasttrack,isos,os,updates}
[…]# for i in $(ls); do mkdir $i/{i386,x86_64}; done
Listing 6.49 CentOS: Verzeichnisse anlegen
6.4.15 Mirror-Skript erstellen
Damit Sie nicht ständig die gleichen Befehle absetzen müssen, erstellen wir ein kleines Skript, das uns die Arbeit abnimmt. Erstellen Sie dafür mit root-Rechten die Datei /usr/bin/mirror.sh mit den Zeilen aus Listing 6.50:
#!/bin/bash
SERVER=$1
MIRROR=$2
if [ -z "$1" ] ; then echo "need server"; exit 1; fi
if [ -z "$2" ] ; then echo "need mirror path"; exit 1; fi
mkdir -p $MIRROR 2>&1
echo -e "\nStarting download process..."
rsync -av --delete --progress --delay-updates --timeout=300 ${SERVER} ${MIRROR}
Listing 6.50 Mirror-Skript: »/usr/bin/mirror.sh«
Das Skript erwartet zwei Parameter: als Erstes den Server, von dem die Pakete geladen werden, und als Zweites den Pfad zu Ihrem lokalen Spiegel.
Das Skript prüft zunächst, ob die benötigten Parameter übergeben wurden. Anschließend wird, falls noch nicht vorhanden, der lokale Pfad angelegt. Zuletzt startet das Skript den Synchronisierungsprozess mit rsync. Dies sehen wir uns nun genauer an:
-
-av
aktiviert den archive- und verbose-Modus. Dabei wird sichergestellt, dass symbolische Links sowie die Attribute und Rechte der Ursprungsdateien erhalten bleiben. Gleichzeitig erhalten Sie eine umfangreichere Ausgabe. -
--delete
Hierüber wird rsync angewiesen, unbenötigte Dateien zu entfernen. -
--progress
zeigt einen Fortschrittsbalken des Vorgangs an. -
--delay-updates
stellt sicher, dass die neuen Dateien erst nach dem Ende der Verarbeitung in das Zielverzeichnis kopiert werden – so ist sichergestellt, dass keine Inkonsistenzen während des Herunterladens entstehen. -
--timeout 300
setzt die maximale Zeitspanne, in der auf eine Transaktion gewartet wird, auf 300 Sekunden – also fünf Minuten.
Damit das Skript ausgeführt werden kann, müssen dessen Rechte angepasst werden. Führen Sie dazu abschließend den Befehl aus Listing 6.51 aus:
daniel@server:~> sudo chmod +x /usr/bin/mirror.sh
Listing 6.51 Rechtekorrektur am Mirror-Skript
6.4.16 Cronjobs einrichten
Zur automatisierten Aktualisierung des Spiegels wird das soeben erstellte Skript nun in Cronjobs gepackt. Öffnen Sie den Cron-Editor für den Benutzer mirror mit dem Befehl aus Listing 6.52:
daniel@server:~> sudo crontab -u mirror -e
Listing 6.52 Cronjobs des Benutzers »mirror« bearbeiten
Fügen Sie nun im sich öffnenden Editor die Zeilen aus Listing 6.53 ein. Beachten Sie, dass die Befehle umbrochen wurden und eigentlich in einer Zeile stehen.
0 1 * * * sleep $(($RANDOM/64)); /usr/bin/mirror.sh \
"ftp.gwdg.de::pub/opensuse/distribution/leap/15.0/repo/oss/" \
"/srv/pub/opensuse/leap/15.0/oss/"
0 3 * * * sleep $(($RANDOM/64)); /usr/bin/mirror.sh \
"ftp.gwdg.de::pub/opensuse/distribution/leap/15.0/repo/non-oss/" \
"/srv/pub/opensuse/leap/15.0/non-oss/"
Listing 6.53 Cronjobs definieren für openSUSE Leap
Jede Nacht wird um 01:00 Uhr der Spiegel oss und um 03:00 Uhr der Spiegel non-oss geladen. Damit dieser Vorgang nicht immer strikt zu den angegebenen Uhrzeiten gestartet wird, wurde mithilfe des sleep-Kommandos eine Variabilität hinzugefügt. Der Befehl bewirkt, dass immer eine zufällige Anzahl an Sekunden gewartet wird, bevor der eigentliche Job gestartet wird.
Wie bereits erörtert wurde, erwartet das mirror.sh-Skript zwei Parameter. Im ersten Parameter steht der Server, von dem der Spiegel geladen wird. Wie Sie Listing 6.53 entnehmen können, wird der gwdg.de-Mirror-Server verwendet. Die Gemeinschaftseinrichtung der Universität Göttingen und der Max-Planck-Gesellschaft ist einer der bekanntesten openSUSE-Mirror-Anbieter. Der Server wurde in der Rsync-Syntax angegeben (zwei aufeinanderfolgende Doppelpunkte zur Trennung von Server und Pfad). Im zweiten Parameter wird der lokale Pfad angegeben, den wir zuvor erstellt haben.
Sie können den Serverpfad auch im Browser eingeben, um so einsehen zu können, welche Distributionen dort angeboten werden. Unter http://ftp.gwdg.de/pub/opensuse wird Ihnen der Inhalt angezeigt.
[+] Anpassungen pro Spiegel
Beachten Sie, dass im Beispiel lediglich ein Spiegel von openSUSE Leap 15.0 geladen wird. Wollen Sie eine andere oder mehrere Distributionen anbieten, müssen Sie die Pfade anpassen oder mehrere mirror.sh-Skriptzeilen erstellen!
Um einen CentOS-Mirror zu erstellen, muss ein Cronjob, wie in Listing 6.54 dargestellt, eingerichtet werden:
0 1 * * * sleep $(($RANDOM/64)); /usr/bin/mirror.sh \
"ftp.fau.de::centos/7.5.1804/" "/srv/pub/CentOS/7.5.1804/"
Listing 6.54 Cronjobs definieren für CentOS
6.4.17 Mirror erstellen
Selbstverständlich müssen Sie jetzt nicht eine Nacht warten, um zu sehen, ob der Mirror erstellt wird. Das Skript können Sie auch von der Konsole aus starten. Damit die Dateiberechtigungen korrekt gesetzt werden, sollten Sie das Skript als Benutzer mirror starten. Listing 6.55 zeigt die Ausgabe, die das Skript erzeugt:
daniel@leap:~> sudo su mirror /usr/bin/mirror.sh \
"ftp.gwdg.de::pub/opensuse/distribution/leap/15.0/repo/non-oss/" \
"/srv/pub/opensuse/leap/15.0/non-oss/"
Starting download process...
Welcome to ftp.gwdg.de
receiving file list ... 81 files to consider
./
.current.txt
14 100% 13.67kB/s 0:00:00 (xfr#1, to-chk=79/81)
CHECKSUMS
163 100% 159.18kB/s 0:00:00 (xfr#2, to-chk=78/81)
CHECKSUMS.asc
481 100% 234.86kB/s 0:00:00 (xfr#3, to-chk=77/81)
[…]
Listing 6.55 Auszug: Ausgabe des Skripts »mirror.sh« auf openSUSE Leap
6.4.18 Mirror verfügbar machen – Webdienst konfigurieren
Damit Ihre Clients den erstellten Spiegel auch nutzen können, müssen Sie diesen verfügbar machen. Hierfür genügt eine Webserverinstallation – mehr zum Thema erfahren Sie in Kapitel 8, »Webserver«. Im Beispiel verwenden wir einen Apache-Webserver.
Richten Sie für den Mirror einen neuen VirtualHost ein. Dafür erstellen Sie die Datei /etc/apache2/vhosts.d/mirror.example.com.conf mit dem Inhalt aus Listing 6.56:
<VirtualHost *:80>
ServerAdmin admin@example.com
ServerName mirror.example.com
DocumentRoot "/srv/pub/opensuse"
<Directory "/srv/pub/opensuse»
Options FollowSymLinks Indexes
IndexOptions FancyIndexing VersionSort NameWidth=* Charset=UTF-8 \
TrackModified FoldersFirst XHTML
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Listing 6.56 Konfiguration des VirtualHost: »/etc/apache2/vhosts.d/mirror.example.com.conf«
Selbstverständlich müssen Sie den Dateinamen und die Direktive ServerName Ihrer Umgebung anpassen. Nach den Änderungen müssen Sie den Dienst neu starten. Anschließend können Ihre Clients – vorausgesetzt, das mirror.sh-Skript ist bereits einmal vollständig gelaufen – Ihren neu geschaffenen Mirror-Server einsetzen.
6.4.19 Clientkonfiguration: »openSUSE Leap«
Wir bleiben im SUSE-Universum und zeigen Ihnen in diesem Abschnitt, wie Sie den Clients in Ihrem Netz den neu geschaffenen Mirror-Server mitteilen. Öffnen Sie dafür den yast2, und wählen Sie unter Software den Unterpunkt Software Repositorys aus. Im sich öffnenden Dialog können Sie über die Schaltfläche Add oder die Tastenkombination (Alt) + (A) ein neues Repository hinzufügen.
Wählen Sie im folgenden Dialog als Medien-Typ »HTTP…« aus, und klicken Sie auf die Schaltfläche Next. Nun werden Sie aufgefordert, einen Namen (Repository Name) und die URL anzugeben. Geben Sie hier den Namen und den Pfad Ihres Spiegelservers an, zum Beispiel http://mirror.example.com/opensuse/15.0.
Anschließend wird Ihr Spiegelserver durchsucht und analysiert. Nach Abschluss der Verarbeitung steht Ihnen der neue Server in der Liste der Software-Repositorys zur Verfügung. Damit der Server benutzt wird, müssen Sie diesen aktivieren und ihm eine niedrigere Priorität zuweisen. Alternativ können Sie auch die bisherigen Server deaktivieren oder entfernen.
6.4.20 Clientkonfiguration: »CentOS«
Damit CentOS-Systeme Ihren Mirror verwenden, müssen Sie die Datei CentOS-Base.repo im Verzeichnis /etc/yum.repos.d/ so anpassen, wie in Listing 6.57 dargestellt ist:
[base]
name=CentOS-$releasever - Base
baseurl=http://mirror.example.com/CentOS/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirror.example.com/CentOS/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirror.example.com/CentOS/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirror.example.com/CentOS/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Listing 6.57 Anpassungen in »/etc/yum.repos.d/CentOS-Base.repo«
Beachten Sie, dass Sie zwingend die Direktiven mirrorlist entfernen müssen und die URL (fett hervorgehoben) Ihren Gegebenheiten anpassen.