对于构建脚本,我需要使用某个版本的源包。为了不必包含大型源存档,脚本只存储其校验和(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存档开头附近的时间戳有一点不同。
这几个字节使每次下载的校验和不同,因此脚本无法再确保下载的源存档的完整性。
我如何规避这个问题?
答案 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的环境也很有用