 SHA-256 校驗(yàn)和不匹配怎么處理?)
Homebrew 安裝 cask 報(bào) SHA-256 校驗(yàn)和不匹配怎么處理【免費(fèi)下載鏈接】brew The Package Manager for Everywhere項(xiàng)目地址: https://gitcode.com/GitHub_Trending/br/brew在 macOS 上運(yùn)行brew install --cask cask時(shí)Homebrew 會(huì)校驗(yàn)下載文件與 cask 中記錄的sha256是否一致。如果兩者不一致安裝就會(huì)失敗并提示校驗(yàn)和不匹配。本文給出一條完整處理路徑先排除本地緩存文件損壞再判斷是 cask 元數(shù)據(jù)過(guò)時(shí)還是供應(yīng)商替換了下載文件最后按文檔給出的方式提交更新而不是繞過(guò)校驗(yàn)。先明白這個(gè)報(bào)錯(cuò)本身是保護(hù)機(jī)制cask 和 formula 一樣使用 SHA-256 校驗(yàn)下載文件Homebrew 會(huì)拒絕安裝內(nèi)容不匹配的文件見 Checksum Requirements。不匹配可能對(duì)應(yīng)三種情況本地緩存的下載文件損壞cask 記錄的版本已過(guò)時(shí)供應(yīng)商發(fā)布了新版本或新 URL供應(yīng)商在未改版本號(hào)的情況下替換了下載文件這甚至可能是上游被入侵或供應(yīng)鏈攻擊的信號(hào)。所以文檔給出的原則是不要繞過(guò)校驗(yàn)而是查明哪個(gè)文件變了、按情況處理。第一步清掉出錯(cuò)的那個(gè)緩存文件重試一次按 Common Issues 中 A cask checksum does not match 一節(jié)的做法先完整讀完報(bào)錯(cuò)其中指明了出錯(cuò)的是哪個(gè)已下載文件。定位緩存位置brew --cache該命令顯示 Homebrew 的下載緩存目錄macOS 上通常是~/Library/Caches/Homebrew可用環(huán)境變量HOMEBREW_CACHE自定義。若想看該 cask 具體的緩存文件brew --cache myapp將myapp替換成你安裝的 cask 名稱輸出即該 cask 的緩存文件/目錄路徑。只刪除報(bào)錯(cuò)對(duì)應(yīng)的那一個(gè)緩存文件不要清空整個(gè)緩存目錄——目錄里可能還有已安裝的其他軟件對(duì)應(yīng)的下載。重新執(zhí)行安裝brew install --cask myapp也可以用brew fetch --force myapp達(dá)到刪掉舊緩存并重新下載的效果--force會(huì)刪除之前緩存的版本后重新 fetch且fetch會(huì)打印下載文件的 SHA-256 校驗(yàn)值。判斷下一步如果這次安裝成功說(shuō)明之前的緩存文件損壞問(wèn)題結(jié)束如果再次報(bào)校驗(yàn)和不匹配且顯示的校驗(yàn)值與第一次相同說(shuō)明不是本地緩存問(wèn)題進(jìn)入第二步。第二步brew info對(duì)比供應(yīng)商當(dāng)前發(fā)布仍然失敗時(shí)按文檔做法對(duì)比 cask 記錄與供應(yīng)商現(xiàn)狀brew info myapp brew home myappbrew info myapp顯示該 cask 當(dāng)前記錄的版本、url和sha256brew home myapp打開該 cask 的供應(yīng)商首頁(yè)確認(rèn)供應(yīng)商現(xiàn)在實(shí)際提供的是哪個(gè)版本、哪個(gè)下載地址。對(duì)號(hào)入座現(xiàn)象文檔給出的判斷處理方式供應(yīng)商已發(fā)布新版本或新 URLcask 過(guò)時(shí)提交 cask 更新附上供應(yīng)商當(dāng)前版本與下載作為證據(jù)版本號(hào)沒變但下載文件的 SHA-256 變了供應(yīng)商原地替換了已發(fā)布的下載先按重打標(biāo)簽的 cask處理見下文不要直接改校驗(yàn)和關(guān)于第二種情況homebrew-cask 維護(hù)者指南 指出如果校驗(yàn)和變化沒有伴隨版本號(hào)變化應(yīng)把它當(dāng)作潛在的上游入侵或供應(yīng)鏈攻擊而不是普通更新。應(yīng)通過(guò)供應(yīng)商的官方聯(lián)系頁(yè)、公開 issue 等渠道確認(rèn)變更原因并等待供應(yīng)商確認(rèn)后再更新校驗(yàn)和。另外如果失敗不是持續(xù)性的也可以先按 Troubleshooting 的檢查清單走一遍運(yùn)行兩次brew update再運(yùn)行brew doctor并處理與本次失敗相關(guān)的告警然后重試原安裝命令。需要更新校驗(yàn)和時(shí)怎么做當(dāng)確認(rèn)是版本更新或供應(yīng)商官方替換后可以核對(duì)新文件的校驗(yàn)值brew fetch myappbrew fetch下載 cask 的文件并打印其 SHA-256 校驗(yàn)值。也可以對(duì)已下載的文件手動(dòng)計(jì)算shasum -a 256 /path/to/downloaded-file/path/to/downloaded-file替換為你的下載文件實(shí)際路徑即報(bào)錯(cuò)信息中指出的那個(gè)文件或brew --cache myapp給出的路徑。拿到正確的新url和sha256后向homebrew/cask倉(cāng)庫(kù)提交更新 PR并附上供應(yīng)商當(dāng)前版本與下載的證據(jù)。文檔明確要求不要繞過(guò)校驗(yàn)也不要在供應(yīng)商未確認(rèn)替換屬意的情況下直接提交只改校驗(yàn)和的更新。邊界與限制不要用sha256 :no_check關(guān)閉校驗(yàn)來(lái)解決不匹配。Cask Cookbook 中:no_check僅用于上游配置導(dǎo)致無(wú)法計(jì)算校驗(yàn)和的場(chǎng)景例如 URL 在各版本間不變而不是用來(lái)繞過(guò)校驗(yàn)失敗。本地修改 cask 文件不會(huì)進(jìn)入 Homebrew 的官方更新流程元數(shù)據(jù)修復(fù)的正確路徑是提交更新 PR在合并后重新brew install --cask myapp驗(yàn)證。如果供應(yīng)商的下載鏈接本身打不開那屬于cask 下載失敗而不是校驗(yàn)和不匹配應(yīng)先測(cè)試供應(yīng)商的下載鏈接再判斷是網(wǎng)絡(luò)問(wèn)題還是鏈接失效同樣見 Common Issues?!久赓M(fèi)下載鏈接】brew The Package Manager for Everywhere項(xiàng)目地址: https://gitcode.com/GitHub_Trending/br/brew創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考