4

我想在将在部署 RPM 的地方运行的规范文件中嵌入的脚本上运行ShellCheck 。我有 .spec 片段,例如,

%setup -q
cat > ./example.sh << EOF
#!/bin/sh
echo "example"
EOF

除了挂钩,

%post
#!/bin/sh
echo "Hello"

有没有办法以编程方式提取这些 shell 片段来运行像 ShellCheck 这样的脚本分析工具?像也许rpmbuild --save-temps或像这样的一些概念?还是每个脚本都需要被已知文本绑定,以便我可以使用流工具(grep、、、awksed)?

我有大量我不想修改的规范文件。例如检查安全相关项目的脚本等,而无需解析规范文件。搜索bison + spec给出了错误的概念,我认为您需要解析 RPM 宏和许多其他机器;或者语法比我想象的更简单?

4

1 回答 1

1

我最近也一直在考虑为我的一些 RPM 执行此操作。

您可以从规范文件本身使用 python 获取%prep、 '%build' 、%install等部分。

CentOS 5 代码:

import rpm

ts = rpm.ts()

spec = ts.parseSpec("package.spec")

for section in ['build', 'clean', 'install', 'prep']:
    try:
        print '%s' % (getattr(s, section,)())
    except:
        pass

CentOS 6 代码:

import rpm

spec = rpm.spec('package.spec')

for section in ['build', 'clean', 'install', 'prep']:
    if hasattr(spec, section):
        print '%s' % (getattr(spec, section),)

似乎没有办法(在 CentOS 5 或 6 中)获取 pre/post/etc 的内容。虽然通过 python 编写脚本。

因此,您可能需要将它们从构建的 RPM 中取出,rpm -qp --scripts然后将该输出拆分为临时文件并对其运行 shellcheck。

于 2015-04-21T03:53:55.277 回答