RPM包中的文件

RPM包中的文件

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 身份运行确实会毁了你的一天。

相关内容