spec文件中的rpm -e {rpmName}不能正常工作

时间:2015-11-04 14:11:43

标签: linux rpm rpm-spec

场景:有3个rpms A,B和C.

当我们安装rpm A时,我们正在安装rpm B和C.所以第一次安装工作正常。当我们在升级过程中安装较新版本的rpm A时,我们要删除rpm B和C由先前的rpm A安装。

要求:在安装新的rpm A之前,请检查是否安装了B和C.如果是,请卸载B和C.因此新的rpm A可以安装新的rpm B和C.

我们尝试了什么:

A&#39的规范文件前部分:

  

%的预
  如果rpm -qa | grep B;然后
      rpm -e B;
  科幻
  如果rpm -qa | grep C;然后
      rpm -e C;
  网络

我们正在使用傀儡。当我们运行puppet agent -t --debug时,在安装rpm A之前,它会被挂在下面的线上!

  

调试:执行' / usr / bin / yum -d 0 -e 0 -y安装A'

知道为什么我们无法卸载这些rpms吗?

编辑:  让我解释一下正确的情况:

它是一个遗留代码,我们正在修复升级期间发生的问题!

在木偶中,我们已经提到如果我们安装rpm A,请确保存在rpm B和C.

步骤:
1.我们将rpm A,B和C上传到我们的木偶服务器 2.在我们的木偶客户端中运行puppet agent –t 3.它安装所有的rpms
4. Rpm A的.spec文件:在%pre部分他们正在rm –rf /m/n/current部分,在%install部分他们正在mkdir /m/n并在此文件夹中提取rpm A的内容。<登记/> 5. Rpm B的.spec文件:在%install部分,他们正在mkdir /m/n/current/filesofBAndC并从此文件夹中的rpm B中提取文件
6. Rpm C的.spec文件:在%install部分,他们正在执行mkdir /m/n/current/filesofBAnd C并从此文件夹中的rpm C中提取文件
7.在下面的场景中一切正常 •首次安装
•卸载rpm A并安装较新版本的A(除了全新安装) •升级A(B和C版本有变化)
8.问题是如果我们在没有任何版本更改的情况下安装较新版本的A(有足够的先前版本的A)而没有在rpm B和C中进行任何版本更改,它将仅安装rpm A(因为rpm B和C中没有版本更改) 。在rpm A安装期间,我们删除了文件夹/ m / n / current,这意味着我们的/ m / n / current / filesofBAndC也被删除了。
    删除文件夹filesofBAndC正在创建问题。因此,如果我们在安装rpm A之前卸载rpm B和C,puppet将在安装rpm A期间再次安装这些rpms,并且将使用所需文件再次创建/m/n/current/filesofBAndC

由于某些依赖性,我们不应修改文件夹结构(如/m/n/filesofBAndC)。

1 个答案:

答案 0 :(得分:5)

因为这不是你应该如何做到这一点而且yum是事务性的,并且数据库可能在安装期间被锁定。

执行此操作的方法是在Requires:包的A文件的.spec行列出B和C RPM,以便yum处理此当您要求它安装A包时,会自动

此外,如果您有特定的版本要求,也可以在Requires行中包含这些要求,yum将为您检查(并强制执行这些要求)。

您还可以添加Conflicts条目,告诉yum这两个软件包无法同时安装,Obsoletes条目告诉yum此软件包替换其他包,因此可以将其删除。

正确地完成所有这些并且yum只为你处理这一切。