WindowsでANTを使用してLinuxの自己抽出バッシュスクリプトを作成する

StackOverflow https://stackoverflow.com/questions/4759777

  •  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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top