2012-12-31 176 views
0

我試圖從一個RPM安裝多個RPM install.i已經使spec文件進入%post部分我使用命令安裝另一個rpm。從rpm安裝RPM

%post 
rm -f /var/lib/rpm/__db.0* 
rpm --rebuilddb 
rpm -ivh xyz.rpm 

但是當主RPM安裝是它會得到install.so它提供了以下警告鎖執行不釋放的另一個轉速和停止安裝process.and等待無限。 所以任何解決方案。

+2

這是「不這樣做」的經典案例,尤其是在RPM本身處於活動狀態時垃圾RPM數據庫。不要在rpm周圍工作。使用正確的需求:標籤,如@Forrest所述。 –

回答

0

S.O不會讓我評論追加到以前的答案,但我想強調一點:

沒有辦法你做一個rpm-I%後期間是去工作的計劃。在架構上,它不會因爲你提到的確切原因而發生:rpm會鎖定RPMdb,並且它會這樣做以防止競爭條件和一些損壞。所以你需要找到另一個解決方案。

有一個解決方案,到目前爲止,需求:位是一個。我知道你想在當前的xyz rpm之後安裝xyz rpm,但是之後沒有安裝,因爲我們使用'go to'而不是'from',因此沒有post-require。

所以,使用Requires:標籤。如果您的訂單不完美,只需根據xyz.rpm取決於您的abc.rpm,或取決於abc.rpm取決於xyz.rpm,則構建第三個「虛擬」RPM,其不提供有效載荷,但需要它們兩個:至少,這最後一個解決方案將確保安裝這兩個軟件包。

雖然其他人都推薦了Requires:標籤,並且在%post中討論了rpm-i的替代方案,但是我沒有發現任何人可以直接在%post中使用rpm。並且我想確保OP知道在不久的將來這個擬議的計劃沒有可能發揮作用。