0 Homebrew是啥?
「Homebrew installs the stuff you need that Apple didn’t.——Homebrew 使 OS X 更完整」。html
Homebrew的官網[1](多語言版本)簡單明瞭地介紹瞭如何安裝和使用這個工具,並提供了本身的Wiki。python
1 安裝Homebrew
brew的安裝很簡單,使用一條ruby命令便可,Mac系統上已經默認安裝了ruby。
gerryyang@mba:bin$ruby --version
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
關於安裝brew的詳細說明能夠參考其github上的wiki說明[2]:ios
"
Installationgit
The suggested and easiest way to install Homebrew is on the homepage. We don’t duplicate it here because it is asecurity risk to list it on a user-editable wiki.github
The standard script installs Homebrew to /usr/local
so that you don’t need sudo when youbrew install
. It is acareful script, it can be run even if you have stuff installed to/usr/local
already. It tells you exactly what it will do before itdoes it too. And you have to confirm everything it will do before itstarts.shell
There are other ways to install Homebrew which provide you with moreflexibility. They are listed below the requirements.ruby
"app
- gerryyang@mba:~$ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
- It appears Homebrew is already installed. If your intent is to reinstall you
- should do the following before running this installer again:
-
- rm -rf /usr/local/Cellar /usr/local/.git && brew cleanup
因爲個人系統上已經安裝過brew,所以再次執行安裝命令會提示我brew已經存在。dom
2 Homebrew的用法
查看brew的具體用法:curl
- gerryyang@mba:~$brew
- Example usage:
- brew [info | home | options ] [FORMULA...]
- brew install FORMULA...
- brew uninstall FORMULA...
- brew search [foo]
- brew list [FORMULA...]
- brew update
- brew upgrade [FORMULA...]
- brew pin/unpin [FORMULA...]
-
- Troubleshooting:
- brew doctor
- brew install -vd FORMULA
- brew [--env | --config]
-
- Brewing:
- brew create [URL [--no-fetch]]
- brew edit [FORMULA...]
- open https://github.com/Homebrew/homebrew/wiki/Formula-Cookbook
-
- Further help:
- man brew
- brew home
-
- gerryyang@mba:~$
3 Homebrew的有趣問題
下面關於Homebrew的一些常見問題[3]:
(1) 在OS X中找不到想要的軟件,能夠使用brew安裝;
- gerryyang@mba:~$brew install wget
- ==> Downloading http://ftpmirror.gnu.org/wget/wget-1.14.tar.gz
- ######################################################################## 100.0%
- ==> ./configure --prefix=/usr/local/Cellar/wget/1.14 --sysconfdir=/usr/local/etc
- ==> make install
- Warning: Could not link wget. Unlinking...
- Error: The `brew link` step did not complete successfully
- The formula built, but is not symlinked into /usr/local
- You can try again using `brew link wget'
-
- Possible conflicting files are:
- /usr/local/bin/wget
- /usr/local/share/man/man1/wget.1
- ==> Summary
- <span style="font: 13.0px Monaco">/usr/local/Cellar/wget/1.14: 8 files, 688K, built in 2.3 minutes</span>
因爲以前使用源碼方式安裝過wget,所以再用brew安裝時會提示衝突的錯誤,由於/usr/locat/bin/wget已經存在。實際上,Homebrew 將軟件包分裝到單獨的目錄(/usr/local/Cellar),而後 symlink 到 /usr/local 中。
(2) 如何更新本地已安裝的package呢?
第一步:先更新brew:
brew update
- gerryyang@mba:bin$brew update
- Already up-to-date.
第二步:更新全部package:
brew upgarde
- gerryyang@mba:bin$brew upgrade
- ==> Upgrading 1 outdated package, with result:
- wget 1.15
- ==> Upgrading wget
- ==> Installing wget dependency: openssl
- ==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/openssl-1.0
- ######################################################################## 100.0%
- ==> Pouring openssl-1.0.1f.mavericks.bottle.tar.gz
- ==> Caveats
- This formula is keg-only, so it was not symlinked into /usr/local.
-
- Mac OS X already provides this software and installing another version in
- parallel can cause all kinds of trouble.
-
- The OpenSSL provided by OS X is too old for some software.
-
- Generally there are no consequences of this for you. If you build your
- own software and it requires this formula, you'll need to add to your
- build variables:
-
- LDFLAGS: -L/usr/local/opt/openssl/lib
- CPPFLAGS: -I/usr/local/opt/openssl/include
-
- ==> security find-certificate -a -p /Library/Keychains/System.keychain > '/usr/l
- ==> security find-certificate -a -p /System/Library/Keychains/SystemRootCertific
- ==> mv -f /usr/local/etc/openssl/osx_cert.pem.tmp /usr/local/etc/openssl/osx_cer
- ==> Summary
- /usr/local/Cellar/openssl/1.0.1f: 429 files, 15M
- ==> Installing wget
- ==> Downloading http://ftpmirror.gnu.org/wget/wget-1.15.tar.gz
- ######################################################################## 100.0%
- ==> ./configure --prefix=/usr/local/Cellar/wget/1.15 --sysconfdir=/usr/local/etc --with-ssl=openssl --with-libssl-prefix=/usr/local/opt/openssl --disable-iri
- ==> make install
- Warning: Could not link wget. Unlinking...
- Error: The `brew link` step did not complete successfully
- The formula built, but is not symlinked into /usr/local
- You can try again using `brew link wget'
-
- Possible conflicting files are:
- /usr/local/bin/wget
- /usr/local/share/man/man1/wget.1
- ==> Summary
- /usr/local/Cellar/wget/1.15: 8 files, 700K, built in 73 seconds
- gerryyang@mba:bin$
(3) 如何刪除Homebrew?
If you installed to /usr/local
then you can use the script in thisgist to uninstall — it will onlyremove Homebrew and the stuff Homebrew installed leaving anything elsein/usr/local
alone.
Provided you haven’t put anything else in Homebrew’s prefix(brew --prefix
), you can generally justrm -rf
that directory. Thisis because Homebrew won’t touch files outside its prefix.
(4) Homebrew下載的package存放的路徑在哪裏?
- gerryyang@mba:bin$brew --cache
- /Library/Caches/Homebrew
- gerryyang@mba:bin$ls /Library/Caches/Homebrew/
- Formula/ wget-1.14.tar.gz
- coreutils-8.22.tar.xz wget-1.15.tar.gz
- openssl-1.0.1f.mavericks.bottle.tar.gz xz-5.0.5.mavericks.bottle.2.tar.gz
- gerryyang@mba:bin$ls /Library/Caches/Homebrew/Formula/
- coreutils.brewing openssl.brewing wget.brewing xz.brewing
-
- gerryyang@mba:bin$
(5) 我能夠安裝本身的stuff在/usr/local嗎?
Yes, brew is designed to not get in your way so you can use it how youlike.
Install your own stuff, but be aware that if you install commonlibraries, like libexpat yourself, it may cause trouble when trying tobuild certain Homebrew formula. As a resultbrew doctor
will warn youabout this.
Thus it’s probably better to install your own stuff to the Cellar andthen brew link
it. Like so:
$ cd foo-0.1 $ brew diy ./configure —prefix=/usr/local/Cellar/foo/0.1 $ ./configure —prefix=/usr/local/Cellar/foo/0.1 [snip] $ make && make install $ brew link foo Linking /usr/local/Cellar/foo/0.1… 17 symlinks created
在個人環境上檢測是這樣的:
- gerryyang@mba:bin$brew doctor
- Warning: Unbrewed dylibs were found in /usr/local/lib.
- If you didn't put them there on purpose they could cause problems when
- building Homebrew formulae, and may need to be deleted.
-
- Unexpected dylibs:
- /usr/local/lib/libboost_atomic.dylib
- /usr/local/lib/libboost_chrono.dylib
- /usr/local/lib/libboost_context.dylib
- /usr/local/lib/libboost_date_time.dylib
- /usr/local/lib/libboost_filesystem.dylib
- /usr/local/lib/libboost_graph.dylib
- /usr/local/lib/libboost_iostreams.dylib
- /usr/local/lib/libboost_locale.dylib
- /usr/local/lib/libboost_log.dylib
- /usr/local/lib/libboost_math_c99.dylib
- /usr/local/lib/libboost_math_c99f.dylib
- /usr/local/lib/libboost_math_c99l.dylib
- /usr/local/lib/libboost_math_tr1.dylib
- /usr/local/lib/libboost_math_tr1f.dylib
- /usr/local/lib/libboost_math_tr1l.dylib
- /usr/local/lib/libboost_prg_exec_monitor.dylib
- /usr/local/lib/libboost_program_options.dylib
- /usr/local/lib/libboost_python.dylib
- /usr/local/lib/libboost_random.dylib
- /usr/local/lib/libboost_regex.dylib
- /usr/local/lib/libboost_serialization.dylib
- /usr/local/lib/libboost_signals.dylib
- /usr/local/lib/libboost_system.dylib
- /usr/local/lib/libboost_thread.dylib
- /usr/local/lib/libboost_timer.dylib
- /usr/local/lib/libboost_unit_test_framework.dylib
- /usr/local/lib/libboost_wave.dylib
- /usr/local/lib/libboost_wserialization.dylib
-
- Warning: Unbrewed static libraries were found in /usr/local/lib.
- If you didn't put them there on purpose they could cause problems when
- building Homebrew formulae, and may need to be deleted.
-
- Unexpected static libraries:
- /usr/local/lib/libboost_atomic.a
- /usr/local/lib/libboost_chrono.a
- /usr/local/lib/libboost_context.a
- /usr/local/lib/libboost_coroutine.a
- /usr/local/lib/libboost_date_time.a
- /usr/local/lib/libboost_exception.a
- /usr/local/lib/libboost_filesystem.a
- /usr/local/lib/libboost_graph.a
- /usr/local/lib/libboost_iostreams.a
- /usr/local/lib/libboost_locale.a
- /usr/local/lib/libboost_log.a
- /usr/local/lib/libboost_math_c99.a
- /usr/local/lib/libboost_math_c99f.a
- /usr/local/lib/libboost_math_c99l.a
- /usr/local/lib/libboost_math_tr1.a
- /usr/local/lib/libboost_math_tr1f.a
- /usr/local/lib/libboost_math_tr1l.a
- /usr/local/lib/libboost_prg_exec_monitor.a
- /usr/local/lib/libboost_program_options.a
- /usr/local/lib/libboost_python.a
- /usr/local/lib/libboost_random.a
- /usr/local/lib/libboost_regex.a
- /usr/local/lib/libboost_serialization.a
- /usr/local/lib/libboost_signals.a
- /usr/local/lib/libboost_system.a
- /usr/local/lib/libboost_test_exec_monitor.a
- /usr/local/lib/libboost_thread.a
- /usr/local/lib/libboost_timer.a
- /usr/local/lib/libboost_unit_test_framework.a
- /usr/local/lib/libboost_wave.a
- /usr/local/lib/libboost_wserialization.a
-
- Warning: You have unlinked kegs in your Cellar
- Leaving kegs unlinked can lead to build-trouble and cause brews that depend on
- those kegs to fail to run properly once built. Run `brew link` on these:
-
- wget
- gerryyang@mba:bin$
(6) 爲何選擇Homebrew這個名字?
mxcl was too concerned with the beer theme and didn’t consider that the project may actually prove popular. By the time he realized it was too late. However, today, the first google hit for 「homebrew」 is not beer related ;-)
看來做者是個酒鬼!
(7) 關於更多地QA能夠參考Homebrew的Wiki[4]
(8) 一些經常使用安裝推薦
- gerryyang@mba:bin$brew list
- coreutils openssl wget xz
Introduction to Coreutils
The GNU Core Utilities are the basic file, shell and text manipulationutilities of the GNU operating system.
These are the core utilitieswhich are expected to exist on every operating system.
http://www.gnu.org/software/coreutils/
4 參考
[1] http://brew.sh/index_zh-cn.html
[2] https://github.com/Homebrew/homebrew/wiki/Installation
[3] https://github.com/Homebrew/homebrew/wiki/FAQ
[4] https://github.com/Homebrew/homebrew/wiki