如何在 Solaris 10 上使用 md5.sum 正確提取 .tar.gz

如何在 Solaris 10 上使用 md5.sum 正確提取 .tar.gz

我正在嘗試提取從 gcc 鏡像網站之一下載的 gcc-4.9.0.tar.gz。為了在我壓縮它之前檢查它的 md5 簽名,我做了

digest -a md5 -v gcc-4.9.0.tar.gz

這給了

md5 (gcc-4.9.0.tar.gz) = fe8786641134178ecfeee2dc7644a0d8

這與從來源下載的目錄中的 md5.sum 相符。

然後我做了

gzip -dc gcc-4.9.0.tar.gz | tar xvf -

提取開始但很快就終止了

 tar: directory checksum error

我也嘗試像這樣分別進行壓縮和解壓

 gunzip gcc-4.9.0.tar.gz

然後

tar -xvf gcc-4.9.0.tar

但它也以校驗和錯誤結束。

請問我該如何解決這個問題?

答案1

tar 檔案似乎有缺陷或不符合標準。

請注意,我將存檔作為 bz2 圖像獲取,並使用bzip2 -d gcc-4.9.0.tar.bz2 < tar tvf -.

解壓縮後的檔案具有 md5 校驗和:6b8f599053a52e7c2076485d1ad3e747。

我現在正在獲取 .gz 文件,讓我們看看我得到了什麼...

好的,這是來自 gcc-4.9.0.tar.gz fe8786641134178ecfeee2dc7644a0d8 的 md5 校驗和,與您看到的相同。

請注意,您的問題通常發生在由 創建存檔時gtar,但在極少數情況下會導致directory checksum error.

如果您想更好地了解發生了什麼,我建議您tartest使用star.

從以下位置獲取最新資訊schilytools

http://sourceforge.net/projects/schilytools/files/

編譯然後執行程式tartest/OBJ/*/tartest < gcc-4.9.0.tar

我這樣做並發現原因是存檔在 tar 標頭中使用了 GNU 供應商特定的“文件類型”“L”。

重要提示:如果 GNU tar 一半符合標準或至少一半沒有錯誤,則不會發生此問題,因為有問題的檔案名稱完全符合 POSIX.1-1988 100+255 名稱方案。因此,這是為什麼人們應該完全避免使用 GNU tar 的另一個提示。

我建議使用star.

中的每個功能都star完全受屬性描述結構的控制。如果您指定存檔格式,則star永遠不會建立與不同存檔格式相關的存檔內容。

如果您例如致電:

star -c -f out.tar -Hustar somedir

star將使用 100% 相容的 POSIX.1-1988 存檔格式,如果存在不適合該存檔格式的文件,star則會寫入警告,而不是使用非標準方法存檔該文件。

順便一提:這是變更集,Sun 添加了對此供應商獨特功能的支援:

changeset:   11995:caff1bd711f5 
user:        Rich Burridge <[email protected]> 
date:        Thu Mar 25 13:21:39 2010 -0700 

description: 
        6202362 Solaris tar can't unpack files created with GNU tar 

modified: 
   usr/src/cmd/tar/tar.c 

答案2

您需要使用 gtar,它通常與 SUNWgtar 軟體包一起預先安裝:

gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0

本機 Solaris 未修補的 tar 可能會對使用 GNU tar 建立的檔案有問題。請參閱@schily 的回答為什麼。

相關內容