Как узнать номер версии установленной библиотеки?

12

Вопрос актуален для RedHat / CentOS. Я немного запутался между пакетом и библиотекой и тем, как прикрепить их к фиксированной версии.

В последних версиях libxcb есть ошибка 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 и номером, который я хочу ...

dargaud
источник

Ответы:

14

Если вы хотите узнать, какая версия установлена , просто запустите:

rpm -q libxcb-devel

Если вы хотите предотвратить обновление этого пакета, вы можете добавить его в excludeконфигурацию yum . Добавьте следующее в mainраздел /etc/yum.conf:

exclude=libxcb-devel

Версия библиотеки (например, in libxcb.so.1.1.0) очень редко отслеживает версию пакета и предназначена для отслеживания изменений API.

larsks
источник
1
# yum remove libxcb-devel
# rpm -Uvh --oldpackage libxcb-1.5-1.el6.i686.rpm 

Это два разных пакета. Версия -devel предназначена для компиляции, а пакет libxcb без -devel - это то, с чем будут работать приложения.

Поскольку вы удалили версию -devel, в которой ничего не установлено, «yum info» показывает вам только последнюю доступную версию (вы можете использовать опцию --showduplicates, чтобы увидеть все версии). Если вы хотите остановить его обновление, я бы рекомендовал установить / использовать плагин versionlock в пакете libxcb ... хотя это можно сделать вручную, используя exclude.

Также используйте rpm напрямую, вы можете просто использовать: yum downgrade blah.rpm

Джеймс Антилл
источник
yum downgrade не показался доступным. Это недавнее дополнение? Спасибо за совет по версии, я никогда не слышал об этом.
Дарго
Я полагаю, что удален уровень, чтобы избежать рисков статических ссылок.
Дарго
1
yum downgrade доступен как минимум с RHEL6
doktor5000