歡迎轉(zhuǎn)載,但請(qǐng)?jiān)陂_頭或結(jié)尾注明原文出處【blog.chaosjohn.com】
前言
筆者在四年前曾寫過一文HomeBrew -- OSX下的最強(qiáng)軟件包管理器,篇中詳細(xì)介紹了HomeBrew以及Cask的使用。
多年過去了,Homebrew依舊非常流行,但內(nèi)在也發(fā)生了很多變化,比如Cask原先作為第三方Tap的存在,現(xiàn)已整合到Homebrew內(nèi),在未安裝Cask的環(huán)境里,執(zhí)行 brew cask install ${app},Homebrew則會(huì)自動(dòng)安裝Cask。
同時(shí),在Homebrew的日常使用中,筆者也遇到了很多問題,本文就著重于“踩坑”和“填坑”。
“這些年遇到的坑”
Homebrew自動(dòng)更新
brew 提供了 update 命令,但是你執(zhí)行 install 或 upgrade 時(shí),都會(huì)強(qiáng)制性先 update,浪費(fèi)寶貴的時(shí)間。
解決:
- brew命令前加上變量HOMEBREW_NO_AUTO_UPDATE=1,變?yōu)?
$ HOMEBREW_NO_AUTO_UPDATE=1 brew install … - 或使用alias別名,在.bashrc或.zshrc中新增一行
alias brew="HOMEBREW_NO_AUTO_UPDATE=1 brew" - 或?qū)С霏h(huán)境變量,在.bashrc或.zshrc中新增一行
export HOMEBREW_NO_AUTO_UPDATE=1,筆者推薦這種方法 - 或者使用 Homebrew/aliases,執(zhí)行
brew alias install_no_autoupdate='!HOMEBREW_NO_AUTO_UPDATE=1 brew install'(install_no_autoupdate 名字任意更換),以后要執(zhí)行無預(yù)更新的brew install ${formula}操作,都改為brew install_no_autoupdate ${formula}
Cask 安裝的應(yīng)用,和 App Store 安裝的應(yīng)用,都混在了一起
因?yàn)殡p方都把應(yīng)用安裝到了 /Applications 目錄下,所以導(dǎo)致
- 分不清應(yīng)用到底是Cask安裝的,還是App Store里安裝的
- 如果Cask和App Store安裝同一款應(yīng)用,則后安裝或更新的應(yīng)用,就會(huì)覆蓋掉先前存在的版本
解決:export HOMEBREW_CASK_OPTS="--appdir=~/Applications/_",這樣Cask會(huì)自動(dòng)將應(yīng)用都安裝到用戶目錄下的 Applications/_/ 里。
這里我想介紹一下我在mac下的應(yīng)用管理,僅供參考:
- App Store安裝的應(yīng)用,都位于
/Applications/下 - Cask安裝的應(yīng)用,都位于
~/Applications/_/下 - 網(wǎng)絡(luò)上搜羅來的破解應(yīng)用,都位于
~/Applications/#/下 - JetBrains公司的IDE,都用
JetBrains Toolbox進(jìn)行安裝管理(當(dāng)然Toolbox本身是用Cask進(jìn)行安裝的) - 其他開源/免費(fèi)的應(yīng)用,都位于
~/Applications/下
Cask 批量更新應(yīng)用
在前文HomeBrew -- OSX下的最強(qiáng)軟件包管理器中筆者曾給出過一行shell腳本用來批量更新Cask的應(yīng)用,但是這么多年過去了,這行腳本筆者不再推薦使用。
解決:brew tap buo/cask-upgrade,項(xiàng)目鏈接,安裝完之后,
- 執(zhí)行:
brew cu,更新所有“存在更新版本”的應(yīng)用 - 執(zhí)行:
brew cu ${app},更新特定app - 選項(xiàng):
-a, --all,包含標(biāo)記了 auto-update 的應(yīng)用;-f, --force,包含當(dāng)前版本號(hào)為 latest 的應(yīng)用;-y, --yes,對(duì)所有詢問是否確認(rèn)更新,自動(dòng)應(yīng)答 yes
因國內(nèi)網(wǎng)絡(luò)環(huán)境導(dǎo)致brew速度慢
這里的慢包含兩方面:brew update 慢 & brew install 慢
解決方案A: 換源策略
解決方案B: 代理策略, export all_proxy=socks5://${host}:${port},替換自己代理主機(jī)地址和端口即可
Error: SHA256 mismatch / Error: Checksum mismatch
前者是 brew 后者是 cask,錯(cuò)誤原因,倉庫里記載的校驗(yàn)值和實(shí)際下載下載的文件校驗(yàn)值不一致
解決: 執(zhí)行 rm -rf ~/Library/Caches/Homebrew 將本地緩存目錄刪除后重試,有概率能解決問題,適用于軟件發(fā)行者修改應(yīng)用后缺沒有更改版本號(hào)就發(fā)行出去的情況。若未解決,針對(duì)于 brew,編輯 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/${formula}.rb,針對(duì)于 cask,編輯 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/Casks/${app}.rb,將 sha256修改為實(shí)際校驗(yàn)值,保存,再次執(zhí)行先前操作,大概率能成功。切記兩點(diǎn)主意事項(xiàng):
- 需禁用brew的自動(dòng)更新,否則前腳剛改完校驗(yàn)值,后腳自動(dòng)更新就把校驗(yàn)值改回來了
- 更改校驗(yàn)值后不要關(guān)閉編輯器,等安裝/更新應(yīng)用成功后,立即撤銷更改,再關(guān)閉編輯器,因?yàn)閎rew和cask的倉庫是用git管理的,更改倉庫文件對(duì)后續(xù)的更新會(huì)造成沖突。如果發(fā)生沖突了,也別擔(dān)心,到倉庫根目錄執(zhí)行
git reset --hard恢復(fù)原樣。brew 的倉庫目錄位于/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/;cask 的倉庫目錄位于/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask/