2012-03-01 3 views
5

実行中のJavaプロセス(デーモン)があります。このプロセスはサービスのように使用されます。このサービスでは、署名付きのzipアーカイブを信頼できるサーバーからダウンロードできます。 ZIPアーカイブを解凍した後、 "unpacked"フォルダにバイナリを実行します。UNIXでJavaを使って何かをデプロイして実行してください。

このバイナリは実行できません(ファイルモードでは 'x'はありません)...私はそれをJavaで設定することは可能ですが、私は一般的な方法が必要です。

いい方法で展開を行う方法はありますか?

(はい、それは、Javaであることが必要)

基本的に私は、私はZIPアーカイブを解凍した後、Unixのファイルモードビットを復元します。これを行うことができるJava Libはありますか?

+0

いい意味ではどういう意味ですか?アーカイブに入るファイルを制御できたら、バイナリが適切なモードを持っていることを確認してから、それを圧縮してください。 – Perception

+0

@Perception:すべてのzip圧縮器でUnixファイルモードビットの格納がサポートされているわけではありません。そして、すべてのジッパーデコンプレッサーが復元をサポートするわけではありません... – thkala

+0

@thkalaそれは私が必要なものです。これを行うことができるJava Libはありますか? – alexvetter

答えて

3

Javaアプリケーションからcallchmodコマンドを簡単に入力して、その紛失番号xビットを追加することができます。 chmodは、実行可能ファイル(x)のビットとしてUnix上で標準として提供されています。

straight from Javaとすることもできます。

ただし、解凍時に実行可能ビットを設定したままにしたい場合は、おそらくJava解凍ライブラリを使用しないでください。 Unix unzipコマンドを使用してアーカイブの解凍を試してください。これは、しばらくの間、Unixファイルモードビットの保存と復元をサポートしています。あなたのUNIXベンダーがそれを持っていなければ、the sourceから得ることができます。

+1

申し訳ありませんが、あなたは助けていません。 Javaから実行可能フラグを設定することができます。すべてのバイナリについて知りませんのでフラグを設定できません。一番いいのは、アーカイブを "解凍"し、フラグがすでに設定されていることです。 – alexvetter

+0

'unzip -X'はGID/UIDを保持します。問題は、jarsigner(署名に使用するツール)がフラグを保持していないことです。だから、それは箱の外で動作しません。私はすべての実行可能ファイルを含むmetainfofileを追加することを考えています。 '見つける。 -executable -type f 'はそれを助けることができます。 – alexvetter

+0

@alexvetter:アプリケーションがアーカイブを受け取るまでに、実行可能ビットはすでに失われています: -/ – thkala

0

tarでファイルをパックし、オプションで圧縮すると、パッキング前のアクセス権がそのまま維持されます。開梱するときは--preserve-permissionsを使用してください。

関連する問題