1

ここで説明されている方法を使用して、自己解凍スクリプトを生成しようとしています: 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 マシンで gzip を実行すると、「無効な圧縮データ -- フォーマット違反」というメッセージが表示されます。

これまでに成功した人はいますか?

4

2 に答える 2

1

fixlastline引数 (デフォルトではオフ)を使用しない限り、使用eolされません。

おそらく推測: 行の後に「解凍」スクリプトの最後に余分な行があります__ARCHIVE_BELOW__。そこに余分な(空の)行を含めることはできません。そうしないと、それらのバイトを tar にパイプします。デニスが言ったように、これはeolの問題によって引き起こされる可能性がありますが、awkこの問題が発生するにはGNUではない.

確認する簡単な方法はtail、tar の代わりにファイルにリダイレクトするように変更し、元の tar の最初の数バイトと出力 tar を 16 進ダンプして、余分な (または不足している) バイトがそこにあることを確認することです。

binary最後に確認することは、 でオプションを設定する必要があるかどうかですconcat

于 2011-01-21T17:42:27.787 に答える
1

解決しました。

ANT スクリプトの上位では、decompress.shでFixCRLFタスクを使用していました。eol="unix"デフォルトでは、このタスクは、追加しない限り、ファイルの最後に余分な改行を追加しますfixlast="false"

binary="yes"concat にも属性を追加しました。

残りのスクリプトを含めなかったのは私の間違いでした。助けてくれてありがとう。

最終コード:

<concat destfile="${output}/selfextract.bsx" 
        binary="yes">
    <fileset file="${installer}/decompress"/>
    <fileset file="${output}/payload.tar.gz"/>
</concat>
于 2011-01-21T20:49:21.050 に答える