0

对于构建脚本,我需要使用某个版本的源包。为了不必包含大型源档案,脚本只存储它们的校验和 (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 存档开头附近的时间戳存在细微差别。

这几个字节使每次下载的校验和都不同,因此脚本无法再确保下载的源存档的完整性。

我该如何规避这个问题?

4

2 回答 2

2

只要zcat $archive |sha1sum焦油稳定就可以了。否则,您可以使用 git(可能使用 --depth 0)检查正确的 sha1,或者存储让您重建稳定存档的原始焦油增量。

于 2010-11-28T10:39:36.530 回答
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 的环境中也可能有用

于 2010-12-08T16:59:22.300 回答