rcmdnk's blog
Last update

101 Ideas for Homebrew Fun

Brewall をGitHubに置いてHomebrew(+tap)で管理できる様にした方法についてのメモ。 Brewdlerを参考にしています。 (というかそれ以上の事はしてない。。。)

レポジトリを作る

今回はインストールするパッケージと、Homebrew用のFormulaを 一緒のレポジトリに入れてしまうので、 1つのレポジトリだけ作ります。

レポジトリ名は、tapするため、必ずhomebrew-から始まる名前にします 1。 今回作ったのはhomebrew-brewall:

インストールするファイルの作成

今回作るのはmakeとか必要なく、すでに用意されてるbinディレクトリ等から コピーするだけのものです。 今回は実行スクリプトだけなので、bin/brewallbinディレクトリに 実行ファイルを置いただけ。

Formulaを作る

brewall用のFormulaはこんな感じ。

brewall.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
require 'formula'

HOMEBREW_BREWALL_VERSION = '0.0.1'
class Brewall < Formula
  homepage 'https://github.com/rcmdnk/homebrew-brewall/'
  url 'https://github.com/rcmdnk/homebrew-brewall.git', :tag => "v#{HOMEBREW_BREWALL_VERSION}"
  version HOMEBREW_BREWALL_VERSION
  head 'https://github.com/rcmdnk/homebrew-brewall.git', :branch => 'master'

  skip_clean 'bin'

  def install
    prefix.install 'bin'
    (bin+'brewall').chmod 0755
  end
end

Brewallというクラスを作って行きます。

追記: 2013/12/27

このクラス名にはアンダーバー_が使えないので注意(brew install時にエラーになる)。

追記ここまで

  • homepageは参照できる情報があるページ。(今回はGitHubレポジトリにREADMEがあるのでレポジトリそのもの)
  • urlはパッケージを取得するurl。gitのURLの場合は自動的にgitを使って取って来てくれる。 必要なときは取得方法を指定 2。gitのURLの時、tagを上の様に指定すると masterブランチでなく指定のtagを取ってくる。branchの指定も可能。
  • versionはパッケージのパージョンです。brew updateすると、 tapで取ってきたFormulaもすべてGitHub上でmasterブランチに更新があればFormulaを更新する。 その後、brew upgradeした時、Formulaにあるversionと現在インストールされてる version 3が違う場合更新を行う。新しいタグを作ったり/bin/brewall自体に 更新があったとしてもbrew upgradeでは更新してくれない。あくまでFormulaベースでの確認。
    • Brewdlerをマネて、HOMEBREW_BREWALL_VERSIONという変数を使ってversionを管理。 tag名はv+version numberとなるように。
  • headbrew install brewall --HEADの様にHEADを指定した時に何を取ってくるかの指定。 gitの場合では通常はmasterブランチを指定。
  • skip_clean4clean時にスキップするディレクトリの指定。Homeberwはインストール途中で コンパイルなどを行ったあとに一旦bin以下のバイナリやlib以下の.dylibsに対してリンクを外す、及び空のディレクトリを削除cleanupするが、 この時、今回の様に元々binディレクトリがあってそこからコピーしてインストールしたいような場合、 この時点でこの作業が行われると上手くいかない時がある。上の例でskip_cleanbinを指定しておかないと、 brewallコマンド自体は/usr/local/Cellar/brewall/0.0.1/bin/breallにインストールされて /usr/local/binにもリンクはできるが、途中で行ってるchmodが効かずに実行不能なファイルのままになる。
  • install内でインストール方法を指定する。 今回は単純にbinディレクトリをインストールしたいだけなので、 prefix.install 'bin'だけでOK。libinstallがある場合はそれらもprefix.install lib 等と書けばCellar以下に実体がインストールされて/usr/local/lib等に リンクが貼られる。
    • (bin+'brewall').chmod 0755bin/brewallを実行可能ファイルに。
    • configuremakeが必要なパッケージの場合もここで実行コマンドを記述する。

この内容を記述したファイルをbrewall.rbなどとしてtapするレポジトリに入れておくと、 tap後、このファイル名brewallbrew installで入れられるパッケージの名前として 登録されます。

タグを作る

Homebrewでupdata/upgradeで簡単に更新を適用するためにはタグを作っておくと便利です。 上でFormulaで指定したようにv+version numberのタグを作ります 5

上で作業をひと通り終えたあとで

$ git add .
$ git commit -m "initial import"
$ git push # push master branch
$ git tag -a v0.0.1 -m "first tag"
$ git push --tag # push tag

こんな感じでmasterブランチを送ったあと、masterブランチの現在のスナップショットで tagを作って送ります。

Homebrewでインストールしてみる

$ brew tap rcmdnk/brewall
$ brew search brewall
brewall
$ brew install brewall

Brewallで管理

Brewall自身の場合は鶏が先か卵が先かになってしまいますが、それ以外の場合は

$ brewall -e # open Brewfile
...
tapall 'rcmdnk/brewall'
...
$ brewall

と、Brewfileにtapallでレポジトリを加えてbrewallすれば レポジトリにある全てのFormulaeに対してbrew installまで実行します。

アップデート

パッケージのレポジトリ自体は通常、変更を行ってもbrew update/brew upgradeで 更新されません。--HEADオプションを使ってインストールするときは 最新のmasterがインストールされますが、この場合もupgradeなどでは更新されません。 (--HEADを使うといずれにしろupgradeではアップデート出来ない。)

更新がある程度まとまったら、新たにタグを作り、Formula内のバージョンも 上げてpushします。

これで、

$ brew update
$ brew upgrade

の作業で自動的に新しいタグの内容が反映されます。


Sponsored Links
  1. brew tap

  2. Formula Cookbook#Specifying the Download Strategy explicitly

  3. 各パッケージは/usr/local/Cellar/brewall/0.0.1/な感じでバージョン名のディレクトリにインストールされてます。

  4. Anatomy of a Formula#skip_clean

  5. Gitでタグを使う

Sponsored Links

« Gitでタグを使う Macでのトラックパッドでのドラッグについて »

}