首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RPM升级卸载RPM

RPM升级卸载RPM
EN

Stack Overflow用户
提问于 2011-09-13 16:25:07
回答 4查看 24.4K关注 0票数 28

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

谁来帮我解决这个问题。在RPM规范或rpmbuild选项中有什么我需要特别修改的吗?

EN

回答 4

Stack Overflow用户

发布于 2011-11-10 06:19:27

是的,当RPM升级时,RPM首先安装新版本的程序包,然后卸载旧版本的程序包。只有旧软件包的文件会被删除。但您的脚本(即%pre、%post、%preun、%postun)需要知道它们是在处理升级,还是只处理普通的安装或卸载。

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

代码语言:javascript
复制
Install the first time:          1
Upgrade:                         2 or higher 
                                 (depending on the number of versions installed)
Remove last version of package:  0

因此,在您的%preun中,您可能希望在删除任何服务之前检查"$1 = 0“。

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

票数 64
EN

Stack Overflow用户

发布于 2014-12-26 17:28:39

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

代码语言:javascript
复制
 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

无论安装是全新的还是升级的,都会有一个参数传递给每个脚本,该参数表示安装了不同版本的相同包的RPM数量。对于前和后脚本,在第一次安装的情况下,它将是1。对于preun和postun脚本,上次卸载时将为0。

在您的情况下,可能会发生的情况是,preun或postun脚本可能会删除对新包有用的文件。你不需要担心在postun脚本中手动删除文件,它将由RPM本身智能地处理。

参考:Upgrading & uninstalling

票数 9
EN

Stack Overflow用户

发布于 2011-10-08 04:14:48

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

rpm使用适当的值设置$1参数,以区分安装的rpm版本的数量。在全新安装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值的规范文件,我们可以有效地处理升级。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7398834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档