RPM构建 - 权限被拒绝

3
我有一个基于Python的SVN pre-commit脚本,它生成一个 rpmbuild .spec 文件并通过 subprocess 运行 rpmbuild -bb my.spec。目前的情况是:
1)在远程进行 SVN 提交时(通过 SSH 进行 SVN),rpmbuild 失败并显示...
error: failed to create directory %{_topdir}: /rpmbuild: Permission denied

2) 当我在 SVN 服务器本地运行 rpmbuild -bb my.spec 命令时,它成功完成。

我有一个 ~/.rpmmacros 文件...

%_topdir /tmp/rpmbuild

在执行上述#2步骤时,rpmbuild将在/tmp/rpmbuild下创建BUILDBUILDROOTRPMSSOURCESSPECSSRPMS目录,并创建一个RPM文件放在RPMS目录下。

从命令行运行rpm --showrc,输出的目录与预期相同(这也是进程成功完成的原因)。

但是,通过pre-commit运行的过程中结果不同...

命令行... -14: _topdir /tmp/rpmbuild

Pre-commit... -14: _topdir %{getenv:HOME}/rpmbuild

我怀疑这就是问题所在,但是我不知道如何解决。 我还尝试过:

1) 在my.spec中设置路径... %define _topdir /tmp/rpmbuild 结果显示权限被拒绝。

2) 在rpmbuild命令中设置路径... rpmbuild --define='_topdir /tmp/rpmbuild' 结果出现错误:error: Macro % has illegal name (%define)

非常感谢您提供的帮助,期待您的专业解决方案!


你的 pre-commit 脚本是在尝试运行 rpmbuild 吗?还是只是使用 SPECS 目录来创建 .spec 文件? - undefined
是的,如果rpmbuild失败,提交将被阻止。便宜到足够吗?我不明白。 - undefined
我很惊讶构建 rpm 所需的时间如此短,以至于可以合理地作为预提交延迟来添加。就是这样。 - undefined
这个问题肯定没有困扰住社区!是我没有提供足够的信息吗,还是提供了太多的信息,或者表达不清楚? - undefined
我觉得你不能在规范文件中设置像 _topdir 这样的东西。我认为这已经太晚了。当你尝试使用 --define 时,你的规范文件中是否仍然有 %define _topdir 这一行?你知道错误是从规范文件的哪一行开始的吗?你能在 pre-commit 钩子中运行 rpm --showrc 并查看它输出了什么吗?还有钩子中的 env 命令? - undefined
显示剩余3条评论
2个回答

1
那个错误意味着在 pre-commit 运行时,$HOME 没有被设置(因此你的 .rpmmacros 文件无法使用,并且 ${getenv:HOME} 的值为空字符串)。
我不知道为什么会出现这种情况(可能是 svn 的变动),但似乎就是这个问题。

0

缺失的部分是文件...

/etc/rpm/macros

我创建了/etc/rpm目录,并在其中创建了macros文件,填充了我所需的%_topdir...代码。这样做之后,_topdir可以在rpmbuild中使用,我的进程顺利完成。通过运行strace发现了这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接