Homebrew のご紹介
- 2010.09.10
- 勉強会資料
9/3 の勉強会で Homebrew について発表したので、その内容を公開します。
man や公式ドキュメントの抜粋を和訳した程度の内容ですが、何かの助けになれば幸いです。
2011/02/23 追記 : 草稿的に書いた私的な wiki ページを残してありますが、同一人(koshigoe)によるものです。
Table of Contents
- 1 何の話?
- 2 Homebrew
- 3 インストール
- 4 語彙
- 4.1 Formula
- 4.2 Keg
- 4.3 Celler
- 5 まずは
- 6 コマンド紹介(標準コマンド編)
- 6.1 $ brew search text
- 6.2 $ brew search /regex/
- 6.3 $ brew install [options] formula
- 6.4 $ brew install --interactive [--git] formula
- 6.5 $ brew list
- 6.6 $ brew formula
- 6.7 $ brew info formula
- 6.8 $ brew info --github formula
- 6.9 $ brew info --all
- 6.10 $ brew info URL
- 6.11 $ brew home
- 6.12 $ brew formula
- 6.13 $ brew remove formula
- 6.14 $ brew link formula
- 6.15 $ brew unlink formula
- 6.16 $ brew prune
- 6.17 $ brew outdated
- 6.18 $ brew deps [--1] formula
- 6.19 $ brew uses [--installed] formula
- 6.20 $ brew doctor
- 6.21 $ brew cat formula
- 6.22 $ brew cleanup [formula]
- 6.23 $ brew update
- 6.24 $ brew create [--cache] URL
- 6.25 $ brew crewate --macports|--fink formula
- 6.26 $ brew edit formula
- 6.27 $ brew edit
- 7 Formula を自作する
- 7.1 Gist ファイルの Formula を作ってみる
- 7.1.1 手順
- 7.1.2 コマンド履歴
- 7.1.3 ScriptFileFormula
- 7.1.4 GithubGistFormula
- 8 コマンド紹介(外部コマンド編)
- 8.1 $ brew audit [formula]
- 8.2 $ brew fetch formula
- 8.3 $ brew man
- 8.4 $ brew missing
- 8.5 $ brew server
- 8.6 $ brew test formula
- 8.7 $ brew graph
- 9 Formula Cookbook から抜粋メモ
- 9.1 約束事
- 9.2 Commit
- 9.3 Push
- 9.4 インストールの手続き
- 9.5 ユーティリティ紹介
- 9.5.1 bin.install(paths)
- 9.5.2 inplace path, before, after
- 9.5.3 patches
- 9.5.4 HEAD
- 9.5.5 download_strategy
- 9.5.6 prefix.install(paths)
- 9.5.7 変数など
- 9.5.8 keg_only
- 10 環境変数一覧
- 11 メモ
- 12 参考
1 何の話?
Mac OSX に含まれていないコマンド類をインストールするためのパッケージ管理システムについての話。 「できる限り Apple が用意した組み込みのコマンド(パッケージ)を使う」という方針。 Ruby で記述されている。
2 Homebrew
(訳) home-brew: 自家醸造飲料(ビール、酒)
3 インストール
$ ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"
- /usr/local/ 以下のパーミッションを調整
- リポジトリから tar ボールをダウンロード
- tar ボールを /usr/local/ 以下に展開
- 詳しくは
http://gist.github.com/raw/323731/install_homebrew.rb
4 語彙
4.1 Formula
(和訳) 調理法 (用語) パッケージの説明書
4.2 Keg
(和訳) 小たる、たるビール (用語) Formula のインストール先パス
4.3 Celler
(和訳) 地下貯蔵室 (用語) Keg 群のインストール先パス
5 まずは
- Formula のアップデートなどに git を使うので、git を入れておくと便利。
- home コマンドを実行すると Homebrew のホームページをブラウザで開くので、目を通しておくとよい。
- 実際にコマンドで何ができるかは man ページに目を通しておくとよい。
$ brew install git
$ brew update
$ brew home
$ man brew
6 コマンド紹介(標準コマンド編)
6.1 $ brew search text
指定文字列( text )の部分マッチで Formula を検索する。
6.2 $ brew search /regex/
指定正規表現のマッチングで Formula を検索する。
6.3 $ brew install [options] formula
- --debug
- --use-llvm LLVM 対応。 http://llvm.org/ http://ja.wikipedia.org/wiki/Low_Level_Virtual_Machine
- --ignore-dependencies 依存関係を無視する。
- --HEAD HEAD を取得してインストールする。
6.4 $ brew install --interactive [--git] formula
- --interactive ダウンロードして展開した後、シェルを開いて対話的なインストール作業を実施できる。
- --git パッチ作りなどに役立てるために git リポジトリを作る。
6.5 $ brew list
インストール済みの全ての Formula を表示する。
6.6 $ brew formula
その formula のインストール済みファイルを表示する。
6.7 $ brew info formula
その formula についての情報を表示する。
6.8 $ brew info --github formula
その formula の github の履歴ページをブラウザで開く。
6.9 $ brew info --all
全ての Formula の情報のサマリを表示する。
6.10 $ brew info URL
http:// 始まりの URL を指定すると、その URL からパッケージ名とバージョン番号を推測して表示する。
6.11 $ brew home
Homebrew のホームページをブラウザで開く。
6.12 $ brew formula
その formula のホームページをブラウザで開く。
6.13 $ brew remove formula
その formula を削除(アンインストール)する。
6.14 $ brew link formula
その formula のインストールされたファイルにリンクする。
6.15 $ brew unlink formula
その formula のインストールされたファイルへのリンクを解除する。
6.16 $ brew prune
デッドリンクになっているものを削除する。
6.17 $ brew outdated
アップデートがある Formula の一覧を表示する。
6.18 $ brew deps [--1] formula
その formula の依存関係を表示する。--1 をつけた場合、一階層の依存関係のみを表示。
6.19 $ brew uses [--installed] formula
その formula に依存している Formula を表示する。 --installed をつけた場合、インストール済みの Formula のみを表示する。
6.20 $ brew doctor
システムの潜在的な問題を報告する。
6.21 $ brew cat formula
その formula のファイル内容を表示する。
6.22 $ brew cleanup [formula]
古いバージョンの Formula を削除する。 formula が指定されれば、その formula についてのみ。
6.23 $ brew update
git を使って Homebrew および Formula の新しいバージョンにアップデートする。
6.24 $ brew create [--cache] URL
パッケージのソースアーカイブの URL を指定して Formula を作成する。
6.25 $ brew crewate --macports|--fink formula
MacPorts か Fink のパッケージ検索結果ページをブラウザで開く。
6.26 $ brew edit formula
指定した formula をエディタで開く。
6.27 $ brew edit
全ての Formula を TextMate(mate) で開く。
7 Formula を自作する
http://wiki.github.com/mxcl/homebrew/formula-cookbook
7.1 Gist ファイルの Formula を作ってみる
7.1.1 手順
- create すると環境変数 EDITOR で指定されているエディタで Formula ファイル(ひな形)が開くので、ソフトウェアのホームページの URL などを記入する (環境変数 HOMEBREW_EDITOR を設定していれば、そのエディタで開く) パッケージ名やバージョン番号の推測が期待通りでなければ修正する。 (Formula のファイルはパッケージ名に依存するので、必要に応じて変更しておく)
- fetch コマンドを使うとハッシュを調べられる (ダウンロード後のファイルでハッシュ値を得ていいのかという話は別)
- ハッシュ値を記入する
- install メソッドにインストールの手続きを書く
- インストールしてみる
7.1.2 コマンド履歴
$ brew create http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb
Formula name [mymemcheck]:
... edit Formula file ...
require 'formula'
class Mymemcheck <Formula
url 'http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb'
homepage ''
md5 ''
# depends_on 'cmake'
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}"
# system "cmake . #{std_cmake_parameters}"
system "make install"
end
end
$ brew cat mymemcheck
require 'formula'
class Mymemcheck <Formula
url 'http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb'
homepage 'http://gist.github.com/227178'
md5 ''
version '0.0.1'
# depends_on 'cmake'
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}"
# system "cmake . #{std_cmake_parameters}"
system "make install"
end
end
$ brew fetch mymemcheck
==> Downloading http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb
######################################################################## 100.0%
MD5: 44c84bde2574a1e6f125a81aa4e8ca57
SHA1: 8100730d0bf26c2d374aba2ceb5f8e1b4fc73069
$ brew edit mymemcheck
$ brew cat mymemcheck
require 'formula'
class Mymemcheck <Formula
url 'http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb'
homepage 'http://gist.github.com/227178'
sha1 '8100730d0bf26c2d374aba2ceb5f8e1b4fc73069'
version '0.0.1'
# depends_on 'cmake'
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}"
# system "cmake . #{std_cmake_parameters}"
system "make install"
end
end
require 'formula'
class Mymemcheck <Formula
url 'http://gist.github.com/raw/227178/d03bb254c9a28206d6ed516947e1893472ab9558/mymemcheck.rb'
homepage 'http://gist.github.com/227178'
sha1 '8100730d0bf26c2d374aba2ceb5f8e1b4fc73069'
version '0.0.1'
def install
bin.install Dir['*']
end
end
$ brew install -vd mymemcheck
$ which mymemcheck.rb
/usr/local/bin/mymemcheck.rb
7.1.3 ScriptFileFormula
スクリプトファイルを /usr/local/bin> にリンクするだけなら、Formula の代わりに ScriptFileFormula を継承すると簡単。
# see ack.rb for an example usage
class ScriptFileFormula <Formula
def install
bin.install Dir['*']
end
end
7.1.4 GithubGistFormula
スクリプトファイルを gist から持ってくるなら、Formula の代わりに GithubGistFormula を継承すると簡単。
# see flac.rb for example usage
class GithubGistFormula <ScriptFileFormula
def initialize name=' __UNKNOWN__'
super name
@version=File.basename(File.dirname(url))[0,6]
end
end
8 コマンド紹介(外部コマンド編)
brew-{command} という名前の実行可能ファイルか、brew-{command}.rb という Ruby スクリプトが、PATH からたどることが出来るなら、 command を外部コマンドとして実行できる。 実行可能ファイルは exec で実行され、ruby スクリプトファイルは、require によって実行される。
8.1 $ brew audit [formula]
指定した formula か全ての Formula が Homebrew のコーディングスタイルに違反していないか検査する。
8.2 $ brew fetch formula
その formula の tarball をダウンロードするか VCS からチェックアウトする。MD5 と SHA1 のチェックサムも表示。
8.3 $ brew man
man ページを再構築する。
ronn が必要。
8.4 $ brew missing
依存関係が失われた Formula を調べる。
8.5 $ brew server
利用可能な Formula をブラウズするサーバアプリを立ち上げる。
sinatra が必要。
8.6 $ brew test formula
test メソッドを実装している Formula について、テストを実行する。
8.7 $ brew graph
グラフデータを出力。
9 Formula Cookbook から抜粋メモ
9.1 約束事
- インストールで使うコマンドは絶対パスで指定すること
- マニュアルは {$prefix}/share/man/ 以下に書き出すように
- Formula のファイル名とクラス名
- /[-_.\s]/ で分割しキャメルケースに変換したものがクラス名 (+ という文字は x に置換される)
- クラス名の逆がファイル名
9.2 Commit
- コミットメッセージの先頭行は 50 文字以内
- 一行あけて、三行目に説明を書く
$ cd /usr/local
$ git add Library/Formula/foo.rb
$ git commit
9.3 Push
- Homebrew を fork して使う
- pull request より issue ticket
$ gem install github
$ cd `brew --prefix`
$ github fork
$ git push myname master
9.4 インストールの手続き
- Formula.download_strategy でインスタンス作成
- DownloadStrategy.fetch でダウンロード
- サンドボックス (/tmp/homebrew) が作られる
- DownloadStrategy.stage で展開
- パッチ適用
- カレントディレクトリを stage ディレクトリに変更 (make コマンドなど、カレントディレクトリに依存するケースに対応)
- Formula.install
- keg にインストールされるだけ
- Homebrew のプレフィクスから keg にリンクする
- 注意事項が表示される
9.5 ユーティリティ紹介
9.5.1 bin.install(paths)
指定したパスにマッチするものを keg の bin/ にインストールする。
9.5.2 inplace path, before, after
path にあるファイルの中身の before から after に書き換える。
9.5.3 patches
patches メソッドを定義して、その戻り値で当てたいパッチを文字列や Hash で指定できる。
9.5.4 HEAD
install 時に --HEAD オプションを指定すると trunk/master/HEAD をチェックアウトする。 そのときに使うリポジトリの URL を head メソッドで指定しておく。
class Foo < Formula
head 'git://github.com/mxcl/lastfm-cocoa.git'
end
9.5.5 download_strategy
ダウンロード方法を指定する。
class Bar < Formula
def download_strategy; GitDownloadStrategy; end
head '/users/abc/src/git.git'
end
9.5.6 prefix.install(paths)
コンパイル不要でコピーするだけの様な場合に使える。
prefix.install ['file1', 'file2']
prefix.install Dir['*']
9.5.7 変数など
変数名 | デフォルト値 | 例示 |
---|---|---|
name | Formula の名前 | foo |
HOMEBREW_PREFIX | /usr/local | |
prefix | #{HOMEBREW_PREFIX}/Cellar/#{name}/#{version} | /usr/local/Cellar/foo/0.1 |
bin | #{prefix}/bin | /usr/local/Cellar/foo/0.1/bin |
lib | #{prefix}/lib | etc. |
man | #{prefix}/share/man |
9.5.8 keg_only
/usr/local/bin などへリンクせず、keg で止める。
10 環境変数一覧
- HOMEBREW_DEBUG
- HOMEBREW_DEBUG_INSTALL
- HOMEBREW_DEBUG_PREFIX
- HOMEBREW_EDITOR
- HOMEBREW_KEEP_INFO
- HOMEBREW_SVN
- HOMEBREW_TEMP
- HOMEBREW_USE_LLVM
- HOMEBREW_VERBOSE
11 メモ
コマンドによってはシェルを開くため、cd しただけかと思いながら実は別シェルを開いているという罠がある。