1
オープンソースカンファレンス2016 Gunma
Web ブラウザで動く OSS オフィスソフト、
LibreOffice Online の中身に迫る
小笠原 徳彦 (Ogasawara, Naruhiko)
LibreOffice 日本語チーム
2
オープンソースカンファレンス2016 Gunma
LibreOffice とは
フル機能のオープンソースオフィスソフト
諸君らの愛した OpenOffice.org の正当な後継者
Mozilla Public License v2+
C++11 ~700 万行
auto も decltype も lambda も使えるよ!
Windows / OS X / Linux (GTK+)
Viewer for Android, Impress Remote
3
オープンソースカンファレンス2016 Gunma
LibreOffice Online
現在鋭意開発中のオンライン版 LibreOffice
通称 LOOL (ろーる)
Google Drive や MS Office Online に似てる
違いは、 LOOL はよりオンプレ寄り
サーバーは各組織でそれぞれ立てる
Google や MS みたいにデカイデータセンターを保守しない
4
オープンソースカンファレンス2016 Gunma
LOOL を手元で動かす
LOOL はバイナリ配布のみ
5
オープンソースカンファレンス2016 Gunma
LOOL を手元で動かす (1)
LOOL はバイナリ配布のみ ←誤解です!
LOOL のソースコードは完全に公開されてます
https://gerrit.libreoffice.org/gitweb?p=online.git;a=summary
https://github.com/LibreOffice/online (read-only mirror)
LOOL は「 LibreOffice の文書を Web ブラウザと
サーバーでエディットする仕組み」だけを提供
文書をどうやってアップロード・ダウンロード・管理する
かはまた別(好きに作っていいよ)というスタンス
このバイナリディストリビューションが複数あるって話
6
オープンソースカンファレンス2016 Gunma
LOOL を手元で動かす (2)
カンタンなのは CODE を使う手
https://www.collaboraoffice.com/code/
Virtualbox のディスクイメージが配布
*.vmdk
中身は openSUSE 上に構築されたイメージ
これを Bridged Network で設定した仮想マシンにアタッチ
して起動
カンタンに動くけどちょっとつまんない
7
オープンソースカンファレンス2016 Gunma
LOOL を自分でビルドしよう!
オープンソースだしね
Ubuntu 16.04 LTS (Xenial Xerus) で挑戦
材料
LibreOffice ソース一式
LOOL ソース一式
libpoco ソース一式
8
オープンソースカンファレンス2016 Gunma
LOOL のソースってどんな構成?
ざっくりこんなふう
loolwsd がサーバー
C++ でだいたい 1 万行ぐらい
loleaflet がクライアント
JavaScript でだいたい 1.6 万行ぐらい
$ ls -l
合計 16
-rw-rw-r-- 1 naruhiko naruhiko 304 12 月 11 00:53 README
drwxrwxr-x 12 naruhiko naruhiko 4096 5 月 10 23:46 loleaflet
drwxrwxr-x 12 naruhiko naruhiko 4096 5 月 14 04:30 loolwsd
drwxrwxr-x 2 naruhiko naruhiko 4096 5 月 10 23:46 scripts
9
オープンソースカンファレンス2016 Gunma
LOOL サーバーのビルド (1)
LOOL サーバーは LibreOffice をまんま使ってる
のでまずは LibreOffice をビルドしよう
ビルド大変とかいわれてるけど Linux なら基本カンタン
autogen はちょっと時間がかかるのでお風呂でも
make は数時間かかるので寝てる間にどぞ
Instdir/program/soffice & とかで起動確認
$ sudo apt-get build-dep libreoffice
$ cd LibreOffice
$ /autogen.sh --with-lang="ja"
$ make
10
オープンソースカンファレンス2016 Gunma
LOOL サーバーのビルド (2)
libpoco
C++ の軽量多機能ライブラリ
WebSocket の実装に使ってるけど、 Ubuntu のはバージョ
ンが古くて WebSocket 未対応
ので自前でビルド
Basic と Complete があるけど後者を選ぼう
$ curl -O http://pocoproject.org/releases/poco-
1.7.3/poco-1.7.3-all.tar.gz
$ tar xf poco-1.7.3-all.tar.gz
$ cd poco-1.7.3-all
$ ./configure –prefix=/opt/poco
$ make
$ sudo make install
11
オープンソースカンファレンス2016 Gunma
LOOL サーバーのビルド (3)
やっと本体!
ドキュメントのとおりにコマンドびしびし叩く
$ cd LOOL/loolwsd
$ libtoolize
$ aclocal
$ automake --add-missing
$ autoreconf
$ autoheader
$ ./configure --enable-silent-rules 
--with-lokit-path=${HOME}/LibreOffice/include 
--with-lo-path=${HOME}/LibreOffice/include/instdir 
--with-poco-includes=/opt/poco/include 
--with-poco-libs=/opt/poco/lib 
--enable-debug
$ make
12
オープンソースカンファレンス2016 Gunma
LOOL クライアントのビルド
こっちはカンタン
Ubuntu 公式パッケージの Node.js を使う場合は
Node 周りのいくつかを apt で入れる必要あり
$ sudo apt install nodejs node-jake node-uglify
$ cd LOOL/loleaflet
$ jake build
$ cd plugins/draw-0.2.4
$ jake build
13
オープンソースカンファレンス2016 Gunma
LOOL を動かす(サーバー)
予め証明証をコピっておいて(ホントはちゃんと
したの用意するべきなんだろうけど)
えいっと起動
$ cd LOOL/loolwsd
$ sudo mkdir /etc/loolwsd
$ sudo cp etc/*.pem /etc/loolwsd
$ make run
14
オープンソースカンファレンス2016 Gunma
LOOL を動かす(クライアント)
適当に開きたいファイルを配置して
Web ブラウザーで以下の URL にアクセス
https://localhost:9980/loleaflet/dist/loleaflet.html?
file_path=file:///PATH/TO_DOC&host=wss://localhost:9980
15
オープンソースカンファレンス2016 Gunma
中見てみる (1)
クライアントを上げると
サーバー側のプロセスがにょきにょき
loolwsd─┬─loolforkit─┬─2*[loolkit─┬─lo_startmain]
│ │ └─{lo_startmain}]
│ └─{rtl_cache_wsupd}
├─9*[{loolwsd}]
└─3*[{prison_ws}]
loolwsd─┬─loolforkit─┬─loolkit─┬─lo_startmain
│ │ └─{lo_startmain}
│ ├─loolkit─┬─{kit_callback}
│ │ ├─{kit_queue_0001}
│ │ ├─{kit_ws_0001}
│ │ └─{lo_startmain}
│ └─{rtl_cache_wsupd}
├─6*[{client_req_hdl}]
├─{client_ws_0001}
├─8*[{loolwsd}]
├─{prison_ws_0001}
├─2*[{prison_ws}]
└─{wsd_queue_0001}
サーバ起動直後
一個起動
16
オープンソースカンファレンス2016 Gunma
中見てみる (2)
${LOOL}/loolwsd/jails とかいう怪しいディレクト
リが
中は chroot 環境
セッションごとに実行空間を分離している
$ ls jails
合計 12
drwxrwxr-x 13 naruhiko naruhiko 4096 5 月 14 10:32 7798
drwxrwxr-x 13 naruhiko naruhiko 4096 5 月 14 10:32 7799
drwxrwxr-x 2 naruhiko naruhiko 4096 5 月 14 10:32 pipe
$ ls jails/7798
dev etc home lib lib64 lo opt system_stamp tmp
user usr var
17
オープンソースカンファレンス2016 Gunma
中見てみる (3)
カンがいい人はお気づきでしょうが
クライアント側は leaflet.js 使ってます
表示されてるドキュメントは
サーバー側で描画され
ビットマップで送られる
タイルの並びを操作するので
地図の描画と同じ
技術が使える!
18
オープンソースカンファレンス2016 Gunma
中見てみる (4)
クライアント・サーバー間は
WebSocket でコネクション張りっぱなし
タイルビットマップとか操作データがこの中をぞろぞろっ
と流れている
時間切れで中覗いたりはまだできてません ><;
19
オープンソースカンファレンス2016 Gunma
まとめ
開発中の LibreOffice Online
バイナリディストロもあるけど、自前でビルドし
て動かすのも意外とカンタン
自前でビルドすれば色々覗いたりなんだりできる
開発に参加してみても楽しいかも!
20
NVDA World 2015 Tokyo
All text and image content in this document is licensed under the Creative Commons Attribution-Share Alike 3.0 License
(unless otherwise specified). "LibreOffice" and "The Document Foundation" are registered trademarks. Their respective logos
and icons are subject to international copyright laws. The use of these therefore is subject to the trademark policy.
これからのろーる先生の
ご活躍にご期待下さい
… 雑なプレゼンでスミマセン
… 触ってみたい人はブースにどぞ!

Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementation quick look