2012-12-31 144 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知道在不久的将来这个拟议的计划没有可能发挥作用。