【问题标题】:How to abort the installation of an rpm package if some conditions are not met in specfile?如果 specfile 中不满足某些条件,如何中止安装 rpm 包?
【发布时间】:2023-08-14 15:40:01
【问题描述】:

还有一些Requires 标签不能满足的东西。 所以我写了一个脚本来验证这些东西,但我应该把它们放在哪里? 如果没有找到,那么我想退出安装,提示用户在尝试再次安装此 rpm 之前执行这些步骤。

%install 标签中写入 exit 1 无法使用 rpmbuild 构建 rpm。 说%install has a bad exit code.

编辑:让我举个例子。我最初想要测试的是是否存在 Oracle Java 6。如果没有,则提供 Java6 的路径。如果用户未能提供...退出 RPM。不允许使用更高级别的 Java,如果没有 Java,安装不应成功。如果用户不想安装 java rpm 包,则不能将其放入 Requires 中。

希望我明白了我的意思。

【问题讨论】:

  • 您需要提供更多详细信息,以便有人回答这个问题。
  • 嗯,这里有什么歧义,请您评论一下,以便我可以编辑
  • 你要测试的条件;有些可能在 %pre 和 %post 中执行,大多数不能并表明问题出在其他地方
  • @guido 完成。如果仍然不清楚,请更新。

标签: java linux rpm rpmbuild rpm-spec


【解决方案1】:

您可以将 %pre 部分用于此类任务。

%pre 脚本在要安装软件包之前执行。 这是罕见的包,需要在之前完成任何事情 安装;构成 Red Hat Linux 的 350 个软件包中没有一个 Linux 4.0 使用它。

一些入门指南;脚本内容(未在 %pre 部分中使用)来自 jpackage-utils,您会在那里找到其他一些很好的脚本示例:

  %pre
  # try to find jvm from java command

  # try javac first, or we might get the location of the jre instead - djw
  java=`which javac 2>/dev/null || :`

  # if we don't have the jdk, then maybe we have the jre - djw
  if [ -z "$java" ] ; then
    java=`which java 2>/dev/null || :`
  fi

  if [ -n "$java" ] ; then
    while [ -h "$java" ] ; do
      java=`readlink $java 2>/dev/null`
    done
    return
  fi

  echo "Can't find java virtual machine, aborting."
  exit 1

【讨论】: