Under Construction

Erzeugen eines lokalen Spiegels einer Repository

Typischerweise ist in den meisten Umgebungen ein Zugriff auf Repositories im Internet nur von wenigen AIX-Systemen aus möglich. Um trotzdem Repositories wie die AIX-Toolbox für alle AIX-Systeme zur Verfügung zu stellen, bietet sich die Möglichkeit an, einen Spiegel eines entfernten Repositories auf einem zentralen System mit direkter oder indirekter (über Proxy) Internet-Anbindung einzurichten. Dies wird im Folgenden am Beispiel der Repositories der AIX-Toolbox gezeigt.

Im Prinzip können die Dateien (RPM-Pakete) der Repositories mit jedem beliebigen Tool (z.B. wget oder curl) auf einen lokalen Server heruntergeladen werden. Besonders einfach geht dies jedoch mit dem Kommando reposync aus dem RPM-Paket yum-utils.

Per Default synchronisiert reposync alle (enabled) Repositories aus der Konfigurations-Date /opt/freeware/etc/yum/yum.conf in das aktuelle Verzeichnis. Für jede Repository wird ein eigenes Unterverzeichnis angelegt, der Verzeichnisname ist die Repository-ID. Über eine Reihe von Optionen kann die arbeitsweise von reposync konfiguriert werden.

Wir verwenden auf unserem zentralen Webserver aixweb die Standard-Konfiguration von YUM nach der Installation:

aixweb # cat /opt/freeware/etc/yum/yum.conf
[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
plugins=1

[AIX_Toolbox]
name=AIX generic repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/
enabled=1
gpgcheck=0

[AIX_Toolbox_noarch]
name=AIX noarch repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/noarch/
enabled=1
gpgcheck=0

[AIX_Toolbox_72]
name=AIX 7.2 specific repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/
enabled=1
gpgcheck=0

aixweb #

Die Repositories sollen auf dem Webserver unterhalb des Verzeichnisses /var/www/htdocs/aixtoolbox abgespeichert werden. Mit der Option „-p“ kann dem Kommando reposync ein Zielverzeichnis für die Repositories mitgegeben werden:

aixweb # reposync -p /var/www/htdocs/aixtoolbox
[AIX_Toolbox: 1     of 2743  ] Downloading CUnit/CUnit-2.1.3-1.aix6.1.ppc.rpm
CUnit-2.1.3-1.aix6.1.ppc.rpm                                              | 129 kB  00:00:00    
[AIX_Toolbox: 2     of 2743  ] Downloading CUnit/CUnit-devel-2.1.3-1.aix6.1.ppc.rpm
CUnit-devel-2.1.3-1.aix6.1.ppc.rpm                                        |  83 kB  00:00:00    
[AIX_Toolbox: 3     of 2743  ] Downloading GeoIP/GeoIP-1.6.12-1.aix6.1.ppc.rpm
GeoIP-1.6.12-1.aix6.1.ppc.rpm                                             | 1.8 MB  00:00:00    

[AIX_Toolbox_noarch: 299   of 301   ] Downloading yum-utils/yum-plugin-versionlock-1.1.31-2.aix6.1.noarch.rpm
yum-plugin-versionlock-1.1.31-2.aix6.1.noarch.rpm                         |  17 kB  00:00:00    
[AIX_Toolbox_noarch: 300   of 301   ] Downloading yum-utils/yum-utils-1.1.31-1.aix6.1.noarch.rpm
yum-utils-1.1.31-1.aix6.1.noarch.rpm                                      |  89 kB  00:00:00    
[AIX_Toolbox_noarch: 301   of 301   ] Downloading yum-utils/yum-utils-1.1.31-2.aix6.1.noarch.rpm
yum-utils-1.1.31-2.aix6.1.noarch.rpm                                      |  88 kB  00:00:00    
aixweb #

Der Download der ca 15 GB Daten kann einige Zeit in Anspruch nehmen. Für jede der 3 Repositories wurde ein eigenes Unterverzeichnis angelegt:

aixweb # ls -l /var/www/htdocs/aixtoolbox
total 48
drwxr-xr-x  260 root     system        16384 Dec 05 12:25 AIX_Toolbox
drwxr-xr-x   19 root     system         4096 Dec 05 12:39 AIX_Toolbox_72
drwxr-xr-x   50 root     system         4096 Dec 05 12:40 AIX_Toolbox_noarch
aixweb #

Nachdem die Daten heruntergeladen sind, können die Metadaten für die Repositories mit Hilfe des Kommandos createrepo erzeugt werden. Als Argument wird dabei das Verzeichnis der Repository angegeben. Für jede Repository muss das Kommando einmal gestartet werden:

aixweb # createrepo /var/www/htdocs/aixtoolbox/AIX_Toolbox
Spawning worker 0 with 342 pkgs
Spawning worker 1 with 342 pkgs
Spawning worker 2 with 342 pkgs
Spawning worker 3 with 342 pkgs
Spawning worker 4 with 342 pkgs
Spawning worker 5 with 342 pkgs
Spawning worker 6 with 342 pkgs
Spawning worker 7 with 341 pkgs

Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
aixweb #  
aixweb # createrepo /var/www/htdocs/aixtoolbox/AIX_Toolbox_72

aixweb #
aixweb # createrepo /var/www/htdocs/aixtoolbox/AIX_Toolbox_noarch

aixweb #

Damit sind die Spiegel der AIX-Toolbox Repositories einsatzbereit. Da diese auf unserem Web-Server schon unterhalb des Document-Root (/var/www/htdocs) des Apache-Webservers stehen, können diese damit per HTTP oder HTTPS von anderen Systemen aus verwendet werden.

Die lokalen Spiegel sollten regelmäßig mit den offiziellen Repositories abgeglichen werden. Dazu können die Kommandos reposync und createrepo von oben regelmäßig (z.B. per cron) wiederholt werden.

Auf dem Webserver aixweb selbst, würde YUM im Moment, gemäß der Standard-Konfiguration, immer noch direkt auf die IBM-Webserver zugreifen, obwohl es jetzt lokale Kopien gibt. Ändert man die Einträge in /opt/freeware/etc/yum/yum.conf auf den lokalen Webserver ab, funktioniert der Abgleich mittels reposync nicht mehr, da reposync dann auf den lokalen Webserver zugreift. Ein weiterer offener Punkt ist der Download der Repositories für AIX 7.1 und 7.3, aktuell werden diese nicht heruntergeladen, da der AIX Webserver aixweb unter AIX 7.2 läuft und daher die Repositories für AIX 7.1 und 7.3 nicht benötigt und daher auch nicht konfiguriert hat.

Eine einfache Lösung für beide genannten Probleme besteht darin für die Synchronization der Repositories eine eigene Konfigurationsdatei zu verwenden. Wir kopieren die aktuelle Standard-Konfiguration /opt/freeware/etc/yum/yum.conf in die Datei /opt/freeware/etc/yum/reposync.conf (Name ist frei wählbar):

aixweb # cp /opt/freeware/etc/yum/yum.conf /opt/freeware/etc/yum/reposync.conf
aixweb #

Bei dieser Gelegenheit erweitern wir die Konfiguration noch um die Repositories für AIX 7.1 und AIX 7.3:

aixweb # cat /opt/freeware/etc/yum/reposync.conf
[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
plugins=1

[AIX_Toolbox]
name=AIX generic repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc/
enabled=1
gpgcheck=0

[AIX_Toolbox_noarch]
name=AIX noarch repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/noarch/
enabled=1
gpgcheck=0

[AIX_Toolbox_71]
name=AIX 7.1 specific repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.1/
enabled=1
gpgcheck=0

[AIX_Toolbox_72]
name=AIX 7.2 specific repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.2/
enabled=1
gpgcheck=0

[AIX_Toolbox_73]
name=AIX 7.3 specific repository
baseurl=https://anonymous:anonymous@public.dhe.ibm.com/aix/freeSoftware/aixtoolbox/RPMS/ppc-7.3/
enabled=1
gpgcheck=0

aixweb #

Beim Starten von reposync kann über die Option „-c“ (oder „—config“) der Name einer Konfigurationsdatei angegeben werden, welche anstelle des Defaults /opt/freeware/etc/yum/yum.conf verwendet werden soll.

aixweb # reposync -c /opt/freeware/etc/yum/reposync.conf -p /var/www/htdocs/aixtoolbox
AIX_Toolbox                                                               | 2.6 kB  00:00:00    
AIX_Toolbox_71                                                            | 2.5 kB  00:00:00    
AIX_Toolbox_72                                                            | 2.5 kB  00:00:00    
AIX_Toolbox_73                                                            | 2.5 kB  00:00:00    
AIX_Toolbox_73/primary_db                                                 |  12 kB  00:00:00    
AIX_Toolbox_noarch                                                        | 2.5 kB  00:00:00    
[AIX_Toolbox: 1     of 2743  ] Skipping existing CUnit/CUnit-2.1.3-1.aix6.1.ppc.rpm
[AIX_Toolbox: 2     of 2743  ] Skipping existing CUnit/CUnit-devel-2.1.3-1.aix6.1.ppc.rpm
[AIX_Toolbox: 3     of 2743  ] Skipping existing GeoIP/GeoIP-1.6.12-1.aix6.1.ppc.rpm

[AIX_Toolbox_noarch: 300   of 301   ] Skipping existing yum-utils/yum-utils-1.1.31-1.aix6.1.noarch.rpm
[AIX_Toolbox_noarch: 301   of 301   ] Skipping existing yum-utils/yum-utils-1.1.31-2.aix6.1.noarch.rpm
aixweb #

Für die beiden neuen Repositories (AIX 7.1 und 7.3) müssen zunächst wieder die Metadaten mit dem Kommando createrepo erzeugt werden:

aixweb # createrepo /var/www/htdocs/aixtoolbox/AIX_Toolbox_71

aixweb # createrepo /var/www/htdocs/aixtoolbox/AIX_Toolbox_73

aixweb #

Allerdings müssen auch für die schon bestehenden Repositories die Metadaten aktualisiert werden, da ja eventuell neue RPM-Pakete hinzugekommen sind. Um nicht die Metadaten für die schon vorhandenen RPM-Pakete erneut generieren zu müssen, kann beim Kommando createrepo die Option „—update“ angegeben werden. Diese Option sorgt dafür das die bestehenden Metadaten übernommen werden und nur für neue RPM-Pakete Metadaten gerneriert und hinzugefügt werden. Für Repositories mit vielen (tausenden) von RPM-Paketen verkürzt das die Laufzeit von createrepo erheblich:

aixweb # createrepo --update /var/www/htdocs/aixtoolbox/AIX_Toolbox

aixweb #
aixweb # createrepo --update /var/www/htdocs/aixtoolbox/AIX_Toolbox_noarch

aixweb #
aixweb # createrepo --update /var/www/htdocs/aixtoolbox/AIX_Toolbox_72

aixweb #

Das Kommando reposync und die Kommandos „createrepo –update“ für die einzelnen Repositories sollten per cron regelmäßig ausgeführt werden (z.B. einmal pro Woche) um die Spiegel der Repositories auf dem aktuellen Stand zu halten.

Auf dem AIX Webserver aixweb selbst hat man für YUM dann die Möglichkeit auf die Repositories lokal (file:///var/www/htdocs/aixtoolbox/AIX_Toolbox usw.) oder per Web (http://localhost/aixtoolbox/AIX_Toolbox usw.) zuzugreifen. Natürlich wäre auch ein direkter Zugriff auf die IBM-Repositories nach wie vor möglich.