我正在升级我们的项目RPM。问题是,当我从projectname-1.0-0升级到projectname-1.0-1时,它首先安装新项目并卸载旧项目,从总体上看,这会完全删除我的项目。我在升级时使用了"vv“选项,结果显示卸载是在安装后完成的。
谁来帮我解决这个问题。在RPM规范或rpmbuild选项中有什么我需要特别修改的吗?
发布于 2011-11-10 06:19:27
是的,当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因此,在您的%preun中,您可能希望在删除任何服务之前检查"$1 = 0“。
有关更多信息(以及更好的表格),请参阅:http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.html
发布于 2014-12-26 17:28:39
升级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无论安装是全新的还是升级的,都会有一个参数传递给每个脚本,该参数表示安装了不同版本的相同包的RPM数量。对于前和后脚本,在第一次安装的情况下,它将是1。对于preun和postun脚本,上次卸载时将为0。
在您的情况下,可能会发生的情况是,preun或postun脚本可能会删除对新包有用的文件。你不需要担心在postun脚本中手动删除文件,它将由RPM本身智能地处理。
参考:Upgrading & uninstalling
发布于 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值的规范文件,我们可以有效地处理升级。
https://stackoverflow.com/questions/7398834
复制相似问题