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

Для сценария сборки мне нужно работать с исходными пакетами определенной версии. Чтобы не включать большие исходные архивы, сценарии просто сохраняют свои контрольные суммы (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 ответа

Решение

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

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

Так tail --byte +10 $archive | sha1sum может быть хорошим вместо

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

Другие вопросы по тегам