nDiki : -rpath

2004年2月8日 (日)

Berkeley DB 4.2.52 + DB_File 1.808 をホームにインストール

[ Perl ]

DiKicker の二次データの保存先を何にしようか思案中。 MLDBM::Sync が候補なのだが、MLDBM::Sync::SDBM_Fileだとデータが大きくなった時に速度が出ないようだ。

このサーバ(FreeBSD)のPerl(5.005_03)は、DB_FileGDBM_Fileも有効になかったので今までDBMパッケージの使用は避けてきたのだが、さすがに今回は使えないと辛いかも。

ということで Berkeley DB も含めて DB_File をホームにインストール

db-4.2.52

 tar zxvf db-4.2.52.tar.gz
 cd db-4.2.52/build_unix
 ../dist/configure --prefix=$HOME/local/db-4.2.52
 make
 make install
 rm -rf $HOME/local/db-4.2.52/docs

インストール自体は特に依存するものも無く簡単。 ただし、このサーバでは丁度 busy だった事もあってビルドに2時間!もかかってしまった。 本来は暇そうな時にやるべきなのだろうけど、今日中にうまくいくか検証しておきたかったので、待った。

DB_File-1.808

 tar zxvf DB_File-1.808.tar.gz
 cd DB_File-1.808
 export DB_FILE_LIB=$HOME/local/db-4.2.52/lib
 export DB_FILE_INCLUDE=$HOME/local/db-4.2.52/include
 perl Makefile.PL INSTALLDIRS=site \
                  LIB=$HOME/local/lib/perl \
                  INSTALLMAN1DIR=/tmp/man/man1 \
                  INSTALLMAN3DIR=/tmp/man/man3
 make OTHERLDFLAGS="-Wl,-rpath -Wl,$HOME/local/db-4.2.52/lib"
 make test
 make install

libdb を実行時に検索させるのに LD_LIBRARY_PATH環境変数とか指定したくなかったので、-rpath を指定してしまった。 Makefile中の OTHERLDFLAGS 変数がリンク時に空だったので、ここで設定。

しかし libdb-4.2 でかいな。 Perl からの呼び出し一発目は結構時間がかかる。

スポンサード リンク
[ 2月8日全て ]

2005年5月19日 (木)

DBD::Oracle 1.16 を Debian GNU/Linux sid に入れる

インストール方法は「Instant Client10g」を参考にした。

Oracle クライアントライブラリを取得

Oracle Technology Network License のもとで配布されている、Oracle Database 10g の instant client を利用する。 30日間試用可能。

  • instantclient-basic-linux32-10.1.0.3.zip
  • instantclient-sdk-linux32-10.1.0.3.zip
  • instantclient-sqlplus-linux32-10.1.0.3.zip

をダウンロード。

Oracle クライアントライブラリを展開

/usr/local/oracle の下に展開。シンボリックリンクをいくつか設定する。

 mkdir /usr/local/oracle
 cd /usr/local/oracle
 unzip /tmp/instantclient-basic-linux32-10.1.0.3.zip
 unzip /tmp/instantclient-sdk-linux32-10.1.0.3.zip
 unzip /tmp/instantclient-sqlplus-linux32-10.1.0.3.zip
 cd instantclient10_1
 ln -s . lib
 ln -s libclntsh.so.10.1 libclntsh.so
 ln -s libocci.so.10.1 libocci.so

ビルド環境を設定

環境変数を設定する

 export ORACLE_HOME=/usr/local/oracle/instantclient10_1
 export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH

DBD::Oracle を deb パッケージ化

まずはソースアーカイブを展開。

 tar ztvf DBD-Oracle-1.16.tar.gz
 cd DBD-Oracle-1.16

次に Makefile.PL を編集

 5a6,7
 > push(@ARGV, '-l');
 >
 279c281
 <     my @h_dirs = find_headers();
 ---
 >     #my @h_dirs = find_headers();
 283c285
 <         push @h_dirs, 'network/public';
 ---
 >         #push @h_dirs, 'network/public';
 289c291,292
 <     my $inc = join " ", map { "-I$OH/$_" } @h_dirs;
 ---
 >     #my $inc = join " ", map { "-I$OH/$_" } @h_dirs;
 >     my $inc ="-I/usr/local/oracle/instantclient10_1/sdk/include";
 725c728
 < exit 0;
 ---
 > #exit 0;
 1606a1610
 > 1;

ヘッダファイルディレクトリ自動取得を止めて決め打ちにし、また Makefile.PL 実行時に -l を指定するようにする。 それから dh-make-perl がモジュール依存関係取得するため Makefile.PL を require した際に真を返さないでエラーになってしまうようなので、これも修正。

でパッケージ化。

 rm META.yml # あると dh-make-perl が deb パッケージ名をつけ間違える?
 dh-make-perl --build --notest

deb パッケージ

 libdbd-oracle-perl_1.16-1_i386.deb

ができあがるので、これを dpkg でインストール

実行時

とりあえず、手近のサーバに接続して、簡単な select が動くことを確認。

いまのところ DBD::Oracle を使用するPerlプログラム実行時にも LD_LIBRARY_PATH を同様に設定しておく必要あり。

Makefile.PL 書き換え時に、

 $opts{dynamic_lib}->{OTHERLDFLAGS} .=
   '-Wl,-rpath -Wl,/usr/local/oracle/instantclient10_1';

-rpath を指定してみたが、

 DBI connect('host=192.168.x.x;sid=dbsid','usr',...) failed: ERROR OCIEnvNlsCreate (check ORACLE_HOME and NLS settings etc.) at test.pl line 3
 ERROR OCIEnvNlsCreate (check ORACLE_HOME and NLS settings etc.) at test.pl line 5.

というエラーが出て駄目。

[ 5月19日全て ]

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 オプションを指定する(記事)。

今日のさえずり: 衝撃の事実: /usr/local/ssl/lib に .so が無かった

2010年11月24日

  • 08:30 朝から爪切って優雅にエメリーボードかけるなど。ま、商売道具ですから。
  • 09:20 エコポイントの申請書を郵便で出してきた。一仕事完了。
  • 10:35 今日から新しい人がきました。
  • 12:08 弁当 350円。 (@ 向日葵 和泉町店・カレー食堂) http://4sq.com/9oazrC
  • 13:04 Redmine インストールしよう。
  • 13:25 Ruby 1.8.7-p302 のビルドがまず OpenSSL でこける……。
  • 13:35 やっぱり古い OpenSSL を参照していただけっぽい。-I と -L をくわせる。
  • 16:31 衝撃の事実: /usr/local/ssl/lib に .so が無かった。
  • 20:47 やっと Ruby で /usr/local/ssl の方を使うようになってくれたよ。--enable-rpath に辿りつくまで半日かかった。
  • 21:45 アキヨドの有隣堂。10分ぐらいみられるかな?
  • 22:11 牛鍋丼。
  • 25:00 Redmine に、ぽちぽちチケット入れてた。どうみても開発期間が……。
[ 11月24日全て ]

About Me

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

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

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

follow us in feedly

月別インデックス
Process Time: 0.052025s / load averages: 0.47, 0.48, 0.44
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker