2010-11-28 46 views
0

對於構建腳本,我需要使用特定版本的源代碼包。爲了不必包含大的源代碼檔案,腳本只是存儲它們的校驗和(SHA1)並自動下載它們。這非常適用於官方版本,如如何爲自動生成的TarGZ歸檔創建穩定的校驗和?

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它如果焦油是穩定的。否則,你可以使用git檢查出正確的sha1(或者使用--depth 0),或者存儲pristine-tar增量,它們可以讓你重建一個穩定的歸檔。

2

zcat解決方案是適當的,但如果由於任何原因您擔心zcat不需要CPU就可以吃掉CPU,那麼您可以跳過包含時間戳的gzip存檔開始處的10個字節標題(請參閱http://www.gzip.org/zlib/rfc-gzip.html#file-format),並休息其餘的。

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

而且tail --byte +10 $archive | openssl sha1可以在一個environement是有用的,你沒有SHA1SUM