【環境】M1 Mac 安裝Homebrew


## 序言

近期入手了M1 Macbook Air;本來買前只是為了修圖用途,買后發現輕薄不燙,續航5~6個小時問題不大(我看好像VSCode是吃電大戶)
於是還是決定搞一些基本的開發配置。

其實像git這些都是屬於安裝很簡單的,按照官方的Mac安裝指南,只需要執行

```
brew install git
```
即可,那么首先就需要安裝 Homebrew了。

## Step1 踩坑

官方的Unix系統安裝命令簡單明了:
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

當然作為國內用戶,能在不出國的情況下執行成功,那就根本用不着專門寫篇文章了。
訪問以上url,根本訪問不到對不對?

於是有了第一個要解決的問題:
> 下載Homebrew


在搞定下載源的問題后,立馬再次被 M1 教做人了。

**再次吐槽M1吹們,各個都說跑分牛逼適配牛逼,Rosetta轉譯效率高,程序兼容牛逼**,然而呢?PS 至今沒有正式版適配吧,折騰版各種小問題吧;MySQL Workbench裝了就崩潰;iPad OS、iOS應用並不是全都能在M1 Mac上使用吧。

Homebrew 安裝也是一樣的問題,直接的安裝腳本會將程序默認裝至/usr/local/Homebrew,這是個Intel芯片架構上的路徑,在M1芯片上則需要安裝到/opt/Homebrew/下。【其實具體理由不太清楚,當然在目前的使用下,考慮需要支持x86與M1軟件包的共存,這樣做對系統環境比較安全。】

所以第二個要解決的問題:
> 安裝到指定路徑,實現x86與arm雙版本共存。

以上問題踩過后,還遇到第三個問題,就是下載賊慢,1000M光網下做 brew update 居然居然出現了100K/s的下載速度。

> 解決下載慢的問題

## 下載和安裝

其實下載慢問題好說,所有Linux用戶都知道,換個鏡像的事情而已,所以拜過各路博客后,有了第一個收獲:

```
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
```

國內鏡像源、中文安裝過程提示,各種友好有木有!
執行完后發現,用不了!畢竟咱是M1受害者。

然后又找到了第二個方案,需要手動執行目錄切換【原因見踩坑部分】,所以:

```
cd /opt # 切換到 /opt 目錄
mkdir homebrew # 創建 homebrew 目錄
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
```
可用,當然因為下載源是github,所以也比較慢。

安裝完成的話,需要再調整下環境變量,以確保執行 brew時可以工作:
```
vi ~/.zshrc
```

添加(或更新)以下信息:
```
path=('/opt/homebrew/bin' $path)
export PATH
```

重啟終端之后,brew操作生效可用。

### **可能的問題**

> /opt/ 路徑權限不夠導致安裝報錯

由於Mac 系統默認的用戶並不是Root,同時Homebrew是自己不允許以sudo權限安裝的(真正的高風亮節啊);所以由本地賬戶操作/opt/可能權限不足。

解決方案:
```
sudo chown -R $(whoami) /opt/homebrew
```

## 雙版本共存

前邊有提到,M1 版本的Homebrew官方適配了,但是要求裝在/opt/下,並且主要的問題是Homebrew上很多程序包還沒有適配M1。
因此,HomeBrew官方的建議是,通過轉譯模式運行x86版本。

所以其實安裝的時候,那套國內腳本是可用的,但是為什么安裝后無法使用呢?

> **命令行使用轉譯模式執行x86程序**

在任何命令前增加 arch -x86_64,就可以以 X86 模式運行該命令。

因此,對於x86版本的Homebrew,在安裝結束后,需要做的事情是:
1. 編輯環境變量;
2. 指定x86版本運行命令的別名,如ibrew。

環境變量操作參見前文,編輯后我的環境變量如下:
```
# HomeBrew
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles
export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
export PATH="/usr/local/sbin:$PATH"
alias ibrew='arch -x86_64 /usr/local/bin/brew'
# HomeBrew END
```

### 測試安裝

執行以下命令:
```
brew --repo
ibrew --repo
```
如果返回路徑是正確的安裝地址,則安裝成功。

## 更換鏡像源

執行以下命令:
```
# 修改brew鏡像源
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git
# 修改homebrew-core鏡像源
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
# 更新
brew update
```

即可。

注意,由於設置了x86版本的別名,對x86版本的換源操作自行替換即可。

### 國內鏡像源列表

```

```


## 補充

> **為什么 ARM 版 Mac 要使用 /opt 路徑?**

以下為參考博文摘錄:

根據《文件系統層次結構標准》(Filesystem Hierarchy Standard,主要為 Linux 系統制定,但對具有共同 UNIX 基因的 macOS 也有參考價值):

/usr/local 目錄用於系統管理員在本地安裝軟件。系統軟件更新時,該目錄應免於被覆蓋。
/opt 目錄留作附加應用程序(add-on application)軟件包的安裝。安裝在該目錄下的軟件包必須將其靜態文件放置在單獨的 /opt/<package> 或 /opt/<provider> 路徑下。
歷史上,/usr/local 主要用於放置在本地編譯並另行安裝的程序,避免和 /usr 下的系統自帶版本沖突;而 /opt 則用於安裝非系統自帶的、第三方預先編譯並發行的獨立軟件包。

顯然,在如今的 macOS 使用場景下,用戶很少會需要自行編譯軟件包,/usr/local 和 /opt 的區分一定程度上已經成為名義上的了。Homebrew 啟用 /opt 作為 ARM 版的安裝路徑,可能更多是出於確保與 X86 版相互區隔的考慮。


## 相關資料

> https://soffes.blog/homebrew-on-apple-silicon
> https://docs.brew.sh/Installation#untar-anywhere

感謝以下博文作者:

> https://zhuanlan.zhihu.com/p/111014448 《Homebrew國內如何自動安裝》
> https://sspai.com/post/63935#! 《在M1芯片上使用Homebrew》
> https://blog.csdn.net/qq_41437512/article/details/112435816 《m1 MBA配置Homebrew環境+國內源配置》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM