Wie entscheidet Yast, woher er ein Paket installiert, wenn es in mehreren Quellen verfügbar ist?
Die Überschrift ist recht lang, trifft aber das Thema recht genau. Meine konkrete Situation war folgende. Ich habe openSuSE-10.3 von einer DVD installiert und diese danach auf meinen Fileserver kopiert und per HTTP freigegeben. Da die DVD nicht vollständig ist, habe ich außer dem Repository auf meinem Fileserver noch
eingebunden.
Wenn ich nun irgendwas installieren wollte, wollte Yast die Pakete immer aus dem Internet laden, auch wenn sie auf meinem Fileserver vorhanden waren. Eine Einstellmöglichkeit für dieses Verhalten ist offensichtlich nicht vorgesehen. Nach kurzer Forschung stellte ich fest, daß Yast für das Installieren und Verwalten der Repositories einfach ein Programm namens zypper aufruft. Den Versuch in den Tiefen des Systems (zypper, libzypp etc.) einen Patch anzubringen gab ich auf, als ich erkannte, daß die Einarbeitung einige Zeit in Anspruch nehmen würde.
Das Kommando zypper lr kann benutzt werden, um die konfigurierten
Repositories auszugeben. Ich nahm an, daß in der ausgegebenen Reihenfolge auch
nach Paketen gesucht wird und der erste gewinnt. Mit dem strace
Befehl ermittelte ich, daß Zypper das Verzeichnis /etc/zypp/repos.d
liest. In diesem Verzeichnis befindet sich pro Repository eine Datei. Ein
ungeordnetes Listing dieses Verzeichnisses zeigte die gleiche Reihenfolge wie
zypper lr:
$ zypper lr
# | Enabled | Refresh | Type | Alias | Name
--+---------+---------+--------+-------------------------------------------------------------------+--------------------------
1 | Yes | No | yast2 | http://download.opensuse.org/distribution/10.3/repo/non-oss/ | Main Repository (NON-OSS)
2 | No | No | yast2 | openSUSE-10.3-DVD 10.3 | openSUSE-10.3-DVD 10.3
3 | Yes | No | yast2 | http://download.opensuse.org/repositories/openSUSE:10.3/standard/ | Main Repository (OSS)
4 | Yes | Yes | rpm-md | http://download.nvidia.com/opensuse/10.3 | NVIDIA Repository
5 | Yes | Yes | rpm-md | http://download.videolan.org/pub/videolan/vlc/SuSE/10.3/ | VideoLan Repository
6 | Yes | No | yast2 | pelmen | pelmen
7 | Yes | Yes | rpm-md | http://download.opensuse.org/update/10.3/ | Main Update Repository
8 | Yes | Yes | rpm-md | http://ftp.skynet.be/pub/packman/suse/10.3/ | Packman Repository
$ ls -1U /etc/zypp/repos.d/
http:__download.opensuse.org_distribution_10.3_repo_non-oss_.repo
openSUSE-10.3-DVD-10.3.repo
http:__download.opensuse.org_repositories_openSUSE:10.3_standard_.repo
http:__download.nvidia.com_opensuse_10.3.repo
http:__download.videolan.org_pub_videolan_vlc_SuSE_10.3_.repo
pelmen.repo
http:__download.opensuse.org_update_10.3_.repo
http:__ftp.skynet.be_pub_packman_suse_10.3_.repo
Nun versuchte ich die Reihenfolge der Dateien zu ändern. Diese ist ein wenig abhängig vom verwendeten Filesystem. Früher war es einfach die Reihenfolge in der die Dateieinträge in der Verzeichnisdatei auftauchten. Mein ext3-Dateisystem benutzt allerdings das dir_index-Feature:
# dumpe2fs -h /dev/sda6
dumpe2fs 1.40.2 (12-Jul-2007)
...
Filesystem features: has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem flags: signed directory hash
Daher wird die Reihenfolge durch die Dateinamen bestimmt. Ich fing daher an die Dateien umzubenennen, bis die nötige Reihenfolge hergestellt war:
$ ls -1U /etc/zypp/repos.d/
zOpenSUSE-10.3-DVD-10.3.repo
_pelmen.repo
_http:__download.opensuse.org_distribution_10.3_repo_non-oss_.repo
http:__download.opensuse.org_repositories_openSUSE:10.3_standard_.repo
http:__download.nvidia.com_opensuse_10.3.repo
http:__download.videolan.org_pub_videolan_vlc_SuSE_10.3_.repo
http:__download.opensuse.org_update_10.3_.repo
http:__ftp.skynet.be_pub_packman_suse_10.3_.repo
Das erforderte einfach ein wenig ausprobieren. Jedenfalls zeigte nun auch Zypper die richtige Reihenfolge:
$ zypper lr
# | Enabled | Refresh | Type | Alias | Name
--+---------+---------+--------+-------------------------------------------------------------------+--------------------------
1 | No | No | yast2 | openSUSE-10.3-DVD 10.3 | openSUSE-10.3-DVD 10.3
2 | Yes | No | yast2 | pelmen | pelmen
3 | Yes | No | yast2 | http://download.opensuse.org/distribution/10.3/repo/non-oss/ | Main Repository (NON-OSS)
4 | Yes | No | yast2 | http://download.opensuse.org/repositories/openSUSE:10.3/standard/ | Main Repository (OSS)
5 | Yes | Yes | rpm-md | http://download.nvidia.com/opensuse/10.3 | NVIDIA Repository
6 | Yes | Yes | rpm-md | http://download.videolan.org/pub/videolan/vlc/SuSE/10.3/ | VideoLan Repository
7 | Yes | Yes | rpm-md | http://download.opensuse.org/update/10.3/ | Main Update Repository
8 | Yes | Yes | rpm-md | http://ftp.skynet.be/pub/packman/suse/10.3/ | Packman Repository
Beim nächsten Versuch irgendein Paket zu installieren, das sowohl auf dem Fileserver (pelmen) als auch im Main Repository verfügbar war, wählte Yast automatisch meine Fileserver als Quelle:
Letzte Aktualisierung: 03.08.2008

