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