3

您好,提前感谢任何人都可以为这个问题提供的任何答案。

我有一个 RPM,它本质上是一个爆炸 WAR 的包装器。在我的服务器上我运行

rpm -i myRPM.rpm

这工作得很好,世界上一切都很好。然后我想使用 --relocate 触发器再次运行 rpm 以创建相同的安装。理想情况下,我希望它使用 rpm 数据库中的新条目安装应用程序,并带有增量实例或类似性质的东西。

我可以通过运行强制安装

rpm -i --force --relocate  OLDPATH=NEWPATH myRPM.rpm

然而这里的问题是旧版本不再由 rpm 管理。我能做些什么来让这项工作按我想要的方式工作吗?

4

2 回答 2

3

不。RPM 维护一个文件数据库,安装的 RPM 等。这个数据库的设计方式,一个文件(通常)只能属于 1 个 RPM,这个 RPM 将只有这个文件的 1 个副本。即,它不能在多个位置跟踪它的多个副本(--relocate)。

一般来说,重新定位 RPM 是一个非常糟糕的主意 - 如果您在应用程序中依赖它,我会认真重新考虑。

请参阅:http ://rpm.org/wiki/PackagerDocs/MultipleVersions ,了解有关如何处理此问题的一些好主意。

于 2012-06-12T21:51:43.893 回答
0

这是一个迟到的答案——但也许还不算太晚。

如果您确实需要在同一台机器上安装带有 rpm 的独特软件的多个版本,您只需使用替代 rpm 数据库即可。

mkdir $HOME/rpm 
rpm --dbpath $HOME/rpm --initdb # older version need the initialization
rpm --dbpath $HOME/rpm -i --relocate OLDPATH=NEWPATH myRPM.rpm

这种方法可用于在一台机器上热部署或蓝/绿部署守护进程。

于 2018-04-11T12:05:45.407 回答