setup.rb ユーザマニュアル

簡単な解説

setup.rb は主に ruby スクリプトと拡張モジュールを対象としたコマンド ラインベースのインストーラです。複数のパッケージ、拡張モジュールなどを 含むパッケージのインストールを自動化することができます。

ユーザからの setup.rb の使い方

ユーザが setup.rb を使ってインストールする過程を説明します。 通常は次の三行で十分です。($ はプロンプト、# はスーパーユーザ)

$ ruby setup.rb config
$ ruby setup.rb setup
# ruby setup.rb install
config は設定の変更・調整で、setup が主にコンパイル、install が 実際のインストールです。

以下、もう少し正確に説明します。setup.rb にはグローバルオプションと コマンド、そしてコマンド専用のオプションがあります。組みあわせとしては 以下のようになります。

ruby setup.rb グローバルオプション
ruby setup.rb コマンド
ruby setup.rb コマンド コマンドオプション
cvs を知っている人は似たようなものだと思ってください。 まずグローバルオプションとしては次の三種類が使えます。
--help
setup.rb の使いかたなどを表示
-v,--version
setup.rb のバージョンを表示
--copyright
setup.rb の著作権を表示
コマンドは以下の 6 つです。
config
設定を変え、保存する
setup
コンパイルなど、ファイル内容の変更を行うもの
install
インストール
show
現在のコンフィグを表示する
clean
拡張モジュールに対し make clean を実行
dryrun
実際にインストールせずにライブラリを使ってみる。 おそらくアプリケーションには通用しない
続いて順次コマンドのオプションを解説します。

config

--prefix
rbdir sodir などの共通部分のパス
--std-ruby
Ruby の標準ライブラリのパス
--site-ruby
site_ruby
--bin-dir
実行可能ファイル(コマンド)がインストールされるパス
--rb-dir
Ruby スクリプトがインストールされるパス
--so-dir
拡張モジュールがインストールされるパス
--data-dir
データがインストールされるパス
--ruby-path
#! 行にセットする ruby のパス
--ruby-prog
インストールに使う ruby のパス
--make-prog
make を指定
--with
インストールするパッケージ/ディレクトリ
--without
インストールしないパッケージ/ディレクトリ
--rb-config
デフォルトの設定に使う rbconfig.rb すべて --opt=value の形で指定します。途中に空白があってはいけません。 また、--with と --without には ',' で区切って複数の値をあたえられます。 ext/myext のように直接ディレクトリを指定することもできます。 さらに ext/* のようにワイルドカードも使えます。

install

--no-harm
挙動を表示するだけで実行しません。

dryrun
コマンドに与えられたオプションはそのまま ruby に渡します。

他のコマンドにはオプションはありません。

パッケージ配布者側からの使い方

setup.rb はパッケージが以下のようなディレクトリ構造になっていることを 前提にしています。

package-top/
  setup.rb
  lib/
    [dirs...]/
    PATHCONV
  ext/
    [dirs...]/
    PATHCONV
  bin/
    [dirs...]/
    PATHCONV
  share/
    [dirs...]/
    PATHCONV
見ての通り lib ext bin share の四つのディレクトリが並んでいて、 トップに setup.rb です。lib などの中にはディレクトリが並んでいて、 さらにその中に *.rb や *.c をいれます。 種別としては、lib は ruby スクリプト、ext は拡張モジュール、 bin がコマンド、share がデータ(画像ファイルやリソースなど)です。

種別のディレクトリにひとつある PATHCONV はそれぞれの インストール先やパッケージ分類を記述するために使います。 PATHCONV のフォーマットは、以下のようになっています。

ディレクトリ名 所属パッケージ名 インストール先パス
ディレクトリ名 所属パッケージ名 インストール先パス
                        :
空行や余計な空白はなるべく入れないでください。コメントはありません。 また要素間の空白もひとつだけです。 「ディレクトリ名」はそのとおり、lib/ などの下にならんでいるディレクトリ名。 「パッケージ名」はそのディクレトリが所属するパッケージ名。 「インストール先パス」は、標準パス (ライブラリなら例えば /usr/lib/ruby/site_ruby/1.6/) からの相対パスです。 例えば、require 'mylib/worker' のようにして使えるようにしたければ、 ここには「mylib」と書きます。そうでなく、require 'worker' のように したいなら「.」(ピリオドひとつ) と書きます。以下に実際の例を示します。
mails tmail tmail
cparse raccrt racc
strscanso strscan .
これは TMail というライブラリの ext/PATHCONV で、'mails' 'cparse' 'strscan' の みっつのディレクトリを含んでいます。それぞれの「所属パッケージ」は tmail raccrt strscan で、インストール先は tmail racc strscan です。

動作をフックする

setup や install などで行う動作は、普通は setup.rb が判断してよきに はからってくれるのですが、それでは不十分で他の動作を追加したいことも あります。そのような場合はフックを記述して動作を補うことができます。

方法は、パッケージのトップディレクトリに「setup/パッケージ名.rb」を作り、 その中で InstallerHook を継承したクラス「InstallerHook_パッケージ名」を定義します。 そのクラスで「pre_タスク」「post_タスク」というメソッドを定義すると タスクの実行前・実行後にそのメソッドが実行されるようになります。

たとえば以下は setup/tmail.rb の例です。

class InstallerHook_tmail < InstallerHook
  def pre_setup
    Dir.mkdir 'doc'
    system "rd2html #{package_root}/doc/manual.rd > doc/manual.html"
  end

  def post_setup
    # なにかする
  end
end

なお、setup.rb はすでに srcdir に対応しているので、実行されるときに パッケージのトップディレクトリにいるかどうかはわかりません。パッケージの トップは package_root() を使って取得してください。一方なにかを作るときは、 逆にカレントディレクトリの下に作ってください。

setup.rb を使うメリット

このシステムはなんだか複雑に思えます。それでも setup.rb を使うメリットは 何でしょうか。それは、「統一された設定のためのインターフェイスを提供できる」 という一点につきます。
setup.rb は、コマンドラインオプションを与えることで、lib や ext の インストール先を変更できるようになっています。 また、パッケージごとに インストールするかしないかを選択することもできます。 特に、ひとつのアーカイブにたくさんのパッケージが入っている場合は、 全部まとめて設定を行えるのは非常に便利です。 また README などを簡潔にすることができ、慣れない(慣れてるかもしれないけど…) 英語で書く量を減らすことができます。

ライセンス

GNU General Public License (GPL) version 2 です。 詳細はファイル GPL を見てください。また、setup.rb を使って インストールするプログラムが GPL である必要はありません。


Copyright (c) 2000,2001 Minero Aoki <aamine@loveruby.net>