Skip to content

Apple M1 與 Homebrew #3

@MonsterSupreme

Description

@MonsterSupreme

Homebrew

Homebrew 安裝位置:

  • /usr/local for macOS Intel
  • /opt/homebrew for Apple Silicon

Xcode Command Line Tools

先安裝 Xcode Command Line Tools (CLT):

% xcode-select --install

Rosetta 2

如果還沒有安裝 Rosettta 2,請先手動安裝:

% /usr/sbin/softwareupdate --install-rosetta --agree-to-license

在 Apple Silicon 安裝與執行 Intel 版本的 Homebrew

因為 Intel 版本的 Homebrew 建議安裝在 /usr/local/Homebrew 目錄,而且不能直接執行,但是可以透過在指令前面加上 arch -x86_64 的方式安裝:

% arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
% arch -x86_64 brew update

不過每次在指令前都要加上 arch -x86_64 畢竟很累,所以要嘛直接執行 arch -x86_64 $SHELL,要嘛在 Terminal 上頭按下滑鼠右鍵,選取 Get Info,最上面 General 那一區勾選 Open using Rosetta,固定直接用 Rosetta 打開 Terminal,接著就可以像以前一樣安裝 Homebrew:

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

這樣安裝的 brew 指令,會放在 /usr/local/bin/brew

在 Apple Silicon 安裝與執行 ARM 版本的 Homebrew

因為 Apple Silicon 版本的 Homebrew 建議安裝在 /opt/homebrew 目錄,目前已經正式放在 Homebrew 網站上,所以可以透過正常的方式直接安裝:

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

這樣安裝的 brew 指令,會放在 /opt/homebrew/bin/brew

之後安裝 Package 的時候,建議加上 -s 參數,表示要從 Source Code 去 Rebuild:

% brew install -s iterm

安裝之後可以檢查,確定 Package 的版本:

% which iterm

% file iterm

Intel 版本與 ARM 版本的 Homebrew 並存

執行底下的指令,幫兩個 brew 指令建立不同的 Alias:

% echo "alias armbrew='/opt/homebrew/bin/brew'" >> ~/.zshrc
% echo "alias x86brew='arch -x86_64 /usr/local/bin/brew'" >> ~/.zshrc

以後先執行 armbrew install,就會執行 ARM 版本,如果 ARM 版本的 Package 找不到,退而求其次,再改執行 x86brew install,執行 Intel 版本。

Homebrew Export

執行 brew bundle dump,會在目前的目錄下產生一個 Brewfile 檔案,裡面會紀錄目前 Tap 的 Repository 與安裝的 Package:

% brew bundle dump
% cat Brewfile
tap "homebrew/core"
...
brew "azure-cli"
...
cask "adobe-acrobat-reader"
...
mas "LINE", id: 539883307
...

透過這個檔案,可以方便在新安裝的環境重建 Homebrew。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions