【问题标题】:How can I make rpm tell what libraries are provided inside it?我怎样才能让 rpm 告诉它里面提供了哪些库?
【发布时间】:2014-10-27 14:35:59
【问题描述】:

尊敬的 stackoverflow 用户,

我试图在 CentOS 6.5 中安装更新的 openssl,如下所示:

# curl -O https://www.openssl.org/source/openssl-1.0.1i.tar.gz
# tar xzf openssl-1.0.1i.tar.gz
# sed -i "s@/usr/lib@/usr/lib64@g" openssl-1.0.1i/openssl.spec
# tar czf openssl-1.0.1i.tar.gz openssl-1.0.1i
# rpmbuild -tb openssl-1.0.1i.tar.gz

但是安装生成的 rpm 会返回以下错误:

bash-4.1# rpm -Uvh /rpmbuild/RPMS/x86_64/openssl-1.0.1i-1.x86_64.rpm

error: Failed dependencies:
    libcrypto.so.10()(64bit) is needed by (installed) python-libs-2.6.6-52.el6.x86_64
    libcrypto.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6.x86_64
    libcrypto.so.10()(64bit) is needed by (installed) fipscheck-1.2.0-7.el6.x86_64
    libcrypto.so.10()(64bit) is needed by (installed) openssh-5.3p1-94.el6.x86_64
    libcrypto.so.10()(64bit) is needed by (installed) openssh-clients-5.3p1-94.el6.x86_64
    libcrypto.so.10()(64bit) is needed by (installed) git-1.7.1-3.el6_4.1.x86_64
    libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-5.3p1-94.el6.x86_64
    libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by (installed) openssh-clients-5.3p1-94.el6.x86_64
    libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) python-libs-2.6.6-52.el6.x86_64
    libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-5.3p1-94.el6.x86_64
    libcrypto.so.10(libcrypto.so.10)(64bit) is needed by (installed) openssh-clients-5.3p1-94.el6.x86_64
    libssl.so.10()(64bit) is needed by (installed) python-libs-2.6.6-52.el6.x86_64
    libssl.so.10()(64bit) is needed by (installed) libssh2-1.4.2-1.el6.x86_64
    libssl.so.10()(64bit) is needed by (installed) git-1.7.1-3.el6_4.1.x86_64
    libssl.so.10(libssl.so.10)(64bit) is needed by (installed) python-libs-2.6.6-52.el6.x86_64

因此我修改了 openssl.spec 如下:

# diff -u .openssl/openssl.spec openssl-1.0.1i/openssl.spec 
--- .openssl/openssl.spec   2014-09-03 06:49:33.621688061 +0000
+++ openssl-1.0.1i/openssl.spec 2014-09-03 06:59:10.949636692 +0000
@@ -103,6 +103,9 @@

 %install
 rm -rf $RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_ROOT/usr/lib64
+ln -sf /usr/lib64/libssl.so.1.0.0 $RPM_BUILD_ROOT/usr/lib64/libssl.so.10
+ln -sf /usr/lib64/libcrypto.so.1.0.0 $RPM_BUILD_ROOT/usr/lib64/libcrypto.so.10
 make MANDIR=/usr/man MANSUFFIX=ssl INSTALL_PREFIX="$RPM_BUILD_ROOT" install

 # Make backwards-compatibility symlink to ssleay

在创建的包中确实存在 libssl.so.10 和 libcrypto.so.10:

# rpm -iqlp /rpmbuild/RPMS/x86_64/openssl-1.0.1i-1.x86_64.rpm | grep \.10
/usr/lib64/libcrypto.so.10
/usr/lib64/libssl.so.10

但它不被识别为要提供的库:

# rpm -qip --provides /rpmbuild/RPMS/x86_64/openssl-1.0.1i-1.x86_64.rpm        
Name        : openssl                      Relocations: (not relocatable)
Version     : 1.0.1i                            Vendor: (none)
Release     : 1                             Build Date: Wed Sep  3 07:06:45 2014
Install Date: (not installed)               Build Host: 4cc54f371b7a
Group       : System Environment/Libraries   Source RPM: openssl-1.0.1i-1.src.rpm
Size        : 3705468                          License: OpenSSL
Signature   : (none)
Packager    : Damien Miller <djm@mindrot.org>
URL         : http://www.openssl.org/
Summary     : Secure Sockets Layer and cryptography libraries and tools
Description :
The OpenSSL Project is a collaborative effort to develop a robust,
commercial-grade, fully featured, and Open Source toolkit implementing the
Secure Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
protocols as well as a full-strength general purpose cryptography library.
The project is managed by a worldwide community of volunteers that use the
Internet to communicate, plan, and develop the OpenSSL tookit and its related
documentation.

OpenSSL is based on the excellent SSLeay library developed from Eric A.
Young and Tim J. Hudson.  The OpenSSL toolkit is licensed under an
Apache-style licence, which basically means that you are free to get and
use it for commercial and non-commercial purposes.

This package contains the base OpenSSL cryptography and SSL/TLS
libraries and tools.
SSL  
config(openssl) = 1.0.1i-1
libcrypto.so.1.0.0()(64bit)  
libssl.so.1.0.0()(64bit)  
openssl = 1.0.1i-1
openssl(x86-64) = 1.0.1i-1

在 Makefile* 中将 LIBCOMPATVERSIONS= 修改为 LIBCOMPATVERSIONS=10 并不能解决此问题。 所以问题是,“我怎样才能让 rpm 告诉它有 libssl.so.10 和 libcrypto.so.10?”

任何 cmet 将不胜感激,谢谢。

--mmtsk

【问题讨论】:

    标签: openssl rpm rpmbuild specifications


    【解决方案1】:

    【讨论】:

    • 感谢 cmets,我认为我们不应该将每个共享对象文件都放在提供字段中。
    猜你喜欢
    • 1970-01-01
    • 2012-08-31
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多