2014-05-07 34 views
2

我創建RPM的%post腳本某些文件如下用rpm降級腳本

--spec文件版本1.1 -

%post 
    echo %{version} `date` > /var/info 

上面的腳本不存在舊的RPM(即版本< = 1.0)。當新的(版本1.1)rpm安裝的

我降級包如下

rpm -Uvh --oldpackage myrpm-1.0.rpm 

我想在降級轉除去在/ var/info文件被創建在/ var/info文件。

如果我包含下面的腳本,那麼它會在卸載時刪除文件,但不能升級。 ---規範文件---

%postun 
    if [ $1 =="0" ] 
     rm /var/info 
    fi 

能否請你幫我刪除的文件,如果我降級到版本1.1 <

回答

1

我不相信你只能做到這一點使用小腳本。這就是說使用scriptlets創建這樣的文件是一個壞主意(正是出於這種原因)。

你想爲這是怎麼回事:

The %ghost Directive

正如我們提到的部分稱爲%文件列表中,如果一個文件是在%文件列表中指定 ,該文件就會自動在包中包含 。有時文件應該由 包所有,但未安裝 - 日誌文件和狀態文件很好 您可能希望發生這種情況的示例。

達到此目的的方法是使用%ghost指令。通過將 此指令添加到包含文件的行中,RPM將知道 幻影文件,但不會將其添加到包中。不過它仍然需要在buildroot中。這裏有一個%ghost的例子。

blather-1.0軟件包會記錄到/var/log/blather.log文件的默認配置 。在spec文件中,/var/log/blather.log文件包含在 %files列表中。我們可以看到blather.log屬於軟件包 ,並且在軟件包被刪除時被刪除。

%安裝
觸摸$ RPM_BUILD_ROOT%{_}的localstatedir /log/blather.log
...
%文件
...
%鬼魂%{_}的localstatedir /log/blather.log
...
#rpm -qf /var/log/blather.log
blather-1.0-1
#rpm -ql blather | grep的blather.log

#轉速-e喋喋不休& & LS /var/log/blather.log
LS:/無功/日誌/胡說。日誌:沒有這樣的文件或目錄

有文件,相觸在安裝%階段將無法安裝到 /var/log/blather.log雖然會被添加到RPM數據庫, 我們可以看到查詢該文件在 軟件包列表中不可見,但由於該軟件包屬於該軟件包,因此在刪除該軟件包時將被刪除 。另外,可以使用 setperms修復%ghost文件的權限。

#LS -al /var/log/blather.log
-rw-R - R-- 1根根3448 06月18日17:00 /var/log/blather.log
#chmod 666/var/log/blather.log
#ls -al /var/log/blather.log
-rw-rw-rw- 1 root root 3448 Jun 18 17:00 /var/log/blather.log
#轉--setperms喋喋不休
#LS -al /var/log/blather.log
-rw-R - R-- 1根根3448 06月18日17:00 /var/log/blather.log

+0

感謝,但在我的情況下,如果我的文件名和目錄將不固定,將取決於其他計算包像perl(perl sitelibe)。如果最終用戶使用/ opt/custpmeper/bin/perl,則可能會有所不同。我的安裝文件應該去那裏,而不是修復,因爲我在構建環境中使用/ usr/local/bin/perl。你可以爲它解決任何解決方案,實際上我創建用戶Perl文件的鏈接。避免問題。 –

+0

我不認爲我理解你的陳述。您正在運行已安裝系統路徑中存在的perl以恢復其「sitelib」目錄,然後將打包的文件鏈接到該目錄(從您實際安裝它們的任何目錄中)以確保它們可用於默認系統perl(這可能是也可能不是正式的perl RPM)? –

2

我認爲下面%triggerin小腳本在1.1規範可以在降級刪除/var/info到1.0:

%triggerin -- %{name} < 1.1 
rm /var/info 

但RPM在升級時會觸發此%triggerin到1.1了。詳情請參閱下文:

更新:我已經寫了RPM宏用於解決方法: