
Ich versuche, eine gcc-4.9.0.tar.gz-Datei zu extrahieren, die ich von einer der GCC-Mirror-Sites heruntergeladen habe. Um die MD5-Signatur zu überprüfen, bevor ich sie mit Gunzip entpacke, habe ich
digest -a md5 -v gcc-4.9.0.tar.gz
was gab
md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8
Dies stimmt mit der md5.sum im Verzeichnis überein, das aus der Quelle heruntergeladen wurde.
Dann habe ich
gzip -dc gcc-4.9.0.tar.gz | tar xvf -
Die Extraktion begann, endete aber bald mit einem
tar: directory checksum error
Ich habe auch versucht, Gunzip und Untar separat wie folgt zu verwenden:
gunzip gcc-4.9.0.tar.gz
Dann
tar -xvf gcc-4.9.0.tar
aber es endete auch mit einem Prüfsummenfehler.
Bitte, wie kann ich das lösen?
Antwort1
Es scheint, dass das Tar-Archiv defekt oder nicht standardkonform ist.
Beachten Sie, dass ich das Archiv als BZ2-Image abgerufen habe und keine Probleme bei der Verwendung hatte bzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -
.
Das entpackte Archiv hat die MD5-Prüfsumme: 6b8f599053a52e7c2076485d1ad3e747.
Ich hole jetzt die GZ-Datei, mal sehen, was ich bekomme …
OK, hier ist die MD5-Prüfsumme von gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8, die dieselbe ist, die Sie sehen.
Beachten Sie, dass Ihr Problem normalerweise auftritt, wenn das Archiv von erstellt wurde gtar
, in seltenen Fällen jedoch zu einem führt directory checksum error
.
Wenn Sie besser verstehen möchten, was vor sich geht, empfehle ich Ihnen, das tartest
mitgelieferte Programm zu verwenden star
.
Holen Sie sich die neuesten Informationen schilytools
von:
http://sourceforge.net/projects/schilytools/files/
Kompilieren und führen Sie dann das Programm aus tartest/OBJ/*/tartest < gcc-4.9.0.tar
.
Ich habe dies getan und festgestellt, dass der Grund darin liegt, dass das Archiv in einem Tar-Header einen GNU-anbieterspezifischen „Dateityp“ „L“ verwendet.
WICHTIG: Wenn GNU tar halbwegs standardkonform oder zumindest halbwegs fehlerfrei wäre, wäre dieses Problem nicht aufgetreten, da der fragliche Dateiname perfekt in das Namensschema POSIX.1-1988 100+255 passte. Dies ist also ein weiterer Hinweis darauf, warum man die Verwendung von GNU tar ganz vermeiden sollte.
Ich empfehle die Verwendung star
.
Jedes einzelne Feature star
wird vollständig durch eine Eigenschaftsbeschreibungsstruktur gesteuert. Wenn Sie ein Archivformat angeben, star
wird niemals Archivinhalt erstellt, der sich auf ein anderes Archivformat bezieht.
Rufen Sie beispielsweise an:
star -c -f out.tar -Hustar somedir
star
verwendet ein 100 % kompatibles POSIX.1-1988-Archivformat und schreibt im Falle einer Datei, die nicht in dieses Archivformat passt, star
eine Warnung, anstatt die Datei mit nicht standardmäßigen Methoden zu archivieren.
Übrigens: Hier ist der Änderungssatz, in dem Sun die Unterstützung für diese anbieterspezifische Funktion hinzugefügt hat:
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
Antwort2
Sie müssen gtar verwenden, es ist normalerweise mit dem Paket SUNWgtar vorinstalliert:
gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0
Natives, ungepatchtes Solaris-Tar kann Probleme mit Dateien haben, die mit GNU-Tar erstellt wurden. Siehe die Antwort von @schily, warum.