あれこれ備忘録@はてなブログ

勉強したことやニュースや出来事を備忘録として書いていきます

XenialDog(Puppy Linux系)Anthyの辞書をできる限り強化してみた

XenialDogに、rootで使えるMozcをビルドしてインストールする試みは失敗した…。

原因がまだ分からないのでとりあえずはAnthyを使うことにした。

arekorebibouroku.hateblo.jp

ここの記事にも書いてあるようにPuppy Linuxの日本語フォーラムでrootで使えるSCIM-Mozcがある。

これを使っても良いし、これまではこれを使っていたが、一度起動するとメモリ消費量が200MB近く大きくなるのがちょっと気になっていた。

今回は、Anthyを使い続けることを前提に辞書を強化することにした。

まず、Google日本語入力強化辞書をAnthy用に変換した。

変換するのにRubyというスクリプトを実行する環境が必要だ。

難しい場合はここは読み飛ばして、このあとの操作だけしてほしい。

https://www.mediafire.com/?cy1mxpjds5l5h

配布サイト自体はなくなってしまった様ですが、オンラインストレージは生きている。

ここからGoogle日本語入力強化辞書v5-1.7zをダウンロードして解凍する。

いろいろあるが、通常の文章を書く上で強化したい部分だけ考えると「Google日本語入力強化辞書.txt」だけで良いと思う。

どうもEUC-JPのようなので

nkf -e -w Google日本語入力強化辞書.txt > google_dic.txt

として文字コードUTF-8に変換。

XenialDogにはnkfがなかったのでapt-getやSyanpticパッケージマネージャでインストールする必要がある。

userdic - 日本語入力ユーザー辞書変換スクリプト

次に、上のリンクからuserdicスクリプトをダウンロードする。

ruby userdic <変換元> <変換先> < 変換元ファイル名 > 変換先ファイル名

で変換できるとのことなので

ruby userdic mozc anthy < google_dic.txt > anthy_dic.t

などとしてMozc(Google日本語入力)用からAnthy用に変換。


次にAnthyと同じくらい有名な変換エンジンで、Anthyと辞書の互換性のあるCannaの辞書を手に入れる。

cannadic改 Wiki - cannadic改 - OSDN

本当はAnthyソースコードを手に入れてビルドが必要の様ですが今回は無理やりそのまま使ってみることにした。

ダウンロードファイル一覧 - cannadic改 - OSDN

ここからalt-cannadic-110208.tar.bz2をダウンロードして解凍する。

また、以下からも辞書ファイルをダウンロード。

GitHub - mt819/Canna-Dictionary: かんな辞書 / Dictionary for Canna

ページの右側にある「Clone or download」と書かれた緑のボタンを押して、現れたポップアップの右下の「Download ZIP」を押すとダウンロードできる。

これを解凍。

二つのディレクトリの中にある「.t」ファイルと「.ctd」ファイルを「/usr/share/anthy/dic」へコピーする。

念のため、バックアップを取っておいた方が良いだろう。

同名ファイルがあるので上書きする。

これらのファイルの名前を/etc/anthy/diclistへ追加する。

diclistもバックアップをとっておいた方が良い。

ls -1 /usr/share/anthy/dic/ >> /etc/anthy/diclist

とすれば、辞書ファイル一覧が追加される。

このあと

update-anthy-dics

とすると辞書ファイルが更新される。

ログインしなおすかパソコンを再起動すれば、更新された辞書が使われるようになっているはずだ。

なお、これはroot環境で使われるPuppy LinuxやDebianDog系のディストリビューション(TahrPup,XenialPup,XenialDogなど)の話だ。

一般ユーザでログインして使うディストリビューションの場合は、各操作で「sudo」コマンドを頭につける必要があるだろう。

ディストリビューションによって場所は違うと思うが、Ubuntu系の場合は/var/lib/anthyディレクトリ以下にanthy.dicが、さらにmkworddic以下にanthy.wdicというファイルができる。

anthy.wdic文字コードUTF-8なのだと思う。

anthy.dicは40MB以上あり、強化前の2倍以上になった。


この文章もAnthyで書いている。

まだ使ってから間もないのでどの程度、良くなったのかわからないところもあるが、この記事を書いている分には不足はない。

不具合も今のところ出ていないのでうまくいっているのではないかと思う。

この程度使えるならMozcを使わなくても良いかもしれない。

(Rootの方は失敗)Rootで使えるMozc、あるいはMozc-UTをビルドするまでの長く険しい道のり

Mozcの辞書を強化する事を目的としたMozc UT2 Dictionary(元はMozc UT Dictionary)というものがある。

http://www.geocities.jp/ep3797/mozc-ut2.html

しかし、これはArch Linuxを想定しているため、他のディストリビューションには敷居が高い。

これをDebianUbuntuで使えるdebパッケージを生成できるように改造して公開してくれている方がいる。

Ubuntu 16.10でibus-mozcを使用する - Sickly Life Blog

16.04なのでこちらも参考にした。

ほぼ同じ内容。

Ubuntu 16.04 LTS に Mozc UT Dictionary をインストールしてみた - 旧ID:itiriのブログ

XenialPupやXenialDogで動くMozcが欲しかったこともあり、ちょっと、ビルドに挑戦してみることにした。

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

sudo apt-get install -y clang libdbus-1-dev libglib2.0-dev libgtk2.0-dev subversion tegaki-zinnia-japanese debhelper libibus-1.0-dev build-essential libssl-dev libxcb-xfixes0-dev python-dev gyp protobuf-compiler libqt4-dev libuim-dev libzinnia-dev fcitx-libs-dev devscripts ninja-build

この時、以下のようなエラーが出た。

インストールすることができないパッケージがありました。おそらく、あり得

ない状況を要求したか、(不安定版ディストリビューションを使用しているの であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移 動されていないことが考えられます。 以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
libgtk2.0-dev : 依存: libpango1.0-dev (>= 1.20) しかし、インストールされようとしていません
                 依存: libcairo2-dev (>= 1.6.4-6.1) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

そこで

sudo apt-get install libcairo2-dev

してみたところ

以下のパッケージには満たせない依存関係があります:
libcairo2-dev : 依存: libcairo2 (= 1.14.6-1) しかし、1.15.2-0intel1 はインストールされようとしています
                 依存: libcairo-gobject2 (= 1.14.6-1) しかし、1.15.2-0intel1 はインストールされようとしています

本来、調べたいエラーとは違いますがこれが出てきました。

Cannot Install Intel Proprietary Graphics Driver - elementary OS Stack Exchange

どうやらIntel HD Graphics DriverをプロプライエタリやPPAでアップデートしているのが原因のようです。

apt-getで特定のバージョンをインストールする - Qiita

上のページを参考にバージョンを指定してインストールする必要があるかも知れない。

ただこれだと現在のグラフィック環境で不整合が起きるだろう。

Chrootでビルド環境を別に作る必要があるかも知れない。

Hachulog: debianやubuntuでmikutterビルド環境を作る

ちょっと古い記事なのでそこを考えながら

sudo apt-get install debootstrap

でdebootstrapをインストール。

sudo -s

してroot環境に固定して

mkdir /var/root
cd /var/root
debootstrap xenial ./xenial http://jp.archive.ubuntu.com/ubuntu

Ubuntu 16.04のコアな環境を構築する。

http://ftp.jaist.ac.jp/pub/Linux/ubuntu でも良いと思う。

何も指定しないとhttp://archive.ubuntu.com/ubuntu/ になると思う。

apt-getが速いのが良いなら、jaistにすると良いかも。

cp -r mozc-2.18.2598.102+dfsg-1~ut2-20170529 /var/root/xenial/usr/src

などとしてMozc-UTのソースファイルが入ったディレクトリを適当なところにコピーする。

chroot /var/root/xenial /bin/bash

でルートディレクトリを変更。

apt-get update

して、データベースを更新して

ビルドに必要ないのではないかと思うが、日本語環境にする設定もしてみた。

apt-get install language-pack-ja-base language-pack-ja

パッケージ名の補完がないので手打ちかコピー&ペーストで行う。

echo "Asia/Tokyo" > /etc/timezone
cp /usr/share/zoneinfo/Japan /etc/localtime
locale-gen ja_JP.UTF-8
update-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale

timedatectlコマンドを使って設定する方法はsystemd-containerを入れるなどしないと駄目らしい。

上の方法が16.04でも有効なのかわからない。

下のものはエラーが出た時に一度、現在のルートディレクトリからexitして、適宜マウントする。

mount -t proc proc ./xenial/proc
mount -o bind /dev ./xenial/dev
mount -t devpts devpts ./xenial/dev/pts
mount -t sysfs sysfs ./xenial/sys

最初から入れたところ、「apt-get update」でエラーが出た。

これで改めて以下のパッケージのインストールを試みた。

apt-get install -y clang libdbus-1-dev libglib2.0-dev libgtk2.0-dev subversion tegaki-zinnia-japanese debhelper libibus-1.0-dev build-essential libssl-dev libxcb-xfixes0-dev python-dev gyp protobuf-compiler libqt4-dev libuim-dev libzinnia-dev fcitx-libs-dev devscripts ninja-build

すると以下のエラー。

パッケージ ninja-build は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。

E: パッケージ clang が見つかりません
E: パッケージ gyp が見つかりません
E: パッケージ libuim-dev が見つかりません
E: パッケージ 'ninja-build' はインストール候補ではありません

/etc/apt/source.listを見たら

deb http://jp.archive.ubuntu.com/ubuntu xenial main

しか無かったので、試しに一度exitして、ホストのsource.listをコピーしてみた。

改めてchrootし、「apt-get update」したあとで、もういちど上記のコマンドを実行したところ成功。

ppa以外のリポジトリ、xenial-updatesやxenial-backports、xenial-securityが入ったのでどれが有効だったか分からないが、もしかしたら

deb http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial main restricted universe
deb-src http://ftp.jaist.ac.jp/pub/Linux/ubuntu/ xenial main multiverse restricted universe

とするだけでも良かったかも知れない。

ppaのリポジトリプロプライエタリリポジトリが入ると、ホストの環境と同じになってしまって冒頭のエラーが出て意味がなくなるので入れてはいけない。

updatesやbackportなども有効にしてしまったので、余計なもののアップデートもされてしまう。

かなり時間がかかるので気長に待つ。


Taku Kudo on Twitter: "rootでmozcを動かしたい人もいるのか.. 以下のあたりを片っ端に NORMAL にすれば動くと思う。Linux/Macはカジュアルなチェックしかしていません。 https://t.co/b9QBhUMctG"

0x432B2B00: rootでmozcを動かす

Mozcをroot権限で動かすには、ダウンロードしたソースのうち

/mut/src/base/run_level.cc

geteuid() == 0

または

getuid() == 0

を調べている箇所で

RunLevel::DENY

となっているのを

RunLevel::NORMAL

に書き直すか、判定している部分全体を削除すると良いようだ。

ここまできたら、いよいよビルドである。

/usr/srcにMozcソースが入ったディレクトリをコピーしたのでそこへ移動する。

そして

./build_mozc_plus_utdict

を実行。

すると大量のエラーが。

後ろの方だけ書き出すと

debian/rules:33: ターゲット 'override_dh_auto_configure' のレシピで失敗しました
make[1]: *** [override_dh_auto_configure] エラー 1
make[1]: ディレクトリ '/usr/src/mozc-2.18.2598.102+dfsg-1~ut2-20170529/mut' から出ます
debian/rules:30: ターゲット 'build' のレシピで失敗しました
make: *** [build] エラー 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
debuild: fatal error at line 1376:
dpkg-buildpackage -rfakeroot -d -us -uc -b failed
/usr/src/mozc-2.18.2598.102+dfsg-1~ut2-20170529
終了

こんな感じ。

/usr/src/以下のmozcを入れたフォルダを見てみたらなんと/mutディレクトリ以下全部が消えていた…。

build_mozc_plus_utdictを見てみたら、ビルドに成功しようと失敗しようとmutディレクトリ以下を消してしまうコマンドが。

なんで・・・。

#rm -rf ./mut/

当該箇所をコメントアウトする。

改めてやってみたら消えなくなったが、当たり前だがエラーはそのまま。

足りないパッケージがあるのかと思い確認。

libprotobuf-devが無いようだったのでインストール。

そのときapt-getに「保留: 78 個」とあったので

apt-get dist-upgrade

を実行してこれらをアップデート。

それでも駄目なのでもう少しエラーを良く見たら

  File "/usr/lib/python2.7/multiprocessing/synchronize.py", line 75, in __init__
sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
LOSError: [Errno 38] Function not implemented

python - Django Celery implementation - OSError : [Errno 38] Function not implemented - Stack Overflow

/dev/shmのマウントが必要らしい。

/devディレクトリ全ての方が良いのか/dev/shm限定の方が良いのかどちらだろう。

とりあえずexitで出て、/dev/shm限定にしてみた。

mount -o bind /dev/shm ./xenial/dev/shm

として再度、build_mozc_plus_utdictを実行。

今度は先へ進んだ。

しかし、

make[1]: desktop-file-install: コマンドが見つかりませんでした

でエラー。

command line - Eclipse installation question - .desktop file - Ask Ubuntu

apt-get install desktop-file-utils

を実行して、再び挑戦。

見事に成功!

emacs-mozc-bin_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
emacs-mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
fcitx-mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
ibus-mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
mozc-data_2.18.2598.102+dfsg-1~ut2-20170529_all.deb
mozc-server_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
mozc-utils-gui_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
uim-mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb

ができた。

通常のUbuntu 16.04ではfcitxを使っているはずなので

fcitx-mozc_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
mozc-data_2.18.2598.102+dfsg-1~ut2-20170529_all.deb
mozc-server_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb
mozc-utils-gui_2.18.2598.102+dfsg-1~ut2-20170529_amd64.deb

のインストールだけで良いはずである。

できたdebファイルはどこか適当なところにコピーして保存しておくと良いのではないかと思う。

exit

chrootから抜け出す。

umount ./xenial/dev/shm

でアンマウントする。

sudo -s

でroot権限になっているのでもう一度

exit

する。

一応、インストール前に

sudo apt-get remove mozc-data mozc-server mozc-utils-gui fcitx-mozc

しておいた方が良いと思う。

…と、ここで端末で変なエラーが出てしまったうえ、もう一度、端末を開き直したら

$の表示が出ず、何も入力できなくなった。

その上、メニューの「ログアウト」もタスクバーの電源マークのアイコンも効かなくなってしまった。

Ctrl + Alt + F1

でコンソール画面を開いても駄目だった。

これまでの試行錯誤でちょっとおかしくなってしまったようだ。

仕方がないので強制的に再起動する。

UbuntuTips/Others/MagicSysRq - Ubuntu Japanese Wiki

Alt+PrintScreen+R+S+E+I+U+B

で再起動できるはずだ。

キー入力も効かなくなってしまったら、仕方がないので電源ボタン長押しで電源を落とすしかない。

本当はやらないに越したことはない。

再起動したところで

上のコマンドでmozc-dataなどを削除。

mozc-dataを消すと辞書データが消えるのでバックアップが必要な場合はしておいた方が良いかと思ったが、どうやら~/.mozc以下のファイルは消えないようだ。

そして、debファイルのあるディレクトリに移って

sudo dpkg -i mozc*.deb fcitx*.deb

をして、作ったパッケージをインストールする。

うちの環境ではそれまでのUbuntu公式(だと思う)のMozcのバージョンは「2.17.2116.102」だが、インストール後は、「2.18.2598.102」になった。

どうやら成功したようだ。

長い道のりだった。

Ubuntu(Lubuntu)ではこれで使えるようになったが、手を加えたのでroot環境のXenialDogでも使えるはずである。

後で試してみることにする。


ビルド環境を作るだけでも苦労するのに、元のMozcを作る人、変換辞書を作る人、各ディストリビューション向けに改造する人もすごいと思う。


XenialDogで試してみたがやっぱり動かないようだ…。

きちんと設定したはずなのだが。

もう一度、ソースを見直してみる。

ibus-mozcがnot rootだとできる問題を解決する - インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

この人は成功しているのだが…。

バージョンが古い場合にしか当てはまらないのかとも思ったがこの記事の人は「2.18.2595.102」だから新しい。

RunLevel::DENYをRunLevel::NORMALに直しているのだが何故かRoot環境で動くようにならない…。

ユーザー名Puppyでログインすると使えるのでパッケージ自体はできあがっているようだ。

なぜ動かないのか分からない。

該当個所以外にもRunLevel::DENYの部分はあるが、これはWindows用の設定だから関係ないはずだ。

該当個所の判定部分を削除した方が良いんだろうか…。

でも、同じだと思うのだが。

誰かどこを変えれば良いか教えてほしい…。


コメントをもらったのでもう一度、試してみたがやっぱり使えない。

rootだとmozc_serverが起動されていないのだ。

端末を起動して/usr/lib/mozc/mozc_serverを実行することはできる。

エラーは出ないから端末内での起動はできているようだ。

でもuimからの呼び出しでtty1で起動されていないと意味が無い。

原因が分からない。

見た映画『プリディスティネーション』『グッドナイト・マミー』

とある酒場にやってきた男が、酒のボトル1本と引き換えにバーテンダーに、自分がかつて女性だったということから始まる数奇な人生を語る。

それを聞いたバーの店主は、実は時空を超えて犯罪者を追う捜査官で、男に捜査官の仕事を引き継ぐことを条件に彼の心残りを過去に戻って果たすことチャンスを持ちかける。

そんな感じのあらすじだ。

テーマとして感じたのはなんといっても輪廻。

話の大部分はバーに現れた元女性である男の半生なのだが、彼が恨みや心残りを感じているきっかけを作ったある男というのも、自分自身も、そして彼を過去へ連れていくバーテンダーで時空捜査官も、大きな時空の輪廻の中にいることが後半、一気に明らかになる。

オーストラリアのSF映画だそうだ。

1970年前後にタイムマシンができたようだが、タイムマシンが時刻設定が南京錠にあるようなダイヤル式でレトロな作りになっている。

その割に元女性だった男が女性時代に入った宇宙へ行ける人材を育てる組織の設備は、そのまま現在か少し先の未来の風景なのが不自然だった。

その組織は実は時空捜査官とつながりがあるので未来を見てきてその技術を取り入れたという理屈はつくのかも知れないがちょっと不釣り合いだ。

タイムマシンの方はバイオリンのケースを模してあるのでレトロな作りなのだという見方もできないわけではないが。

あとネタバレになるが、元女性の男をバーテンダーが見た時や、男が元は女性だったと告白したときのバーテンダーの反応がちょっと不自然。

秘密が後半一気に解明されるが、前半部分で見ている人に意識させるような伏線があるわけではないので、「なるほど」と思うような感じではなく、「そういう終わらせ方か」という感じだった。

でも、なかなか面白いので時間があったら見てみると良いと思う。


双子の兄弟ルーカスとエリアスは、顔に包帯を巻いて帰ってきた母親がエリアスにばかり優しいなど不審な点が気になり、母親が入れ替わっているのではないかと疑念を抱く。

包帯を外した彼女は整形をしていたせいで少し見た目が変わっており、そのことが更に疑念を深めていく。

ある時、母親が寝ているうちに彼女をベッドに縛り付け、偽物であることを白状するように拷問を加える。

しかし、実は母親は本物で…。

これは文句なく面白い。

そんなに盛り上がりがあるわけではないが、『シックス・センス』を思い出させる作品だった。

最後は残酷な結末だが、ああすることでエリアスにとっては自分が納得できる世界を手に入れることができた。

これはオーストラリアではなくオーストリアの作品である。