spec文件中的rpm -e {rpmName}不起作用

VG *_*gde 0 linux rpm rpm-spec

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

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

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

我们尝试了什么:

A的spec文件%pre section:

%pre
如果rpm -qa | grep B; 然后
rpm -e B;
fi
如果rpm -qa | grep C; 然后
rpm -e C;
科幻

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

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

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

编辑:让我解释一下正确的场景:

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

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

步骤:
1.我们将rpm A,B和C上传到我们的puppet服务器.
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/filesofBAndC的部分中,并从此文件夹中的rpm C中提取文件
7在下面的场景中一切正常
•首次安装
•卸载rpm A并安装更新版本的A(只需全新安装)
•升级A(B和C版本有变化)
8.问题是我们是否安装了更新的版本在没有任何版本更改的情况下,如果没有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由于某些依赖性,我们不应该修改文件夹结构(例如 ).

Eta*_*ner 5

因为这不是你应该这样做的方式,yum是事务性的,并且数据库可能在安装期间被锁定.

这样做的方法是Requires:A包的.spec文件行中列出B和C RPM,以便yum 在您要求安装包时自动为您处理A.

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

您还可以添加Conflicts条目,告知yum这两个软件包不能同时安装,并且Obsoletes条目告诉yum该软件包替换另一个软件包,因此可以将其删除.

做正确的事,yum只为你处理这一切.