【问题标题】:How to prevent parallel installation of multiple version of an RPM?如何防止并行安装多个版本的 RPM?
【发布时间】:2015-04-30 08:13:10
【问题描述】:

我正在创建一个 RPM 文件(使用 rpmbuild)。目前可以并行安装多个版本的 RPM(显然 RPM 不会阻止这种情况),但这会导致问题,因为我的 %pre%post 脚本会创建和删除一些文件,因此多个并行安装会与彼此。

在构建 RPM 时有没有办法防止这种并行安装?

该软件包适用于 CentOS (RHEL) 6。

【问题讨论】:

    标签: linux centos rpm rhel rpmbuild


    【解决方案1】:

    编写可以处理此问题的 %pre%post 脚本(为它们提供一个参数,指示在事务完成时将安装多少个版本的包)。

    或者,您可以尝试与您自己的软件包的所有旧版本冲突。这可能行得通。

    【讨论】:

    • 我现在已经为所有旧版本和所有新版本的包添加了冲突。不确定这是否“正确”,但它似乎工作正常。
    • 你不应该需要前向冲突,因为新包中的旧版本冲突应该可以处理......我认为。但我不认为在两个方向上发生冲突应该不会造成伤害。
    • 你能举个例子吗?
    【解决方案2】:

    没有必要阻止并行安装,因为 RPM 数据库(或 YUM)在发出并发请求时会很忙。但是,如果您的包创建的文件不属于“%files”列表,那么您必须提供安装、卸载和升级。

    对于升级,您需要一致的版本控制方案:“较新”的软件包必须具有“较高”的版本号。鉴于此,您的规范文件必须提供检查不同模式(安装、卸载和升级)的规定。 RPM upgrade uninstalls the RPM 中的详细信息似乎缺少具体示例。

    【讨论】:

    • “并行”是指我可以在同一系统上同时安装同一 RPM 的两个版本。也就是说,我先执行“rpm -i mypackage-1.0-1.x86_64.rpm”,然后执行“rpm -i mypackage-2.0-1.x86_64.rpm”,然后安装这两个包。我的软件无法轻松应对这种情况,所以我想从一开始就阻止它。
    • 在 CentOS 6 中,您可以使用 rpmyum 安装软件包。我记得rpm 有可能最终安装多个版本。但是,使用 yum(以及一致的版本控制方案 - 您没有提供详细信息)我没有看到 yum 导致多个版本。
    • 这里有几个链接讨论尝试安装多个版本时遇到的问题:stackoverflow.com/questions/22425839/…serverfault.com/questions/106993/…(只要包具有相同的 nameyum可以确定版本是相关的,它会根据版本号决定哪个“更新”)。此链接显示有人使用不同的包名称来获取多个版本:lists.baseurl.org/pipermail/yum/2007-May/020910.html
    • yum可用时,它是首选的安装方法,以避免使用的不同数据库之间的混淆。
    • @oliver:下次安装不应该是升级包而不是安装吗?即:rpm -Uvh mypackage-2.0-1.x86_64.rpm
    猜你喜欢
    • 2018-07-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    相关资源
    最近更新 更多