perl 5.8 から 5.10 に移行したらいろいろgdgdになったらしく、MTOS が perl の panic を引き起こすようになりました。とりあえず MTOS 専用に perl 5.8 を入れたヴァーチャルマシーンを作ってしのぐことにしました。
VMware Server 2 101586 を 122956 に更新
perl をアップグレードした影響は VMware にまで及んでおり、ヴァーチャルマシーンが起動してくれません!
なので、VMware Server もアップグレードしました。
ubuntu 8 server を入れる
VMware Server の Web UI から、事前割当・2G 分割を指示しても sparse file を作りやがります。ここら辺は前からおかしいですね。
vmware-vdiskmanager が使うライブラリが変な場所を参照してたので、変な symlink を貼ってその場しのぎしました。
- ln -s /usr/local/lib/vmware /usr/local/bin/libdir
sparse file でなく、実容量を確保するようにしてディスクイメージを作り直します。
- vmware-vdiskmanager -c -s 8GB -a lsilogic -t 3 mtdisk.vmdk
あとは適当にインスコります。
インスコ後にやったことは、
- apt-get install emacs22-nox lv build-essential subversion ncurses-term nfs-common
- /etc/default/rcS を UTC=no
- /etc/network/interfaces, /etc/networks
- apt-get install apache2 apache2-mpm-prefork libapache2-mod-fcgid
という感じで作業しました。
MTOS を設定し直す
方針としては、
- 動かないと困る cgi に関してのみバック(ヴァーチャルマシーン)へ移行
- フロントとバックの両方から同じディレクトリに見えるように nfs mount
と、いじる範囲を最小限にするようにしました。
blog.woremacx.com/MT/mt*.cgi へのアクセスをリバースプロクシでヴァーチャルマシーンに飛ばすようにしました。が、mt.cgi にアクセスしても cgi が動いてくれないので mt-check.cgi で確認することにしました。なんと、mt-check.cgi までうまく動いてくれません。
Got an error: Can't locate object method "configure" via package "MT::ObjectDriverFactory" at lib/MT.pm line 1013.
MT::ObjectDriverFactory 周りが足りなくて中途半端な表示になっていました。DBI 関連だろうということで、
- apt-get install libdbd-mysql-perl
するとうまく進めました。それから、mt-config.cgi に足りないと言われたものをインスコしました。(Crypt::DSA に関しては、テストが止まってしまうので除外)
- apt-get install libarchive-zip-perl libgd-gd2-perl libarchive-tar-perl libdigest-sha1-perl perlmagick libmail-sendmail-perl
fastcgi でぶら下げておきたいので、libcgi-fast-perl をいれます。(このモジュールを入れ忘れていて、うまく動かせませんでしたw)
- apt-get install libcgi-fast-perl
あとは、CGIPath, AdminCGIPath, StaticWebPath, DBHost 等を適切な値にしていちおう動くようになりました。
TextHatena プラグインのためのモジュール
- apt-get install libdatetime-perl libdatetime-format-w3cdtf-perl libcache-memcached-perl libparse-recdescent-perl libcgi-simple-perl libgearman-client-perl
- deb 作ってインストール: libregexp-assemble-perl libcache-memcached-perl libcache-memcached-getparserxs-perl
シリアライザ関連でハマった
ぼくのところでは、LIMILIC 由来の Text::Hatena ではてな記法を処理しています。super pre のVimColor は gearman 経由で呼ばれるようになっています。
worker はホスト側で amd64、MTOS はヴァーチャルマシーン側で 386 で動いており、アーキテクチャが異なります。
Job 'vimcolor_html' died: Byte order is not compatible at ../../lib/Storable.pm (autosplit into ../../lib/auto/Storable/thaw.al) line 415, at worker.pl line 14
実際、こういうエラーが出て、うまく動きませんでした。
IRC で助けを求めたところ、hideden さんと dann さんに、nstore や nfreeze を使えばよいということを教えていただきました。freeze している部分を nfreeze に書き換え、速効で解決できました。hideden さん、dann さん、ありがとうございます!!
ということで、perl 移行に伴うgdgdをとりあえず片付けることが出来ました。
perl-mongers.org の MTOS も同様に panic するのを目にしたので、数日中に移行しようと思います。

Leave a comment