Build and Install fcitx-mozc for CentOS7.6.1810
はじめに
PCを組んでCentOSを入れた.
heavymoon.hateblo.jp heavymoon.hateblo.jp
CentOSのIMはデフォルトだとあの悪名高いiBusが入ってる. 慣れの問題もあるけれど,例によって私もiBusはあまり好かない. 旧PCでは fcitx-mozc を使っていたので,新PCでもインストールする.
Fedora,SUSE,Ubuntu は新しい技術を積極的に取り込んでいるのであまり日本語入力には困らないけれど, CentOS ではそうは行かない.
CentOSのリポジトリにはMOZCは無いので自前でビルドする必要があるのだけれど, よく見かけるのは Fedora のパッケージを rpmbuild で流用する方法. 旧PCではこの方法でビルドしたものを使っていたけれど, CentOS のCのライブラリが Fedora よりも古かったり, 結構面倒だった記憶が有る. また CentOS 用にビルドした記事が見つかっても,情報が古すぎて最早使えない手順と化しているものも有る. 入門者が自分でビルドするのは難しいでしょう.
CentOSユーザの端くれとして,また,私の備忘として,この残念な日本語入力環境を改善するべくちょっと長めにビルドの流れを書いておく.
MOZCについて
Mozc は Google の作った IME で,GitHub にソースがあるので自分でビルドできる.
Mozc is a Japanese Input Method Editor (IME) designed for multi-platform such as Android OS, Apple OS X, Chromium OS, GNU/Linux and Microsoft Windows. This OpenSource project originates from Google Japanese Input.
ビルドの手順も丁寧に記載してあるけれど,CentOSの記載は無い上,Fedora の手順もちょっと手を加えないとビルドできなかった. そのまま手順をトレースすると Dockerfile の NaCL の SDK インストール部分でコケる. Fedora 用にビルドするのに NaCL は無関係なので,NaCL のSDK 導入周りをまるっとコメントアウトしてあげれば,あとは手順どおりにビルドできる.
ビルドに成功すれば,コンテナ内の /home/mozc_builder/work/mozc/src/out_linux/Release/
にバイナリができる.
まずは Fedora の手順で大体の流れをつかむと良い.
Docker の使い方
その昔 Firefox をコンテナに閉じ込めて以来 Docker を久々に触った.
さっぱり使い方忘れてたので,これだけ知っていればビルドに差し支えないものだけをざっくりとピックアップ.
他のコマンドも知りたければ man を読むなり,ドキュメントを読むと良い. docs.docker.com
イメージ作成
$ sudo docker build --rm -t $(作成するイメージ名前) .
カレントディレクトリにある Dockerfile を元に Docker イメージを作成する.
--rm
- Remove intermediate containers after a successful build
-t $(作成するイメージ名前)
- Name and optionally a tag in the ‘name:tag’ format
イメージ確認
$ sudo docker images $ sudo docker image list
DockerHub から拾ってきたイメージや 自分で作成したイメージ の一覧を表示する
コンテナ作成/起動
$ sudo docker run --interactive --tty $(イメージ名前)
指定したイメージからコンテナを起動する
--interactive
- Keep STDIN open even if not attached
--tty
- Allocate a pseudo-TTY
コンテナ一覧
$ sudo dcoker ps -a
コンテナの一覧を表示する
-a
- Show all containers (default shows just running)
コンテナ起動
$ sudo docker start -i $(コンテナ名)
停止してたコンテナを起動する
-i
- Attach container’s STDIN
コンテナ内のファイル/ディレクトリコピー
$ sudo docker cp $(コンテナ名):/path/to/src /path/to/dst
指定したコンテナ内のファイルやディレクトリをローカルのOSにコピーする
コンテナ削除
$ sudo docker rm $(コンテナ名)
指定したコンテナを削除する
イメージ削除
$ sudo docker rmi $(イメージ名)
指定したイメージを削除する
MOZCビルド
ここからが本題.
Dockerfile 作成
$ mkdir fcitx-mozc && cd fcitx-mozc $ vi Dockerfile
####################################### # Build fcitx-mozc for CentOS7.6.1810 - 2019-02-16 ####################################### # Base Image FROM centos:latest # Update Packages RUN yum -y update # Install Packages RUN yum -y install epel-release.noarch RUN yum -y install clang libstdc++-static python git curl bzip2 unzip which \ ibus-devel fcitx-devel glib2-devel qt5-qtbase-devel gtk2-devel libxcb-devel emacs # Add build user ENV HOME /home/heavymoon RUN useradd --create-home --shell /bin/bash --base-dir /home heavymoon USER heavymoon # SDK setup RUN mkdir -p /home/heavymoon/work WORKDIR /home/heavymoon/work ## depot_tools for Ninja prebuilt RUN git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git ENV PATH $PATH:/home/heavymoon/work/depot_tools # check out fictx mozc source with submodules RUN git clone https://github.com/fcitx/mozc.git -b fcitx --single-branch --recursive WORKDIR /home/heavymoon/work/mozc/src # remove fcitx5 RUN rm -r unix/fcitx5/ # build mozc RUN python build_mozc.py gyp --target_platform=Linux RUN python build_mozc.py build -c Release unix/ibus/ibus.gyp:ibus_mozc \ unix/fcitx/fcitx.gyp:fcitx-mozc \ unix/emacs/emacs.gyp:mozc_emacs_helper \ server/server.gyp:mozc_server \ gui/gui.gyp:mozc_tool \ renderer/renderer.gyp:mozc_renderer WORKDIR /home/heavymoon/work/mozc/src ENTRYPOINT bash
私が使いたいのは fcitx-mozc なので,google/mozc のソースだけではビルドできない. これマージしてくれ... fcitx/mozc からソースを拾ってくる必要がある.
横着してイメージ作成時にビルドまで実行しているけど,本来の手順どおりにコンテナ作成してからビルドしたほうが無難.
イメージ作成
$ sudo docker build --rm -t centos/fcitx-mozc . $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos/fcitx-mozc latest e6d04cc338c2 About a minute ago 2.46GB
centos/fcitx-mozcのイメージが作成される.
コンテナ起動
$ sudo docker run --interactive --tty centos/fcitx-mozc Container>>$ ls /home/heavymoon/work/mozc/src/out_linux/Release/ build.ninja fcitx-mozc.so.TOC gen_collocation_suppression_data_main gen_single_kanji_noun_prefix_data_main gen_system_dictionary_data_main mozc_emacs_helper mozc_tool protoc dataset_writer_main gen gen_emoticon_rewriter_data_main gen_suggestion_filter_main gen_usage_rewriter_dictionary_main mozc_renderer obj fcitx-mozc.so gen_collocation_data_main gen_oss_sbm gen_symbol_rewriter_dictionary_main ibus_mozc mozc_server obj.host Container>>$ ls /home/heavymoon/work/mozc/scripts/ build build_fcitx5 clang-format.sh configure install install_fcitx install_fcitx5 install_server Container>>$ exit $ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cbe0ea2ecbe5 centos/fcitx-mozc "/bin/sh -c bash" 10 seconds ago Exited (0) 2 seconds ago unruffled_bassi
コンテナ起動ついでにビルドしたバイナリを確認.
fcitxのソースだとデバッグ版のインストールスクリプトも用意してあるが,パット見あまり作り込んでない様子.
とはいえこれを参考にインストールすれば良い.
バイナリ等回収
$ sudo docker cp unruffled_bassi:/home/heavymoon/work/mozc/src/out_linux/ . $ sudo docker cp unruffled_bassi:/home/heavymoon/work/mozc/src/data/ . $ sudo docker cp unruffled_bassi:/home/heavymoon/work/mozc/src/unix/ .
諸々ファイルを回収する.
コンテナ削除
$ sudo docker rm unruffled_bassi unruffled_bassi
バイナリは回収したのでコンテナを削除する.
再度コンテナ内をあさりたい場合は再度イメージからコンテナを作成してもいいし, コンテナ削除前に停止しているコンテナを起動してもいい.
$ sudo docker start -i unruffled_bassi
イメージも不要なら削除しても良い.
$ sudo docker rmi centos/fcitx-mozc:latest
インストール
$ yum -y install epel-release.noarch $ yum -y install fcitx fcitx-configtool
fcixt は事前にインストールしておく.
旧PCにインストールしてあるMOZCの状態と fcitx のインストールスクリプトを参考にインストールスクリプトを書いた.
#!/bin/sh ####################################### # install fcitx-mozc for CentOS7.6.1810 ####################################### ## init _bldtype=Release ## Install MOZC install -D -m 755 out_linux/${_bldtype}/mozc_server /usr/lib/mozc/mozc_server install -m 755 out_linux/${_bldtype}/mozc_tool /usr/lib/mozc/mozc_tool install -D -m 644 data/installer/credits_en.html /usr/share/doc/mozc-2.23.2815.102/credits_en.html ## Install fcitx-mozc for mofile in out_linux/${_bldtype}/gen/unix/fcitx/po/*.mo do filename=`basename $mofile` lang=${filename/.mo/} install -D -m 644 $mofile /usr/share/locale/$lang/LC_MESSAGES/fcitx-mozc.mo done install -m 755 out_linux/${_bldtype}/fcitx-mozc.so /usr/lib64/fcitx/ install -m 644 unix/fcitx/fcitx-mozc.conf /usr/share/fcitx/addon/ install -m 644 unix/fcitx/mozc.conf /usr/share/fcitx/inputmethod/ install -D -m 644 data/images/product_icon_32bpp-128.png /usr/share/fcitx/mozc/icon/mozc.png install -m 644 data/images/unix/ui-alpha_full.png /usr/share/fcitx/mozc/icon/mozc-alpha_full.png install -m 644 data/images/unix/ui-alpha_half.png /usr/share/fcitx/mozc/icon/mozc-alpha_half.png install -m 644 data/images/unix/ui-direct.png /usr/share/fcitx/mozc/icon/mozc-direct.png install -m 644 data/images/unix/ui-hiragana.png /usr/share/fcitx/mozc/icon/mozc-hiragana.png install -m 644 data/images/unix/ui-katakana_full.png /usr/share/fcitx/mozc/icon/mozc-katakana_full.png install -m 644 data/images/unix/ui-katakana_half.png /usr/share/fcitx/mozc/icon/mozc-katakana_half.png install -m 644 data/images/unix/ui-dictionary.png /usr/share/fcitx/mozc/icon/mozc-dictionary.png install -m 644 data/images/unix/ui-properties.png /usr/share/fcitx/mozc/icon/mozc-properties.png install -m 644 data/images/unix/ui-tool.png /usr/share/fcitx/mozc/icon/mozc-tool.png ## Install mozc emacs helper install -m 644 out_linux/${_bldtype}/mozc_emacs_helper /usr/bin/ install -D -m 644 unix/emacs/mozc.el /usr/share/emacs/site-lisp/mozc.el
$ sudo /bin/sh ./install
これを root で実行すれば良い.
ちなみにハードコードしているバージョンはここで確認できる.
$ cat data/version/mozc_version_template.bzl <略> MAJOR=2 MINOR=23 BUILD=2815 REVISION=102 <略>
IM 設定
$ imsettings-switch fcitx
あとは IM に fcitx を指定して,適当に設定すればOK.
設定メモ
とりあえず設定メモは書いてみたものの,Cinnamonだとインラインできない様子.GNOMEだとインラインできる.まぁ支障ないからいいや.
インライン変換できない場合
日本語入力変換確定前,カーソル位置に入力した文字が表示されないけど,変換候補だけ表示される. そんな場合は,以下設定すると良いらしい.
- 入力メソッドの設定(Fcitxの設定) > アドオン > Advanced のチェックON
- Fcitx XIM Frontend の設定 > XIM で On The Spot スタイルを使う のチェックをON
- Fcitx を再起動
変換候補がウィンドウ左下に表示される場合
変換候補がカーソル付近でなく,ウィンドウ左下くらいに表示される場合は GTK や Qt のモジュールを入れると改善できるらしい.
- モジュールを追加する
- Fcitx を再起動する(だめならOS再起動)
$ sudo yum -y install fcitx-gtk2 fcitx-gtk3 fcitx-qt4 fcitx-qt5
旧PCでインライン変換できないのは rpmbuild で fedora から流用した関係でライブラリの整合取れてないのかな.