birdUbuntu edgy (amd64) で ATOK for Linux を使う方法

Ubuntu edgy (amd64) で ATOK for Linux を使う方法

64bit (amd64、x86_86) 環境の Ubuntu edgy に、32bit バイナリ形態で販売されている ATOK for Linux をインストールする方法をまとめます。まだ一部完璧でない部分があるのですが、とりあえず日常生活には困らない程度にはなったのでここらで報告してしまいます。なお、ここに書かれたことは基本的にはすでにいろいろな人が通ってきた道ではあるようなのですが (Thanks all!)、まとまった情報はまだないようでしたので、少しはお役に立てるかと。

chroot を用いて i386 環境を amd64 環境の下に作る

まず最初に行わなければいけないのが、chroot を用いて本体のサブセットとなる i386 環境を作成することです。i386 環境丸ごとを用意する必要はないのかもしれないけれど、今のところこの手段以外ではまだ成功していません。

amd64 環境下に i386 環境を作る方法については、すでに武藤さんがこちらにまとめられています。基本的にこちらに書かれた「chroot」の項目の手順の通りに行います。

まず、あらかじめ必要なパッケージをインストールしておきます。

$ sudo apt-get install debootstrap dchroot

次に chroot 環境を作りたいパスを決め、そこにディレクトリを作成します。今回は「/var/chroot/i386」としました。

$ sudo mkdir -p /var/chroot/i386

debootstrap コマンドを使って、i386 環境を作ります。武藤さんのページは Debian での例として書かれていますので、Ubuntu の場合は適宜変更します (sid→edgy へ)。

$ sudo debootstrap --arch i386 edgy /var/chroot/i386

上記コマンドが完了したら、dchroot コマンド用の設定ファイルを作ります。/etc/dchroot.conf ファイルに下記一行を追加してください (ファイルがなければ新規に作成してください)。

i386    /var/chroot/i386

次に、今作ったばかりの i386 環境はまだ何の設定もされていない状態ですので、まず /etc から必要そうなファイルをコピーしておきます。

$ sudo cp /etc/passwd /etc/group /etc/shadow /etc/hosts /etc/sudoers /var/chroot/i386/etc/

chroot 環境内の apt の sources.list をとりあえず下記の通りに変更します。

deb http://jp.archive.ubuntu.com/ubuntu edgy main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu edgy main restricted universe multiverse  

deb http://jp.archive.ubuntu.com/ubuntu edgy-proposed main restricted universe multiverse  

## MAJOR BUG FIX UPDATES produced after the final release  
deb http://jp.archive.ubuntu.com/ubuntu edgy-updates main restricted universe multiverse  
deb-src http://jp.archive.ubuntu.com/ubuntu edgy-updates main restricted universe multiverse  

## UBUNTU SECURITY UPDATES  
deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse  
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse  

## Japanese pack  
deb http://archive.ubuntulinux.jp/ubuntu-ja edgy/  
deb http://archive.ubuntulinux.jp/ubuntu-ja edgy-ja/

i386 環境の /home や /tmp は本体と共用することとし、/proc なども準備するために、本体側の /etc/fstab に下記3行を追記します。

/home           /var/chroot/i386/home   none    bind    0       0
/tmp            /var/chroot/i386/tmp    none    bind    0       0  
proc            /var/chroot/i386/proc   proc    defaults        0       0

上の3カ所をあらかじめ mount しておきます。

$ sudo mount /var/chroot/i386/home
$ sudo mount /var/chroot/i386/tmp  
$ sudo mount /var/chroot/i386/proc

また、本体側の /etc/ld.so.conf に chroot 内のライブラリも解決できるよう、以下のパスを追加します。

/var/chroot/i386/lib
/var/chroot/i386/usr/lib  
/var/chroot/i386/usr/X11R6/lib  
/var/chroot/i386/usr/local/lib

武藤さんの手順では、chroot 側から本体側の X サーバに接続するためには、あらかじめ TCP による接続を許可しておかなければならない、とあります。今回これが必要かどうかはよくわからないのですが、とりあえず設定しておくことにします。Ubuntu の場合、X サーバに TCP による接続も許可させるためには、/etc/X11/gdm/gdm.conf の「DisallowTCP」を「false」にします。

# If true this will basically append -nolisten tcp to every X command line, a
# good default to have (why is this a "negative" setting? because if it is  
# false, you could still not allow it by setting command line of any particular  
# server).  It's probably better to ship with this on since most users will not  
# need this and it's more of a security risk then anything else.  
# Note: Anytime we find a -query or -indirect on the command line we do not add  
# a "-nolisten tcp", as then the query just wouldn't work, so this setting only  
# affects truly local sessions.  
#DisallowTCP=true  
DisallowTCP=false

さて、ここまでの手順を行うと、一般ユーザ権限で chroot 下の i386 環境の Ubuntu edgy へ入ることが可能になっています。以下のコマンドで chroot 環境へ入ります。

$ dchroot -c i386 -d

chroot 環境のパッケージの更新、必要なパッケージをインストールしておきます。

$ sudo apt-get update
$ sudo apt-get upgrade  
$ sudo apt-get install ubuntu-ja-keyring  
$ sudo apt-get install language-pack-ja

ATOK for Linux のインストール

引き続き、chroot 環境内への ATOK for Linux のインストールを行います。今回、ATOK のインストールには Debian sid に存在するインストーラパッケージを用いました。ここなどよりあらかじめ deb ファイルをダウンロードしておいてください。このインストーラパッケージを用いて Ubuntu へ ATOK をインストールする手段は、こちらなどに書いてあります。ちょっと古くなってしまっている部分もありますが、基本的にはこちらの手順の通り行います。

以下、すべて chroot 環境内で作業します。

まず、上記インストーラパッケージをインストールしようとします。この時点では依存性の問題から必ずインストールに失敗しますが、気にしないでください。

$ sudo dpkg -i atokx2_17.0-2.1-4_i386.deb

次に、必要なパッケージをインストールしようとします。同じく依存性エラーで終了してしまいますが気にしないように。

$ sudo apt-get install iiimf-htt-server iiimf-htt-xbe iiimgcf

最後に次のコマンドを実行します。これで、すべての依存性情報が解決され、必要なパッケージがすべてインストールされます。

$ sudo apt-get -f install

上記で atokx2 インストーラパッケージも含めインストールされると、途中で ATOK の CD-ROM の場所、より正確には ATOK の CD-ROM 内の atokx-17.0-2.0.i386.tar.gz というファイルのある場所を尋ねられますので適宜答えます。現在のバージョンのパッケージではアップデータも自動的に取得して適用してくれるため、上記手順のページにあるアップデータを適用するステップは行う必要はありません。

これで chroot 側の作業はほぼ完了です。インストール後、すでに htt_server と atokx2mngdaemon という二つのプロセスが立ち上がっているものと思います。

そこで、OS 起動後にも自動的にそれら chroot 内環境のデーモンが立ち上がるように、amd64 側に起動用スクリプトを準備することにします。

まずは iiimf-htt-server 用として下記内容のスクリプトを「/etc/init.d/iiimf-htt-server」として作成します。(このスクリプトもどこかのサイトに書いてあったものを参考にさせてもらったのですが、オリジナルサイトを失念してしまいました。すみません&ありがとうございます>オリジナルの方)

#!/bin/sh
# iiimf-htt-server i386 kicker  
/usr/bin/dchroot -c i386 -d /etc/init.d/iiimf-htt-server $*

同様に、atokx2 用として下記内容のスクリプトを「/etc/init.d/atokx2」として作成します。

#!/bin/sh
# atokx2 server i386 kicker  
/usr/bin/dchroot -c i386 -d /etc/init.d/atokx2 $*</pre>  

それぞれの起動用スクリプトをシステムに登録します。

$ sudo update-rc.d atokx2 defaults 80 20
$ sudo update-rc.d iiimf-htt-server defaults 20 20</pre>  

amd64 環境側の設定

さて最後に、amd64 側 (クライアント側) の設定をします。

必要なパッケージをインストールします。

$ sudo apt-get install iiimf-htt-xbe iiimgcf

ホームディレクトリ下の、「.xinput.d/ja_JP」として下記内容のファイルを作成します。

# ATOK for Linux
XIM=htt  
XIM_PROGRAM=/usr/bin/httx  
XIM_ARGS="/usr/bin/httx -if atokx2 -lc_basiclocale ja_JP -xim htt_xbe"  
GTK_IM_MODULE=iiim  
QT_IM_MODULE=xim  
DEPENDS=atokx2  

export USE_XOPENIM=t  
export HTT_DISABLE_STATUS_WINDOW=t  
export HTT_GENERATES_KANAKEY=t  
export HTT_USES_LINUX_XKEYSYM=t

以上で、OS を再起動しログインしなおしてみると、基本的に ATOK での入力が可能になっているのではないかと思います (変換開始は Ctrl+Space です)。

ただ、この状態では「amd64 環境内の 32bit アプリケーション」(ヤヤコシイ) ではまだ ATOK による変換ができないのではないかと思います。ちょっと調べてみたところ、これは amd64 環境側に、32bit アプリケーション用の GTK immodule、im-iiim.so ライブラリがないことが原因のようでした。そこでちょっと強引ですが、chroot 内の i386 環境からそのライブラリを amd64 環境へコピーして使うことにしました。

chroot 側の im-iiim.so ファイルを amd64 環境側のそれなりの場所へコピーします。

$ sudo cp -p /var/chroot/i386/usr/lib/gtk-2.0/2.10.0/immodules/im-iiim.so /usr/lib32/gtk-2.0/2.10.0/immodules/

(32bit アプリケーション側のものは gtk-query-immodules-2.0 が使えないようなので) /etc/gtk-2.0/gtk.immodules.32 の末尾に下記を追記します。

"/usr/lib32/gtk-2.0/2.10.0/immodules/im-iiim.so" 
"iiim" "Internet/Intranet Input Method" "iiimgcf" "/usr/share/locale" ""

念のため ldconfig を実行しておきます。

$ sudo ldconfig

以上で、amd64 環境側の 32bit アプリケーションでも ATOK が使えるようになると思います。

制限事項

上記手順によってとりあえず ATOK が使えるようになると思いますが、現在のところまだ、ATOK パレットが使えない、という制約があります。そのため GUI からの単語登録等ができません。

その原因をいろいろ調べてみた結果、1) httx を chroot 環境内で立ち上げる、2) /usr/lib/im/locale/ja/atokx2/atokx2aux.so へのアクセスを確保する (amd64 環境側の上記場所にコピーする、リンクを張るなどする) ことで ATOK パレットそのものを出すところまではできたのですが、今のところ結局パレット上の各機能がきちんと動作するところまでは持っていけませんでした。残念!

(2007/04/19 追記) 携帯のブラウザから不用意に更新しようとしたために、一度書いた内容のほとんどが消えてしまいました…。今日になって気がついて、前に書いた内容を記憶から復活させたため、いくつか重要な情報の欠落があるかもしれません。何かお気づきの点ありましたらご指摘ください。

以上です。

コメント

SAK (Tue, 17 Apr 2007 23:18:16)
最近遅くまで仕事してるな〜と思ってたら、こんな事してたんかいっ!!
Digitune (Thu, 19 Apr 2007 21:54:27)
忙しい時ほどこういう現実逃避をしたくなるもので…>SAK
もちろんちゃんと仕事もしてましたよ。ニンニン。
kenboo (Fri, 30 Nov 2007 14:42:29)
AtokX3 for Linuxは64bit対応だというので、早速購入したのですが
部分的に32bit ELFで(というか肝心のatokx3.soが32bit)なので
相変わらず32bit環境を混在させないといけないみたいです。

ちなみに32bit Debian Etchにはさっくりインストールできました。
Digitune (Mon, 10 Dec 2007 13:21:36)
おお、ATOK X3 for Linux なんてものが発売されていたのですね>Kenboo さん
貴重な情報、どうもありがとうございます。最近僕が使っている Ubuntu にも (非公式ながら) 対応しているようで、これは買ってみなくては。