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
이 패키지가 업그레이드되는 것을 방지하려면 yum exclude
구성에 패키지를 추가할 수 있습니다. 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
이들은 두 가지 다른 패키지입니다. -devel 버전은 컴파일에 사용되며, -devel이 없는 libxcb 패키지는 실행할 애플리케이션의 개체입니다.
-devel 버전을 제거했기 때문에 아무것도 설치되지 않았으므로 "yum info"는 사용 가능한 최신 버전만 표시합니다(모든 버전을 보려면 --showduplicates 옵션을 사용할 수 있음). 업그레이드를 중지하려면 libxcb 패키지에 버전 잠금 플러그인을 설치/사용하는 것이 좋습니다. 제외 항목을 사용하여 수동으로 수행할 수도 있습니다.
rpm을 직접 사용할 수도 있습니다. 다음을 사용하세요. yum downgrade blah.rpm