Wie finde ich die Versionsnummer einer installierten Bibliothek heraus?

11

Für RedHat / CentOS relevante Frage. Ich bin ein wenig verwirrt zwischen Paket und Bibliothek und wie man sie an eine feste Version anheftet.

In den letzten libxcb-Versionen gibt es einen X11-Rollover-Fehler, der meine C-Programme betrifft. libxcb-1.5-1 hat diesen Fehler nicht.

So tat ich:

# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 

Und jetzt ist der Fehler verschwunden und meine Software funktioniert einwandfrei.

Ein paar Wochen vorspulen und der Fehler ist zurück.

# yum info libxcb-devel
Loaded plugins: refresh-packagekit, security
Available Packages
Name       : libxcb-devel
Arch       : i686
Version    : 1.9.1
Release    : 2.el6
Size       : 1.0 M
Repo       : sl-security

Aber ist das die installierte Version oder die Version, die über das Repo verfügbar ist? Wie kann ich feststellen, welche Version von libxcb derzeit installiert ist?

$ ll /usr/lib/libxcb.so*
lrwxrwxrwx 1 root root     15 Aug  6 03:38 /usr/lib/libxcb.so.1 -> libxcb.so.1.1.0*
-rwxr-xr-x 1 root root 130752 Oct 14  2014 /usr/lib/libxcb.so.1.1.0*
$ readelf -d /usr/lib/libxcb.so.1.1.0 | grep SONAME
 0x0000000e (SONAME)                     Library soname: [libxcb.so.1]

Ich bin also verwirrt zwischen der von yum angezeigten Versionsnummer, der Nummer auf der .so und der Nummer, die ich möchte ...

Dargaud
quelle

Antworten:

14

Wenn Sie wissen möchten, welche Version installiert ist , führen Sie einfach Folgendes aus:

rpm -q libxcb-devel

Wenn Sie Upgrades für dieses Paket verhindern möchten, können Sie das Paket zur yum- excludeKonfiguration hinzufügen . Fügen Sie dem mainAbschnitt in Folgendes hinzu /etc/yum.conf:

exclude=libxcb-devel

Die Bibliotheksversion (z. B. in libxcb.so.1.1.0) verfolgt die Paketversion sehr selten und soll API-Änderungen verfolgen.

Larsks
quelle
1
# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 

Dies sind zwei verschiedene Pakete. Die -devel-Version dient zum Kompilieren, das libxcb-Paket ohne -devel ist das, gegen das Anwendungen ausgeführt werden.

Da Sie die -devel-Version entfernt haben, auf der nichts installiert ist, zeigt "yum info" nur die neueste verfügbare Version an (Sie können die Option --showduplicates verwenden, um alle Versionen anzuzeigen). Wenn Sie das Upgrade beenden möchten, würde ich empfehlen, das versionlock-Plugin auf dem libxcb-Paket zu installieren / zu verwenden ... obwohl dies manuell mit excludes erfolgen kann.

Verwenden Sie rpm auch direkt, Sie können einfach verwenden: yum downgrade blah.rpm

James Antill
quelle
yum downgrade schien nicht verfügbar zu sein. Ist das eine neue Ergänzung? Danke für den Versionlock-Tipp, ich hatte noch nie davon gehört.
Dargaud
Die Entwicklung wurde entfernt, um das Risiko einer statischen Verknüpfung zu vermeiden.
Dargaud
1
yum downgrade ist seit mindestens RHEL6
doktor5000