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發現官方庫裡收錄的版本有[email protected]和[email protected]。
直接安裝php7.2:brew install [email protected]。
安裝PHP5
增加一個庫exolnet/deprecated,此庫是熱心人士将Homebrew廢棄的軟體版本儲存下來的。
brew tap exolnet/homebrew-deprecated
再來搜尋brew search php,會發現多了5.6、7.0和7.1的版本。
安裝:brew install [email protected]。
安裝PHP擴充
以往安裝PHP擴充,比如php-memcached,可以通過指令brew install php56-memcached來完成,但現在不行了。現在得用pecl來安裝。
# php7.2的若幹擴充
cd /usr/local/opt/[email protected]/bin/
./pecl install memcached
./pecl install redis
./pecl install ssh2-1.2
./pecl install xdebug
# php5.6的若幹擴充
cd /usr/local/opt/[email protected]/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