2017-03-08 53 views
0

我創建一個安裝到/ opt/mypackage中,其中的/ opt/mypackage的是使用在RPM規範文件中設置一個搬遷的RPM「前綴中:/ opt/mypackage的」前綴轉移居部分

如果RPM建造和安裝在RHEL5(RPM版本4.4.2.3)以下命令的工作:

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 

但是reloc ating/opt/mypackage正常工作。

注意:rpm -i --prefix =/opt/mkpackage在兩種情況下均正常工作。

所以我正確地認爲RPM sec中的「Prefix:」應允許重定位路徑的任何前綴?例如前綴:/opt/mypackage允許搬遷/opt/mypackage/opt/

什麼可能我是錯的做或可能這是一個錯誤?

我注意到,如果我使用--badreloc一切正常。爲什麼這裏需要badreloc?

回答

0

所有--badreloc所做的是覆蓋警告消息,如果前綴:標記中的不是的路徑被重新定位。

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

0

我相信你需要爲你想改變的每條路徑添加一個「前綴」行。

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

的 「目錄」 通常是這樣的 「的/ usr」, 「在/ usr /本地」,或 「/選擇」。文件列表中的每個文件都必須以該前綴開頭。對於 示例,如果您有「前綴:/ usr」,而您的文件列表包含 「/etc/foo.conf」,則構建將失敗。造成這種情況的解決方法是把

Prefix: /usr 
Prefix: /etc 

到規範文件,以便在/ usr和/ etc目錄可以被重新定位 分開時,這個包是安裝 。