【问题标题】:Rpm Downgrade script in spec file规范文件中的 Rpm 降级脚本
【发布时间】:2014-06-24 11:51:15
【问题描述】:

我在 rpm 的 %post 脚本中创建一些文件,如下所示

--spec 文件版本 1.1--

%post
  echo %{version} `date` > /var/info

以上脚本不存在旧 rpm(即版本

我按如下方式降级包

rpm -Uvh --oldpackage myrpm-1.0.rpm

我想在降级 rpm 时删除 /var/info 文件。

如果我包含以下脚本,则它会在卸载时删除文件但不升级。 --- 规格文件---

 %postun
    if [ $1 =="0" ]
       rm /var/info
    fi

如果我降级到版本

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    我不相信您可以仅使用小脚本来做到这一点。据说使用 scriptlet 创建这样的文件是个坏主意(正是出于这种原因)。

    你想要的是:

    The %ghost Directive

    正如我们在名为 %files 列表的部分中提到的,如果一个文件是 在 %files 列表中指定,该文件将自动包含在内 在包中。有时文件应该归 包但未安装 - 日志文件和状态文件很好 您可能希望发生这种情况的案例示例。

    实现这一点的方法是使用 %ghost 指令。通过增加 这个指令到包含文件的行,RPM 会知道 幻影文件,但不会将其添加到包中。然而它仍然 需要在 buildroot 中。下面是 %ghost 的示例。

    blather-1.0 包默认记录到 /var/log/blather.log 配置。在规范文件中,/var/log/blather.log 文件包含在 %files 列表。我们可以看到blather.log属于这个包, 并在打包时将其删除。

    %安装
    触摸 $RPM_BUILD_ROOT%{_localstatedir}/log/blather.log

    %文件

    %ghost %{_localstatedir}/log/blather.log

    # rpm -qf /var/log/blather.log
    blather-1.0-1
    # rpm -ql 废话 | grep blather.log

    # rpm -e blather && ls /var/log/blather.log
    ls: /var/log/blather.log: 没有这样的文件或目录

    %install 阶段触及的文件不会被安装到 /var/log/blather.log 虽然它将被添加到 rpm 数据库中,如 我们可以从查询文件中看到,但是从 包列表,但由于它由包拥有,它将被删除 当包装被移除时。此外,还可以使用 setperms 修复 %ghost 文件的权限。

    # ls -al /var/log/blather.log
    -rw-r--r-- 1 根根 3448 Jun 18 17:00 /var/log/blather.log
    #chmod 666 /var/log/blather.log
    # ls -al /var/log/blather.log
    -rw-rw-rw- 1 根 3448 6 月 18 日 17:00 /var/log/blather.log
    #rpm --setperms 废话
    # ls -al /var/log/blather.log
    -rw-r--r-- 1 root root 3448 Jun 18 17:00 /var/log/blather.log

    【讨论】:

    • 谢谢,但在我的情况下,如果我的文件名和目录不固定,它将根据 perl(perl sitelibe)等其他包进行计算。如果最终用户使用 /opt/custpmeper/bin/perl,可能会有所不同。我的安装文件应该放在那里,而不是当我在构建环境中使用 /usr/local/bin/perl 时它会被修复。你能找到任何解决方案吗,实际上我在用户 perl 目录中创建文件链接。避免问题。
    • 我不认为我理解你的陈述。您正在运行已安装系统路径中存在的 perl 以恢复其 sitelib 目录,然后将打包的文件链接到该目录(从您实际安装它们的任何目录)以确保它们可用于默认系统 perl(可能是也可能不是官方的 perl RPM)?
    【解决方案2】:

    我认为 1.1 规范中的以下 %triggerin 脚本可以在降级到 1.0 时删除 /var/info

    %triggerin -- %{name} < 1.1
    rm /var/info
    

    但是 RPM 在升级到 1.1 时也会触发此 %triggerin。详情见下文:

    更新:我已经为解决方法编写了 RPM 宏:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2016-02-19
      • 2016-10-03
      • 2019-06-14
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多