【问题标题】:RPM spec scripting compliance and how to test itRPM 规范脚本合规性以及如何测试它
【发布时间】:2014-06-13 11:06:08
【问题描述】:

我在 rhel5 和 rhel6 上为 rpm 维护了一些规范文件,但我总是在规范文件中进行更复杂的测试。我经常放弃在安装时在 rpm 中执行的 perl 或 bash 脚本中编写配置逻辑。

现在我在这个简单的不相等测试中挣扎,我相信脚本逻辑接近 bash,但至少有一些适用于 bash。如果我删除它,如果测试一切正常。

echo "verifying base:%{smm_public_base} against %{smm_public}";
# if smm_public is not the same as smm_public_base we must sublink
if [ %{smm_public_base} -ne %{smm_public} ]; then
  echo "smm_public_base:%{smm_public_base} is not the same as smm_public:%{smm_public} so we need to soflink it"
  if [ -L %{smm_public_base ]; then
    rm -rf %{smm_public_base}
  fi
  ln -s %{smm_public} %{smm_public_base} || :
fi 

我试过了:

if [ %{smm_public_base} != %{smm_public} ]; then

if [ "%{smm_public_base}" != "%{smm_public}" ]; then

那些给出这样的错误

verifying base:/opt/s3public against /opt/app/s3public
/var/tmp/rpm-tmp.29711: line 60: syntax error: unexpected end of file
error: %post(secana_smm2_SEB_PROD-r250-225.x86_64) scriptlet failed, exit status 2

所以我一直在寻找关于如何在规范文件中编写脚本逻辑的入门书,但除了在 Fedora RPM guide

这里有一些最佳实践的人。 Opensuse 说看一个 redhat 包。

谢谢

【问题讨论】:

  • 如果是该错误消息中提到的脚本的第 60 行?脚本是在那之后结束还是继续如你所料?我不明白这些内容如何成为问题,这听起来更像是其他东西以某种方式阻碍了脚本。你能包括错误抱怨的那个脚本的内容吗?
  • 第 60 行是上面的行,如果我取消它的注释并且它的 'fi' 一切正常。我的问题是这在 bash 中有效(如果我将变量更改为对 bash 更友好的变量)。它在 rhel5.10 上
  • 您建议使用-ne 测试您的逻辑不起作用,但脚本可以,并且使用!= 测试您会得到EOF 的语法错误?如果您完全注释掉该测试,内部链接代码可以正常工作吗? -ne 用于数字,因此它不适用于字符串也就不足为奇了(尽管我会想到它应该在输出中给你一个错误)。
  • 所有建议都给出相同的错误。我试过删除 2 级 ifs。但同样的错误。这么简单的条件竟然失败了,我觉得很奇怪。
  • 即使没有 if 行,您也会收到 EOF 语法错误?它在我假设的那一点上把它扔到rmln 线上?请从/var/tmp 发布错误消息中提到的脚本。

标签: rpm rhel


【解决方案1】:

我发现了错误,如果你注释掉if循环,不知道为什么它会起作用。

if [ -L %{smm_public_base ]; then

这是缺少一个一直缺少的闭包..

if [ -L %{smm_public_base} ]; then

很抱歉浪费了您的时间,但为什么要在第 60 行而不是第 63 行投诉呢?

【讨论】:

    猜你喜欢
    • 2016-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2019-06-14
    相关资源
    最近更新 更多