2013年9月4日水曜日

LibreOfficeのソースからのビルド:ビルド編


さて早速ビルドをはじめます。まず何もオプションをつけずに実行。

$ make

そうしたら何かのライブラリらしきものをLibreOfficeのサーバーから大量にwgetし始めました。
(よく調べたら、最初に"make fetch"しとけと注意書きがありました。(-_-;))
随分時間がかかりましたが、しばらくビルドが進んで、png.hがないとエラーになりました。
当該箇所のソースを見ると、どうも描画ルーチンの模様。ということで以下のコマンドでlibpngの開発パッケージをインストール。

$ sudo yum install libpng-devel

autogen.shのチェックには入ってなかったようです。

更に数時間ビルドしてると、システムに入れてあったウイルススキャンが、ビルド中に/tmp以下に作成される作業用データをmalwareと警告してきて、ビルドが止まってしまいます。しばし悩みましたが、しかたなくビルド中はウイルススキャンを切りました。

更に数時間(とにかく時間がかかる・・・)、エラーがでて以下の3つのうち再チャレンジしてみろと。

Error: a unit test failed, please do one of:

export DEBUGCPPUNIT=TRUE            # for exception catching
export GDBCPPUNITTRACE="gdb --args" # for interactive debugging
export VALGRIND=memcheck            # for memory checking

and retry using: make CppunitTest_sd_filters_test


export DEBUGCPPUNIT=TRUEを試してみると少し進みましたが、その先でまたエラーがでて同じ推奨が・・・

エラーの内容がどうもunittest(単体試験)に失敗したとのこと、いやそんなの修正方法わかんないよ\(-o-)/ 開発中の最新版はあきらめて、最新リリースの4.1のソースをDLしてきて再度チャレンジ。
しかしやはり単体試験で落ちる。VALGRINDのexportしたら、単体試験のところでmemory errorで落ちているといわれる始末。(basic_scannerの試験といわれても、scaannerのドライバ入っているかどうかもわからない)
仕方ない、本気でgdb見てみるかと思い、デバッグ可能にするオプションを探します。

./autogen.sh --disable-gconf --disable-gtk --without-junit --disable-cve-tests --enable-symbols

デバッグ可能にする以下のオプションでmake開始。

make -sr ENABLE_SYMBOLS=true

export DEBUGCPPUNIT=TRUE
export GDBCPPUNITTRACE="gdb --args"

を設定したが、単体試験のところでかかっても何も情報がでない。(どうもexceptionでプロセスの外に出てから、gdbにかかっている模様)よくエラーを見たら、いつの間にかVALGRINDもexportしていて、そちらの方でmemory errorをひっかけて停止していました。

VALGRINDは無効にしたところ、なぜか単体試験が通る(ビルドが先に進む)ようになった???
しかし恐ろしく時間がかかり(途中からのビルドなのに10時間たっても終わらない)、特に単体試験がやたら時間がかかります。プロセスとメモリの利用状況を調べてみると、gdbが1.3GBのメモリを喰ってる!どうもGDBCPPUNITTRACEのフラグにより、gdb下でmakeが動いているようで、それが恐ろしくメモリをくい、swapの嵐になっているようです。(今回のマシンは古いのでメモリが1GBしかない)

ちょっと考え直してみましたが、これまでビルドが止まってたのは決まって単体試験でした。しかもマシンのパワーが貧弱なこともあり、夜通し動かしていたことがよくあり(この暑いさなかクーラーのない部屋で)、しかも普通のPCです。長時間動かして熱にメモリがやられていたのかもしれません。あるいはswapが激しくて、長時間運転のうちにハードエラーが起きたか。
あらためて残りの部分のビルドは素直にやってみたら、なんとか通りました。
(結局、デバッグ用シンボルの作成は意味なかったです)

PS
ちょっとこの単体試験でビルドが止まる現象を落ち着いて考え直してみました。最後にやっとビルドが通るようになったと書きましたが、実際にはある単体試験で止まっても、継続するとなぜか次では通り少し進んで、別の単体試験で止まるということを繰り返しました。
gdbのところでプロセスサイズの話をしましたが、今回初めてLibreOfficeをビルドしたので、各種機能をほとんど盛り込んで(withoutせずに)ビルドしました。そのためプロセスサイズが大きくなり、単体試験を続けて実行中、Heapのメモリがなくなってきた現象が発生したのかもしれません。
フル機能のLibreOffficeをビルドしようと思ったら64bitOSでないとダメ?

0 件のコメント:

コメントを投稿