Mac OS X下用Homebrew替换MacPorts和Fink以及比较区别

MacPorts和Homebrew都是Mac OS X上的软件包管理工具 ,Homebrew是一个Ruby开发的智能的包管理系统。她能判断系统包的状况,并能够依赖系统已有的组件,不用重新下载一阵套组件。而 MacPorts是自成一派的,他的所有组件全部安装在/opt目录下,带来的问题就是很多系统已经有的组件都要重新下载,费时间也费空间。而且 Homebrew本身使用Git管理,升级非常方便。不过MacPorts和Homebrew它们之间是不兼容的,这里要说的是删除MacPorts并安 装Homebrew。

如果你有Linux/Unix背景,那么在Mac上你一定想安装那些你熟悉的open source软件。
Fink,Macports和Homebrew是3个主流的package management tool。

1. Fink

Fink是基于Debian的packaging tools开发的。最大的特点是安装软件是预编译好的(pre-compiled/pre-built)。
所以,用Fink安装package是不需要在本机编译的,都是现成的binary code。

Fink最大的问题是package跟进不够快。很多最新版的软件,你要等Fink。

2. Macports
Mac算是BSD的一个变种吧。所以,BSD的包管理软件port被移植到Mac上就显的理所当然了。

macports的工作方式是下载source code然后在本地编译。macport的理念是尽量减少对系统现有库的依赖。
所以,第一次用macport的时候,需要很长时间让macport重新build整个基本库,什么perl啊,python啊的。

代价是较长的编译时间,较多的依赖关系下载。好处是不怎么依赖系统,也就是说,更新Mac OS不会破坏你现有的
package。

另外,macports安装所有的package到/opt/local下面。这样不会和系统现有的/usr/local有什么冲突。

3. Homebrew
这个比较新,是在Lion之后才兴起的。
工作方式和macport类似,也是下载source并在本地编译安装。但是和macports有两个根本的区别。
1) homebrew的理念是尽量使用系统现有的库。这样可以大大的减少编译时间。
2) package都安装到/usr/local下面。
这两点和macports是完全相反的。结果也是有利有弊。

最大的好处莫过于编译时间变短,安装简单。问题就是和系统紧密依赖。

另外Homebrew假设你的Mac是单用户系统,所以/usr/local的owner应该是你,而不是传统的root。
这个假设在大多数情况下都成立。
(当然你可以改变homebrew的安装路径,然后修改你的PATH)

另外,一个不太重要的区别,macport是用rsync来同步repository tree和获取新的package的。
homebrew是用git来管理repository的。
如果你是在内部网或者firewall后通过proxy使用,这点可能会给你带来影响–一些proxy不支持rsync的。

总结:
1. 忘了Fink吧,老了。
2. 如果你是重量级的Linux用户,希望使用所有的open source package,那么macports是你不二的选择。
3. 如果你只希望很快的安装一些便利的工具,那么homebrew是个不错的选择。

>>update(2012-05-02:23:53)
macports可以用svn来代替rsync。虽然selfupdate不可用,但是其他的sync, install等完全不影响。这样就可以绕过上面所说的proxy的问题了。

https://trac.macports.org/wiki/howto/SyncingWithSVN

还真是巧合,写这点东西的当天,macports的rsyncd服务器当机了。

https://trac.macports.org/ticket/34298

只能用svn来sync了。

准备条件:

Mac是自带Ruby程式的,如果你之间”处理”过它,记得要确保它的存在.用ruby -v查看下版本号.
安装xcode
打开Terminal(终端)

删除MacPorts:
sudo port -fp uninstall –follow-dependents installed

sudo rm -rf \
/opt/local \
/Applications/DarwinPorts \
/Applications/MacPorts \
/Library/LaunchDaemons/org.macports.* \
/Library/Receipts/DarwinPorts*.pkg \
/Library/Receipts/MacPorts*.pkg \
/Library/StartupItems/DarwinPortsStartup \
/Library/Tcl/darwinports1.0 \
/Library/Tcl/macports1.0 \
~/.macports

安装HomeBrew:

安装Brew的安装过程跟网上的略有不同:
首先下载HomeBrew:

https://nodeload.github.com/mxcl/homebrew/legacy.tar.gz/master(为了方便以后可以重复使用)

下载好后直接解压缩,可以放在任何你想放的地方,我是放到/usr/local文件夹里面
最后一步是装homebrew/bin/文件夹写入环境变量,在这里我是直接加入到~/.bash_profile的PATH里面,这里是我的.bash_profile的内容:

export PATH=/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/mysql/bin:/Applications/adt-bundle-mac-x86_64/android-ndk-r8d:/Applications/adt-bundle-mac-x86_64/sdk:/Applications/adt-bundle-mac-x86_64/cocos2d-2.1beta3-x-2.1.0:/usr/local/homebrew/bin

关于环境变量的问题在这里就不详细讨论了,以上仅供参考。
现在重新打开终端,已经可以使用brew。

通过Homebrew安装软件:

查找你需要的软件使用brew search * 命令,安装使用brew install *命令(用具体的软件名称替换*),下面演示:
brew search git
brew install git

如果你想安装vim,wget或者unrar等其它各类软件,都这么做去吧.

另外,你已经安装了git了,那么建立了本地的git仓库,执行如下:

cd /usr/local
git init
git remote add origin git://github.com/mxcl/homebrew.git
git pull origin master
如果GitHub上有项目,也可直接拿下:

git clone http://github.com/YOURGITHUBUSERNAME/homebrew.git /tmp/homebrew
其它Homebrew指令:
brew list —列出已安装的软件
brew update —更新Homebrew
brew home *—用浏览器打开
brew info *—显示软件内容信息
brew deps * — 显示包依赖
brew server * —启动web服务器,可以通过浏览器访问http://localhost:4567/ 来同网页来管理包
brew -h brew —帮助

删除Homebrew:

万一你用的不爽了,告诉你卸载指令:
cd `brew –prefix`
rm -rf Cellar
brew prune
rm -rf Library .git .gitignore bin/brew README.md share/man/man1/brew
rm -rf ~/Library/Caches/Homebrew

Top Down