如何在 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
但它也以校驗和錯誤結束。
請問我該如何解決這個問題?
您需要使用 gtar,它通常與軟體包 SUNWgtar 一起預裝:
gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf - echo $? 0
原生 Solaris 未打更新檔的 tar 可能對使用 GNU tar 創建的文件有問題。請參閱@schily 為什麼的答案。
似乎 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 <rich.burridge@sun.com> 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