« 2012年12月 | トップページ | 2013年3月 »

2013年1月

2013.01.24

Gentoo Linuxに、uim-mozcをインストール

Gentoo Linuxに uim-mozc をインストールする手順。
能書きはこちら

念のため、
「このebuildを使用した場合のいかなる結果にも当方は責任を持ちません。その点についてご理解いただいた上でお試し願います。」

(2013.05.11追記) uim-mozcのsvn取得コマンドにrevision指定(-r 320)追加
[理由]mac-uimさんのuim-mozcの更新により、対応するmozcのversionが変更されて最新のuim-mozcとGentoo安定版のmozcとの組み合わせではコンパイルに失敗するようになったため、uim-mozcを少し古いrevisionに限定した(mozcの安定性を優先)。
(2013.03.17追記) qtのpkg名が変わったようなので反映。 変更後のファイル名はuim-mozc-9999.1-r1.ebuild。 旧:x11-libs/qt-gui、新:dev-qt/qtgui。

(1) ebuildを探す場所の設定に、これから作るローカルoverlayを追加。

$ sudo nano /etc/make.conf
PORTDIR_OVERLAY="/usr/local/portage"
  

(2)Local overlayの識別名を追加。これは必須ではないが、emerge時に表示される。文字列は変数に使える文字なら何でも良いみたい。

$ sudo nano /usr/local/portage/profiles/repo_name
hm_local_overlay
 

(3)ローカルoverlayを作成しダウンロードしたファイルを置く。

「uim-mozc-9999.1-r2.ebuild」をダウンロード
「50uim-mozc-gentoo.el」をダウンロード

以下は~/にダウンロードしたものとして書いている。


$ sudo mkdir -p /usr/local/portage/app-i18n/uim-mozc/files
$ cd /usr/local/portage/app-i18n/uim-mozc
$ sudo cp ~/uim-mozc-9999.1-r1.ebuild .
$ sudo cp ~/50uim-mozc-gentoo.el files/ .
$ sudo ebuild uim-mozc-9999.1-r1.ebuild digest

(4)unmaskする

下記はamd64の例 (x86は環境がないので試していないが、動くはず)。

(2013.03.17追記)
最初の記事ではバージョンまで指定していたが、不要と思われるので削除した。

$ sudo nano /etc/portage/package.accept_keywords
app-i18n/uim-mozc ~amd64
app-i18n/zinnia ~amd64

zinniaはmozc(ibus-mozc).ebuildから引き継いだもの。起動するがエラーが出て使えない。

(2013.02.01追記) その後の調査で、zinnia用のmodelファイルが必要と判明。うまく行ったら記事を書くかも?

(5)USEフラグ(必要ならば設定)

$ sudo nano /etc/portage/package.use
app-i81n/uim-mozc emacs

(6)インストール

$ sudo emerge -av uim-mozc

(7)再ログイン

(8)uimで有効化

$ uim-pref-gtk &

(メニューやアイコンからuimのPreferenceを起動しても良い)

起動したら、以下の操作でMozcを有効化する。
Global settings -- Enabled input methods -- Edit -- Enabled に Mozc を追加
Mozc_setting

Mozcに切り替わらない場合は、もう1回、再ログインするとうまくいくかも?

(9)アンインストール


$ sudo emerge -av --depclean uim-mozc
Calculating dependencies... done!
>>> Calculating removal order...

>>> These are the packages that would be unmerged:

app-i18n/uim-mozc
selected: 9999.1-r1
protected: none
omitted: none

All selected packages: app-i18n/uim-mozc-9999.1-r1

>>> 'Selected' packages are slated for removal.
>>> 'Protected' and 'omitted' packages will not be removed.

Would you like to unmerge these packages? [Yes/No]

Enterを入力すると削除される。

>>> Waiting 5 seconds before starting...
>>> (Control-C to abort)...
>>> Unmerging in: 5 4 3 2 1
>>> Unmerging (1 of 1) app-i18n/uim-mozc-9999.1-r1...
No package files given... Grabbing a set.
<<< obj /usr/share/uim/pixmaps/mozc_tool_uim_selector.png
<<< obj /usr/share/uim/pixmaps/mozc_tool_uim_dictionary_tool.png
<<< obj /usr/share/uim/pixmaps/mozc_tool_uim_config_dialog.png
<<< obj /usr/share/uim/pixmaps/mozc.png
<<< obj /usr/share/uim/mozc.scm
<<< obj /usr/share/uim/mozc-key-custom.scm
<<< obj /usr/share/uim/mozc-custom.scm
<<< obj /usr/lib64/uim/plugin/libuim-mozc.so
<<< obj /usr/lib64/mozc/mozc_tool
<<< obj /usr/lib64/mozc/mozc_server
--- !empty dir /usr/share/uim/pixmaps
--- !empty dir /usr/share/uim
--- !empty dir /usr/share
--- !empty dir /usr/lib64/uim/plugin
--- !empty dir /usr/lib64/uim
<<< dir /usr/lib64/mozc
--- !empty dir /usr/lib64
--- !empty dir /usr
>>> Regenerating /etc/ld.so.cache...
Packages installed: 837
Packages in world: 95
Packages in system: 42
Required packages: 837
Number removed: 1

* GNU info directory index is up-to-date.

この状態ではついでに入ったzinniaは残る。次回の定期update時にemerge --depcleanで削除すれば良いと思うが、気になるならばuim-mozcと同じ手順で削除可能。

mozcの個別設定削除。mozc(ibus-mozc)を使う場合は削除しない。


$ rm -rf ~/.mozc

2013.01.23

Gentooでuim-mozcを使う

Anthyの学習機能制限(学習データファイル容量が小さい)問題を知りながら我慢して使っていたが、そろそろ我慢も限界と感じ始めた。mozc(ibus-mozc)への乗換えを決意してインストールしたものの、Emacs上でibusから使うためのibus.elがうまく動かない。ibus.elはUbuntuでもトラブル発生中の模様で、根が深そうなので断念。

Emacsでの代替策としてmozc.elも試したが、"変換でOn/無変換でOff"となるMac風のキーアサインにできないことと、候補ウインドウの表示が今一つのため不採用。

何とかならないかと調べてみると、UbuntuなどのディストリビューションにはMacUIMプロジェクトが提供しているuim-mozcが存在していることが判明。また、Gentooに関してもSSS研究所さんのサイトに私家版ebuildがあることが分かった。

さっそく試してみたが、Mozcが起動できないという"Mozc fatal error"。このebuildを読むとMacUIMのビルドスクリプトをそのまま使っているためにMozcが最新版(開発版?)となり、これが原因でGentooではまだうまく動かないようだ。SSS研究所さんはCUI環境のようなので、そちらでは問題ないのかもしれない。

ここまできて、ようやく自分でebuildを書く決心がついた。


 -- 安定板のibus-mozcである"mozc-1.6.1187.102.ebuild"をベースに作成
 	(以下ではmozc(ibus-mozc).ebuildと呼ぶ)
 -- iBusへの依存を解除、UIMへの依存を追加、mozc(ibus-mozc)と排他にする
 -- Subversionへの依存を追加
 -- MacUIMプロジェクトのSourceをsvnで取得(libuim-mozcなど)
    上記安定版mozcに対応するため、svnで取得するrevisionをr320に限定
      (↑2013.05.11追記)
    ビルドスクリプト(./build)を読む限りでは、Mac以外の環境でのmozcへの
    パッチはmozc-kill-line.diffだけのようなので、これだけを採用。
 -- MacUIMのビルドスクリプトの内容をebuildの各ステップに割り当てて記述
 -- pkg_postinit()/pkg_postrm()にuimへのmozc登録/解除手順を追加
        (uim-module-manager)
 -- Emacs用のsite-lispをmozc(ibus-mozc).ebuildのものをrenameしてfiles
     ディレクトリへ

/usr/lib64/mozc_serverとmozc_toolはmozc(ibus-mozc).ebuildで作られるものと同一の模様なので、排他化は不要なのかもしれないが、mozc(ibus-mozc).ebuildでのMozcのバージョンが進んだ時にトラブルが発生するような予感がするので排他にしている。

uim-mozcのバージョン名はmozcのバージョンを反映するのか、libuim-mozcのバージョンを反映するのかなども悩ましいのだが、私家版なのでとりあえず-9999.1にしておく。

コンパイルの途中で"WARNING: gmock not found. Disabling unittest."がでるのだが、動作しているので無視している。現時点では理解できていないので、忘れなければ追々改善していく予定。

(2013.01.28追記) 上記のWARNINGはmozc(ibus-mozc).ebuildでも発生している。 Portageのdev-cpp/gmockを入れてみたが、WARNINGは消えない。 mozc本家サイトのソースと比較したところ、ダウンロードしてくるtarballにgmock関連のファイルが入っていないことが原因と判明した。 WARNINGがあっても実害はなさそうなので、このまま何もしない。

下に貼り付けたebuildではmozc(ibus-mozc)からの変更点をコメントで残してあるが、ダウンロードリンクのファイルからはコメントを削除してある。
なお、私はプログラマではないので、uim-mozc本体については全く知識がなく、ただ、動かせるようにしただけなので、uim-mozcやmozcに関する質問はご勘弁を。

また、インストール方法の記事を近日中に書く予定。
--> 書きました。
Gentoo Linuxに、uim-mozcをインストール

動作環境


$ uname -a
Linux hm_gentoo 3.6.11-gentoo #2 SMP Thu Jan 3 13:34:27 JST 2013
x86_64 AMD Phenom(tm) II X4 905e Processor AuthenticAMD GNU/Linux

GNOME 2.32.1
Emacs 23.4.1

念のため、
「このebuildを使用した場合のいかなる結果にも当方は責任を持ちません。その点についてご理解いただいた上でお試し願います。」

(2013.05.11追記) uim-mozcのsvn取得コマンドにrevision指定(-r 320)追加
[理由]mac-uimさんのuim-mozcの更新により、対応するmozcのversionが変更されて最新のuim-mozcとGentoo安定版のmozcとの組み合わせではコンパイルに失敗するようになったため、uim-mozcを少し古いrevisionに限定した(mozcの安定性を優先)。
(2013.03.17追記) qtのpkg名が変わったようなので反映。 変更後のファイル名はuim-mozc-9999.1-r1.ebuild。 旧:x11-libs/qt-gui、新:dev-qt/qtgui

「uim-mozc-9999.1-r2.ebuild」をダウンロード

# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# version 0.1-r2 (furuki328, 2013.05.11)
 
EAPI="3"
PYTHON_DEPEND="2"
inherit elisp-common eutils multilib multiprocessing python toolchain-funcs
 
DESCRIPTION="The Mozc engine for uim"
HOMEPAGE="http://code.google.com/p/mozc/ http://macuim.googlecode.com/svn/trunk/Mozc/"
 
PROTOBUF_VER="2.4.1"
GMOCK_VER="403"
MOZC_VER="1.6.1187.102"
 
MOZC_URL="http://mozc.googlecode.com/files/mozc-${MOZC_VER}.tar.bz2"
 
PROTOBUF_URL="http://protobuf.googlecode.com/files/protobuf-${PROTOBUF_VER}.tar.bz2"
 
SRC_URI="${MOZC_URL} ${PROTOBUF_URL}"
 
LICENSE="Apache-2.0 BSD Boost-1.0 ipadic public-domain unicode"
SLOT="0"
KEYWORDS="~amd64 ~x86"
 
IUSE="emacs +qt4 renderer"
 
RDEPEND="dev-libs/glib:2
	dev-libs/openssl
	x11-libs/libxcb
	app-i18n/uim
	emacs? ( virtual/emacs )
	renderer? ( x11-libs/gtk+:2 )
	qt4? (
		dev-qt/qtgui:4
		app-i18n/zinnia
	!app-i18n/mozc
	)"
# x11-libs/qt-gui:4 --> dev-qt/qtgui:4
 
DEPEND="${RDEPEND}
	dev-vcs/subversion
	virtual/pkgconfig"
 
BUILDTYPE="${BUILDTYPE:-Release}"
 
RESTRICT="test"
 
SITEFILE=50${PN}-gentoo.el
 
pkg_setup() {
	python_set_active_version 2
}
 
src_unpack() {
	unpack $(basename ${MOZC_URL})
	mv ${WORKDIR}/mozc-${MOZC_VER} ${WORKDIR}/${P}
 
	cd "${S}"/protobuf
	unpack $(basename ${PROTOBUF_URL})
	mv protobuf-${PROTOBUF_VER} files
}
 
src_prepare() {
 
	cd "${S}"
	svn export -r 320 --force https://macuim.googlecode.com/svn/trunk/Mozc Mozc || die "svn failed"
	rsync -auv --exclude=.svn "${S}/Mozc/uim" "${S}/unix/" || die "rsync failed"
	patch -p0 < "${S}/Mozc/mozc-kill-line.diff" || die "patch failed"
 
# 2013.05.11 add svn "-r 320" option.
}
 
src_configure() {
	local myconf="--channel_dev=0"
	myconf+=" --server_dir=/usr/$(get_libdir)/mozc"
 
	if ! use qt4 ; then
		myconf+=" --noqt"
		export GYP_DEFINES="use_libzinnia=0"
	fi
 
	if ! use renderer ; then
		export GYP_DEFINES="${GYP_DEFINES} enable_gtk_renderer=0"
	fi
 
	"$(PYTHON)" build_mozc.py gyp ${myconf} || die "gyp failed"
}
 
src_compile() {
	tc-export CC CXX AR AS RANLIB LD
 
	local my_makeopts=$(makeopts_jobs)
	# This is for a safety. -j without a number, makeopts_jobs returns 999.
	local myjobs=-j${my_makeopts/999/1}
 
	local mytarget="unix/uim/uim.gyp:uim-mozc server/server.gyp:mozc_server"
	use emacs && mytarget="${mytarget} unix/emacs/emacs.gyp:mozc_emacs_helper"
	use renderer && mytarget="${mytarget} renderer/renderer.gyp:mozc_renderer"
	if use qt4 ; then
		export QTDIR="${EPREFIX}/usr"
		mytarget="${mytarget} gui/gui.gyp:mozc_tool"
	fi
 
	"$(PYTHON)" build_mozc.py build_tools -c "${BUILDTYPE}" ${myjobs} || die
	"$(PYTHON)" build_mozc.py build -c "${BUILDTYPE}" ${mytarget} ${myjobs} || die
 
	if use emacs ; then
		elisp-compile unix/emacs/*.el || die
	fi
}
 
src_test() {
	"$(PYTHON)" build_mozc.py runtests -c "${BUILDTYPE}" || die
}
 
src_install() {
	if use emacs ; then
		dobin "out_linux/${BUILDTYPE}/mozc_emacs_helper" || die
		elisp-install ${PN} unix/emacs/*.{el,elc} || die
		elisp-site-file-install "${FILESDIR}/${SITEFILE}" ${PN} || die
	fi
 
	exeinto "/usr/$(get_libdir)/uim/plugin" || die
	doexe "out_linux/${BUILDTYPE}/libuim-mozc.so" || die
 
	exeinto "/usr/$(get_libdir)/mozc" || die
	doexe "out_linux/${BUILDTYPE}/mozc_server" || die
 
	insinto "/usr/share/uim" || die
	doins "${S}/Mozc/scm/mozc-custom.scm" "${S}/Mozc/scm/mozc-key-custom.scm" "${S}/Mozc/scm/mozc.scm" || die
 
	insinto "/usr/share/uim/pixmaps/" || die
	newins "data/images/unix/ui-tool.png" "mozc_tool_uim_selector.png" || die
	newins "data/images/unix/ime_product_icon_opensource-32.png" "mozc.png" || die
	newins "data/images/unix/ui-properties.png" "mozc_tool_uim_config_dialog.png" || die
	newins "data/images/unix/ui-dictionary.png" "mozc_tool_uim_dictionary_tool.png" || die
 
	if use qt4 ; then
		exeinto "/usr/$(get_libdir)/mozc" || die
		doexe "out_linux/${BUILDTYPE}/mozc_tool" || die
	fi
 
	if use renderer ; then
		exeinto "/usr/$(get_libdir)/mozc" || die
		doexe "out_linux/${BUILDTYPE}/mozc_renderer" || die
	fi
}
 
pkg_postinst() {
 
	uim-module-manager --register mozc
 
	if use emacs ; then
		elisp-site-regen
		elog "You can use mozc-mode via LEIM (Library of Emacs Input Method)."
		elog "Write the following settings into your init file (~/.emacs.d/init.el"
		elog "or ~/.emacs) in order to use mozc-mode by default, or you can call"
		elog "\`set-input-method' and set \"japanese-mozc\" anytime you have loaded"
		elog "mozc.el"
		elog
		elog "  (require 'mozc)"
		elog "  (set-language-environment \"Japanese\")"
		elog "  (setq default-input-method \"japanese-mozc\")"
		elog
		elog "Having the above settings, just type C-\\ which is bound to"
		elog "\`toggle-input-method' by default."
	fi
}
 
pkg_postrm() {
 
	uim-module-manager --unregister mozc
 
	use emacs && elisp-site-regen
 
}
 

« 2012年12月 | トップページ | 2013年3月 »