それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

HomeBrew の自分用Formulaレシピを作って、自分のバイナリをインストールする。

brew install 自分のパッケージ」をやりたい

brew install で自分のパッケージをインストールしたい。

やりかた

手順としてはそんなに難しくない。

  • brew create でFormula作成
  • github にレポジトリを作る
  • brew tap で持ってくる
  • brew install で使う。

brew create でFormula作成

サンプルとして rarlab のwinrar の rar コマンドを自分で入れると仮定してやってみます。

brew create 'http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz'

この時指定する、rarosx-5.4.0.tar.gz というファイル名からバージョンと名前が自動的に決まります。

テンプレを作るためなので、あとで名前を変えてもオッケ

すると、/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/rarosx.rb にFormulaレシピファイルが作られます。

Formula の編集

brew create で作成されたFormulaは次のようになっています。 ここを編集すると楽ちんです。

# Documentation: https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md
#                http://www.rubydoc.info/github/Homebrew/brew/master/Formula
# PLEASE REMOVE ALL GENERATED COMMENTS BEFORE SUBMITTING YOUR PULL REQUEST!

class Rarosx < Formula
  desc ""
  homepage ""
  url "http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz"
  version "5.4.0"
  sha256 "09a14f40718c68fc1c24b30acb55d0f2f90f3e13b372c48b6ef1e789d748b754"

  # depends_on "cmake" => :build
  depends_on :x11 # if your formula requires any X11/XQuartz components

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    # Remove unrecognized options if warned by configure
    system "./configure", "--disable-debug",
                          "--disable-dependency-tracking",
                         "--disable-silent-rules",
                          "--prefix=#{prefix}"
    system "cmake", ".", *std_cmake_args
    system "make", "install" # if this fails, try separate make/make install steps
  end

  test do
    # `test do` will create, run in and delete a temporary directory.
    #
    # This test will fail and we won't accept that! It's enough to just replace
    # "false" with the main program this formula installs, but it'd be nice if you
    # were more thorough. Run the test with `brew test rarosx`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    #
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"
  end
end

今回はビルド済みパッケージを取り込むだけなので、以下のように編集しました。

class Rarosx < Formula
  desc "rar lab winrar for mac osx command line tools"
  homepage ""
  url "http://www.win-rar.com/fileadmin/winrar-versions/rarosx-5.4.0.tar.gz"
  version "5.4.0"
  sha256 "09a14f40718c68fc1c24b30acb55d0f2f90f3e13b372c48b6ef1e789d748b754"

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel

    bin.install 'rar'
  end

  test do
    #system "false"
  end
end

bin.install について

見たらわかると思いますが、bin.install がDSLになっていて、これを使って、brew がインストールを行ってくれます。

rarosx-5.4.0.tgz を展開すると以下のようになっている。

takuya@rar$ tree .
.
├── acknow.txt
├── default.sfx
├── license.txt
├── order.htm
├── rar
├── rar.txt
├── rarfiles.lst
├── readme.txt
├── unrar
└── whatsnew.txt

この展開済みディレクトリに cd ( Change directory )してWorking Directoryにしたる状態で、brewは作業を始めるので

Formula 側でインストールするときに ./rarファイルを指定してる

def install 
    bin.install 'rar'
end

インストールをテストする。

Forumla 書いたら、次に brew install を試してみる。

takuya@~$ which rar
which: no rar in (snip
takuya@rar$ brew install --verbose --debug rarosx
takuya@~$ which rar
/usr/local/bin/rar

無事インストールができることを確認した。

次にアンインストールも試してみる。

takuya@~$ which rar
/usr/local/bin/rar
takuya@rar$ brew uninstall --verbose --debug rarosx
takuya@~$ which rar
which: no rar in (snip

これでFormula作成が出来た

此のまま使ってもいいんだけど。せっかくなので brew tap するようにしておく。

brew tap するためのレポジトリ名のルール

brew tap するためにレポジトリを作るときは レポジトリ名に prefix として homebrew- をつける

https://github.com/$USERNAME/homebrew-$FORMULA_NAME

たとえば、私の場合、次のようなレポジトリを作った。

https://github.com/takuya/homebrew-winrar-osx

レポジトリをclone してFormulaを作成。

git clone https://github.com/takuya/homebrew-winrar-osx
cd homebrew-winrar-osx
vim winrar-osx.rb

今回は、先の例と違ってファイル名を変えた。

Formulaのファイル名とクラス名はcamel_caseとCamellCaseとの対応になっている。

今回は ファイル名を次のようにしたので、CamelCaseにした。

ファイル名 winrar-osx.rb
クラス名  class WinrarOsx

Formula 作ったら git commit && git push

git commit
git push 

レポジトリ作ったら brew create で作ったFormulaはもういらないので消しておく

rm /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/rarosx.rb

brew で tap する

brew tap takuya/winrar-osx

brew install する

brew install winrar-osx

これで、どんなパッケージでも手軽に brew install できる。はー便利。

configure / make が必要なとき

system './configure' 
system 'make'
bin.install 'name'

などと、system コマンドで実行することで実現できる

man を入れたり、patchを当てたりすることは本家のマニュアルに書いてある

参考資料

http://reiki4040.hatenablog.com/entry/2014/10/19/124447