「brew install 自分のパッケージ」をやりたい
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を当てたりすることは本家のマニュアルに書いてある