きりかノート 3冊め

おあそびプログラミング

port:mongodbを2.2.0に更新するパッチを書いた

書いた。

sconsよくわからないんだけど、Mountain Lion 10.8.2とLion 10.7.5上で、scons test && ./test のテストは全部パスしたからまあ大丈夫なんじゃないかな。

(9/25 追記)パッチは取り込まれました。なので、今日からは単に`port insatall mongodb'でインストールすることができます。

(9/25 追記その2)mongo本体のほうにもpull request を送りました。こちらはまだ取り込まれていません。2.2.1がもうすぐでるっぽいので間に合うといいんだけど。

経緯とか作業記録とか

AsakusaSatelliteがおもしろそうなので試してみようとしたところ、mongodbが必要だと書いてあるのでMacPortsで入れようとしたらエラーになった。

   % sudo port install mongodb
     :
   Error: mongodb 2.0.7 requires boost 1.49.0 or older but you have boost 1.50.0.
   Error: To downgrade boost, see https://trac.macports.org/wiki/howto/InstallingOlderPort
   Error: or more specifically https://trac.macports.org/ticket/35118#comment:12
   Error: After installing boost 1.49.0, install mongodb without upgrading dependencies, i.e.:
   Error:     sudo port -n install mongodb
   Error: org.macports.configure for port mongodb returned: boost 1.50.0 is too new

どうやらmongodb-2.0.7にはboost-1.49.0が必要だが、port:boostが1.50に更新されてるのでダメだということのよう。7月に登録されていたチケット#35118が未解決のようだ。メッセージにあるようにboost-1.49にダウングレードしろってのが解決法なのかもしんないけど、エラーに出会った人の半分もそのメッセージ読まないと思うよ。

解決方法としては、

  • 新しいバージョンのmongodbで試してみる
  • 別のportとしてboost-1.49を用意する

あたり。まずは前者ですよね。2.2のリリースノートにも

The Boost library, version 1.49, is now embeded in the MongoDB code base.

って書いてあるし。

いろいろ試してみたところ、mongodb-2.2.0では

  • use-system-sm (インストール済みのspidermonkeyを使う)は2.2.0では正しく動かない
    • third_party/js-1.7/のヘッダを処理するときに、XP_UNIXが必要
    • 他のpcre等と同様に、mongo本体にはshim_spidermonkeyのラッパをリンクするようになっているべき
  • use-system-fooしたときにライブラリがリンクされない(SYSLIBDEPSがちゃんと動いてない?もしかしたら--use-systemしたものは--extralibで個々に指定する、という謎な作法が正しいのかもしれない)

という問題があると思う。そのへんも合わせて対処してパッチつくってbuildとテストを確認して完了。

ただ今回の対応にも欠点があって、「mongodbのコンパイル時は毎回boostのコンパイルも行う」というもの。対処内容的にも当然なんだけど、boostのコンパイルって時間かかるんだよねえ。早くMountain Lionのbuildbotも稼働しないかなあ。

今回の収穫

  • sconsをちょっと理解した
  • JIRAのIssuesすげえ見づらい。まじありえん。

おまけ

ちなみにhomebrewがどうしてるのか見てみたところ、

   url 'http://fastdl.mongodb.org/osx/mongodb-osx-x86_64-2.2.0.tgz'

バイナリをダウンロードかよっ!