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
しかし、チェックサムエラーで終了しました。
どうすれば解決できますか?
Gtarを使用する必要があります。通常、パッケージSUNWgtarでプレインストールされています。
gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0
ネイティブSolarisのパッチを適用していないtarは、GNU tarで作成されたファイルに問題がある可能性があります。@ schilyの回答を参照してください。理由.
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
programを使用することをお勧めします。
最新のschilytools
fromを取得します。
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