trade2の日記

2009/5/7(木)
ウィキペディアの変換で疲れたー

ゴールデンウィーク中はずっとウィキペディアの変換ばっかりやっていた。
最初はなにがなにだかわからなかったが、変換中のログをとりMIFES8でチェック。

チェックしている間になにげに Kazuhiro さんの BBS を見てみると同じエラーを出した人の報告があって、それに対してパッチがアップされていた。
それまで何度も何度もエラーをだしていていいかげん同じところをぐるぐる回っているような感じで、エラーをチェックするために出した資料がだんだんデスクトップの上やらパソコンにいっぱいになってどれがどれやらわからなくなってきていた頃だった。

いや、天から助けがきたような感じだった。
で、早速使ってみる。

しかしエラーが出る。

困った。

とうとう最終手段でBBSに質問を投稿してみる。私はフリーソフトであまり作者のひとに質問をしないっていうか、質問をしたのは初めてだったように思う。特に今の時期なんかテレビでも豚インフルエンザの話でなにかパニックが起きそうで、うちも買出しとか行っているんで、ひょっとしてこんな時期に作者さんの手を煩わしたらいけないんじゃないかとかいろいろ思って躊躇していたのだが、ちょうど同じエラーが出た人がいて、それに即座に返答が返ってきているのををみて、ちょっと気が緩んでしまった。
フリーソフトを使う以上は極力自分で解決しないといけないのになぁ。

以下が安易に質問をした内容。

-----------------------------------------
awiki-20090423-pages-articles.xml.bz2変換時エラー

By kolo URL この投稿を引用

いつもお世話になっています。

私はUbuntuの9.04を使って変換しています。

wikipedia-fpw-20090220-src.tar.gzで、 okatti さんと同じエラーが出まして、

Entry: 1136053; ザ・ダッシュ
Entry: 1136059; テリー・カー
fpwwikipedia: Elapsed time : 21466sec.
fpwwikipedia: Number of entries: 590806
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwsort -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwindex -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwcontrol -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwlink -workdir work -module GDBM
/usr/local/libexec/freepwing/fpwlink: unknown tag name, cgraph:math_c364f545548545350203e3: line 968686, work/textref
make: *** [work/link.dep] エラー 9

相対リンクも途中までしかついていなくて、EBWinでの検索も全文検索しか受け付けませんでした。またすべての数式が収録されていなくて数式が収録されるべき場所に空白行が挿入されています。

formulaのエラーの出た、
"形式言語","位取り記数法","仮面ライダーBLACK","線形回帰","デュレーション","スターリングの近似","グラフ彩色","プロトキン限界","ティコノフ正則化",

をはずして変換したところ、

/usr/local/libexec/freepwing/fpwlink: unexpected position.: work/eidxref0
make: *** [work/link.dep] エラー 9

というエラーが出ました。

多分 Link.pm からエラーが出ているものと思われます。


wikipedia-fpw-20090428-src.tar.gzを使って変換したところ、同じ、バッファエラーが出ました。

Entry: 1136053; ザ・ダッシュ
Entry: 1136059; テリー・カー
fpwwikipedia: Elapsed time : 12902sec.
fpwwikipedia: Number of entries: 590806
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwsort -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwindex -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwcontrol -workdir work
/usr/local/libexec/freepwing/perl.sh /usr/local/libexec/freepwing/fpwlink -workdir work -module GDBM
/usr/local/libexec/freepwing/fpwlink: unexpected position.: work/eidxref0
make: *** [work/link.dep] エラー 9

こちらは検索ができますし、相対リンクもあるようですが、すべての数式が収録されていなくて数式が収録されるべき場所に空白行が挿入されています。

しかし、試しに円周率、積分、数学に関する記事など収録対象タイトルを細かく指定すると、wikipedia-fpw-20090220-src.tar.gz でもちゃんと数式が収録されます。
最初はmimetex,Perlmagickを疑ったのですが、こちらのほうはちゃんと働いているようです。

変換報告まで。

No.121 2009/05/03 21:16:22
Re: jawiki-20090423-pages-articles.xml.bz2変換時エラー

By kazuhiro URL このコメントを引用

現在ダウンロードできる最新のダンプデータからそのまま書籍を作成すると
HONMONファイルが2GBを超えてしまいますが、2GB以上の書籍の作成には
perl側の対応が必要です。
(FreePWINGも 1.6の方が安全だとは思いますが、必須かどうかは
確認はしていません。)

perl -V等で、Compile-time optionsにUSE_64_BIT_INTとUSE_LARGE_FILESが
あるのをを確認してください。
多分USE_64_BIT_INTがないのだと思います。

No.122 2009/05/04 07:36:17
Re: jawiki-20090423-pages-articles.xml.bz2変換時エラー

By kolo URL このコメントを引用

ああ、そこで引っかかるんですね。
確かにUSE_64_BIT_INTが、Ubuntuの9.04のPerlではなぜかわざわざUndefになっているんですよ。
しかし、ご相談したら一発で回答いただけて有難いです。これからworkフォルダーの中のファイルをひとつずつMIFES8であけて見ていこうと思っていたので助かりました。
本当は人に聞かないで自分でなんとかしなきゃないけないんですけどね。今回ギブアップで甘えが出てしまいました。
ちょっといまからPerlをなんとかしてみます。ありがとうございました。


----------------------------------------------------

kazuhiroさん親切。即座に返事が返ってきた。なんか申し訳なさいっぱいでした。

で、早速Perlに取り掛かる。

Ubuntuはデフォルトで当然Perlが入っているのだが、わざわざUSE_64_BIT_INTがUndefになっているのだ。
それからちょっと悪あがきで、

use bigint;

とか

GMPをインストールして

use bigint lib => 'GMP';

とかやってみたのだが、なんか指定するのが中途半端なのか、中身が16進法になったやつだけじゃなくてまだ10進法のままのデータとかごちゃごちゃになったらしくてエラーが吐き出されてくる。freepwingも変えないといけないんだろうなぁとか思うし、どっからどこまで手を入れていいんだかわからない。
半日くらいがしゃこんがしゃこんやってはエラーやってはエラーを出して、あきらめた。

で、次、ActivePerl の DEBian Package を落としてくる。

ええいなんか楽しているようでなんだよなとか思いながらもインストールして Perl -V をたたくと、あれ?やっぱり USE_64_BIT_INT はUndefにしてあったのだった。

は〜疲れたー。

なんでなんだろう。

で仕方なく、UbuntuからPerlのソースとDiffファイルをダウンロードしてコンパイルすることにする。まあこの後も紆余曲折があってものすごい時間がかかったのだが一応うまくいったところだけピックアップして書く。

perl_5.10.0.orig.tar.gz と perl_5.10.0-19ubuntu1.diff.gz を 理化学研究所のFTPから落としてくる。
UbuntuフォルダーのPoolに入っている。

で、perl_5.10.0.orig.tar.gzを展開して、フォルダーの名前を perl-5.10.0.orig に変更してから

patch -p0 < perl_5.10.0-19ubuntu1.diff

とやってパッチを当てる。Ubuntu謹製のパッチだから絶対効く筈だ。

それから perl-5.10.0.orig フォルダに入ってから

sh Configure -Uuselargefiles -Duse64bitint -Dusethreads -Dcc=gcc -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dd_dosuid -Dprefix=/opt/perl

をコピペしてリターン。

対話型のままなのでいろいろコンフィグから質問が出てくるので答えていく。

ちなみにインストールが成功してから Perl -Vをたたいた結果は以下のとおり。

----------------------------------------------

$ /opt/perl/bin/perl -V
Summary of my perl5 (revision 5 version 10 subversion 0) configuration:
Platform:
osname=linux, osvers=2.6.28-11-generic, archname=i686-linux-thread-multi-64int-ld
uname='linux newwind11ubuntu 2.6.28-11-generic #42-ubuntu smp fri apr 17 01:57:59 utc 2009 i686 gnulinux '
config_args='-Uuselargefiles -Duse64bitint -Dusethreads -Dcc=gcc -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dd_dosuid -Dprefix=/opt/perl'
hint=recommended, useposix=true, d_sigaction=define
useithreads=define, usemultiplicity=define
useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
use64bitint=define, use64bitall=undef, uselongdouble=define
usemymalloc=n, bincompat5005=undef
Compiler:
cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64',
optimize='-O2 -g',
cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include'
ccversion='', gccversion='4.3.3', gccosandvers=''
intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long long', ivsize=8, nvtype='long double', nvsize=12, Off_t='off_t', lseeksize=8
alignbytes=4, prototype=define
Linker and Libraries:
ld='gcc', ldflags ='-L/opt/perl/lib'
libpth=/usr/local/lib /lib /usr/lib /lib64 /usr/lib64
libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt
perllibs=-ldl -lm -lpthread -lc -lcrypt
libc=/lib/libc-2.9.so, so=so, useshrplib=true, libperl=libperl.so
gnulibc_version='2.9'
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/opt/perl/lib/5.10.0/i686-linux-thread-multi-64int-ld/CORE'
cccdlflags='-fPIC', lddlflags='-shared -O2 -g -L/opt/perl/lib'


Characteristics of this binary (from libperl):
Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV
PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP USE_64_BIT_INT
USE_ITHREADS USE_LARGE_FILES USE_LONG_DOUBLE
USE_PERLIO USE_REENTRANT_API
Built under linux
Compiled at May 6 2009 09:17:36
@INC:
/etc/perl
/opt/perl/lib/site_perl/5.10.0/i686-linux-thread-multi-64int-ld
/opt/perl/lib/site_perl/5.10.0
/opt/perl/lib/5.10.0/i686-linux-thread-multi-64int-ld
/opt/perl/lib/5.10.0
/usr/local/lib/site_perl
.


-----------------------------------------------

で、

PATH=/opt/perl/bin:$PATH

とやって一時的にパスを変更してやる。

それからウィキペディアの変換に取り掛かる。

それでもなんかバッファエラーが出る。もしやと思ったら freepwing のPerlの指定が全部もとのままだった。ああ、そうかー。Perlを新しく入れて、パスが違ったらまた freepwingも入れなおしだよなー、そうだよなーと思って、入れなおす。

PATH=/opt/perl/bin:$PATH を一回通してある端末からインストールしなおす。

それからこんどは、Perlmagick をインストールしなければならない。これはもうすでにインストールしてあるからと思って楽観していたのだが、5、6時間も後になってPerlMagickが入っていないエラーが出たときにはがっかりした。そうだよな、Perlに入れないといけないんだもんな。

これは、apt-getじゃだめなので、ソースからやらないといけない。

KDDIのFTPサイト
ftp://ftp.kddlabs.co.jp/graphics/ImageMagick/

から最新のPerlMagickのソースをダウンロードしてきて、これも 

PATH=/opt/perl/bin:$PATH を一回通してある端末から

./configure --prefix=/opt/imagemagick

であとは checkinstallでインストール。まあみんなチェックインストールを使ってインストールしたのでもしインストールがうまくいかなくてもやり直しが簡単だから気が楽であった。

で、もうこれでエラーでないといいなと思いながらウィキペディアを変換したら、やりましたよ今度はちゃんとできた。
試しにEBWinでみてみたら数式もばっちり出ていた。

4月25日から延々2週間近くかかってしまった。難しかったなぁ。

しかし、Perlなんか元々はいっているものだからこんなことでもないとソースからインストールすることなんてなかっただろうし、いい経験になった。




まとめとしては、なんかリナックスのPerlはヒントファイルでもってUSE_64_BIT_INTがUndefに設定されているので、どこのデストリビューションのリナックスも使えない恐れがあるってことだ。

サイレントモードとかでインストールして特に設定してないと、さっくりUndefになってしまうらしい。

頼みのActivePerlもUndefの時はがっくりしたなぁ。

だから、もし自分でjawiki-20090423-pages-articles.xml.bz2から変換するのであれば、Kazuhiroさんと同じ環境である、Cygwinを使ったほうがいいかもしれない。

(関連)

2009年5月1日の日記

2009年4月30日の日記

wikipedia日本語版EPWING変換済


BACKNUMBER


女の子お絵かき掲示板ナスカiPhone修理