RPM 仅安装在 AWS ec2 redhat 实例上

RPM to be installed only on AWS ec2 redhat instances

我正在尝试构建一个 RPM,它只能安装在 AWS EC2 redhat 实例上,不能安装在其他环境上。

我目前不知道如何将其仅限于 aws ec2 实例。谁能帮忙分享一下如何处理这种情况的想法。

Red Hat 的 RPM 不允许依赖于环境属性。其他 RPM 变体可以。使用 YUM 插件也许可以实现类似的功能。

一般来说,这种依赖关系不是一个好主意,因为它会阻止在不具有目标系统的确切属性的暂存系统上创建系统映像(例如,暂存系统可能不是 AWS 系统)。

您必须找到该安装所特有的文件,然后将其添加到您的 Requires 标签中,例如/etc/redhat-release-aws 之类的。如果那个文件不存在,它就不会安装,但是像 yum 这样的东西也不能帮助你,它不会,例如,说 "This RPM requires AWS." 它只会告诉用户缺少文件。

如果不是特定文件,您可以 编写脚本并将其放入%pre 部分。没有 AWS,我会相信有一个命令可以 运行 调用 is_aws;您可以将其替换为“grep -iq aws /etc/os-release”之类的内容;任何 return true/false.

if is_aws; then
  true # do nothing
else
  echo "This RPM requires AWS!" 1>&2
  false
fi

我 90% 确定 %pre scriptlet 是 运行 在“set -e”模式下 false 会导致安装失败。 STDOUT 在非详细模式下被忽略,因此您需要写入 STDERR.