RPM升级卸载RPM

Vid*_*dya 28 specifications upgrade rpm rpmbuild

我正在升级我们的项目RPM.问题是当我从projectname-1.0-0升级到projectname-1.0-1时,它首先安装新项目并卸载旧项目,从整体上看,它完全删除了我的项目.我在升级时使用了"vv"选项,输出显示安装完成后卸载.

有人请帮忙解决这个问题.有什么我应该在RPM规范或rpmbuild选项中专门更改?

Chr*_*ian 63

是的,当RPM升级发生时,RPM首先安装新版本的软件包,然后卸载旧版本的软件包.仅删除旧包的文件.但是你的脚本(即%pre,%post,%preun,%postun)需要知道他们是在处理升级还是只是简单的安装或卸载.

rpm命令会将一个参数传递给脚本,即$ 1,这是安装的软件包版本数量的计数.下表(来自Eric Foster-Johnston的RedHat RPM指南)提供了可能值的示例.

Install the first time:          1
Upgrade:                         2 or higher 
                                 (depending on the number of versions installed)
Remove last version of package:  0
Run Code Online (Sandbox Code Playgroud)

因此,在你的%preun中,你可能想要在删除任何服务之前检查"$ 1 = 0".

有关更多信息(以及更好的表格),请参阅:http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html


avg*_*598 7

升级RPM软件包时,脚本按以下顺序执行:

 1. %Pre of new package
     copy in files for new package
 2. %Post of new package
 3. %Preun of old package
     remove files of old package
 4. %Postun of old package
Run Code Online (Sandbox Code Playgroud)

无论安装是新安装还是升级,都会向每个脚本传递一个参数,该参数表示安装了具有不同版本的相同软件包的RPM数.对于前置和后置脚本,首次安装时它将为1.对于preun和postun脚本,上次卸载时它将为0.

在您的情况下可能发生的事情是preun或postun脚本可能正在删除对新包有用的文件.您不必担心postun脚本中的手动文件删除,它将被智能处理为RPM本身.

ref:升级和卸载


Ash*_*van 5

是.在rpm安装期间,将调用%install和%post脚本.成功安装后,将调用%preun和%postun脚本以卸载以前版本的rpm.如果处理不当,这些%preun和%postun脚本可能会操纵%install和%post脚本带来的更改.

rpm使用适当的值设置$ 1参数,以区分安装的rpm版本数.在newname安装projectname-1.0-0期间,将调用%install和%post脚本,并将$ 1设置为1,表示这是唯一的活动版本.当升级到projectname-1.0-1时,将调用%install和%post脚本,并将$ 1设置为2.之后,将调用%preun和%postun脚本,并将$ 1设置为1,以便清除projectname的内容-1.0-0.因此,通过基于$ 1值编写spec文件,我们可以有效地处理升级.