RPM 软件包有一些奇怪的地方。列出的内容与rpm -ql
实际呈现的文件不同。例如,我下载openldap-servers-2.4.26-8.fc16.i686.rpm
并运行了一行:
rpmfile=openldap-servers-2.4.26-8.fc16.i686.rpm; diff <(rpm2cpio $rpmfile | cpio -t | sed -e 's!^\.!!g') <(rpm -ql -p $rpmfile)
rpm
它将解压后的内容rpm2cpio
与来自的输出进行比较rpm -ql
并得到:
9122 blocks
20a21,22
> /etc/openldap/slapd.conf
> /etc/openldap/slapd.conf.bak
21a24
> /etc/pki/tls/certs/slapd.pem
rpm -ql
说明包中有 3 个文件,但实际上不存在。
对此有解释吗?
答案1
RPM 软件包是使用一个.spec
文件构建的,该文件包含各个部分,这些部分告诉您rpm
在安装软件包时要做什么。您看到的文件很可能是rpm
在安装包时动态创建的openldap
。该rpm -ql
命令实际上是读取.spec
文件并准确告诉您将安装什么,而该cpio
命令只是转储存档在.rpm
.如果您真的很好奇,您可以下载openldap-2.4.26-8.fc16.src.rpm
、安装它并亲自查看该.spec
文件,它非常容易阅读。不过,要小心构建,不正确的路径加上rpmbuild
以 root 身份运行确实会毁了你的一天。