WindowsでANTを使用してLinuxの自己抽出バッシュスクリプトを作成する
-
16-10-2019 - |
質問
ここで説明した方法を使用して、自己抽出スクリプトを生成しようとしています。 http://www.linuxjournal.com/node/1005818
ANT(Windowsで)を使用して、TARタスク(GZIP圧縮)を使用してペイロードアーカイブを作成し、次のConcatタスクを使用してスクリプトとTARを連結します。
<concat destfile="${output}/selfextract.bsx"
append="true"
eol="lf">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>
ファイルは作成されており、アーカイブデータが含まれているように見えますが、Red Hat Machineで実行すると、GZIPは「無効な圧縮データ - フォーマット違反」と不満を言います。
誰かが以前にこれに成功したことがありますか?
解決
使用しない限り fixlastline
引数(デフォルトでオフ)次に eol
使用されていません。
おそらく推測:あなたはあなたの「減圧」スクリプトの最後に追加の行があります __ARCHIVE_BELOW__
ライン。そこに余分な(空の)線を持つことはできませんし、それらのバイトをタールにパイプすることはできません。デニスが言ったように、これはEOLの問題によって引き起こされる可能性がありますが、あなたは awk
この問題を抱えているのはGNUではありません。
確認する簡単な方法は、変更することです tail
TARの代わりにファイルにリダイレクトするには、元のTARの最初の数バイトと出力TARの最初の数バイトをHexDumpして、追加(または欠落している)バイトがそこに入っているものを確認します。
最後に確認することは、あなたが設定する必要があることです。 binary
あなたのオプション concat
.
他のヒント
解決した。
アリのスクリプトでより高い、私は FixCRLF
でのタスク eol="unix"
decompress.sh。デフォルトでは、このタスクは、追加しない限り、ファイルの最後に追加の新しいラインを追加します fixlast="false"
.
また追加しました binary="yes"
concatへの属性。
スクリプトの残りの部分を含めないことに対する私の間違い、そして助けてくれてありがとう。
最終コード:
<concat destfile="${output}/selfextract.bsx"
binary="yes">
<fileset file="${installer}/decompress"/>
<fileset file="${output}/payload.tar.gz"/>
</concat>