HomeBrewのFormulaを作ってみました。ということで備忘録。
作り方
サンプルはこちらです→tzmfreedom/homebrew-clipserver: HomeBrew formula for clipserver using go.HomeBrewはgitとRubyで出来ており、gitでFormulaのRubyスクリプトをpullして、pullしてきたRubyスクリプトでインストールを行うフローになっています。
以下でFormulaのテンプレートを作成可能です。
$ brew create {配布ファイルのURL}
配布ファイルのURLはxxx-{VERSION}.tar.gzの形式になっていると、Formulaのsha256にファイルのハッシュがセットされます。また、デフォルトで配布ファイルのURLに対してGETするようになっているので、配布ファイルをまだWebに上げていない場合は、以下のように–no-fetchオプションを指定する必要があります。その場合はダウンロードをしないのでsha256はセットされません。
$ brew create https://example.com/foo-0.1.tar.gz --no-fetch
上記コマンドを実行すると、エディタが自動的に開き、Formulaのスクリプトを記述していきます。
class Clipserver < Formula
desc ""
homepage ""
url "http://github.com/tzmfreedom/homebrew-clipserver.git"
version "0.0.1"
sha256 ""
def install
bin.install "bin/clipserver"
end
test do
system "false"
end
end
クラスメソッドでFormulaの属性値(description、ホームページ、配布ファイルのURL、配布ファイルのsha256、依存パッケージなど)を設定してinstallメソッドでインストール時の挙動(主にビルドやファイルの移動)を定義することになります。上記のurl属性はgitのリポジトリになっていますが、ファイルのダウンロードができればS3でも何でもOKです。また、対象のファイルは単一のファイルでも良いですし、gunzipで圧縮しても良いです。
bin.installをすると展開したファイル(/usr/local/Cellar/{PACKAGE}/{VERSION}内のファイル)に対するシンボリックリンクを/usr/local/binの中に作成してくれます。
インストール後に対象のシンボリックリンクの削除や再作成を行う場合は、以下のコマンドを叩きます。
$ brew unlink {PACKAGE} # 削除
$ brew link {PACKAGE} # 作成
今回は公式ではないリポジトリを自身で作成し、そのリポジトリをローカルのMacから利用します。その際、tapのコマンドを使ってリポジトリを追加する必要があります。以下のコマンドで公式ではないリポジトリを追加できます。
$ brew tap {URL}
URLの形式ではなく{USER}/{REPOSITORY}の名前を入れた場合は、githubに取得しに行くことになります。githubのリポジトリ名は以下の形式にする必要があります。
homebrew-{REPOSITORY}
リポジトリ直下には上記のFormulaのスクリプトを置く必要があります。
tapでリポジトリを追加したら以下のコマンドでパッケージをインストールできます。
$ brew install {PACKAGE}