(subversion + apache ) * Solaris = 怒
2007.07.15 Sunday 23:13
Solaris 10でapache2が動いているところへTracを入れようとしたがはまりにはまった挙げ句,本質的に無理とわかってがっくし.半日くらいで終わるはずが大変なことに.
ライブラリ衝突から始まってsubversionの傍若無人ぶり.もうSolarisごと窓から捨てたくなる.
ライブラリ衝突から始まってsubversionの傍若無人ぶり.もうSolarisごと窓から捨てたくなる.
やったこと
元々入っていたapacheはSolaris 10に付属の物.そこへsunfreeware.comからsubversionとpythonをインストールしようとした.mod_wsgiを使ってTracをインストールし,いざ動かしてみるとなぜかpythonのモジュールでエラーが出る.単体で起動してもエラーにならないのになぜなぜ?と思って調べていたら,pythonとapacheで使用しているOpenSSLのバージョンが異なることが原因と判明.ところがsunfreeware.comのパッケージはことごとくSSLがリンクされている.
覚悟を決めてsubversionをソースからビルド使用とライブラリを集め始めたのだが,最新版だと互換性がないから指定した古いバージョンをつかえといった指示や,ドキュメントとスクリプトで違うバージョンを共用するとか,はたまた使うなと指示したのになぜかリンクされているとか,もう本当にわけわからん.
GNU makeでないとエラーになる物とか,もうちょっと他の人のこと考えろよ.
Berkeley DBはいつの間にかOracleに買収されて,ダウンロードページにたどり着きにくくなっている.重いページを何度もたどらせるな!(怒)
とりあえず落ち着いて,ライブラリの衝突について考えてみた.subversionはaprとBerkeley DB(option), OpenSSL(option)を使う.衝突を減らすためにoptionはこの際使わないことにする.Apacheはaprとexpatを使っている.python 2.5のmd5ライブラリはOpenSSLを使っている.
現在動いているapacheにはPHPやPostgreSQLが組み込まれて動いているので現在動いているものには影響を与えないようにするためにapacheのライブラリを変更しないことを前提にすると,apache付属のaprが古くてsubversionがインストールできない.GAME OVER.
気を取り直して,apacheはそのままにlighttpdで別IPアドレスで動かすことにしよう.しかし,lighttpd + subversionはできないみたいね...
ライブラリのバージョン
Apacheは「モジュール」を追加することで本体の再コンパイル無しに機能追加ができる.また「モジュール」は同一プロセスで動作するので起動のオーバーヘッドが削減できる.しかし,ソフトの世界は変化が速い.追加インストールが必要になったとき,あるモジュールと別のモジュールが同じライブラリの異なるバージョンを使っていることが十分にあり得る.
さらに,Solarisにはコンパイラとして有償のSun純正のものとGCCの2つがあり,しかもSolaris 8以降ではGCCを含めたフリーウェアが/usr/sfwに入っている.そして,バイナリ配布を行うsunfreeware.comも自分たちの決めたライブラリでコンパイルしている.そして,言うまでもなくバイナリだとどれも使用ライブラリが異なって相性が悪いことになる.
長期に渡って実行され,信頼性が求められるサーバ系アプリケーションではプロセス間通信で処理を委託する方が適している.別プロセスを再利用することで高速化を行うfastcgiは別プロセスなのでこのような問題が発生しにくい.
そもそもなぜバイナリ
なぜバイナリでインストールするのか,ソースからビルドすれば良いではないかという考え方もある.しかし話は簡単ではない.
一つ目の問題は既に動いているバイナリに後から合わせることが難しいこと.後から入れる物が新しいライブラリを要求することがある.かといって今動いている物を再コンパイルはしたくない.動作確認が手に負えないからだ.
もう1つはソースからまともにコンパイルできない物がある.特にSolarisで.最近はLinux等のPC UNIXかが容易に手に入るので,開発もPC UNIXで行っている人が多いだろう.そのためかGNUじゃないsedとかGNUじゃないmakeとかのことを全く考えてないパッケージも存在する.ひどいのになると /bin/sh と書きながらbashでないと動かなかったり.もうアホかと.ばかばかしいことに関わりたくないから誰かがコンパイルしてくれたバイナリに手を伸ばす.そして蟻地獄行きと.
Webの世界ではW3Cに従わないInternet Explorer(IE)の独自仕様を使ったページが氾濫したためにIE以外のブラウザが「使えない」ように見えたことがあるが,Solarisも似たような被害に遭っている気がする.せっかく性能の高いSolarisのサーバがあってもインストールに手こずって持てあまし,結局「PCで済ませよう」となったり.
自分の反省
そもそも今回のインストールは二月頃に一旦試してあきらめていて,今回が二回目のチャレンジ.前回は別のPCにLinuxをインストールして済ませた(subversionもdistributionに入っていた).今回はそのPCから別の場所へ移動が必要になったのだが,前回失敗したものに今回成功するためには前回の失敗要因が解消されている必要がある.今回の問題はソフト間のバージョン不一致で本質的に矛盾があるわけだからソフトが変わらない限り変化しない.前回から半年も経っていないことを考えると今回成功する可能性は薄い.にもかかわらず最初調子よく進んだことに惑わされて再度はまりこんだのは,前回の失敗をすっかり忘れていたとしか思えない.
インストールしたものの記録はつけているが,失敗してあきらめたことの記録も付けた方が良いかもしれない.
Comments