Solaris 10 で md5.sum を使用して .tar.gz を正しく抽出する方法

Solaris 10 で md5.sum を使用して .tar.gz を正しく抽出する方法

gccミラーサイトからダウンロードしたgcc-4.9.0.tar.gzを解凍しようとしています。gunzipする前にmd5署名を確認するために、

digest -a md5 -v gcc-4.9.0.tar.gz

それは

md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8

これは、ソースからダウンロードしたディレクトリ内の md5.sum と一致します。

そして私は

gzip -dc gcc-4.9.0.tar.gz | tar xvf -

抽出は始まったが、すぐに終了した。

 tar: directory checksum error

私はまた、このようにgunzipとuntarを別々に試しました

 gunzip gcc-4.9.0.tar.gz

それから

tar -xvf gcc-4.9.0.tar

しかし、チェックサムエラーで終了しました。

どうすればこれを解決できますか?

答え1

tar アーカイブに欠陥があるか、標準に準拠していないようです。

なお、アーカイブを bz2 イメージとして取得しましたが、使用に問題は発生しませんでしたbzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -

解凍されたアーカイブの md5 チェックサムは 6b8f599053a52e7c2076485d1ad3e747 です。

現在、.gz ファイルを取得しています。何が取得されるか見てみましょう...

OK、ここに gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8 からの md5 チェックサムがあります。これはご覧のとおりです。

通常、この問題は によってアーカイブが作成された場合に発生しますgtarが、まれに が発生する場合もありますdirectory checksum error

tartest何が起こっているのかをよりよく理解したい場合は、に付属するプログラムを使用することをお勧めしますstar

最新情報は次のサイトschilytoolsから取得:

http://sourceforge.net/projects/schilytools/files/

プログラムをコンパイルして実行しますtartest/OBJ/*/tartest < gcc-4.9.0.tar

これを実行して、アーカイブが tar ヘッダーで GNU ベンダー固有の「ファイル タイプ」'L' を使用していることが原因であることがわかりました。

重要: GNU tar が半分標準に準拠しているか、少なくとも半分バグがない場合は、問題のファイル名が POSIX.1-1988 100+255 命名スキームに完全に適合するため、この問題は発生しません。したがって、これは、GNU tar の使用をまったく避けるべき理由のもう 1 つのヒントです。

を使用することをお勧めしますstar

のすべての機能は、starプロパティ記述構造によって完全に制御されます。アーカイブ形式を指定すると、star異なるアーカイブ形式に関連するアーカイブ コンテンツが作成されることはありません。

例えば次のように電話すると:

star -c -f out.tar -Hustar somedir

star100% 準拠の POSIX.1-1988 アーカイブ形式を使用し、そのアーカイブ形式に適合しないファイルがある場合は、star非標準の方法を使用してファイルをアーカイブするのではなく、警告を書き込みます。

ところで、以下は Sun がこのベンダー固有の機能のサポートを追加した変更セットです。

changeset:   11995:caff1bd711f5 
user:        Rich Burridge <[email protected]> 
date:        Thu Mar 25 13:21:39 2010 -0700 

description: 
        6202362 Solaris tar can't unpack files created with GNU tar 

modified: 
   usr/src/cmd/tar/tar.c 

答え2

gtar を使用する必要があります。これは通常、パッケージ SUNWgtar とともにプリインストールされています。

gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0

ネイティブ Solaris のパッチ未適用の tar では、GNU tar で作成されたファイルで問題が発生する可能性があります。理由については、@schily の回答を参照してください。

関連情報