bundlerで管理されたrubyプロジェクトを完全に単体で動作させる。
rubyはbundlerによるgemの管理で依存関係にあるライブラリを簡単に導入できる。
しかし、セキュリティに厳しい環境や開発者以外のユーザーに配布したい場合には、yum ruby installやbundle install でリモートからソースコードを取得させるのが困難な場合もある。
そのようなプロジェクトの場合には、プロジェクト内に全ての依存関係にあるライブラリを入れて管理する必要がある。
rubyインタープリンタのRPMをつくる。
RPMの形でプロジェクトのリポジトリに入れておけば、オフラインで簡単にインストールできる。
gemを含むいくつかのライブラリがインストールされる。
yum install make gcc rpm-build libyaml-devel readline-devel ncurses-devel tcl-devel gdbm-devel openssl-devel db4-devel byacc libyaml libffi-devel -y
mkdir rpmbuild/
mkdir rpmbuild/SOURCES
mkdir rpmbuild/SRPMS
mkdir rpmbuild/SPECS
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.5.tar.gz -P rpmbuild/SOURCES
wget https://raw.githubusercontent.com/hansode/ruby-2.1.x-rpm/master/ruby21x.spec -P rpmbuild/SPECS
cd rpmbuild/SPECS
rpmbuild -bb ruby21x.spec
rpmbuild/SOURCES配下のrpmを同梱しよう。
bundlerの同梱
必要なgemはbundlerを使ってインストールするが、bundler自体は上では入らない。
以下のように事前にとっておく。
wget https://rubygems.org/downloads/bundler-1.10.6.gem
bundlerの.gemがカレントディレクトリにある場合にはgem install でそれが使われる。 インストール時は以下でOK
gem install bundler --local
依存gemの同梱
以下のようなGemfileがあると仮定する。
#Gemfile
gem 'rspec'
Gemfileがある場所で以下のコマンドを入力すると,vendor/cache/に依存関係にあるgemファイルをすべて出力してくれる。
bundle package
vendor/cache/をプロジェクトに同梱してやるとbundle installした際の探索パスとして使用されるため、オフラインでのbundle installが可能。 ただし、普通にbundle installした場合にはvendor/cache/ruby/にgemがインストールされる。
この場合、bundle execで実行するか適切にパスを通す必要がある。
gemがrspecなどの実行ファイルを含みこれを他人につかわせる場合、これは不便。
以下の用にすることで普通にインストールされる。
bundle install --system