Как создать стабильные контрольные суммы для автоматически сгенерированных архивов 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