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'
バイナリをダウンロードかよっ!