Homebrew – Mac OS X 包管理工具

作为 Unix base 的操作系统,内置了许多耳熟能详的 *NIX 软件,vim、python、perl 等,但还是有一些常用的软件没有被安装进来,比如说 wget 。想折腾的基本都去下源码自己 make && make install 了,懒点的要么找活雷锋打包好的 dmg or pkg,要么就用 上的包管理工具。

用过 BSD 的应该都知道 ports 系统吧,简直就是为了懒人准备的, 下的 apt 、yum 很好的继承了这一点;然而 apple 却没有把这种自动化的工具集成进 Mac OS X,于是就有人折腾出了 和现在的

MacPorts 是基于源代码的包管理,并不在自己的库里储存软件的实际内容,只有一个定义如何编译代码的 Portfile 和一些专门针对这个平台的 patch;而 Fink 则是 apt 包管理系统在 Mac OS X 下的一个克隆,采用二进制分发,直接从 Fink 的仓库中下载安装软件。

MacPorts 基于源代码的管理优点是灵活,更新很快,订制安装只要简单的通过修改 Portfile 实现,而且很多开源软件的安装配置会有多种模式,在 MacPorts 中可以方便地通过 variants 参数指定,而不必像二进制分发那样,在远程服务器上编译的时候就定死了。然而 MacPorts 的问题是,它希望自己安装的每套软件,所有的依赖都在它自己这个系统内解决,就算 Mac OS X 系统原生自带了满足依赖的库,它也不会去用,这对有系统洁癖的人来说无疑是个噩耗。

Fink 虽然不会这么自作主张地添加依赖,最大的问题是更新不够及时,这也是缺乏维护人手导致的。二进制安装相对于源码的缺点就是不方便定制。

所以 Homebrew 出现了,通过用 Ruby 写的 Homebrew formula 来定制软件;尽可能的利用系统里自带的库,包括 zlib, OpenSSL, Python 等等,只要 Mac OS X 自带了,它就不会另装一份;使用 Git 来同步和管理。

那么来看看如何安装这 Homebrew 吧!

最简单的方式就是打开终端,然后输入如下命令:

ruby -e "$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)"

当然,你也得装 xcode :)

对于那些个严重的系统洁癖者,建议装在 /usr/local , 一方面,这样做可以省区 PATH 的问题;另一方面,东西放在 /usr/local 下管理起来也方便,不会和系统本身有瓜葛。Homebrew 提倡的是 ”NO sudo“,当然更不是 root,而是归于当前用户,毕竟这是开发者或爱好者所折腾的,在不能完全保证包或者软件质量的情况下,使用 sudo 是相当危险的。

下面开始折腾安装:
首先更改 /usr/local 权限,然后下载

sudo chown -R $USER /usr/local
curl -Lsf http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C/usr/local

安装 git

brew install git

将版本仓库 clone 过来

git clone http://github.com/mxcl/homebrew.git /tmp/homebrew

如果在 github 上有项目的也可以一并拿下

git clone http://github.com/YOURGITHUBUSERNAME/homebrew.git /tmp/homebrew

移到 /usr/local 下

mv /tmp/homebrew/.git /usr/local/
rm -rf /tmp/homebrew
cd /usr/local
git status

如果觉得 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

Homebrew 是一套很有新意的软件包管理工具,虽然它的更新及时程度还有待考验,但多一种选择也不是坏事。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.