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/* のようにワイルドカードも使えます。
各オプションのデフォルト値は ruby setup.rb --help で見られます。

install

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

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

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

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

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

パッケージのトップ/
  setup.rb
  setup/
      パッケージ名1.rb
      パッケージ名2.rb
  lib/
      [dirs...]/*.rb
  ext/
      [dirs...]/*.c
  bin/
      [dirs...]/*
  share/
      [dirs...]/*
setup.rb と setup/ が全体でインストーラになり、lib/ ext/ bin/ share/ の 四つのディレクトリにはインストールされるファイルが入ります。ディレクトリは ファイルの種別によって区別されていて、lib は ruby スクリプト(ライブラリ)、 ext は拡張モジュール、bin がコマンド、share がデータ(画像やリソースなど) です。

setup.rb はこのアーカイブに入っているものをそのままコピー。setup/ には ユーザが定義したパッケージごとのインストーラを入れます。と言っても、 setup.rb でほとんどの部分を用意するので、ユーザはクラスを継承してちょこっと 書くだけです。具体的には以下のようなものを書きます。

class Installer_tmail < Installer
  DIRS = {
    'lib/tmail' => 'tmail',
    'ext/b64'   => 'tmail',
    'ext/mails' => 'tmail'
  }
end

まず Installer を継承したクラス「Installer_パッケージ名」を定義し、 その中の定数 DIRS に「ディレクトリ→インストール先」の対応を書いた ハッシュをセットします。「ディレクトリ」はアーカイブの lib/* とか ext/* のことで、インストール先とは require するときの名前の ディレクトリ部分です。たとえば lib/tmail/loader.rb を require 'tmail/loader' として require できるようにしたいなら 「インストール先」は例のとおり「tmail」になります。require 'loader' としたい場合は「.」(ピリオド一個)です。

以前のバージョンとの互換性

setup.rb の 2.1 以前のバージョンではかわりに PATHCONV という ファイルを使っていましたが、基本的には setup/*.rb に移行します。 互換性のためいちおう PATHCONV があればそっちからも読むように なっていますが、将来は setup/*.rb で統一する予定です。

動作をフックする

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

方法は簡単で、「setup/パッケージ名.rb」で書いたクラス 「Installer_パッケージ名」に setup や install といったメソッドを 追加するだけです。

たとえば以下は setup/tmail.rb で setup をフックする例です。

class Installer_tmail < Installer
  DIRS = { ……省略…… }
  def setup
    Dir.mkdir 'doc'
    system "rd2html #{package_root}/doc/manual.rd > doc/manual.html"
    super   ### 忘れずに!
  end
end

super を絶対に忘れないでください。これを忘れるとパッケージの 拡張モジュールがコンパイルされなくなってしまいます。

なお、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>