Under Construction

Erzeugen einer lokalen Repository

Um eine lokale YUM-Repository im Dateisystem zu erzeugen sind die folgenden drei Schritte erforderlich:

Schritt 1: Erzeugen eines Verzeichnisses für die Repository:

aixnim # mkdir /var/myrepo
aixnim #

Schritt 2: Alle RPM-Pakete, die über diese Repository angeboten werden sollen, müssen in das Verzeichnis kopiert werden:

aixnim # cp /tmp/zchunk-*.rpm /var/myrepo
aixnim # chmod a+r /var/myrepo/*.rpm
aixnim #

Hinweis: Dieser Schritt kann auch entfallen, es wird dann eine leere Repository erzeugt.

Schritt 3: Erzeugen der Repository mit dem Kommando createrepo. Damit werden die notwendigen Metadaten im Verzeichnis repodata der Repository erzeugt:

aixnim # createrepo /var/myrepo
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
aixnim #

Das Kommando legt eine Reihe von Metadaten im Unterverzeichnis repodata an:

aixnim # ls -lR /var/myrepo/repodata
total 64
-rw-r--r--    1 root     system         1397 Dec  3 12:09 0850138fcd1761a71c3973363a0c0db099438d4fcb98f89e7b8207ed68b5b159-primary.xml.gz
-rw-r--r--    1 root     system          578 Dec  3 12:09 10673361cca921a85928e56c5f08f97457c1eb0db2b32dbf867c6263409fb4eb-filelists.xml.gz
-rw-r--r--    1 root     system         6324 Dec  3 12:09 64c51b0c798e179f7e9d69955f709498a0d4d5c4efbc0ca473e6dcc7120fa56f-other.sqlite.bz2
-rw-r--r--    1 root     system         1477 Dec  3 12:09 75cd39b107183913ac32f498bb8d2cafd41eedf3c20ef0ebcf9370ee43f3a3ba-filelists.sqlite.bz2
-rw-r--r--    1 root     system         3121 Dec  3 12:09 7fff9af4d2ddc2b143d8df076d4902711b5bce1b418ef7484b952d6dac13c499-other.xml.gz
-rw-r--r--    1 root     system         3174 Dec  3 12:09 8df291fcfa845eae9627ecd5c13505b1d9111bab0163de7e1a2ad8cc4ca8ccaf-primary.sqlite.bz2
-rw-r--r--    1 root     system         2972 Dec  3 12:09 repomd.xml
aixnim #

Die wichtigste dieser Dateien ist die Datei repomd.xml.

Damit die neue Repository von YUM verwendet werden kann, muss diese der bestehenden YUM-Konfiguration hinzugefügt werden. Wir legen die folgende minimale repo-Datei unter /tmp an:

aixnim # cat /tmp/myrepo.repo
[myrepo]
name=my private repository
baseurl=file:///var/myrepo
aixnim #

Diese kann dann mit dem Kommando yum-config-manager und der Option „—add-repo“ der bestehenden Konfiguration hinzugefügt werden:

aixnim # yum-config-manager --add-repo=/tmp/myrepo.repo  
adding repo from: /tmp/myrepo.repo
grabbing file /tmp/myrepo.repo to /opt/freeware/etc/yum/repos.d/myrepo.repo
myrepo.repo                                                                      |   62 B  00:00:00    
repo saved to /opt/freeware/etc/yum/repos.d/myrepo.repo
aixnim #

Die neue Repository kann dann auch sofort verwendet werden:

aixnim # yum repolist
myrepo                                                                           | 2.9 kB  00:00:00    
myrepo/primary_db                                                                | 3.1 kB  00:00:00    
repo id                                     repo name                                             status
AIX_Toolbox                                 AIX generic repository                                2740
AIX_Toolbox_71                              AIX 7.1 specific repository                            295
AIX_Toolbox_noarch                          AIX noarch repository                                  301
myrepo                                      my private repository                                    3
repolist: 3339
aixnim #

Die Ausgabe von „yum repolist“ zeigt das in der neuen Repository myrepo (my private repository) 3 RPM-Pakete verfügbar sind.

Wir deaktivieren temporär die Repositories der AIX-Toolbox, so dass nur noch die neue Repository aktiv ist:

aixnim # yum-config-manager --disable AIX*

aixnim #

Wir fügen jetzt der neuen Repository myrepo ein weiteres RPM-Paket hinzu:

aixnim # cp libzstd-1.4.4-32_1.aix7.1.ppc.rpm /var/myrepo
aixnim # chmod a+r /var/myrepo/libzstd-1.4.4-32_1.aix7.1.ppc.rpm
aixnim #

Das neue RPM-Paket ist allerdings für YUM nicht sichtbar:

aixnim # yum list available
Available Packages
zchunk.ppc                                          1.1.4-32_1                                    myrepo
zchunk-devel.ppc                                    1.1.4-32_1                                    myrepo
zchunk-libs.ppc                                     1.1.4-32_1                                    myrepo
aixnim #

Damit das neue RPM-Paket für YUM sichtbar ist, müssen die Metadaten (repomd.xml) aktualisiert werden. Dies kann durch einen erneuten Lauf von createrepo erfolgen:

aixnim # createrepo /var/myrepo
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 1 pkgs
Spawning worker 2 with 1 pkgs
Spawning worker 3 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
aixnim #

Standardmäßig greift YUM auf gepufferte Informationen zurück, daher sollte der Cache entweder komplett geleert werden, oder zumindest die Metadaten aus dem Cache entfernt werden:

aixnim # yum clean all
Cleaning repos: myrepo
Cleaning up Everything
aixnim #

Das neu hinzugekommene RPM-Paket wird jetzt als verfügbares RPM-Paket aufgelistet:

aixnim # yum list available
myrepo                                                                           | 2.9 kB  00:00:00    
myrepo/primary_db                                                                | 3.4 kB  00:00:00    
Available Packages
libzstd.ppc                                         1.4.4-32_1                                    myrepo
zchunk.ppc                                          1.1.4-32_1                                    myrepo
zchunk-devel.ppc                                    1.1.4-32_1                                    myrepo
zchunk-libs.ppc                                     1.1.4-32_1                                    myrepo
aixnim #

D.h. jedes Mal wenn RPM-Pakete einem Repository hinzugefügt werden, müssen die Metadaten des Repositories mit createrepo aktualisiert werden. Auf Systemen welche die Repository verwenden, muss unter Umständen der Cache geleert werden, damit YUM auf die neuen Metadaten zugreift. Standardmäßig werden die gepufferten Daten nach 21600 Sekunden (6 Stunden) nicht mehr verwendet (metadata_expire=21600).