2016-11-11

HomeBrewのFormulaを作ってみた

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}

参考URL

このエントリーをはてなブックマークに追加