如何在 Solaris 10 上使用 md5.sum 正确提取 .tar.gz

如何在 Solaris 10 上使用 md5.sum 正确提取 .tar.gz

我正在尝试提取从 gcc 镜像站点之一下载的 gcc-4.9.0.tar.gz。为了在我压缩它之前检查它的 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 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 文件,让我们看看我得到了什么......

好的,这是来自 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 的另一个提示。

我建议使用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 

答案2

您需要使用 gtar,它通常与软件包 SUNWgtar 一起预安装:

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

本机 Solaris 未修补的 tar 可能会对使用 GNU tar 创建的文件有问题。请参阅@schily 的回答为什么。

相关内容