web-dev-qa-db-ja.com

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

Gccミラーサイトの1つからダウンロードした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

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

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

5
kplus

Gtarを使用する必要があります。通常、パッケージSUNWgtarでプレインストールされています。

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

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

5
Sasha Golikov

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に付属するstarprogramを使用することをお勧めします。

最新のschilytoolsfromを取得します。

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

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

私はこれを行い、その理由は、アーカイブがtarヘッダーでGNUベンダー固有の「ファイルタイプ」「L」を使用していることです。

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

starの使用をお勧めします。

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

あなたが例えばコール:

star -c -f out.tar -Hustar somedir

starは100%準拠の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 
7
schily