2017/04/17

二重にgzip したtar.gz が展開できない罠

いつのまにか、GNU tar が z オプションを付けなくてもいい感じに展開してくれたりしますが(いつの話だ)、 さて、file.tar.gz というファイルがあって、ふつうに tar xvf file.tar.gz とか tvf とかで展開か中味のチェックをします。これがどうやってもうまくいかずに蹴られました。

LANGを変えて二回実行しました、こんな風

$ tar xvf test.tar.gz
tar: これは tar アーカイブではないようです
tar: 次のヘッダをスキップします
tar: 前のエラーにより失敗ステータスで終了します
$
$ LANG=C tar xvf test.tar.gz
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
$

これを一旦 gunzip  して、tar xvf test.tar するとうまくいく。
しかし、再度 gzip test.tar して、tar xvf test.tar.gz すると最初と同じ結果。どうして??

途中で気を失いながら、だいぶ調べまくったところ、2010年に報告済みのこの問題と同じ。https://bugzilla.redhat.com/show_bug.cgi?id=589643

本来 test.tar.gz となるファイル作る際に、test.tar という名前で作り、再度 gzip して、test.tar.gz を作ると簡単に再現可能です。

tar cvfz test.tar test/; gzip test.tar

ですね。

原因は、二重にgzipされた tar.gz を tar が展開できないという問題。 確実に悪いのは、二重にzipしたファイルを作った人ですが...。