2010年12月17日金曜日

Homebrewの使い方

パッケージ管理ソフト Homebrewの使い方

brewではほしいパッケージのビルド方法を記述したファイルのことをfomulaと呼びます。おおまかな流れは以下のような感じらしいです。

(誰かが)fomulaを書く→fomulaを探し、インストール開始→(自動で)すでにインストールされてないか調べる→(自動で)fomulaの記述に沿ってビルド&インストール

なので利用者がやるのは2番目のfomulaをさがすことだけになります。
fomulaファイルは比較的簡単に作成できるようになっているので、少し詳しい人(configureオプションのつけ方が分かる人)なら「fomulaを書く(or修正する)」からはじめることもできます。

今流行っているMacPortとの大きな違いとしては、、、
MacPortsはすべて自分でインストールしないと気が済まないので、たとえばあるパッケージ(MacPortsの場合はportと呼ぶ)をインストールするのにrubyが必要な場合、Macにデフォルトでインストールされているrubyを使わずに、自分でRubyをダウンロードしてきて自分でコンパイルします。

まぁパッケージのバージョンによる依存関係なんかも考えると、portのようにしたほうが正しい場合もあるけれど、大抵の人はそんな依存関係がめんどくさいのは入れないと思うのでbrewの方が早いです。

とはいえ、brewは別にportをディスってるわけではなく、両方入れても別に困らないので使い分けるといい感じ。
(brewには、MacPortsやFinkにパッケージが存在するかどうか検索する機能があります。)




インストール
公式のインストール方法はこちら。
%ruby -e "$(curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb)"
でも、なんかエラーがでたのでこっちで(やってることは同じ)
%curl -fsSLk https://gist.github.com/raw/323731/install_homebrew.rb > install_homebrew.rb
%ruby install_homebrew.rb

使い方
とりあえず存在するか検索
%brew search opencv
opencv
FinkやMacPortsに存在するか調べることもできる。
%brew search --fink opencv
%brew search --macports opencv

ちゃんと目的のものかどうか確認
% brew info opencv
opencv 2.2
http://opencv.willowgarage.com/wiki/
Depends on: cmake, pkg-config, libtiff, jasper, tbb
Not installed

The OpenCV Python module will not work until you edit your PYTHONPATH like so:
  export PYTHONPATH="/usr/local/lib/python2.6/site-packages/:$PYTHONPATH"

To make this permanent, put it in your shell's profile (e.g. ~/.profile).

http://github.com/mxcl/homebrew/commits/master/Library/Formula/opencv.rb


オプションを調べる
%brew options opencv
opencv
--build32
Force a 32-bit build.

インストール
%brew -v install --build32 opencv
何がインストールされたか調べる
%brew list opencv

アンインストール
%brew uninstall opencv

その他、「ln」で一時的に有効、「unlink」で無効にできるらしい。

どういう風に入るの?
まず、すでにインストールされているかどうかを調べてくれます。
この辺の仕組みはまだよくわからないけど、MacPortsやFinkで入れたものも探してくれるみたい。

なければFomulaで指定されているとおりにインストール作業をしてくれます。

デフォルトでは「/usr/local/Cellar」以下にインストールされ、「/usr/local」の所定の位置にシンボリックリンクが張られます。

詳しい人は
普段から自分でコンパイルしたりする人や、どこかの誰かが用意してくれたfomulaが気に入らない人は、自分で修正することができます。
%brew edit opencv
Fomulaのファイルは「/usr/local/Library/Fomula」にすべてダウンロードされているので、それが修正されます。

修正したものを公式リポジトリに公開したい人は、GitHubのアカウントを取得して、
Homebrewの公式リポジトリをforkし、自分のHomebrewリポジトリを作ります。
この自分のリポジトリにpushすると、本家の人が見に来て、いい感じだったらmasterにpullするらしいです。

fomulaの書き方

まずはソースコードが置いてあるURLを指定してテンプレを作成します。
%brew create http://bullet.googlecode.com/files/bullet-2.77.tgz
create bullet
あとはエディタで編集します。(ファイル自体は「/usr/local/Library/Formula」に作成されます。)
%brew edit bullet

インストールの流れ(Formula cookbookよりOverview of the Formula install Process)
「""」でくくった部分は関数名

  1. "Formula.download_strategy"の結果を表示
  2. "DownloadStrategy.fetch"を実行
  3. 一時ディレクトリ(/tmp/homebrew)を作成
  4. "Patches"を適用(ソースコードにパッチを当てる)
  5. ダウンロードしてきたソースコードのディレクトリに移動
  6. "Formula.install"を呼び出す("Formula.options"でインストールオプションを作れる)
  7. "keg"を掃除(後述)
  8. "keg"がシンボリックリンクを貼る
  9. "Caveats"に記述したメッセージを出力
こんな感じらしい。
簡単なものならinstallだけ記述すればおけ。
その際、インストール先をHomebrewにすることを忘れないこと(例:--prefix=#{prefix})、そうすると「/usr/local/Cellar/Formula名/バージョン/」以下にビルドしたライブラリなどなどがインストールされる。

そうするとHomebrewがkegというクラスを使って「/usr/local/Cellar/Formula名/バージョン/lib/libXXX.dylib」とかを「/usr/local/lib/libXXX.dylib」にシンボリックリンクを貼ってくれる。

ここで注意、生成されたファイルすべてをシンボリックリンクを貼るわけではなく、「lib」とか「include」とか決められたディレクトリ名のものだけシンボリックリンクを貼るらしい(Frameworkとかはだめ)ので自分でシンボリックリンクを貼らないといけない。

また、インストールされたものだけを保存するので、それ以外のファイル(DemosとかExtra-libsとか)は自分でコピーしないといけない。

でもまぁ一行でできるので特に困らない。

Formulaファイルの作成例は公式リポジトリの「Library/Formula」を参照。
俺が自作した例:bullet 2.77のFormulaファイル



0 comments:

コメントを投稿