Как создать стабильные контрольные суммы для автоматически сгенерированных архивов TarGZ? - PullRequest
0 голосов
/ 28 ноября 2010

Для скрипта сборки мне нужно работать с исходными пакетами определенной версии. Чтобы не включать большие исходные архивы, сценарии просто сохраняют свои контрольные суммы (SHA1) и загружают их автоматически. Это работает очень хорошо для официальных релизов, таких как

http://download.videolan.org/pub/videolan/libdca/0.0.5/libdca-0.0.5.tar.bz2

Однако некоторые пакеты не предоставляют официальный выпуск, поэтому я загружаю хорошо протестированную версию из системы контроля версий. Например, Gitweb предоставляет удобную функцию «снимка» для загрузки архива TarGZ:

http://git.videolan.org/?p=libbluray.git;a=snapshot;h=cf9ee593f;sf=tgz

К сожалению, этот URL возвращает немного разные файлы при каждом запросе. Хотя он всегда возвращает один и тот же tar-архив, который всегда сжимается с помощью gzip одним и тем же способом, существует небольшая разница в отметке времени в начале архива gzip.

Эти несколько байтов отличают контрольную сумму при каждой загрузке, поэтому сценарий больше не может гарантировать целостность загруженного исходного архива.

Как я могу обойти эту проблему?

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

Решение zcat подходит, но если по какой-либо причине вы беспокоитесь о том, что zcat не использует ЦП, вы можете просто перепрыгнуть 10-байтовый заголовок в начале архива gzip, который содержит метку времени (см. http://www.gzip.org/zlib/rfc-gzip.html#file-format), и хеш остальное.

Так что вместо этого может быть tail --byte +10 $archive | sha1sum

Также tail --byte +10 $archive | openssl sha1 может быть полезно в среде, где у вас нет sha1sum

2 голосов
/ 28 ноября 2010

Просто zcat $archive |sha1sum это если смола стабильна.В противном случае вы можете проверить правильный sha1, используя git (возможно, с --depth 0), или сохранить pristine-tar дельты, которые позволят вам восстановить стабильный архив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...