MacOSX(Leopard)にfreshreaderを設置する方法を考える

MacOSX(Leopard)でfreshreaderを動作させるまでの記録*1
Mac miniをどう使うか迷っています。特にPHP+ionCubeの問題で。

助けて!サイドフィード!!

Mac miniはWebサーバにしてそっち系の勉強に使うつもりだったのですが、
現在玄箱で運用しているWEBアプリケーションがいくつかあってそれらを完全に移行したいのですが、
その中にフレッシュリーダーフレッシュミーティングがあり、
フレッシュリーダーは評判の高いlivedoor ReaderRailsに完全移植してオープンソース化したFastladderで代用ができそうでしたが、
フレッシュミーティングの代替品が見つからない。
これはかなり気に入ってるので、Leopardに対応していれば、購入も考えていたのですが(現在ブロガーライセンスで旧版を運用中)
フレッシュミーティングのダウンロードページを見る限りLeopardは未対応のようです。
これらを無理して動かすにはOS X (x86-64)版のionCube Loaderが無いとダメですが、
4/12のエントリで書いたように、該当バージョンのLoaderはバグってて動かない。
せっかくなので、MacOSのいろんな機能(FrontRawとかiMovieとか)も使ってみたかったのですが、どうしようー。

別のOSとの共存を試みる→待機

Boot Campを使う案とVMware Fusion(今週中なら7,800円!/領収書の取り方)を使う案の2本があり、
これを使ってLinux(Fedora/Debian/Ubuntu等)を入れれば上記の問題に対応できそうなのですが、

Boot Campを使う場合

単純にパーティションを切ってLinuxを入れるだけなので、すぐにいけそう
懸念としては

  • Synergy再設定する必要がある。(代替のUSBキーボード&マウスが無いのでメンドクサイ)
  • MacOSの機能が使えないので残念。(たびたびOS立ち上げ直しすることもなさそう。)
VMware Fusionを使う場合

Synergy再設定の不便がない、Spacesで簡単に管理できる。MacOSと共存できる等の良さがある。
懸念としては

  • Mac mini(MB139J/A)の標準メモリ1Gでは少し重たそう。
  • VMWare使ったことないんだけど、その場合のIPアドレス管理ってどうなるんだろう。1台で2個消費?
  • 有料(7800円)なので後でダメだった場合悲しい

よし、帰ったらVMWareFusionのデモ版を入れて調査だな。
今ならまだたいして設定してないから、最悪OSごと全部入れ直しでも被害は小さい。

今調べたんだけどメモリ不足の場合はいざとなったら
サポート - アップル正規サービスプロバイダにおいてMac mini(インテルプロセッサ搭載)アップグレードサービスなんてのがあるみたい。
正規ショップではやらないけど、サポートショップではOKてことか。これを使うと保証も切れないみたい。

PHPの64bit動作環境を削る→駄目

ここまで無い知恵絞って考えたあと、周囲のマカーの人に聞いたら、
ユニバーサルのバイナリの場合、何が入っているツールとか、stripして不要な部分を削るフリーのツールとかあるという情報をもらった。
原因としてはApachephpモジュール"/usr/libexec/apache2/libphp5.so"にあるはずなので、これがどんなバイナリなのか調べてみよう。
もし、ユニバーサルバイナリIntel版の32bitと64bitコンパイルのものが含まれている場合、64bit版を削れば起動しそうである。
なんかfileコマンドでバイナリの詳細がみられるようなので、まずはfileだな。

$ file libphp5.so
libphp5.so: Mach-O universal binary with 4 architectures
libphp5.so (for architecture ppc7400):  Mach-O bundle ppc
libphp5.so (for architecture ppc64):    Mach-O 64-bit bundle ppc64
libphp5.so (for architecture i386):     Mach-O bundle i386
libphp5.so (for architecture x86_64):   Mach-O 64-bit bundle x86_64

やった!!バックアップを取ってstripしてみよう。stripするフリーのツールがどこで入手できるのか調べないとだけど。
ちなみにコマンドライン版はユニバーサルバイナリだけど、64bitコンパイルはされてなかった。

$ file /usr/bin/php
/usr/bin/php: Mach-O universal binary with 2 architectures
/usr/bin/php (for architecture ppc7400):        Mach-O executable ppc
/usr/bin/php (for architecture i386):   Mach-O executable i386

各環境でコンパイルした結果をくっつけてユニバーサルバイナリを作成するためのlipoコマンドに削除オプションもありました!
'-remove'でアーキテクチャを指定して削除できて、'-extract'を指定すると指定アーキテクチャ以外を削除するみたい。

$ sudo lipo -remove x86_64 -output libphp5.so.move libphp5.so
Password:
$ file libphp5.so.move
libphp5.so.move: Mach-O universal binary with 3 architectures
libphp5.so.move (for architecture ppc7400):     Mach-O bundle ppc
libphp5.so.move (for architecture ppc64):       Mach-O 64-bit bundle ppc64
libphp5.so.move (for architecture i386):        Mach-O bundle i386

または

$ sudo lipo -extract i386 -output libphp5.so.small libphp5.so
Password:
$ file libphp5.so.small
libphp5.so.small: Mach-O universal binary with 1 architecture
libphp5.so.small (for architecture i386):       Mach-O bundle i386

できたよ!!現在遠隔地にいるので、実証は家に帰ってから(MacApacheは外部公開してないため)
あとは、デフォルトの32bit版iocube Loaderとの組み合わせで動作するかチェックチェック。
だめだったですー!

コマンドライン版でこんなエラー出ちゃうし。

dyld: NSLinkModule() error 
dyld: Symbol not found: _zend_compile_string 
  Referenced from: /usr/ioncube/ioncube_loader_dar_5.2.so 
  Expected in: flat namespace 

Trace/BPT trap 

ionCubeのサポートにもあった、デフォルトのPHPに難があるみたいなコメントが。
ionCube :: View topic - loader error on darwin + command line

*1:後で清書します