ザウルスで Wikipedia を持ち歩く(後編)
前回の続き。
さもスムーズに終了したかにみえるウキペディアの EPWING 化だが、実際はかなり大変だった。おもな原因は Cygwin がらみだが、普段あまり使っていないのでエラーがでた際の対応がわからなかったことに起因している。わかってしまえばたいしたこれはないのだが、同じトラブルに遭う人もいないとも限らない。よって、いちおう失敗例と書いておきたいと思う。
Active Perl との干渉
作業を行っている Windows パソコンには、Active Perl が入っている。Windows のコマンドラインからはそれが使われるが、bash からは Cygwin の perl が参照される。ところで、Cygwin にインストールされていた perl は、古いバージョン(5.3) であった。
最初は Active Perl (5.8) を使おうと思った。しかし、Cygwin のシェル上で Active Perl を使用する方法はないことはないが(Cygwin に Active Perl のディレクトリが見えるようにすればよい。詳しくはここを参照)、ついでなので Cygwin の perl をアップデートすることにした。
ここで問題発生。そもそも Cygwin のパッケージのアンインストールの仕方がわからない。例えば FreeBSD なら "pkg_delete" 該当する Ports で "make deinstall" などとすればよいが、Cygwin ではどうやるんだろうかとしばし悩んでしまった。結論を書くと、Cygwin 本体をインストールする時に使った setup.exe からやればいいのだ。これで何とか、perl のバージョンアップに成功した。
Cygwin Perl アップデート後のお掃除
しかし、perl 5.8 で行った fpwmake も途中で止ってしまった。
$ fpwmake
[...]
Can't locate FreePWING/HalfUserChar.pm in @INC (@INC contains: /usr/lib/perl5/5.8/cygwin /usr/lib/perl5/5.8 /usr/lib/perl5/site_perl/5.8/cygwin /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/site_perl/5.8 /usr/lib/perl5/vendor_perl/5.8/cygwin
/usr/lib/perl5/vendor_perl/5.8 /usr/lib/perl5/vendor_perl/5.8 .) at /usr/local/libexec/freepwing/fpwhalfchar line 19.
BEGIN failed--compilation aborted at /usr/local/libexec/freepwing/fpwhalfchar line 19.
make: *** [work/userchar.dep] エラー 2
これはさほど難しくない。perl モジュールの HalfUserChar.pm がみつからないということだ。このモジュールは FreePWING の付属しているので、上記のパスに入れればよい。問題はその後、さらに出た "unable to remap [...] died waiting for dll loading" というエラー。よくわからないが、ダイナミックリンクライブラリ (dll) がロードできないということだろう。perl の入れ替えが原因であることは想像がつくが、はてどうすればよいか?
これも色々しらべた結果、rebaseall というコマンドでダイナミックリンクライブラリの場所を変更しなければいけないようだ*1。rebaseall は ash からでないと使用できないので、bash 等を閉じて、ash シェルを起動する。ash シェルは、Windows の「スタート」→「ファイル名を指定して実行」で "ash" と入力すれば起動するはずである。起動したら下記のように入力する。
$ rebaseall -v
これでダイナミックリンクライブラリの場所が更新され、前記のエラーが消える。
Cygwin の perl では数式、相互参照は不可
これは wikipedia-fpw の配布元で説明されている。私も試してみたが、変換中にエラーが出て止まってしまった。前回のエントリーにあるように、設定ファイルを編集して、これらを無効にするしかない。
ウキペディアのダンプデータの破損
あと、ウキペディアのダンプデータが壊れている場合もあるので注意が必要だ。当初、ウキペディアのダウンロードサイトより、ダンプデータをダウンロードした際、ブラウザ上では確かにぶじ完了して、解凍もできた。しかし、fpwmake を行うと途中で止ってしまった。エラーメッセージは、"An unexpected error occurred" だったかな。ダウンロードし直すと、今後は正常に動いた。
*1:rebase パッケージが Cygwin にいない場合は、前記の setup.exe で "System" のカテゴリーよりインストールする。