akishin999の日記

調べた事などを書いて行きます。

Apache 2.4 + Ruby 2.0 + Passenger 4 環境を構築する

最新版の RubyApache での環境構築手順を整理してまとめてみました。
それぞれ RPM を作成してインストールしています。
また、Passenger も最新の 4 系にしてみました。

OS は Webサーバ、RPM作成用サーバ共に CentOS 6.4 x86_64 です。

rpm-build の準備

rpmbuild と rpmdevtools と redhat-rpm-config をインストール。

# yum install -y rpm-build rpmdevtools redhat-rpm-config

RPM 作成用のユーザを作成します。

# useradd rpmdevel

作成したユーザになり、rpmdev-setuptree コマンドを実行します。

# su - rpmdevel
$ rpmdev-setuptree

これで RPM ファイル作成の準備は完了です。

Apache 2.4.4 の RPM を作成する

Apache の 2.4.4 の RPM を作成します。
まずは再び root ユーザになり、依存ライブラリをインストール。

$ su -
# yum install automake autoconf libtool doxygen expat-devel libuuid-devel db4-devel \
              postgresql-devel mysql-devel sqlite-devel unixODBC-devel openldap-devel \
              openssl-devel nss-devel zlib-devel libselinux-devel pcre-devel openldap-devel \
              lua-devel libxml2-devel openssl-devel
# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/freetds-0.91-2.el6.x86_64.rpm \
              http://dl.fedoraproject.org/pub/epel/6/x86_64/freetds-devel-0.91-2.el6.x86_64.rpm

distcache は RPM が無いので、FedoraSRPM をリビルドしてインストールします。

# su - rpmdevel
$ wget http://ftp.riken.jp/Linux/fedora/releases/18/Everything/source/SRPMS/d/distcache-1.4.5-23.src.rpm
$ rpmbuild --rebuild distcache-1.4.5-23.src.rpm
$ exit
# yum install /home/rpmdevel/rpmbuild/RPMS/x86_64/distcache-1.4.5-23.x86_64.rpm \
              /home/rpmdevel/rpmbuild/RPMS/x86_64/distcache-devel-1.4.5-23.x86_64.rpm

aprRPM を作成してインストール。

# su - rpmdevel
$ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-1.4.8.tar.bz2
$ rpmbuild -tb apr-1.4.8.tar.bz2
$ exit
# yum install /home/rpmdevel/rpmbuild/RPMS/x86_64/apr-1.4.8-1.x86_64.rpm \
              /home/rpmdevel/rpmbuild/RPMS/x86_64/apr-devel-1.4.8-1.x86_64.rpm

apr-util の RPM を作成してインストール。

# su - rpmdevel
$ wget http://ftp.kddilabs.jp/infosystems/apache/apr/apr-util-1.5.2.tar.bz2
$ rpmbuild -tb apr-util-1.5.2.tar.bz2
$ exit
# yum install /home/rpmdevel/rpmbuild/RPMS/x86_64/apr-util-1.5.2-1.x86_64.rpm \
              /home/rpmdevel/rpmbuild/RPMS/x86_64/apr-util-devel-1.5.2-1.x86_64.rpm

ここまででやっと httpdRPM を作成する準備ができました。
Apacheソースコードをダウンロードして rpmbuild します。

# su - rpmdevel
$ wget http://ftp.kddilabs.jp/infosystems/apache/httpd/httpd-2.4.4.tar.bz2
$ rpmbuild -tb httpd-2.4.4.tar.bz2

これで ApacheRPM が生成されました。
作成した RPM ファイルはインストール用の Web サーバにコピーしておきます。

Ruby 2.0 p195 の RPM を作成する

root ユーザになり、依存ライブラリをインストールします。

$ su -
# yum install -y gcc make unzip byacc readline-devel ncurses-devel gdbm-devel glibc-devel tcl-devel openssl-devel db4-devel libffi-devel
# yum install -y http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/libyaml-0.1.3-1.el6.x86_64.rpm \
                 http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/libyaml-devel-0.1.3-1.el6.x86_64.rpm

RPM 作成用ユーザになり、Rubyソースコードをダウンロードします。

# su - rpmdevel
$ wget -O ~/rpmbuild/SOURCES/ruby-2.0.0-p195.tar.gz ftp://ftp.ruby-lang.org/pub/ruby/2.0/ruby-2.0.0-p195.tar.gz

次に SPEC ファイルを用意します。
検索してみると、2.0 用の SPEC ファイルがいくつか配布されていました。

hansode/ruby-2.0.0-rpm
https://github.com/hansode/ruby-2.0.0-rpm

specfiles/ruby-2.0/ruby-2.0.spec at master nmilford/specfiles
https://github.com/nmilford/specfiles/blob/master/ruby-2.0/ruby-2.0.spec

ここでは上の方を利用させて頂きました。

$ wget -O ~/rpmbuild/SPECS/ruby200.spec https://raw.github.com/hansode/ruby-2.0.0-rpm/master/ruby200.spec

準備が出来たので rpmbuild を実行します。

$ rpmbuild -ba ~/rpmbuild/SPECS/ruby200.spec

これで RubyRPM が生成されました。
Apache の時と同じく、作成した RPM ファイルは Web サーバへコピーしておきます。

RPM のインストール

Web サーバに作成した RPM ファイルをインストールしていきます。

まずは ApacheRPM をインストールします。
生成された RPM ファイルのうち、取りあえず以下だけインストールしました。

# yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/freetds-0.91-2.el6.x86_64.rpm \
              distcache-1.4.5-23.x86_64.rpm \
              apr-1.4.8-1.x86_64.rpm \
              apr-devel-1.4.8-1.x86_64.rpm \
              apr-util-1.5.2-1.x86_64.rpm \
              apr-util-devel-1.5.2-1.x86_64.rpm \
              httpd-2.4.4-1.x86_64.rpm \
              httpd-devel-2.4.4-1.x86_64.rpm \
              httpd-tools-2.4.4-1.x86_64.rpm \
              mod_authnz_ldap-2.4.4-1.x86_64.rpm \
              mod_lua-2.4.4-1.x86_64.rpm \
              mod_proxy_html-2.4.4-1.x86_64.rpm \
              mod_socache_dc-2.4.4-1.x86_64.rpm \
              mod_ssl-2.4.4-1.x86_64.rpm

バージョンを確認します。

# apachectl -v
Server version: Apache/2.4.4 (Unix)
Server built:   Jun 23 2013 22:02:50

問題なさそうです。

次は RubyRPM をインストールします。

# yum install http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/libyaml-0.1.3-1.el6.x86_64.rpm \
              ruby-2.0.0p195-2.el6.x86_64.rpm

バージョンを確認します。

# ruby -v
ruby 2.0.0p195 (2013-05-14 revision 40734) [x86_64-linux]
# gem -v
2.0.2

こちらも問題無さそうですね。

これで ApacheRuby の最新版がインストール出来ました。

Passenger のインストール

続いて Passenger をインストールします。

# gem install passenger --no-rdoc --no-ri

Passenger の Apache モジュールをビルドするのに必要なライブラリをインストールします。

# yum install gcc-c++ make openssl-devel zlib-devel libcurl-devel

passenger-install-apache2-module を実行して Apache モジュールをビルドしてインストールします。

# passenger-install-apache2-module

httpd.conf を編集します。

# vi /etc/httpd/conf/httpd.conf

CentOS 標準の Apache とは ServerRoot に指定されているパスが違ってしまっているので、それを修正します。

#ServerRoot "/usr"
ServerRoot "/etc/httpd"

また、module を読み込むディレクトリのパスも異なっています(modules/モジュール名 のはずが lib64/httpd/modules/モジュール名、になってしまっている)。

こちらは LoadModule なので数が多いため、一括置換しました。
vi で開いている場合は以下を実行。

:%s/lib64\/httpd\///g

Apache が /etc/httpd/conf.d 以下の設定ファイルを読み込んでくれるようにするため、以下の設定を追記して保存します。

Include conf.d/*.conf

保存したら設定ファイルに問題がないか確認します。

# apachectl configtest
Syntax OK

問題がなければ、次はモジュール用の設定ファイルを作成します。

# vi /etc/httpd/conf.d/passenger.conf

passenger-install-apache2-module の完了後に出た設定内容を記述。

LoadModule passenger_module /usr/lib64/ruby/gems/2.0.0/gems/passenger-4.0.5/libout/apache2/mod_passenger.so
PassengerRoot /usr/lib64/ruby/gems/2.0.0/gems/passenger-4.0.5
PassengerDefaultRuby /usr/bin/ruby

モジュールが読み込まれているか確認します。

## apachectl -M | grep passenger
 passenger_module (shared)

これで一通り完了です。