리눅스 rpm 패키지는 의존적이다. 특정 패키지를 설치하기 위해서는 의존하고 있는 다른 패키지가 설치되어 있어야 한다.
패키지 의존성을 확인하려면 rpm 명령어에 -qpR 옵션을 사용하면 된다.
rpm -qpR [패키지명]
예를 들어 리눅스에 있는 openssl-1.0.2k-19.el7.x86_64.rpm 설치 시 필요한 의존성 확인을 위해서는
[root@newhost rpm]# rpm -qpR openssl-1.0.2k-19.el7.x86_64.rpm
/bin/bash
/bin/sh
coreutils
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libcom_err.so.2()(64bit)
libcrypto.so.10()(64bit)
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)
libcrypto.so.10(OPENSSL_1.0.2)(64bit)
libcrypto.so.10(libcrypto.so.10)(64bit)
libdl.so.2()(64bit)
libgssapi_krb5.so.2()(64bit)
libk5crypto.so.3()(64bit)
libkrb5.so.3()(64bit)
libssl.so.10()(64bit)
libssl.so.10(libssl.so.10)(64bit)
libz.so.1()(64bit)
make
openssl-libs(x86-64) = 1:1.0.2k-19.el7
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
이런 식으로 확인할 수 있다.
다만 여기 출력된 건 말그대로 필요한 패키지 목록일뿐 이 리눅스에 해당 패키지들이 설치가 되어 있는지를 알려주지는 않는다. 그래서 이거 확인하는 게 큰 의미가 있나… 싶은 생각도 들긴 한다.
하지만 필요한 glibc 버전을 알 수 있다는 점에서 어느 정도 도움은 되지 않나 싶다.
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
이런 식으로 같은 so 라이브러리에 대해 여러 개의 GLIBC 버전이 보이기도 하는데 이중 가장 높은 버전의 GLIBC 버전이 설치되어 있어야 한다고 생각하면 된다. 이 경우엔 GLIBC_2.15이 설치되어 있어야 된다.
ldd 버전을 확인하면 현재 리눅스에 설치된 glibc 버전을 볼 수 있다.
[root@newhost rpm]# ldd --version
ldd (GNU libc) 2.17