Amazon Linux AMIでRuby 1.9.2 + Ruby on Rails3.0.0 (checkinstall, sqlite3, passenger etc..) 環境をセットアップ
前回の記事に引き続き、 Amazon EC2で奮闘したメモです。
PHPはレンタルサーバー借りれば最初から動いていることが多くて、CakePHPとかだとファイルアップロードすれば動く、みたいな状態になっていることが多いですよね。Ruby on Railsは始めてだったので苦労しました・・・。
ほとんどソーシャルアプリ関係ないですが、環境作ったあと、これからアプリ作っていきます。
Amazon Linux AMIをあえて使う必要もないかもしれません。今のところメリットが見えませんが、さくっと環境整えるにはちょうど良いし、CentOSとほとんど変わりなく使えます。
この記事では、sshで入れる状態になったあと、最小構成の状態のLinuxにRuby on Railsバージョン3を入れてチュートリアルが動作する状態まで紹介します。
ほとんど下記リンクとやっている内容は同じです。Amazon EC2でAmazon Linux AMIでやってる、というくらいの違いです。
いやー大変参考になりました。いくつも見比べるとよりトラブルシューティングに役立ちますね。
さくらの VPS に登録してみた(4) checkinstall, vim, zsh – まゆの日記
VMware + CentOS4 + Ruby環境インストール – プログラマー某の外部記憶
CentOS 5.2 で railsをインストールするまで – akimatter
前回はMicro Instanceを使いましたが、今回はRubyのコンパイルとかでCPUリソースを喰うので、Micro Instanceでは時間かかって大変です。セットアップが一通り完了するまではLarge Instanceを使います(Smallは32bitしかないため)EBSで起動すれば、終わったあとスナップショットをとってMicroで起動し直せばLargeを使う時間は30分くらいなので100円くらいしかかかりません。
よく見たら、Launch InstanceでQuick StartのところにAmazon Linux AMIがリストされてるんですね。ここから選べば簡単です。

Largeインスタンスでデフォルト設定で起動します。途中は前回の記事参照。
Yamada-Naoyuki-MacBook-Pro:~ yamadanaoyuki$ ssh ec2-user@ec2-xxxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com -i .ssh/asia_satully1.pem The authenticity of host ‘ec2-xxxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com (xxxxxxxxxx)’ can’t be established. RSA key fingerprint is xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘ec2-xxxxxxxxxxx.ap-southeast-1.compute.amazonaws.com,xxxxxxxxxxxxxx’ (RSA) to the list of known hosts. __| __|_ ) Amazon Linux AMI _| ( / Beta ___|\___|___| See /etc/image-release-notes for latest release notes.[ec2-user@ip-xxxxxxxxxxxx ~]$ sudo su
以降rootで作業してしまいます。必要なものを先にyumでインストール。
yum install git gettext-devel gcc rpm-build zlib-devel
まずcheckinstallを入れます。これは各種アプリケーションをソースからインストールする場合にそれをRPM化してあとからパッケージとして管理することができるというものです。必須ではありませんが、アンインストールしたりする場合などに便利なので入れておきます。
RPM管理するということで、あとでRPMのソースディレクトリが必要になるので作成しておきます。
cd ~
mkdir -p rpm/{SPECS,BUILD,SOURCES,SRPMS,RPMS}
vi .rpmmacros
で”.rpmmacros”の中身を下記にして保存します。
%_topdir /root/rpm
%_specdir %{_topdir}/SPECS
%_builddir %{_topdir}/BUILD
%_sourcedir %{_topdir}/SOURCES
%_srcrpmdir %{_topdir}/SRPMS
%_rpmdir %{_topdir}/RPMS
終わったらソースをダウンロードするフォルダに移動。
checkinstallのソースはこちらにありますが、最新のgitレポジトリからクローンしてこれを使います。
git clone http://checkinstall.izto.org/checkinstall.git cd checkinstall make make install
ここまでは普通にソースをコンパイル+インストールします。で、ここでcheckinstall自身もRPMにするために、その場でcheckinstallします。
checkinstallは/usr/local/sbin/に入りますので、下記コマンドでcheckinstallが走ります。
/usr/local/sbin/checkinstall
checkinstall 1.6.3, Copyright 2010 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL. The checkinstallrc file was not found at:/usr/local/sbin/../checkinstallrc Assuming default values. The package documentation directory ./doc-pak does not exist. Should I create a default set of package docs? [y]: y Preparing package documentation…OK Please choose the packaging method you want to use.Slackware [S], RPM [R] or Debian [D]? r RPM package creation selected * This package will be built according to these values: 1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]2 - Name: [ checkinstall ]3 - Version: [ 20100920 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86</span>64 ]8 - Source location: [ checkinstall ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ checkinstall ] Enter a number to change any of them or press ENTER to continue: Installing with make install… (以下略)
ドキュメントを作るか?という質問のところでは”y”で、パッケージメソッドの選択のところではRPMなので”R”で。
****************************************** RPM package creation selected ***************************************** This package will be built according to these values: 1 - Summary: [ CheckInstall installations tracker, version 1.6.2 ]2 - Name: [ checkinstall ]3 - Version: [ 20100920 ]4 - Release: [ 1 ]5 - License: [ GPL ]6 - Group: [ Applications/System ]7 - Architecture: [ x86_64 ]8 - Source location: [ checkinstall ]9 - Alternate source location: [ ]10 - Requires: [ ]11 - Provides: [ checkinstall ] Enter a number to change any of them or press ENTER to continue:
こんな感じで出力されると思いますので、問題なければENTERを押します。
********************************************************************** Done. The new package has been saved to /root/rpm/RPMS/x86_64/checkinstall-20100920-1.x86_64.rpm You can install it in your system anytime using: rpm -i checkinstall-20100920-1.x86_64.rpm **********************************************************************
RPMが作られます。
rpm -i /root/rpm/RPMS/x86_64/checkinstall-20100920-1.x86_64.rpm
でパッケージがインストールされます。
では次にrubyの最新版を入れます。ソースはこちらにあります。
cd ../ wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p0.tar.gz tar xzvf ruby-1.9.2-p0.tar.gz cd ruby-1.9.2-p0 ./configure --prefix=/usr
ここでprefixを/usrとするのは、prefixのデフォルトが/usr/localなので、普通PATHの通っている/usr/bin/rubyのほうにインストールするためです。このオプションをなしでconfigureすると/usr/local/bin/rubyにインストールされます。Amazon Linux AMIだとこちらにはパスが通っていないのでこちらにインストールした場合はパスを追加する必要があります。
make
コンパイルします。ここはちょっと時間がかかります。これをMicro Instanceでやろうとすると時間がかかって大変です。。。
で、次にmake install とやらずに、checkinstallを実行します。
/usr/local/sbin/checkinstall
同じようにすすめていくとRPMファイルが作られますので
rpm -i /root/rpm/RPMS/x86_64/ruby-1.9.2-p0-1.x86_64.rpm
これでOKです。
[root@ip-10-128-73-22 ruby-1.9.2-p0]# ruby -v ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]
ちゃんと入りました。rubyのパッケージ管理システムであるgemも一緒にインストールされています。
[root@ip-10-128-73-22 ruby-1.9.2-p0]# gem -v 1.3.7
railsを入れます。今日(2010/09/20)時点ではデフォルトで3.0.0バージョンがインストールされます。
gem install rails
railsプロジェクトを作ります。とりあえずテストで。
cd /var/www/html/ rails new railssetup
作成されました。パーミッションの問題があるのでapacheユーザーにしておきます。
chown apache:apache railssetup/ -R
次にpassenger(mod_rails)を入れます。passengerはrailsを動かすapacheのモジュールです。
gem install passenger
passengerをセットアップします。
passenger-install-apache2-module
対話型の丁寧なインストラクションが始まります。
Checking for required software... * GNU C++ compiler... not found * Ruby development headers... found * OpenSSL support for Ruby... not found * RubyGems... found * Rake... found at /usr/bin/rake * rack... found * Apache 2... not found * Apache 2 development headers... not found * Apache Portable Runtime (APR) development headers... not found * Apache Portable Runtime Utility (APU) development headers... not found Some required software is not installed.But don't worry, this installer will tell you how to install them.
こんな感じで入っていないものが表示されますので、それらを入れていきます。
yum install gcc-c++ openssl openssl-devel httpd httpd-devel
openssl support for Rubyを先ほど入れ忘れていました。yumでopensslを入れても、rubyのほうに入れないと動作しません。
cd ext/openssl ruby extconf.rb
これでMakefileが作られますので同様にcheckinstallで入れておきます。
rpm -i /root/rpm/RPMS/x86_64/ruby-openssl-20100920-1.x86_64.rpm
再びチャレンジ。
passenger-install-apache2-module
正常に終わると、この行をapacheの設定ファイルに入れてね、というメッセージが出てきますのでやります。
vim /etc/httpd/conf/httpd.conf
LoadModule passenger_module /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15/ext/apache2/mod_passenger.so PassengerRoot /usr/lib/ruby/gems/1.9.1/gems/passenger-2.2.15 PassengerRuby /usr/bin/ruby
217行目付近に書いておきました。
DocumentRootも設定しておきます。290行目付近。/publicを付け忘れないようにしてください。
DocumentRoot "/var/www/html/railssetup/public"
デフォルトでは本番環境モード(production)で動作しますので、今回はdevelopmentモードで動作するように環境変数を設定しておきます。下記の一行をDocumentRootの指定のすぐ下に入れておきます。”RailsEnv”で指定すると書いてあるところが多いですが、rails3からRackEnvになったようです・・・
RackEnv development
ウェブサーバーを起動。
/etc/init.d/httpd start
これで表示されるはず。

ところがAbout your application’s environmentをクリックすると・・・

sqliteがまだ入っていませんでした。sqlite3もyumにあるものではダメなので、ソースから入れる必要があります。こちらから。sqlite-amalgamationというので良いようです。
cd /usr/local/src/wget http://www.sqlite.org/sqlite-amalgamation-3.7.2.tar.gz tar xzvf sqlite-amalgamation-3.7.2.tar.gz
cd sqlite-3.7.2/ ./configure --prefix=/usr make /usr/local/sbin/checkinstallrpm -i /root/rpm/RPMS/x86_64/sqlite-3.7.2-1.x86_64.rpm gem install sqlite3-ruby

おつかれさまでした。ここまで来たらEC2のLarge Instanceはストップし、EBSからAMIを作って、そこからMicro Instanceで起動しなおせばOKです。
ここからはチュートリアルなり、なんなりと。素晴らしいことに和訳もあります。
ruby/rails/RailsGuidesをゆっくり和訳してみたよ/Rails Database Migrations – 株式会社ウサギィwiki
次は実際にrailsでソーシャルアプリ作ってみます。