おのたく日記 YouTubeも始めました→
2009-05-09(Sat) ATOK for LinuxをDebian amd64 (squeeze)にインストールする [長年日記]
■ [Debian][ATOK]ATOK for LinuxをDebian amd64 (squeeze)にインストールする
いままでは、2006年5月23日の日記に書いたように、dchrootしたi386環境の中でATOK for Linuxを動かしている。
FirefoxのflashやAcrobat Reader等のプラグインがamd64環境でも走るようになってきて、最近はi386のプロセスをあまり走らせる事はなくなってきたので、そろそろi386環境を消そうかと思って、ゆいつi386環境で動いてるATOK for Linuxのサーバーもamd64環境で動かすようにすることにした。
動かしかたのミソは、
1. 32bit版しかないatokx2.soを共有ライブラリとして巻き込むiiimdサーバーを32bitで動かす。
→iiimf-serverパッケージは、手動でi386版をダウンロードしてきて「dpkg --force-architecture -i iiimf-server_12.3.91-6.3_i368.deb」とインストールする。
2. iiimdサーバを動かすのに必要で足りない32bit共有ライブラリ(libwrap.so.0 libiiimp.so.1)はi386環境から取ってくる。
といわけで以下の手順でインストールした。
# aptiude install ia32-libs libstdc++5 iiimf-client-xbe im-switch
← iiimf-serverの前提となるものをインストール
# cd /usr/lib32/
# ln -s /home/ia32/lib/libwrap.so.0 .
# ln -s /home/ia32/usr/lib/libiiimp.so.1 .
← Debianの64bitパッケージにない32bitの共有ライブラリを32bit環境からコピー
# ldconfig
# dpkg --force-architecture -i iiimf-server_12.3.91-6.3_i386.deb
← 32bitのパッケージをamd64環境にインストール
# update-rc.d iiimf-htt-server.ia32 remove
# update-rc.d atokx2.ia32 remove
← 32bit環境のサーバーを起動していたのを止める。
# dpkg --force-architecture -i atokx2_17.0-2.1-6_i386.deb
← 32bit版のatokx2パッケージをインストール
Starting ATOKX2 server: atokx2mngdaemon.
とりあえず、gnome-terminalなどで入力メソッドをIIIMに変えるとATOKで入力ができるようになった。
■ [Debian][ATOK]ATOK for Linuxの郵便番号辞書更新
atokx2パッケージでインストールするとJustsytemが公開しているATOK for Linuxのパッチは当ててくれるが郵便番号辞書は最新になっていないので、郵便番号辞書は手動で更新する必要がある。
既にJustSystemの辞書のupdateサービスは終わっていて、2008年11月版が最新版なので、それをインストールした。
# ls -l /usr/lib/atokx2/opt/atokx2/share/systemdic/atok17y7.dic
-rw-r--r-- 1 root root 15357952 2004-12-12 12:00 /usr/lib/atokx2/opt/atokx2/share/systemdic/atok17y7.dic
# tar xvfz a17y0811lx.tgz -C /usr/lib/atokx2/
# ls -l /usr/lib/atokx2/opt/atokx2/share/systemdic/atok17y?.dic
-rw-r--r-- 1 root root 15371008 2008-11-11 12:00 /usr/lib/atokx2/opt/atokx2/share/systemdic/atok17y7.dic
-rw-r--r-- 1 root root 2377472 2008-11-11 12:00 /usr/lib/atokx2/opt/atokx2/share/systemdic/atok17yc.dic
■ emacsでATOK for Linux使おうとするとiiimdサーバが落ちる
早速、iiimf-client-elパッケージで、emacsからATOK for Linuxを使うことにした。
iiimdサーバは、defaultではTCP Portは開かずUNIXソケットだけのようなので
(setq iiimcf-server-control-hostlist '("unix:/var/run/iiim/.iiimp-unix/9010"))
[.emacsより引用]
としてiiimcfの接続方式を変えて接続したが
error in process sentinel: IIIMP: connection reset by peer.: "sentinel", [#
# <2>> "unix" "/var/run/iiim/.iiimp-unix/9010" nil 1]
というエラーが出て漢字変換ができない。emacs側の設定や、iiimdサーバーの設定/etc/iiim/iiimd.xml.confが悪いのかと思ってiiimdをdebugモードで起動して調べたら、なんとeamcsから接続に行くとiiimdサーバーが落ちてしまうことが判明
# /usr/bin/iiimd -d
Turn on debug mode.
<acls default="deny">
<acl type="permit"><hostname>127.0.0.1</hostname></acl>
<system type="password"/>
<module path="/usr/lib/iiim/le/default/default.so">
Adding LE (lang:en, /usr/lib/iiim/le/default/default.so)
LE(atokx2) is loading.
Path=/usr/lib/iiim/le/atokx2/
version=1.2
locale=
need_thread_lock=false
langs=ja,
object for atokx2
object_type = 131
object id = 32769
object size = 0
rev. domain name = jp.co.justsystem
path = ./locale/ja/atokx2/atokx2aux.so
scope = atokx2
signature =
basepath =
encoding =
LE(default) is loading.
Path=/usr/lib/iiim/le/default/
version=1.2
locale=
need_thread_lock=false
langs=en,
LE(sunim_default) is loading.
Path=/
version=(NULL)
locale=
need_thread_lock=false
started.
Allow the connection by PF_UNIX.
The access from tkyn@localhost was granted.
Create new IMDesktop for mirara.home.on-o.com:0
セグメンテーション違反です
■ iiimf-client-elパッケージにパッチしてビルドしなおす
「#508453 Cannot use ATOKX3 for Linux on iiimf-client-el (iiimecf)」によると、IIIMECFの最新版0.75にすればatokx3でも問題が治ると言うことなので、早速、ここのpatchを当ててパッケージをビルドしなおすことにした。
$ apt-get source iiimf-client-el
$ cd im-sdk-12.3.91
$ zcat im-sdk_control.diff.gz |patch
$ debchange -i
im-sdk (12.3.91-6.3-tkyn1) unstable; urgency=low
* Non-maintainer upload.
* iiim-client-el 0.75
-- Takuya Ono <takuya@page.on-o.com> Sun, 10 May 2009 05:05:01 +0900
$ cd ../im-sdk-12.3.91-6.3
$ dpkg-buildpackage -us -uc -b -rfakeroot &
「#508453」のパッチは、ソースに当てるファイルもあるけど、dpkg-buildpackageするたびにソースが展開されるようなので、dpkg-buildpackageしたら裏でコンパイルが始まる前に
$ cd im-sdk-12.3.91-6.3
$ zcat ../upstream_iiimecf0.75.patch.gz |patch -p0
としてソースのパッチをあてた。あと、今回はiiimf-serverはつかないので関係ないけど、「struct ucred peercred;」のsizeofが出来ないとコンパイルエラーが出てパッケージが出来なかった。どうやらUNIXソケットの接続先を取得するLinux kernelのSO_PEERCRED機能を使うところが問題のようなのらしいので、とりあえず
#elif defined(SO_PEERCRED_stop)
[build-tree/iiimf-12.3.91-svn2814/iiimsf/src/iwrap.c 185行目より引用]
としてSO_PEERCRED機能を使わないようにしてコンパイルをパスさせた。
こうして出来たパッケージを
# dpkg -i iiimf-client-el-bin_12.3.91-6.3-patch1_amd64.deb
# dpkg -i iiimf-client-el_12.3.91-6.3-patch1_all.deb
として、IIIMECFの0.75にしたら、ちゃんとemacsからもATOK for Linuxで漢字変換ができるようになった。
|