Mac OS X 10.6.8 -> 10.7.3 アップグレードメモ(感想、mecab、libsvm周り)
木曜日, 3月 22nd, 2012今更ですが10.6.8から10.7.x系にアップグレードしました。
10.6.8での開発環境に不具合出たのが切っ掛け。ここで原因追及するぐらいなら安定し始めてるかもしれない最新版でやってみようぐらいの気持ちで。作業前後でもリプライ頂いたのですが、Xcode3,4共存もできるみたいだし(参考: @shinji_kono先生、@shima__shima先生)。
あちこちはまったけど、特に分かり難かったのは python 周りのライブラリの導入方法。
必要に応じてxcode-selectすること。
通常easy_install or pip経由でインストールするか、ソース持ってきて手動で「python setup.py build; sudo python setup.py install」することになるけれども、そのままではこのbuildが通らない。多分クリーンインストールしてると問題なら無いと思うけど、私のように10.6.8からアップグレードしたケースでは10.6.sdkを参照しようとするので、次のように環境変数指定する必要があるっぽい。-archは必要無さそうだけど、念のため。「-L/opt/local/lib」はmacoprtsで入れたライブラリを参照させる場合の話で、そうじゃなければ適宜省略/編集すべし。
% env CC=/usr/bin/gcc CFLAGS=”-O -g -isysroot /Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -L/opt/local/lib” python setup.py build
以下、時系列順に気になった点をメモ。
- ダウンロード版は、ダウンロード後にすぐ起動してアップグレードするか否かだけの選択肢で進む。(10.5->10.6時には/Applications, /Users とか残すディレクトリを選択できた気がするのだけど、今回はそういう選択肢は用意されていない)
- 「/Applications/Mac OS X Lion インストール.app」内のInstallESD.dmgでブートディスク作れるらしい。 QT Mac OX X Lionの起動ディスクの作成方法 – [モ]Modern Syntax
- 上記アップグレードイメージは、アップグレード終了後には削除されてる。
- アップグレード直後は動作がもっさりしてる気もするけど、裏でMail.appのデータ移行中なのでそれ次第かな。Spotlight周りもありそう。あと想像してたけどgcc消えたw
- Mail.appはスレッド表示できるようになったのね。フォルダ上のどこにあってもスレッドとしてみれるのは嬉しい。(ヘッダしか見てないと思うから、これで意図的に2通使ってスパム表示させるとか何かやれそうな予感)
- Finderは「環境設定」と「表示>ステータスバー」あたりで元表示に戻せる。
- App Store経由でXcode4インストールすると、結構長時間「インストール中」のままになる。「購入済み」タブで進捗状況が見れる。
- 終わったタイミングで「/Developer/Applications/Xcode.app」を起動するも、古いのが立ち上がる。ここでJava要求されるので、指示通りにインストール。(古いのが残ってるってことはgccも残ってる?)
- Xcode4は「/Applications/Xcode.app」にインストールされる。起動後、起動すると古いのを消すかどうか聞かれます.あと,コマンドラインツールとかは起動後に Preferences > Downloads で別途インストールです.gcc は LLVM ですが… あと,場合によっては xcode-select を使う必要もあったりするらしい。
- あれこれmecab, mecab-ipadic, libiconvと格闘するもmecabさんが文字化けしてしまう。
- 手動で入れた「/usr/local/{lib,include}」側のlibiconvを参照すると、mecabコンパイル時点でこける(x86_64用のlibiconv_openとかが見つからないとかか宣う)。しかし、libiconv使うサンプルプログラムは普通にコンパイル通って実行も問題無し。一方、標準or古い「/usr/{lib,include}」側のlibiconvを参照すると、mecabはコンパイルできるものの、文字化け。参照方法をいくつか試してみても状況変わらず。ぐぬぬぬ。
- 参考までにmacports側で入れたら正常に動くか確認してみようと「sudo port install mecab」するとXcodeが古すぎる(10.7.xならXcode4にしろ)と言われる。
- 「xcode-select -print-path」で「/Developer」(Xcode3.xが入ってるトップディレクトリ)になってたので、「xcode-select -switch /Applications/Xcode.app」と指定すると「/Applications/Xcode.app/Contents/Developer」を参照するように。
- これでport動くようになったのでmecabインストール。
- portで入れたmecabだと、これで文字化けせずに動く。手動コンパイルした方だと、「手動mecab+portのIPA辞書」でも「portのmecab+手動IPA辞書」でも化ける。手動コンパイルは両方とも不具合あるってこと?
- ここでxcode-selectし直す前にlibiconv入れてた(それで問題無かったけど)ことに気付き、最後の一確認ということでlibiconv, mecab, ipadic をコンパイルし直してみる。が、/usr/local/以下のlibiconv参照するとやっぱりmecabのコンパイルでこける。/usr/以下のデフォルトだか古い環境の残り物だかを参照するとコンパイルできるけど、文字化け。ぐぬぬぬ。
- 不具合のあるmecab, ipadicが邪魔にならないように make uninstall して暫く放置(portのほう使う)。
- mecab-python(pythonバインディング)さんのインストール。普通に「python steup.py build」するとgcc-4.0とかMacOSX10.6.sdkを参照しちゃうので、build時に環境変数を指定してやる必要あり。なお、10.7.3からなのか、私の環境ではMacOSX10.7.sdkが/Applications/Xcode.app/以下のかなり深い場所にあったので、事前にlnしてからやってます。
- RMeCabさんのインストール。といっても原則として「パッケージをインストールする」になっちゃって、そのソースパッケージでは「/usr/local/lib/libmecab.2.dylib」を参照してたりする。コンパイル済みでどうしようもないので、lnすることに。
- libsvmさんのインストール。前回の通りに進めると「手順6 Python用 shared libraryのインストール」で「-sonameなんてオプション知らない」と言われる。ググった限りでは作成されるライブラリ名の指定っぽい。ここでサジェストされてるように-install_nameするとOK。手順7以降は前回の要領でやれました。
% sudo port install mecab
% sudo port install mecab-ipadic-utf8
(このままだと /opt/local/lib/mecab/dic/ がeuc参照してるので変更)
% cd /opt/local/lib/mecab/dic/
% sudo ln -snf ipadic-utf8 sysdic
% sudo ln -snf /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk /Developer/SDKs/MacOSX10.7.sdk
% env CC=/usr/bin/gcc CFLAGS=”-O -g -isysroot /Developer/SDKs/MacOSX10.7.sdk -arch x86_64 -L/opt/local/lib” python setup.py build
% sudo python setup.py install
% sudo ln -snf /opt/local/lib/libmecab.2.dylib /usr/local/lib/libmecab.2.dylib
% cd python
% c++ -shared -dynamiclib -Wl,-install_name,libsvm.so.2 ../svm.o -o libsvm.so.2
% sudo cp libsvm.so.2 /usr/local/lib/
多分、これでいろんなケースに対応できるんじゃないかと思うが。。。