インストールされたライブラリのバージョン番号を見つけるには?

インストールされたライブラリのバージョン番号を見つけるには?

RedHat/CentOS に関する問題です。パッケージとライブラリ、そしてそれを固定バージョンに固定する方法について少し混乱しています。

最近のlibxcbバージョンには、私のCプログラムに影響を与えるX11ロールオーバーバグがあります。 libxcb-1.5-1にはこのエラーはありません。

だから私はこれをしました:

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

これでエラーがなくなり、ソフトウェアが正常に実行されます。

数週間後に早送りすると、エラーが再び発生します。

# 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

しかし、これはインストールされたバージョンですか、それともリポジトリを介して利用可能なバージョンですか?現在インストールされているlibxcbのバージョンをどのように理解できますか?

$ 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]

だからyumに表示されているバージョン番号と.soの番号、そして私が欲しい番号が混乱しています...

答え1

どんなバージョンなのか知りたいならインストール済み、速く走る:

rpm -q libxcb-devel

このパッケージがアップグレードされないようにするには、yumexclude設定にパッケージを追加できます。main次のセクションに以下を追加します/etc/yum.conf

exclude=libxcb-devel

ライブラリのバージョン(例libxcb.so.1.1.0:)は、パッケージのバージョンをほとんど追跡せず、APIの変更を追跡するように設計されています。

答え2

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

これらは2つの異なるパッケージです。 -develバージョンはコンパイルに使用され、-develを持たないlibxcbパッケージは実行するアプリケーションのオブジェクトです。

-develバージョンを削除したため、何もインストールされていないため、「yum info」は利用可能な最新バージョンのみを表示します(すべてのバージョンを表示するには--showduplicatesオプションを使用できます)。アップグレードを停止するには、libxcbパッケージにバージョンロックプラグインをインストール/使用することをお勧めします。除外項目を使用して手動で実行することもできます。

rpmを直接使用することもできます。以下を使用してください。 yum downgrade blah.rpm

関連情報