2009年9月16日水曜日

ユーザ権限でgemをインストール

gemをインストールするにあたって、ユーザ権限でインストールしている。
ユーザ権限でインストールを行なうと、~/.gem配下にインストールされる。

pure rubyのgemの場合には問題無くインストール出来るが、sqlite3-rubyをイ
ンストールする際に、2点程注意点があるので、その備忘録。

なにも考えず、以下のコマンドだとインストールエラーとなった。

gem install


結論から言うと、以下のコマンドでインストール出来た。

env RB_USER_INSTALL= gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


そもそも、sqlite3-rubyはpure rubyのコードでは無く、C言語のソースをコン
パイルしてOSネイティブのライブラリを作成して、インストールされている。

sqlite3-rubyについては、extconf.rbを実行することで、Makefileを作成して、
コンパイルを実施している。他のOSネイティブのライブラリを用意するgemも、
多くはextconf.rbを使用していると思われるので、同様の手順で実施可能であ
ろう。

ライブラリの指定


対象gem固有のextconf.rbオプションの設定について。

gem install sqlite3-ruby -- \
--with-sqlite3-include=/usr/local/include \
--with-sqlite3-lib=/usr/local/lib


gem installをそのまま指定した場合、sqliteのライブラリを見つけることが
出来なかった。~/.gem/ruby/1.8/gems/sqlite3-ruby-1.2.5/README.txtにやり
かたその物が記載されていたので、それを参考に実施。

gem installの引数に、「--」で区切って、extconf.rbに渡す引数を指定する
のがミソのようだ。

ユーザ権限でインストール


extconf.rbを用いてユーザ権限でインストールする方法について。

env RB_USER_INSTALL= gem install 。。。


FreeBSDのextconf.rbはデフォルトではインストール時に、インストールファ
イルをroot権限に変更しようとする。その為、ユーザ権限でインストールしよ
うとしても、ファイルをroot権限に変更出来ないのでエラーとなる。
環境変数 RB_USER_INSTALL を設定してあげれば、ユーザ権限でインストール
が可能になるので、コマンドラインでenvを用いて指定してあげる。

0 件のコメント: