【问题标题】:`md5sum -c` won't work with Apache's MD5 file format`md5sum -c` 不适用于 Apache 的 MD5 文件格式
【发布时间】:2016-02-07 05:15:12
【问题描述】:

让我带你去旅行..

我正在尝试在新的 Debian (Jessie) 机器上通过 MD5 下载和验证 Apache Spark (http://www.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz)。

md5sum 脚本已经存在于那台机器上,我不需要做任何事情。

因此,我继续将 MD5 校验和 (http://www.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz.md5) 下载到与下载的 Spark 相同的目录,然后执行:

md5sum -c spark-1.6.0-bin-hadoop2.6.tgz.md5

这失败了:

md5sum: spark-1.6.0-bin-hadoop2.6.tgz.md5: no properly formatted MD5 checksum lines found

所以我通过cat spark-1.6.0-bin-hadoop2.6.tgz.md5查看内容:

spark-1.6.0-bin-hadoop2.6.tgz: 62 4B 16 1F 67 70 A6 E0  E0 0E 57 16 AF D0 EA 0B

这就是整个文件。对我来说看起来不错 - 也许 Spark 下载实际上很糟糕?在采取这种假设之前,我将首先通过md5sum spark-1.6.0-bin-hadoop2.6.tgz 了解 MD5 现在是什么:

624b161f6770a6e0e00e5716afd0ea0b  spark-1.6.0-bin-hadoop2.6.tgz

嗯,这是一种完全不同的格式 - 但如果你仔细观察,你会发现数字和字母实际上是相同的(除了小写和没有空格)。看来 Debian 附带的 md5sum 遵循不同的标准。

也许还有另一种方法可以运行此命令?让我们试试md5sum --help:

Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.

  -b, --binary         read in binary mode
  -c, --check          read MD5 sums from the FILEs and check them
      --tag            create a BSD-style checksum
  -t, --text           read in text mode (default)

The following four options are useful only when verifying checksums:
      --quiet          don't print OK for each successfully verified file
      --status         don't output anything, status code shows success
      --strict         exit non-zero for improperly formatted checksum lines
  -w, --warn           warn about improperly formatted checksum lines

      --help     display this help and exit
      --version  output version information and exit

The sums are computed as described in RFC 1321.  When checking, the input
should be a former output of this program.  The default mode is to print
a line with checksum, a character indicating input mode ('*' for binary,
space for text), and name for each FILE.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Report md5sum translation bugs to <http://translationproject.org/team/>
Full documentation at: <http://www.gnu.org/software/coreutils/md5sum>
or available locally via: info '(coreutils) md5sum invocation'

好的,--tag 似乎改变了格式。让我们试试md5sum --tag spark-1.6.0-bin-hadoop2.6.tgz:

MD5 (spark-1.6.0-bin-hadoop2.6.tgz) = 624b161f6770a6e0e00e5716afd0ea0b

确实,这是一种不同的格式,但仍然不是正确的格式。所以我查看了Apache Download Mirrors 页面上的说明并找到以下文本:

或者,您可以验证文件的 MD5 哈希值。许多 unix 发行版中都包含一个名为 md5md5sum 的 unix 程序。它也可作为GNU Textutils...的一部分使用...

所以我点击该链接并发现 Textutils 在 2003 年被合并到 Coreutils - 所以我实际上想要 Coreutils 的 md5sum。但是,您可以在 md5sum --help 转储的底部看到它已经来自 Coreutils。

这可能意味着我的 Coreutils 已经过时了。所以我会apt-get update &amp;&amp; apt-get upgrade coreutils,但后来我发现:

Calculating upgrade... coreutils is already the newest version.

那是个死胡同……但是等一下,他们说“md5md5sum”!让我们看看这条线索。

md5 脚本还不存在,所以我试试apt-get install md5

E: Unable to locate package md5

现在我迷路了,所以求助于 Google,然后是 StackOverflow 寻求帮助.. 现在我来了。

那么这两种不同的 MD5 文件格式是怎么回事?我该如何处理这个问题(并最终验证我的 Apache Spark)?

【问题讨论】:

    标签: apache md5sum


    【解决方案1】:

    我认为gpg --print-md md5 spark-1.6.0-bin-hadoop2.6.tgz 应该与 .md5 文件的内容匹配。

    md5/sha 文件的格式存在问题,因为构建 spark 版本的脚本使用 gpg --print-md md5 创建签名文件。见:https://issues.apache.org/jira/browse/SPARK-5308

    【讨论】:

    • 啊,令人着迷......为什么他们告诉我们使用 coreutil 的 md5sum 然后(反问)。但是一个实际的问题:使用这个gpg 脚​​本在md5sum -c 中模拟-c 的正确方法是什么? “天真”的方法是简单地比较文件并希​​望没有什么不同 - 有没有更好的方法?此外,从有关该问题的 cmets 中可以明显看出它已更改为 md5/md5sum(带有合并的拉取请求,解释了为什么他们告诉我们使用其中一个) - 但为什么我们仍然有 @987654330 @格式化的数据出来呢?
    • 该错误被报告为一些 maven 不兼容,因此他们只修改了这些签名文件的创建方式。 gpg 仍用于创建最终包的签名。
    • Roger,那么你将如何检查下载的文件呢?
    • 您必须使用gpg --print-md MD5 spark-1.6.0-bin-hadoop2.6.tgz | diff - spark-1.6.0-bin-hadoop2.6.tgz.md5 之类的东西,因为我认为没有自动的方法可以做到这一点。您可以随时下载spark-1.6.0-bin-hadoop2.6.tgz.asc 文件并在获取公钥后执行gpg --verify spark-1.6.0-bin-hadoop2.6.tgz.asc spark-1.6.0-bin-hadoop2.6.tgz 之类的操作
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2013-07-25
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2015-06-03
    相关资源
    最近更新 更多