レポジトリを作る
今回はインストールするパッケージと、Homebrew用のFormulaを 一緒のレポジトリに入れてしまうので、 1つのレポジトリだけ作ります。
レポジトリ名は、tapするため、必ずhomebrew-
から始まる名前にします
1。
今回作ったのはhomebrew-brewall:
インストールするファイルの作成
今回作るのはmakeとか必要なく、すでに用意されてるbin
ディレクトリ等から
コピーするだけのものです。
今回は実行スクリプトだけなので、bin/brewall
とbin
ディレクトリに
実行ファイルを置いただけ。
Formulaを作る
brewall用のFormulaはこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
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
となるように。
- Brewdlerをマネて、
head
はbrew install brewall --HEAD
の様にHEAD
を指定した時に何を取ってくるかの指定。 gitの場合では通常はmasterブランチを指定。skip_clean
4はclean
時にスキップするディレクトリの指定。Homeberwはインストール途中で コンパイルなどを行ったあとに一旦bin
以下のバイナリやlib
以下の.dylibs
に対してリンクを外す、及び空のディレクトリを削除cleanupするが、 この時、今回の様に元々bin
ディレクトリがあってそこからコピーしてインストールしたいような場合、 この時点でこの作業が行われると上手くいかない時がある。上の例でskip_clean
にbin
を指定しておかないと、brewall
コマンド自体は/usr/local/Cellar/brewall/0.0.1/bin/breall
にインストールされて/usr/local/bin
にもリンクはできるが、途中で行ってるchmodが効かずに実行不能なファイルのままになる。install
内でインストール方法を指定する。 今回は単純にbin
ディレクトリをインストールしたいだけなので、prefix.install 'bin'
だけでOK。lib
やinstall
がある場合はそれらもprefix.install lib
等と書けばCellar
以下に実体がインストールされて/usr/local/lib
等に リンクが貼られる。(bin+'brewall').chmod 0755
でbin/brewall
を実行可能ファイルに。configure
やmake
が必要なパッケージの場合もここで実行コマンドを記述する。
この内容を記述したファイルをbrewall.rb
などとしてtapするレポジトリに入れておくと、
tap後、このファイル名brewall
がbrew 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
の作業で自動的に新しいタグの内容が反映されます。