`md5sum -c` не будет работать с форматом файлов Apache MD5.

Позвольте мне отправиться с вами в путешествие...

Я пытаюсь загрузить и проверить Apache Spark (http://www.apache.org/dist/spark/spark-1.6.0/spark-1.6.0-bin-hadoop2.6.tgz) через MD5 на новом Debian (Джесси) машина.

Сценарий 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 была действительно плохой? Прежде чем принять это предположение, я сначала посмотрю, что такое MD5 через md5sum spark-1.6.0-bin-hadoop2.6.tgz:

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

Хм, это совершенно другой формат, но если вы посмотрите достаточно внимательно, то заметите, что цифры и буквы на самом деле одинаковы (за исключением строчных букв и без пробелов). Похоже, что md5sum, поставляемый с Debian, следует другому стандарту.

Может быть, есть другой способ запустить эту команду? Давайте попробуем 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 под названием md5 или md5sum включена во многие дистрибутивы Unix. Он также доступен как часть GNU Textutils...

Итак, я перехожу по этой ссылке и обнаруживаю, что Textutils был объединен с Coreutils в 2003 году, поэтому я действительно хочу md5sum от Coreutils. Однако в нижней части дампа md5sum --help видно, что он уже от Coreutils.

Это может означать, что мои Coreutils устарели. Итак, я apt-get update && apt-get upgrade coreutils, но потом я узнал, что:

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

Тогда это тупик.. но подождите, они сказали "md5 или md5sum"! Давайте проверим этот провод.

Скрипта md5 пока нет, поэтому попробую apt-get install md5:

E: Unable to locate package md5

И теперь я заблудился, поэтому обращусь за помощью к Google, а затем к StackOverflow. Теперь я здесь.

Так что же делать с двумя разными форматами файлов MD5 и как решить эту проблему (и, наконец, проверить мой Apache Spark)?


person Bilal Akil    schedule 07.02.2016    source источник


Ответы (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

person delephin    schedule 07.02.2016
comment
Ааа, интересно... почему тогда нам говорят использовать md5sum от coreutil (риторический вопрос). Однако актуальный вопрос: как правильно эмулировать -c в md5sum -c, используя этот скрипт gpg? Наивным способом было бы просто сравнить файлы и надеяться, что ничего не изменилось - есть ли лучший способ? Кроме того, из комментариев по этому вопросу видно, что он был изменен на md5/md5sum (с объединенным запросом на вытягивание, объясняющим, почему они говорят нам использовать один из них) - но почему тогда у нас все еще есть данные в формате gpg ? - person Bilal Akil; 07.02.2016
comment
Сообщалось об ошибке из-за некоторой несовместимости maven, поэтому они только изменили способ создания этих файлов подписи. gpg по-прежнему используется для создания окончательной подписи пакета. - person delephin; 07.02.2016
comment
Роджер, а как тогда проверить загруженный файл? - person Bilal Akil; 07.02.2016
comment
Вам придется использовать что-то вроде 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 после получения открытого ключа. - person delephin; 07.02.2016