ラベル LibreOffice の投稿を表示しています。 すべての投稿を表示
ラベル LibreOffice の投稿を表示しています。 すべての投稿を表示

2014年6月15日日曜日

LibreOfficeのビルド(その3)

さてどうしてもうまくいかなかったMac OSX(Mavericks)でのビルドです。前回までautogen.shの実行中、コンパイラのバージョンチェックでひっかかってました。既存のmac用のオプションではXcode4までの対応だったみたいで、最新のMavricksのXcode5ではだめでしたが、以下のオプションでできました。


$  ./autogen.sh --without-doxygen --without-java --enable-macosx-retina --enable-bogus-pkg-config --with-lang=”ja”

retina用のオプションなんて初めて知りました。でもおかげでビルドができて、テストに進みますが、案の定エラーがでます。本当はよくないんでしょうが、とりあえず動かしてみたいのでテストを無視してビルドするようにします。

$ make build-nocheck

これでテストはパスしてくれます。
instrディレクトリ下にできているパッケージを直接実行してみると、一応動きます。

しかしビルドは時間かかりますね。手元の2.4GHz Core i5, memory 8Gのマシンでも2時間くらいかかりました。

2014年2月7日金曜日

LibreOfficeのビルド(その2)

前回、メモリ1GBのPCでチャレンジして時間がひどくかかり苦労しましたが再チャレンジです。


前回、ビルド中の使用メモリが1GBを超えてswapの嵐になっていたので、今回はWindows7(64bit)、メモリ6MBのマシンにVMplayerでUbuntu(32bit)を動かし、それに2core/メモリ2GBを設定しました。さすがに今度は4,5時間でビルドが終わりましたが、no-troubeではすみませんでした(-_-;)

以下に作業手順をメモしておきます。

1.作業領域の確保
$ mkdir LibreOffice

$ cd LibreOffice/


2.リポジトリの取得
$ git clone git://gerrit.libreoffice.org/core

$ cd core

作業したい(checkoutしたい)タグ(バージョン)を確認する
$ git tag -l

とりあえず4.2で作業します
$ git checkout libreoffice-4.2.0.4

LibreOfficeのビルドに必要なパッケージをインストールしてくれる以下のコマンドを実行します。

$ sudo apt-get build-dep libreoffice
→ccacheまでインストールしてくれちゃいました

日本語にローカライズするので、これも必要か?最初に参考にしたHPでは要求してませんでしたが、念のためインストールしておきます。

$ sudo apt-get install translate-toolkit dos2unix


3.makefile作成のコマンド
$ ./autogen.sh --with-lang="ja"

→デフォルトのUbuntuでは、autoconf, automakeがないといわれちゃいました
 apt-get install autoconfで、両方インストールしてくれます

前回はかなりwithoutにしたんですが、今回は必要なものを一括してインストールしてくれるコマンドがあったおかげか、「--with-lang="ja"」だけで済みました。

さてこれでno-troubleかと思いきや、やはり単体試験で通らない箇所がでました。前回はメモリ不足のせいか落ちながら少しづつビルドが進んでいきましたが、今回は同じところで止まります。(xmlエクスポートの箇所らしい)
ググってみると、TDFのメールアーカイブに本件に関する問い合わせと回答がありました。(ちょうど4.2.0alpha1のとき)CppunitTest_sw_ooxmlexportでは特定のfontがないだけでエラーになるようです。(試験用に用意されているドキュメントのフォントがシステムに存在してなくて、別の代替フォントで出力してしまいページ数が合わないということらしい)
そこんとこは以下の方法がworkaroundとして記載されていました。

$ sed -i '/CppunitTest_sw_ooxmlexport/d' sw/Module_sw.mk

上記は単体試験から上記テストを削除してしまう方法で、ちょっと強引なやりかたです。

これでビルドはパスしましたが、make dev-isntallしようとしたら、それはobsolete(廃止された)と怒られました。(make test-installを使えと言われた。)

test-installディレクトリが作成され、test-install/program/sofficeで実行コマンドが作成できました。
(実行したらアバウトにDev版だと表示されたw)

PS:
実は同じタイミングでMac OSX Mavericksでも試してみたんですが、autogen.shのところで先に進めなくて諦めてます。ひっかかった箇所がgccのバージョンチェックのところ。手動で当該スクリプトを実行する分には問題が起きないんですがね~。mavericksになってXcodeの開発環境まわりが少し変わったのかもしれません。もう少し様子を見ます。

2013年9月4日水曜日

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

ビルドできたものがちゃんと動くか確かめないといけません。かといって正式にインストールしてしまうのはちょっと困ります。(既にCentOS6でインストールされている古いものとぶつかります)
そこで、以下のコマンドを実行します。

$ made dev-install

これを行うと、しばらく時間がかかりますがビルドしたところに、install/というパッケージを作ってくれますが、install/program/sofficeで今ビルドしたものを直接実行できます。
実行してみると、、、、メニューがやはり英語だ(^_^;) まあローカライズの設定せずにやってますから、予想はしてましたけどね。とりあえず動くようです。

さて、今度はもっとパワーのあるマシンを用意してチャレンジしてみますか。

注:上記の複数バージョンが動く話、ベータバージョンに限るという情報がありました。(RCはだめとか)そういえば、このソースはLibreOffice4.1のパッケージ版おとしてるところからソースをとってきたんだけど、起動時のダイアログになぜかベータで表示されていたよな・・・・(Helpで見ると、Ver4.1.0.4となっており、もしかして4.1からの開発版?)

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でないとダメ?

2013年8月22日木曜日

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

ビルド環境はCentOS6で行う。手順1.と2.については前回も書きましたが、あらためて記載する。(そのわりには、fontconfigの件抜いちゃってますが)

1.
まずビルド環境を整備するのに、以下のコマンドを使えとlibreofficeのwikiに書いてあった。

$ sudo yum-builddep libreoffice # RedHat

しかし、何かlibreoffice-3.0.4のソースRPMが見つからないといってエラーで返される。
どうもビルドに必要なライブラリを落としてくる(RedHat系なので、当然rpmパッケージでDLします)が、ソースまでrpmパッケージで探そうとしているらしい。(自分で最新ソースをDLしてくるからいいのに・・・・)

結局、これで必要なものがDLされたかは疑問。(実際、この後あれが足りない、これが足りないと自分でライブラリをインストールしまくる必要があったのでダメだったんでしょう)

2.
続いてconfigureに相当する、autogen.sh(gitしてきたところに入っている)を実行する。とりあえずオプションなしで。(全機能ビルドしようとしちゃうだろうけど、最初は全然わからないので。)

まずでてきたのが、javac(javaコンパイラ)がないとのこと。
OSのインストール状況を見てみるとOpenJDKのruntimeが入っていた。(だからjavaはあるが、javacはない)
OpenJDK-Developnment Environmentをソフトウェア管理ツールを使用してインストール、これでjavacは解決した。

3.
次にでてきたのが、gperfがないということ。(ハッシュ関数生成用ライブラリだそうです)以下のコマンドで直接インストール。

$ sudo yum install gperf

4.
次にでてきたのが、インストール済みのdoxygen(設計書自動生成ツール)のバージョンが古い(現在、1.6が入っている。 1.8.4以上が欲しいといってきた)ということ。yum updateをやってみたが、CentOSのリポジトリではまだ新しいバージョンが登録されてないらしく、現状で最新とのこと。
特にdoxygenの出力が欲しいわけではないので、これをスルーするオプションを追加。(親切にもautogen.shが提案してきてくれた)

./autogen.sh --without-doxygen

5.
次にでてきたのが、libjpegのヘッダファイルがないということ。libjpegのパッケージ自体は入っているが、ヘッダファイルということは開発用のパッケージが必要ということと判断し、以下のコマンドでインストール。

$ sudo yum install libjpeg-devel

6.
次にでてきたのが、libxsltがないということ。先ほどのlibjpegと同じことだろうと考え、以下のコマンドで開発用パッケージをインストール。

$ sudo yum install libxslt-devel

7.
次にでてきたのが、X関係の開発環境がないということ。さすがにこれはマニュアルでインストールしていると大変なので、ソフトウェア管理ツールを使い、それらしいものをかたっぱしからインストール。(ほとんどインストールされていない状態でした。OSインストール時に昔は「X開発環境」という選択肢があったんですが、今回のは単なる「開発環境」の選択肢しかなくって、結果g++が入ってくれた程度でした。)

8.
次にでてきたのが、gconfがないということ。でもパッケージ関係で探すとgconf-editorしか見つかりません。これはgnomeの設定用ツールでGUI込みのものです。でも要求されているのは、GUIは要らないから設定ファイル関係を操作するものらしいんですが、単独ではパッケージが見つかりません。
LibreOfficeがなんでこんなもの必要なんだろうと調べてみると、gnome設定を直接サポートするパッケージ(libreofice-gnome)をビルドするのに必要ならしい。そもそもこの機能自体まだexperimental(実験的)なものなので、はずします。

./autogen.sh --without-doxygen --disable-gconf

9.
次にでてきたのが、dbus-glib-1がないということ。glibというからにはグラフィック・ライブラリに関するものと思われるが、聞いたことのない名称。ぐぐってみると、"GLb Bindings for D-Bus"というものらしく、D-Busというのが一種の(軽量な)プロセス間通信を提供するもので、元々はKDEプロジェクトで開発されたものが今では様々なものに移植され使われているとのこと。以下のコマンドで直接インストール。

$ sudo yum install dbus-glib-devel

10.
次にでてきたのが、GTK-pluginがないとのこと。先ほどgconfをあきらめたので、これもdisableにすることにする。

./autogen.sh --without-doxygen --disable-gconf --disable-gtk

(おそらくこのあたりまでLibreOfficeに入れようとすると、gnomeやGTKのソースが必要になってくるんだろう。そうなると、そもそもgnome自体も標準でディストリビューションに入っている物から、自分でビルドしたものに変えないといけなくなるだろうし・・・手間が際限なく増えていく。)

11.
次にでてきたのが、GSTREAMERがないとのこと。(何者かと思ったら、streaming media frameworkとのこと。)調べて、以下の2つをインストール。

$ sudo yum install gstreamer-devl
$ sudo yum install gstreamer-plugins-base-devel

12.
次にでてきたのが、libGLUがないとのこと。(OpenGLのライブラリのうちのGLU)以下のコマンドでインストール。

$ sudo yum install mesa-libGLU-devel

13.
次にでてきたのが、antがないとのこと。(java版のmake。なんでこんなものまで使うんだ?)以下のコマンドでインストール。

$ sudo yum install ant

14.
次にでてきたのが、JUnitがないとのこと。(javaの単体試験モジュール。LibreOffice内にjava開発機能が含まれているのか?)さすがにこれはパス。

./autogen.sh --without-doxygen --disable-gconf --disable-gtk --without-junit

とりあえずこれでMakefileはできました。