1

バックグラウンド

いくつかの Web アプリのソース ファイルをインストール ディレクトリにコピーするだけの単純な rpm を構築しようとしています。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 仕様で明示的に定義したプロセスの一部ではありません。私の仕様ファイルは run %setup、ディレクトリを作成し、そこにファイルをコピーするだけです。抽出されたソース tarball に%setupは、そのすべてのファイルに対する適切なアクセス許可があります。作成したツリーを抽出して削除できます。これらのファイルは、ソース tarball の一部ではありません。tmpファイルは Java ファイル処理に関連していると思います。rpmbuildビルドの終わり近くでjarファイルを「再圧縮」するのに長い時間がかかりました。それが何の目的なのかわからないし、私が展開しているアプリにそれが必要かどうかも疑わしい.

質問

これを修正するために、jar ファイルの再圧縮を無効にすることはできますか? 他のアイデアはありますか?

4

2 に答える 2

1

.jar残念ながら、おそらく書き込み権限のないディレクトリが含まれているように見えるので、状況によっては…影響を受けるjar自分自身のコンテンツを抽出し、権限を変更して+w、それらを再圧縮します…:-/

于 2011-12-09T19:58:17.647 に答える
1

最も簡単な解決策は、spec ファイルに次の定義を追加して、jar の再パックを無効にすることでした。%define __jar_repack %{nil}

BRPocockの答えもうまくいくはずです。BRPocock が提案したように、jar を自分で再パックする代わりに jar の再パックを無効にした理由は、jar の再パックrpmbuildを有効にするとビルドに約 10 分かかりますが、無効にすると 1 分しかかからないためです。

于 2011-12-09T21:09:52.580 に答える