rpm重定位部分前缀

时间:2017-03-08 12:02:47

标签: rpm rpmbuild rpm-spec

我创建安装到/ opt / mypackage的RPM,其中/ opt / mypackage是RPM规范文件中的重定位集,使用"前缀:/ opt / mypackage"前缀

如果在RHEL5(RPM版本4.4.2.3)上构建并安装了RPM,则以下命令有效:

rpm -i --relocate /=`pwd`/ mypackage.rpm
rpm -i --relocate /opt=`pwd`/opt mypackage.rpm
rpm -i --relocate /opt/mypackage=`pwd`/opt/mypackage mypackage.rpm

但是,如果RPM是在RHEL7(RPM版本4.11.3)上安装的,那么就会出现问题:

path / in package <mypackage> is not relocatable
path /opt in package <mypackage> is not relocatable

但重定位/ opt / mypackage正常工作。

注意:rpm -i --prefix = / opt / mkpackage在这两种情况下都能正常工作。

我是否正确相信&#34;前缀:&#34;在RPM秒应该允许重定位路径的任何前缀?例如前缀:/opt/mypackage允许重新定位/opt/mypackage /opt/

我可能做错了什么或者这可能是个错误?

我注意到如果我使用--badreloc一切正常。为什么这里需要badreloc?

2 个答案:

答案 0 :(得分:0)

如果重定位了前缀:标记中 NOT 的路径,那么--badreloc所做的就是覆盖警告消息。

否则* .rpm中的所有路径都是可重定位的。

答案 1 :(得分:0)

我认为您需要为要更改的每个路径添加“前缀”行。

根据http://ftp.rpm.org/api/4.4.2.2/relocatable.html

  

“dir”通常类似于“/ usr”,“/ usr / local”或者   “/选择”。文件列表中的每个文件都必须以该前缀开头。对于   例如,如果您有“前缀:/ usr”并且您的文件列表包含   “/etc/foo.conf”,构建将失败。解决这个问题的方法是放

Prefix: /usr
Prefix: /etc 
     

进入spec文件,以便可以重定位/ usr和/ etc目录   这个包是分开的   安装。