FrontPage  Index  Search  Changes  RSS  Login

[system][osx] Homebrew 使い方メモ

Homebrew

(訳) home-brew: 自家醸造飲料(ビール、酒)

インストール

$ ruby -e "$(curl -fsS http://gist.github.com/raw/323731/install_homebrew.rb)"
  1. /usr/local/ 以下のパーミッションを調整
  2. リポジトリから tar ボールをダウンロード
  3. tar ボールを /usr/local/ 以下に展開
  4. 詳しくは: http://gist.github.com/raw/323731/install_homebrew.rb

語彙

Formula

  • (和訳) 調理法
  • (用語) パッケージの説明書

Keg

  • (和訳) 小たる、たるビール
  • (用語) Formula のインストール先パス

Celler

  • (和訳) 地下貯蔵室
  • (用語) Keg 群のインストール先パス

まずは

  • Formula のアップデートなどに git を使うので、git を入れておくと便利。
  • home コマンドを実行すると Homebrew のホームページをブラウザで開くので、目を通しておくとよい。
  • 実際にコマンドで何ができるかは man ページに目を通しておくとよい。
$ brew install git
$ brew update
$ brew home
$ man brew

コマンド紹介(標準コマンド編)

$ brew search text

指定文字列( text )の部分マッチで Formula を検索する。

$ brew search /regex/

指定正規表現のマッチングで Formula を検索する。

$ brew install [options] formula

$ brew install --interactive [--git] formula

  • --interactive
    • ダウンロードして展開した後、シェルを開いて対話的なインストール作業を実施できる。
  • --git
    • パッチ作りなどに役立てるために git リポジトリを作る。

$ brew list

インストール済みの全ての Formula を表示する。

$ brew formula

その formula のインストール済みファイルを表示する。

$ brew info formula

その formula についての情報を表示する。

$ brew info -github formula

その formula の github の履歴ページをブラウザで開く。

$ brew info --all

全ての Formula の情報のサマリを表示する。

$ brew info URL

http:// 始まりの URL を指定すると、その URL からパッケージ名とバージョン番号を推測して表示する。

$ brew home

Homebrew のホームページをブラウザで開く。

$ brew formula

その formula のホームページをブラウザで開く。

$ brew remove formula

その formula を削除(アンインストール)する。

$ brew link formula

その formula のインストールされたファイルにリンクする。

$ brew unlink formula

その formula のインストールされたファイルへのリンクを解除する。

$ brew prune

デッドリンクになっているものを削除する。

$ brew outdated

アップデートがある Formula の一覧を表示する。

$ brew deps [--1] formula

その formula の依存関係を表示する。 --1 をつけた場合、一階層の依存関係のみを表示。

$ brew uses [--installed] formula

その formula に依存している Formula を表示する。 --installed をつけた場合、インストール済みの Formula のみを表示する。

$ brew doctor

システムの潜在的な問題を報告する。

$ brew cat formula

その formula のファイル内容を表示する。

$ brew cleanup [ formula ]

古いバージョンの Formula を削除する。 formula が指定されれば、その formula についてのみ。

$ brew update

git を使って Homebrew および Formula の新しいバージョンにアップデートする。

$ brew create [--cache] URL

パッケージのソースアーカイブの URL を指定して Formula を作成する。

$ brew crewate --macports|fink formula

MacPorts か Fink のパッケージ検索結果ページをブラウザで開く。

$ brew edit formula

指定した formula をエディタで開く。

$ brew edit

全ての Formula を TextMate(mate) で開く。

Formula を自作する

http://wiki.github.com/mxcl/homebrew/formula-cookbook

Gist ファイルの Formula を作ってみる

手順

  1. create すると EDITOR で Formula ファイル(ひな形)が開くので、ソフトウェアのホームページの URL などを記入する(環境変数 HOMEBREW_EDITOR を設定していれば、そのエディタで開く)
  2. パッケージ名やバージョン番号の推測が期待通りでなければ修正する(Formula のファイルはパッケージ名に依存するので、必要に応じて変更しておく)。
  3. fetch コマンドを使うとハッシュを調べられる(ダウンロード後のファイルでハッシュ値を得ていいのかという話は別)
  4. ハッシュ値を記入する
  5. install メソッドにインストールの手続きを書く
  6. インストールしてみる

実行履歴

$ 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

ScriptFileFormula

スクリプトファイルを /usr/local/bin にリンクするだけなら、Formula の代わりに ScriptFileFormula を継承すると簡単。

# see ack.rb for an example usage
class ScriptFileFormula <Formula
  def install
    bin.install Dir['*']
  end
end

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

コマンド紹介(外部コマンド編)

brew-{command} という名前の実行可能ファイルか、brew-{command}.rb という Ruby スクリプトが、PATH からたどることが出来るなら、 command を外部コマンドとして実行できる。 実行可能ファイルは exec で実行され、ruby スクリプトファイルは、require によって実行される。

$ brew audit [ formula ]

指定した formula か全ての Formula が Homebrew のコーディングスタイルに違反していないか検査する。

$ brew fetch formula

その formula の tarball をダウンロードするか VCS からチェックアウトする。MD5 と SHA1 のチェックサムも表示。

$ brew man

man ページを再構築する。

$ brew missing

依存関係が失われた Formula を調べる。

$ brew server

利用可能な Formula をブラウズするサーバアプリを立ち上げる。

$ brew test formula

test メソッドを実装している Formula について、テストを実行する。

$ brew graph

グラフデータを出力。

Formula Cookbook から抜粋メモ

約束事

  • インストールで使うコマンドは絶対パスで指定すること
  • マニュアルは {$prefix}/share/man/ 以下に書き出すように
  • Formula のファイル名とクラス名
    • /[-_.\s]/ で分割しキャメルケースに変換したものがクラス名(+ という文字は x に置換される)
    • クラス名の逆がファイル名

Commit

  • コミットメッセージの先頭行は 50 文字以内
  • 一行あけて、三行目に説明を書く
$ cd /usr/local
$ git add Library/Formula/foo.rb
$ git commit

Push

  • Homebrew を fork して使う
  • pull request より issue ticket
$ gem install github
$ cd `brew --prefix`
$ github fork
$ git push myname master

インストールの手続き

  1. Formula.download_strategy でインスタンス作成
  2. DownloadStrategy.fetch でダウンロード
  3. サンドボックス (/tmp/homebrew) が作られる
  4. DownloadStrategy.stage で展開
  5. パッチ適用
  6. カレントディレクトリを stage ディレクトリに変更(make コマンドなど、カレントディレクトリに依存するケースに対応)
  7. Formula.install
  8. keg にインストールされるだけ
  9. Homebrew のプレフィクスから keg にリンクする
  10. 注意事項が表示される

ユーティリティ紹介

bin.install(paths)

指定したパスにマッチするものを keg の bin/ にインストールする。

inplace path, before, after

path にあるファイルの中身の before から after に書き換える。

patches

patches メソッドを定義して、その戻り値で当てたいパッチを文字列や Hash で指定できる。

HEAD

install 時に --HEAD オプションを指定すると trunk/master/HEAD をチェックアウトする。 そのときに使うリポジトリの URL を head メソッドで指定しておく。

class Foo < Formula
  head 'git://github.com/mxcl/lastfm-cocoa.git'
end

download_strategy

ダウンロード方法を指定する。
class Bar < Formula
  def download_strategy; GitDownloadStrategy; end
  head '/users/abc/src/git.git'
end

prefix.install(paths)

コンパイル不要でコピーするだけの様な場合に使える。

prefix.install ['file1', 'file2']
prefix.install Dir['*']

変数など

変数名デフォルト値例示
nameFormula の名前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

keg_only

/usr/local/bin などへリンクせず、keg で止める。

環境変数一覧

  • HOMEBREW_DEBUG
  • HOMEBREW_DEBUG_INSTALL
  • HOMEBREW_DEBUG_PREFIX
  • HOMEBREW_EDITOR
  • HOMEBREW_KEEP_INFO
  • HOMEBREW_SVN
  • HOMEBREW_TEMP
  • HOMEBREW_USE_LLVM
  • HOMEBREW_VERBOSE

メモ

コマンドによってはシェルを開くため、cd しただけかと思いながら実は別シェルを開いているという罠がある。

Last modified:2011/02/23 17:59:03
Keyword(s):[osx] [homebrew]
References: