我正在尝试构建一个简单的rpm,它只是将一些Web应用程序源文件复制到安装目录。 Web应用程序是用Java编写的,由供应商提供(即它不是由我编写的)。
由于下面描述的错误,rpm无法构建。但是,我已经成功地为来自同一供应商的另一个基于Java的Web应用程序构建了几乎相同的rpm。除了安装路径和源文件名之类的名称之外,spec文件是相同的。
rpmbuild -v -bb --clean SPECS/web-app.spec
在尝试删除Permission 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规范中明确定义的任何进程的一部分。我的所有spec文件都运行%setup
,创建一个目录,并将文件复制到其中。在%setup
期间提取的源tarball对其所有文件具有正确的权限;我可以提取并删除它创建的树。这些文件不是源tarball的一部分。我认为tmp
文件与某些Java文件处理有关; rpmbuild
花了很长时间在构建结束时“重新打包”jar文件。我不确定具有什么目的,我怀疑我正在部署的应用程序需要它。
我可以禁用jar文件重新打包来修复此问题吗?还有其他想法吗?
答案 0 :(得分:1)
可悲的是,看起来.jar
可能包含没有写入权限的目录,因此在这种情况下......自己提取受影响的jar
的内容,更改权限+w
,以及重新压缩它们......: - /
答案 1 :(得分:1)
最简单的解决方案是通过在我的spec文件中添加以下定义来禁用jar重新打包:%define __jar_repack %{nil}
BRPocock的答案也应该有效。我禁用jar重新打包而不是像BRPocock建议的那样自行重新打包罐子的原因是因为rpmbuild
在启用jar重新打包的情况下需要花费大约10分钟来构建,但只有一分钟禁用它。