如何为自动生成的TarGZ档案创建稳定的校验和?

时间:2010-11-28 10:28:38

标签: git download gzip tar gitweb

对于构建脚本,我需要使用某个版本的源包。为了不必包含大型源存档,脚本只存储其校验和(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 个答案:

答案 0 :(得分:2)

如果焦油稳定,只需zcat $archive |sha1sum。否则,您可以使用git(可能使用--depth 0)检查正确的sha1,或者存储pristine-tar增量,以便重建稳定的存档。

答案 1 :(得分:2)

zcat解决方案是合适的,但如果出于任何原因你担心zcat什么都不吃CPU,你可以跳过包含时间戳的gzip存档开头的10字节头(参见http://www.gzip.org/zlib/rfc-gzip.html#file-format其余的哈希。

所以tail --byte +10 $archive | sha1sum可以很好而不是

tail --byte +10 $archive | openssl sha1对于没有sha1sum的环境也很有用