Apple M1 安裝 Homebrew & zsh 設定

最近換了搭載 M1 晶片的 mac mini,x86 架構轉換到 arm 架構遇到一些套件相容問題,這篇就來做個整理與說明一些套件的設定方法。

Rosetta

M1 是基於 ARM 指令集架構的自研晶片系統,之前用習慣 x86 的系統,在安裝一些平常在使用的軟體可能會遇到無法編譯的問題,想要安裝就需要透過 Rosetta 這編譯軟體來幫忙。

Rosetta 是蘋果電腦公司發布的在 Mac OS X 上的一個二進位編譯器軟體,2020年 macOS 11.0 Big Sur 內建 Rosetta 2 可以讓在 Intel 平台上開發的軟體在 ARM 架構的 mac 上順利執行

如果尚未安裝 Rosetta 可執行

softwareupdate --install-rosetta

Homebrew

Homebrew 是開發 Apple 軟體工程師必備的套件管理,我們會安裝兩個版本,一個是原生 M1 架構,另一個則是 x86_64 架構下使用 (在支援 M1 的軟體比較成熟之前,安裝 x86_64 的軟體是個過渡時期的解決方案)

2022/01/20更新:arm 架構的 M1 問世也過了許多時間,很多套件也跟著做相容了,如果自己使用起來沒什麼相容問題的話 x86 的版本就不見得需要再安裝。 Does It ARM 可以參考哪些是已經支援 ARM 架構的套件

  1. 安裝 arm64 的版本
# 預設路徑會安裝在 `/opt/homebrew/` 底下
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. 安裝 x86_64 的版本
# 路徑會裝在 `/usr/local/bin` 底下
# 安裝 x86_64 的軟體需要下 arch --x86_64 的指令
arch --x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
  1. 建立 alias 給兩個不同的版本

打開 ~/.bashrc or ~/.zshrc 輸入

# x86_64 version brew path
# 這邊會把舊版本取為 brow (o for old)
alias brow='arch --x86_64 /usr/local/Homebrew/bin/brew'
  1. 重開 terminal 測試看看別名有沒有設定成功
brew --prefix
# /opt/homebrew
brow --prefix
# /usr/local

iTerm2

iTerm2 是取代 Mac 內建的 terminal 終端機,如果不喜歡蘋果內建的 Terminal 不仿可以安裝看看。

這邊介紹幾個小技巧:

  1. 滑鼠反白選取即 copy
  2. 快捷鍵的調整,因為 iTerm2 預設的快捷鍵跟 Terminal 不同,尤其在操作指令的時候可能會不太習慣,可以調整它的 key mappings,到路徑 Preferences > Profiles > Keys > Key Mappings,然後選取下方的 Presets... 然後選擇 Natural Text Editing 就可以改回習慣同 Terminal 的操作方式

Zsh

Z shell(Zsh) 如同 bash 一樣是一個命令直譯器,其他還有 Fish ,每個命令直譯器都有各自的優缺點,有空皆可以玩玩看,2019 年起 macOS 的預設 Shell 已從 Bash 改為 Zsh,可以打開 terminal 看一下,目前的終端機使用哪個,如果還不是 zsh,可以參照下面的步驟切換

  1. 設定 > 使用者與群組 > 打開鎖頭 > USER 頭像上 cmd + 滑鼠右鍵 > 進階選項
  2. 「登入 Shell 」改為 /bin/zsh/ 保存之後
  3. 重新開啟 terminal 就是 zsh

oh-my-zsh

oh-my-zsh 是 zsh 社群裡最大的開源套件之一,不但可以客製化自己的 theme,也可以擴充非常多的 plugin ,大家常用的 git command shortcut 就已經內建了

安裝的方式如下

$ sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

安裝完成之後,就會有預設的 theme 可以使用,也可以打開 ~/.zshrc 看他的設定檔有什麼可以調整。

pure-prompt

如果想要有更簡潔的 zsh,可以試試 pure-prompt ,需透過 npm 來安裝,所以這邊會先安裝個 node 的版本控制軟體 - nvm (Node Version Manager) 是 Node.js 的版本管理工具。如果是要手動安裝 pure-prompt 的話則可略過。

2022/01/20 更新:pure prompt 作者提供了 homebrew 的安裝方法 brew install pure 就可直接安裝了

安裝 nvm

# 依照官方教學安裝
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash

把下面的環境變數加入到 ~/.zshrc~/.bashrc

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

編輯完成之後新開一個 terminal 或重 load source ~/.zshrc 看看是不是正常

如果有出現 zsh compinit: insecure directories, run compaudit for list. 的提示的話 可以輸入 compaudit | xargs chmod g-w 來改寫 directory 權限

檢視 nvm 版本

# 列出所有可安裝的版本
nvm ls-remote
# 建議安裝最新的 LTS 版本
nvm install <version>

其他常用的指令

# 查看目前已經安裝的版本
nvm ls 
# 切換版本
nvm use <version>
# 移除指定版本
nvm uninstall <version>
## check npm installed list global 
npm list -g --depth 0

安裝 pure-prompt

npm install -g pure-prompt

Pure Prompt Configuration

最後打開 ~/.zshrc 把最基本的設定範例貼上

# .zshrc

autoload -U promptinit; promptinit

# optionally define some options
PURE_CMD_MAX_EXEC_TIME=10

# change the path color
zstyle :prompt:pure:path color white

# change the color for both `prompt:success` and `prompt:error`
zstyle ':prompt:pure:prompt:*' color cyan

# turn on git stash status
zstyle :prompt:pure:git:stash show yes

prompt pure

若想了解更多 zsh 的設定可以至 zsh prompt expansion 看看相關說明

最後 run source ~/.zshrc 就可以有非常簡潔的 zsh 終端機!

Reference

comments powered by Disqus