Homebrew幾乎是Mac上必備的軟件,用于下載安裝和管理其他軟件。尤其對于程序員,講真,本人到現在仍然不知道在Mac上如何不借助Homebrew來搭建php-apache-mysql開發環境。
認識Homebrew
Homebrew是一個開源項目,據說它的作者曾經去谷歌面試,因無法在白板上手撕反轉二叉樹被拒了,一段趣聞:-)。這個開源項目的gihub地址是:https://github.com/Homebrew/。今天是2020-03-15,當前的版本,它的組成部分有:brew,core,cask,services。其中brew、core、cask收容了各種各樣的軟件,services則主要用于管理后臺服務的開啟和關閉,類似于Centos的service命令。
安裝和修改源
安裝Homebrew的方法很簡單,在homebrew主頁里可以一眼看到。如下:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
安裝好了之后,它通常存放在/usr/local/Homebrew,如果不是,那么可以通過命令echo $(brew --repo)查看。cd到這個目錄下,會發現這其實是一個git本地倉庫,所以,每當我們執行brew update的時候,它會通過git從github.com上拉取更新。所以,在國內大陸這個更新操作會很慢。所以,我們第一步就是要把源替換成國內的鏡像,比較有名的是中科大和清華的。針對前面提到的四個組成部分,國內有鏡像源的只有brew、core、cask。下面以清華的鏡像為例。
# 查看當前源的辦法
git -C "$(brew --repo)" remote -v
git -C "$(brew --repo homebrew/core)" remote -v
git -C "$(brew --repo homebrew/cask)" remote -v
# 更換成清華的源
git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-cask.git
# 如果想要復原默認的源,則相類似的做法,將url設成github上對應的鏈接即可
git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://github.com/Homebrew/homebrew-cask.git
改好后,執行brew update --verbose可以看到很快就能完成更新。
另外還有一個比較特殊的東西叫Homebrew-bottles,它是Home-brew的二進制預編譯包,比如你想安裝php,那么brew會從bottles里拉取php及其各種依賴包到本地安裝。所以,要想使用brew安裝其他軟件時比較快速,我們還需要設置bottles的國內鏡像源,如下:
# 如果你使用的是zsh,那么可以把 .bash_profile 改成 .zshrc
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
brew tap
除了基本庫brew以外,Homebrew通過tap指令來管理其他庫,包括core和cask。同時,我們還可以添加其他第三方的庫。涉及到以下幾個指令:
brew tap # 查看當前已有的tap庫
brew tap --help # 查看幫助文檔
brew tap user/repo # 添加user/repo庫
brew untap user/repo # 刪除user/repo庫
其他常用指令
brew --help # 查看幫助文檔
brew search [TEXT|/REGEX/] # 搜索軟件
brew install FORMULA... # 安裝軟件
brew info [FORMULA...] # 獲得軟件的信息
brew uninstall FORMULA... # 卸載軟件
brew doctor # 診斷當前環境有沒有問題
brew services list # 查看當前服務的狀態,比如查看httpd、redis、memcached之類,前提這些服務是由brew安裝的
brew services run (formula|--all) # 啟動服務,但不設定開機自啟動
brew services start (formula|--all) # 啟動服務,并且設定開機自啟動
brew services stop (formula|--all) # 關閉服務,并且設定開機不自啟動
brew services --help # 獲得幫助文檔
安裝和管理其他軟件
Homebrew安裝軟件,涉及到四個目錄:/usr/local/Cellar/,/usr/local/opt/,/usr/local/etc/和/usr/local/bin/。
/usr/local/Cellar/:存放安裝的軟件包。
/usr/local/opt/:存放各個軟件的軟鏈。在../Cellar/里的軟件包目錄里,可能還有一層是該軟件的版本號,你肯定不希望其他地方引用這個軟件的時候要寫死版本號吧,否則當這個軟件升級版本號后,還不得去改所有關聯的配置?這個地方一般情況下,homebrew會自動創建合適的軟鏈,如果沒有,那么你也可以自己動手創建,指令是:ln -s 。
/usr/local/etc/:存放各個軟件的配置文件。
/usr/local/bin/:存放各個軟件的可執行文件外鏈的地方。貌似homebrew并不會在這里自動創建外鏈,所以需要自己動手創建,指令同上。然后為了能在任意地方執行這里的文件,需要把這個路徑寫入環境變量:
# 如果你使用的是zsh,那么可以把 .bash_profile 改成 .zshrc
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
對以上的目錄明了后,其實可以做一些triky的事情,比如,某個軟件的某個版本在很久以前安裝了,但后來換電腦,發現這個版本已經被homebrew移除,沒辦法通過brew重新下載安裝,那么我們就可以從舊電腦的這些目錄里,把軟件包和相關的依賴,都拷貝到新電腦,倒騰倒騰,就可以在新電腦上使用這個軟件的舊版本啦。
在Mac上同時安裝PHP5和PHP7
安裝PHP7
通過brew search php發現官方庫里收錄的版本有php@7.2和php@7.3。
直接安裝php7.2:brew install php@7.2。
安裝PHP5
增加一個庫exolnet/deprecated,此庫是熱心人士將Homebrew廢棄的軟件版本保存下來的。
brew tap exolnet/homebrew-deprecated
再來搜索brew search php,會發現多了5.6、7.0和7.1的版本。
安裝:brew install php@5.6。
安裝PHP擴展
以往安裝PHP擴展,比如php-memcached,可以通過指令brew install php56-memcached來完成,但現在不行了。現在得用pecl來安裝。
# php7.2的若干擴展
cd /usr/local/opt/php@7.2/bin/
./pecl install memcached
./pecl install redis
./pecl install ssh2-1.2
./pecl install xdebug
# php5.6的若干擴展
cd /usr/local/opt/php@5.6/bin/
PHP_ZLIB_DIR=/usr/local/opt/zlib ./pecl install memcached-2.2.0 # 需要指定zlib的路徑,否則會報錯
./pecl install redis-4.3.0
./pecl install ssh2-0.13
./pecl install xdebug-2.5.5