rpm打包之前会执行: /usr/lib/rpm/check-buildroot, 其逻辑为,检查将要打包的文件中是否包含buildroot,因为这只是build时候的临时目录,如果出现在打包文件中,就可能会出现问题,起检查方法简单粗暴:
1 |
grep -F "$RPM_BUILD_ROOT" |
如果包含,就会报类似如下的错误信息,然后退出
1 |
Found '/data3/rpmbuild/BUILDROOT/gdb-8.0-1.el7.centos.x86_64' in installed files; aborting |
关于check-buildroot脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
test -z "$QA_SKIP_BUILD_ROOT" || exit 0 if [ -z "$RPM_BUILD_ROOT" -o "$RPM_BUILD_ROOT" = "/" ]; then exit 0 fi tmp=$(mktemp ${TMPDIR:-/tmp}/cbr.XXXXXX) trap "rm -f $tmp" EXIT find "$RPM_BUILD_ROOT" \! \( \ -name '*.pyo' -o -name '*.pyc' -o -name '*.elc' -o -name '.packlist' \ \) -type f -print0 | \ LANG=C xargs -0r grep -F "$RPM_BUILD_ROOT" >$tmp test -s "$tmp" && { cat "$tmp" echo "Found '$RPM_BUILD_ROOT' in installed files; aborting" exit 1 } || : |
其一:
通过mktemp来创建临时文件,根本不需要自己制造随机文件名
其二:
1 |
trap "rm -f $tmp" EXIT |
保证在脚本退出后删除临时文件
其三:
1 |
test -s "$tmp" && { exit 1; } || : |
注意,这里 ” || : ” 的用法,保证test为假时脚本退出码为零