1

背景

我正在尝试构建一个简单的 rpm,它只是将一些 Web 应用程序源文件复制到安装目录。Web 应用程序是用Java 编写的,由供应商提供(即不是我编写的)。

由于下述错误,rpm 无法构建。但是,我已经成功地为来自同一供应商的另一个基于 Java 的 Web 应用程序构建了几乎相同的 rpm。除了安装路径和源文件名之类的名称之外,规范文件是相同的。

问题

rpmbuild -v -bb --clean SPECS/web-app.specPermission denied它尝试删除{BUILDROOT}/web-app-1.0/tmp.

我检查了rpmbuild无法删除的文件的权限。下面的一些例子:

-r--r--r--. 1 signer signer  1203 Jan 13  2006 Adler32.class
-r--r--r--. 1 signer signer 19498 Jan 13  2006 Deflate.class
-r--r--r--. 1 signer signer   628 Jan 13  2006 Deflate$Config.class
-r--r--r--. 1 signer signer  8673 Jan 13  2006 InfBlocks.class

他们拥有我的构建用户 ( signer) 的正确所有权和组,但没有写入权限。

这些文件不是我在 rpm 规范中明确定义的任何进程的一部分。我的规范文件所做的就是运行%setup、创建一个目录并将文件复制到其中。在此期间提取的源 tarball%setup对其所有文件都具有正确的权限;我可以提取和删除它创建的树。这些文件不是源 tarball 的一部分。我认为这些tmp文件与一些Java文件处理有关;rpmbuild在构建结束时花了很长时间“重新打包” jar 文件。我不确定它有什么用途,我怀疑我正在部署的应用程序是否需要它。

问题

我可以禁用 jar 文件重新打包来解决这个问题吗?还有其他想法吗?

4

2 回答 2

1

可悲的是,看起来.jar可能包含没有写权限的目录,所以在这种情况下......jar自己提取受影响的内容,更改权限+w,然后重新压缩它们...... :-/

于 2011-12-09T19:58:17.647 回答
1

最简单的解决方案最终是通过在我的规范文件中添加以下定义来禁用 jar 重新打包:%define __jar_repack %{nil}

BRPocock 的回答也应该有效。我禁用 jar 重新打包而不是像 BRPocock 建议的那样自己重新打包 jar 的原因是因为rpmbuild启用 jar 重新打包需要将近 10 分钟的时间来构建,但禁用它只需一分钟。

于 2011-12-09T21:09:52.580 回答