【发布时间】:2023-08-03 19:53:02
【问题描述】:
我正在处理一个规范文件 (foo.spec),该文件在构建时会产生两个 RPM:foo-1-1.i386.rpm(主程序)和 libfoo-1-1.i386.rpm(所需的库文件)。 foo.spec 文件指出 foo 需要相同版本和发布级别的 libfoo:
Requires: libfoo = %{version}-%{release}
foo-1-1 安装得很好:
rpm -ivh libfoo-1-1.i386.rpm
安装依赖库,然后:
rpm -ivh foo-1-1.i386.rpm
但是由于依赖于库,升级到新版本 (foo-2-1) 不起作用:
$ rpm -Uvh libfoo-2-1.i386.rpm
error: Failed dependencies:
libfoo = 1-1 is needed by (installed) foo-1-1.i386
$ rpm -Uvh foo-2-1.i386.rpm
error: Failed dependencies:
libfoo = 2-1 is needed by foo-2-1.i386
所以我被困住了。我希望用户能够执行 rpm -Uvh 来升级 foo 包(要求他们忽略依赖项等对新手用户要求太多)。
有什么想法可以解决这个问题,以便在有新版本可用时使用 rpm -Uvh 来升级软件包的所有部分?
提前致谢。
【问题讨论】:
-
IIRC,你可以运行
rpm -Uvh foo-2.1.i386.rpm libfoo-2-1.i386.rpm同时升级两者 -
如果您想保持耦合,是否可以将所有库(libfoo 的内容)存储到 foo RPM 中?将 libfoo 的版本/发布与 foo 的当前版本联系起来有点违背了单独 RPM 的目的,因为更新一个需要您更新另一个。此外,为了使您的升级示例正常工作,您必须在更新 libfoo 之前先删除 foo-1-1。或者您可以使用 yum 来处理所有这些:
yum update foo。不过,这需要设置一个(本地)存储库。