macOS使用Homebrew的經驗分享

前言

原本想着macOS使用Homebrew對你們沒啥難度,以前就分享了一篇介紹homebrew-bundle備份恢復的文章,不過長期使用後仍是以爲有必要作一下總結,道理也很簡單,越簡單越頻繁使用的產品就越值得挖掘一些背本身忽視的小技巧,由於若是能夠作到天天節省5分鐘那麼量變可能會成爲質變。html

更新歷史

2019年09月11日 - 更新轉載Homebrew 深度應用
2019年09月08日 - 初稿mysql

閱讀原文 - https://wsgzao.github.io/post...linux

擴展閱讀git

Homebrewgithub

macOS使用homebrew-bundle優雅的備份和恢復軟件列表面試


Homebrew簡介

Homebrew 是一款頗負盛名的包管理工具,是 macOS 上包管理的事實 (de facto) 標準 。Homebrew 的意思是家釀啤酒。算法

它的官方 slogan 是 The missing package manager for macOS (or Linux)。Linuxbrew 已經在 Homebrew 1.9 正式合入,成爲 Homebrew 的 「一等公民」。sql

Homebrew 最先的建立者是 Max Howell,目前的主要維護者是 Mike McQuaid。同 Jekyll 等開源項目同樣,Homebrew 的核心維護者也是 GitHub 的員工。GitHub 對於員工親自參加開源項目方面,作得一直不錯。chrome

順帶插播一條奇聞逸事:Homebrew 的創始人 Max Howell 活躍在開源社區,目前主要從事 Swift 相關的庫開發。他在 2015 年初曾去 Google 面試,由於 「白板」 寫算法題「翻轉二叉樹」失敗,憤而發 tweet 諷刺:swift

Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.

爲何須要Homebrew

對於使用 Unix/Linux 類系統的用戶每每都遇到過這些需求:

  • 開源程序是源碼分發,須要本身編譯,但 ./configure 參數超多,還要解決各類庫的依賴
  • 想把軟件安裝到用戶目錄,而不是系統目錄(這樣不須要 root 權限)
  • 本身編譯安裝了軟件,想刪除時殊不知道在哪裏刪除和刪除哪些文件

各 Linux 發行版爲了提高安裝軟件的體驗,大多都提供了官方的包管理器,如 Ubuntu 的 aptitude (apt-get)。而蘋果官方沒有爲 macOS 提供包管理器,市面上最好的解決方案就是 Homebrew。

目前 Homebrew 的中文內容大多以簡單入門級教程爲主,對於它的各種能力提之甚少,我但願在這裏更全面的分享 Homebrew。

Homebrew快速入門

網上基礎的教程不少,我這裏只簡略的介紹下。對於基礎功能類的深度用法,推薦這篇 macOS 包管理工具 Homebrew 不徹底指南

Homebrew安裝

安裝

開始安裝前須要安裝 macOS 命令行工具:

xcode-select —install

或者,在 https://developer.apple.com/d... 下載安裝。

而後執行:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

基礎功能

# 安裝
brew install wget

# 完成安裝後能夠列出已安裝內容
brew list

# 顯示能夠升級的包
brew outdated

cmake (3.13.4) < 3.14.0
yarn (1.13.0) < 1.15.2
youtube-dl (2019.03.09) < 2019.03.18

# 進行升級
brew upgrade cmake

# 刪除
brew uninstall wget

# 安裝桌面程序
brew cask install google-chrome

對於 Homebrew-cask 管理桌面程序,這裏先不細說,後面會專門講。

Homebrew 會把軟件安裝到 /usr/local/Cellar,而且經過軟鏈連接到 /usr/local/bin。咱們能夠經過 brew unlinkbrew link 刪除或建立連接。

名詞解釋

Homebrew 把軟件安裝過程當中的各類名詞都進行了擬物化命名,這些命名挺有意思,但對於大多數英語水平通常的人來講,有很多詞彙有些生僻。

英文 直譯 實際含義
formula(e) 公式 安裝包的描述文件,formulae 爲複數
cellar 地窖 安裝好後所在的目錄
keg 小桶 具體某個包所在的目錄,keg 是 cellar 的子目錄
bottle 瓶子 預先編譯好的包,不須要現場下載編譯源碼,速度會快不少;官方庫中的包大多都是經過 bottle 方式安裝
tap (插入) 水龍頭 下載啓用某個源
cask 木桶 安裝 macOS native 應用的擴展
bundle 描述 Homebrew 依賴的擴展

Homebrew進階用法

對於 Homebrew,咱們不少時候每每都是上來就 brew search 或是 brew install。缺什麼安什麼,沒有充分的應用它的強大能力。

首先,Homebrew 雖爲解決控制檯程序而生,但它徹底有能力(Cask)安裝任何桌面軟件。它還支持豐富的分類目軟件庫或第三方庫。

除此以外,它還有一個打包安裝或備份工具,能夠把已安裝的軟件輸出成 Brewfile。遷移到新電腦時,只要根據 Brewfile 運行 Homebrew bundle,就能夠一鍵安裝所有控制檯、桌面和來自 Mac App Store 的程序(Mac App Store 上的軟件經過 mas 支持)。

Tap

Tap 在 Homebrew 中我理解是個動詞,指的是啓用某個源。實際看了下發現,homebrew-services 和 homebrew-bundle 也已 tap 形式存在,所以能夠認爲 tap 實際指的應該是擴展(extension)。

Homebrew 默認狀況下會自帶:

  • homebrew/core
  • homebrew/cask
  • homebrew/services
  • homebrew/bundle

後二者並無任何公式配方,而只是擴展程序。

除此以外的源,須要經過 brew tap 來啓用。如:

brew tap heroku/brew
brew install heroku

Services

Homebrew-services 是 Homebrew 的後臺服務程序擴展,它基於 macOS 的 launchctl。後臺服務類程序的安裝依舊使用 Homebrew,在管理時可使用 Homebrew-services 進行啓動、重啓和中止等操做。

brew install mysql
brew services start mysql

Cask

Homebrew-cask 是 Homebrew 的 macOS Native 應用擴展,經過 cask 能夠安裝各種應用程序。

搜索 Cask 的方法和搜索普通包同樣,但安裝時須要加上 cask 指令:

brew search google-chrome
brew cask install google-chrome
cask-versions

Homebrew Cask 和 Homebrew 同樣,默認庫只維護最新版本,但有的時候咱們仍是須要用舊版的(好比:我只有 Dash 3 的 License,因此須要用 Dash 3 而不是最新的 Dash 4),那就可能須要使用 cask-versions。

brew tap homebrew/cask-versions
brew cask install dash3
cask-fonts

Homebrew 官方的字體源,好比 Mozilla 的開源字體 Fira Code:

brew tap homebrew/cask-fonts
brew cask install font-fira-code

Bundle

Homebrew 不只僅是一個包管理器,還具備軟件依賴管理能力。經過 Homebrew Bundle 能夠幫你解決全部軟件依賴,包括官方和第三方的 formula 以及 cask,甚至還包括 Mac App Store(簡稱 mas)中的應用。

Homebrew 默認就安裝了 Homebrew Bundle。

咱們只須要一個 Brewfile,就能夠配置好全部須要的應用。熟悉 Ruby 的人應該不太須要解釋,畢竟 Ruby 本身就有 Bundler 這套東西,Brewfile 和 Gemfile 屬於對應關係。

若是你的安裝列表已經足夠 「乾淨」,那麼能夠執行 brew bundle dump 來生成現有依賴,輸出到 Brewfile

brew bundle dump
cat Brewfile

brew "git"
brew "wget"
brew "mas"
brew "p7zip"
...

若是想本身寫也比較容易,Brewfile 是一種簡單的 Ruby DSL,寫起來比大部分配置文件都簡單。只須要掌握一些經常使用到的命令,主要有 brew, tap, caskmas

這四條命令分別對應:

  • brew install
  • brew tap
  • brew cask install
  • mas install
注:Homebrew 雖然好用,但 Homebrew 並不能管理 MAS「Mac App Store」上的應用軟件, 在終端上輕鬆管理「Mac App Store」中應用的神器 mas-cli

命令行類應用:

brew "git"
brew "wget"
brew "vim"

非命令行類:

cask "google-chrome"
cask "alfred"
cask "visual-studio-code"

非官方 Formula 應用:

tap  "homebrew/cask-versions"
brew "dash3"
tap  "homebrew/cask-fonts"
cask "font-source-code-pro"

Mac App Store 上的應用:

mas "WeChat", id: 836500024

所以,維護好 Brewfile 就能夠完美解決應用自動化安裝,只須要運行:

brew bundle

Homebrew擴展用法

提交Formula

建立並提交一個 Formula 比較容易,官方教程很是詳細。這裏,我就不作單獨介紹了。

自建Tap

Homebrew 除了各類官方維護的源外,還支持自建軟件庫。默認使用 GitHub,須要以 「homebrew-xxx」 格式命名 Repo。Formula 或 Cask 文件須要存放在 Formula 或 Casks 二級目錄中。

好比,Heroku 的自建庫在 GitHub 上是 heroku/homebrew-brew。經過 brew tap heroku/brew 就能夠獲取庫裏維護的包了。

私有Tap

上面說到,Tap 默認維護在 GitHub,那麼當咱們想安裝一些須要保密的軟件時該怎麼辦呢?

答案是 Tap 支持指定 Git,所以也可使用內網域名內的 Git:

brew tap yourcompany/brew git@git.yourcompany.com: yourcompany/homebrew-brew.git
brew install inhouse-app

Homebrew Tips

禁用自動升級

Homebrew 自動升級觸發機率很高,因爲網絡等問題,檢查更新會好久有時會比較煩。能夠經過環境變量禁用自動升級:

HOMEBREW_NO_AUTO_UPDATE=1 brew info mysql

直接安裝 Formula

Homebrew 的安裝指令並不是只支持名字,也能夠用文件安裝包括網絡文件和本地文件。

# 本地
brew install blabla.rb
# 遠程
brew install https://blablablabla.com/blabla.rb

安裝舊版軟件

Homebrew 默認狀況下只支持最新版軟件安裝,有些重要的版本會單獨存在。但想安裝一些小版本就得本身 DIY 了。

我所知有兩種方法:

  1. 在 GitHub 找到 Formula 所在 Repo 中(默認爲 homebrew-core)的文件,把文件遠程地址複製下來,用 brew install 安裝。
  2. 進入 homebrew-core 在 macOS 本地的路徑,默認爲 /usr/local/Homebrew/Library/Taps/homebrew/homebrew-coregit checkout 到所在 commit,再用 brew pin 鎖定這個文件的更新,而後進行安裝。

Homebrew常見問題

我遇到的問題大多數是升級macOS Mojave以後產生的,升級前要三思然後行,先備份,先備份,先備份

Homebrew Permissions Denied Issues Solution

sudo chown -R $(whoami) $(brew --prefix)/*

Reference - https://gist.github.com/iraza...

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun.

Reference - https://apple.stackexchange.c...

# The problem is that you are using XCode and you explicit have to agree to the license agreement. So open Terminal, and run the following:

xcode-select --install

# This will download and install xcode developer tools and fix the problem. As a follow on step, you may need to reset the path to Xcode if you have several versions or want the command line tools to run without Xcode.

xcode-select --switch /Applications/Xcode.app
xcode-select --switch /Library/Developer/CommandLineTools

Homebrew國內加速鏡像

Homebrew 清華大學鏡像使用幫助

加速一切 - 配置國內鏡像 - Linux apt/macOS brew/Docker/Python Conda/Maven

參考文章

Max Howell on Twitter: 「Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.」

https://github.com/Linuxbrew/brew/issues/612

Formula Cookbook — Homebrew Documentation

Glossary of Homebrew Terms

Formula Cookbook — Homebrew Documentation

在終端上輕鬆管理「Mac App Store」中應用的神器 mas-cli

Homebrew 深度應用

相關文章
相關標籤/搜索