nDiki

2010年11月24日 (水)

専用 RubyOpenSSLビルドして Redmine を入れるときの落とし穴

新しい開発プロジェクトでは Git + Redmine を使おうと思う。 で例により使えるのが Red Hat Linux 8.0 サーバなので対応する Ruby やライブラリを含めてソースコードからビルドしてインストールしたのだが、ちょっとハマったのでメモ

システムにインストールされている OpenSSL を(パッケージがなくアップデートできないので)残したまま、新しい OpenSSL をいれて使うのだが Ruby でこれを使えるようにする方法に辿りつくまで8割の時間を費した。

OpenSSLインストールする

OpenSSL のデフォルトである /usr/local/ssl へビルドしてインストールする。

 tar zxvf openssl-1.0.0b.tar.gz
 cd openssl-1.0.0b
 ./config shared
 make
 make test
 make intall

何も指定しないと共有ライブラリ(so)がビルドインストールされないのが落とし穴。

Ruby 1.8.7 をインストール

後は /usr/local/redmine 以下に Redmine に必要なものを入れる。

 tar jxvf ruby-1.8.7-p302.tar.bz2
 cd ruby-1.8.7-p302
 CFLAGS='-I /usr/local/ssl/include' \
   LDFLAGS='-L /usr/local/ssl/lib -Wl,-rpath=/usr/local/ssl/lib' \
   ./configure --prefix=/usr/local/redmine --enable-rpath
 make
 make install

大きな落とし穴は Ruby に含まれている ext/openssl。 OpenSSL 用の共有ライブラリが作られるのだが、いくらやってもこいつが /lib に入っている古い OpenSSL 共有ライブラリの方をリンクしてしまい /usr/local/ssl/lib の方をリンクしてくれない。

configure や make 時に LD_RUN_PATH やら -rpath を指定しても効かないし、ext/Setup で openssl を静的に指定しても駄目だし。

結局 configure.in を眺めて AC_ARG_ENABLE(rpath, ...) があるのを発見して --enable-rpath したところようやく -rpath が共有ライブラリのビルドに反映されるようになった。

30m ぐらいの深さの大きい落とし穴。

RubyGems をインストール

/usr/local/redmine に Ruby が入ったので必要なものを入れていく。 確実にそこの Ruby を使うようにしばらくは /usr/local/redmine/bin 以下を絶対パス指定で作業。

 tar zxvf rubygems-1.3.7.tgz
 cd rubygems-1.3.7/
 /usr/local/redmine/bin/ruby setup.rb

SQLiteインストール

Redmineデータベースは一番お手軽な SQLite を使う。これもインストール

 tar zxvf sqlite-amalgamation-3.7.3.tar.gz
 cd sqlite-3.7.3
 ./configure --prefix=/usr/local/redmine
 make
 make install

sqlite3-ruby をインストール

Ruby から SQLite を使うためのライブラリをインストール

 /usr/local/redmine/bin/gem install sqlite3-ruby -- --with-sqlite3-dir=/usr/local/redmine

SQLite のありかを示す --with-sqlite3-dir を -- の次に指定するというところに気がつくのに浅い落とし穴。

Passenger

Redmineインストールの説明では Passenger を推奨しているようなので入れてみる。

 /usr/local/redmine/bin/gem install passenger

OK。しかし Apache モジュールを

 /usr/local/redmine/bin/passenger-install-apache2-module

インストールしようとすると失敗。Apache の dev 系のファイルがシステムに入っていないので、それはそうだな。しかし Passenger のコマンドは寡黙ではなく何が駄目で何をすべきかきちんと表示してくれるのでわかりやすい。

この落とし穴は、横を通って回避。

Rack のダウングレード

Passenger のインストールで最新の Rack が一緒にインストールされるのだが、Redmine には新しすぎて後の手順でエラーで止まる。 ので、ここで 1.0.1 にダウングレードしておく。

 /usr/local/redmine/bin/gem install rack -v 1.0.1

これは皆が知っている落とし穴。

Redmineインストール

ようやく Redmineインストール。 展開するだけ。

 tar zxvf redmine-1.0.3.tar.gz
 mkdir -p /usr/local/redmine/var/lib
 mv redmine-1.0.3 /usr/local/redmin/var/lib/redmine

以下 /usr/local/redmine/var/lib/redmine で作業。

 cd /usr/local/redmine/var/lib/redmine

Redmineデータベース設定をする

config/database.yml を作成する。SQLite を使うように設定。

 production:
   adapter: sqlite3
   database: /home/naney/var/redmine/redmine.db

データベースは定期バックアップのある自分の home 以下に。

 makdir -p ~/var/redmine

Remine のメール設定をする

config/email.yml を作成する。今回は専用の redmine@example.com を作成して、その SMTP サーバ/アカウント経由で送信するようにする。

 production:
   delivery_method: :smtp
   smtp_settings:
     address: smtpserver.example.com
     port: 25
     domain: redmine.example.com
     user_name: "redmine@example.com"
     password: "mypassword"

Redmine の初期化をする

必要なファイルやらデータベースの初期化やらを行う。

 /usr/local/redmine/bin/rake config/initializers/session_store.rb
 /usr/local/redmine/bin/rake db:migrate RAILS_ENV=production
 /usr/local/redmine/bin/rake redmine:load_default_data RAILS_ENV=production

最後のコマンドでは言語を選ぶプロンプトが出るので ja を指定。

Passenger で Redmine を起動する(NG)

Apache 経由ではなく Passenger スタンドアローンで Redmine を使ってみる。

 /usr/local/redmine/bin/passenger start

失敗。途中の処理で rake が見つからないという。

 PATH=/usr/local/redmine/bin:$PATH
 passenger start

やっぱり失敗。自動的にダウンロードした ngix のビルドに失敗しているっぽい。 落とし穴。

WEBrick で Redmine を起動する(OK)

 /usr/local/redmine/bin/ruby script/server webrick -e production

Redmine 的には 本番向けではない WEBrick は無事起動。

 http://インストールしたサーバ:3000/

にブラウザにアクセス。Redmine のページが見えたよオッカサン! admin:admin でログインしてあとは Web ブラウザから設定。 Git リポジトリの連携もすんなり。

やったね。

追記 (2010年12月2日)

WEBrick で使い続けるなら script/server 起動時に -d オプションを指定する(記事)。

スポンサード リンク
[ 11月24日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.35903s / load averages: 0.35, 1.07, 1.42
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker