gpt4 book ai didi

linux - rpmbuild:目录的共同所有权

转载 作者:太空狗 更新时间:2023-10-29 11:13:29 28 4
gpt4 key购买 nike

假设我为 myprog1 和 myprog2 构建的包要安装在/usr/lib/mysystem/myprog1/和/usr/lib/mysystem/myprog2/中

根据一些发行版的文档,例如 OpenSUSE,两个包都必须拥有共享目录。但是在 .spec 文件中是如何完成的呢?以下是正确的吗?

%files
/usr/lib/mysystem

或者我需要做什么

%files
%dir /usr/lib/mysystem
/usr/lib/mysystem/myprog<1|2>

最佳答案

通常只有一个包拥有一个给定的目录。在一个典型的系统上,会有一个包,如“文件系统”,它可能拥有诸如 /bin 之类的东西。对于 Red Hat 和 OpenSUSE 上的 filesystem 包,该包拥有 /usr/bin 但没有该目录中的任何文件。

你可以做到这一点,方法是制作一个包装器包,它拥有在你的应用程序之间共享的东西,并使其成为安装到这些目录中的应用程序的依赖项 (Requires)。

要查看什么实际上拥有 rpm 的东西,您可以使用 -qf 选项,例如,

rpm -qf /usr/lib/mysystem/myprog

该命令适用于目录和文件。

%dir%files 的文档是决定如何让一个包拥有一个目录的起点。在 Maximum RPM: Taking the Red Hat Package Manager to the Limit , 第 13 章 Directives For the %files list ,它说:

As we mentioned in the section called The %files List, if a directory is specified in the %files list, the contents of that directory, and the contents of every directory under it, will automatically be included in the package

The way to get around this, is to use the %dir directive. By adding this directive to the line containing the directory, RPM will package only the directory itself, regardless of what files are in the directory at the time the package is created. Here's an example of %dir in action.

%dir /usr/blather

因此建议的后者遵循文档。但是,为了检查语法是否正确(即使 rpm 恰好构建),最好检查路径名列表。

调查 Fedora 21 以查找 rpm -qf 显示相同目录的软件包,找到了多个。例如,initscriptschkconfig使用 %dir 指令来执行此操作:

%dir /etc/rc.d
%dir /etc/rc.d/rc[0-9].d
%dir /etc/rc.d/init.d

initscripts 规范文件中,和

/etc/rc.d
/etc/rc.d/init.d
/etc/rc[0-6].d
/etc/rc.d/rc[0-6].d

chkconfig 规范文件中。但是,initscripts 包需要/sbin/chkconfig,这是由chkconfig 包提供的。由于这种依赖性,chkconfig 是该目录的实际所有者。

关于linux - rpmbuild:目录的共同所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30067649/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com