プラグイン集

無料ブログはココログ
2022年5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

サンプルJS

  • ユーロバカ一代の締切
    ・・・初期化中・・・

« 2021年12月 | トップページ | 2022年2月 »

2022年1月

2022年1月 8日 (土)

CentOS7.4 で mozc のコンパイル

mozc とは、ザックリ言えばGoogle 日本語入力からGoogle検索で寄せられる膨大な語彙データを引いてオープンソース化もの。

CentOSであれば、EPELレポジトリに登録されているので、EPELを使えるようにしておけば、
# yum install mozc ibus-mozc
で入る。

このままでは、雑魚IMEなので、新語に強い Neologd を足したり、 地名・駅名・人名を足したUT2辞書を加えた、
mozc-neologd-ut2 もあるが、 CentOS での挑戦者が皆無で情報が無い。
変態玄人( 誉め言葉 )御用達のArchなら使えるらしいが、万年素人の私には無理だ。

しかし、EPELから入れた mozc は、最強ユーザー全知全能神の ROOT では使えない。
ソースのコメントをザックリ言えば、「rootで動かすのは危ないから。」とのこと。
う~んお断りだね。私は、 root で動かしたい。
オープンソースの利点、ソースコードの改変が出来て野良ビルドができる。
早速 git clone したが、 Ubuntu 20.04 + Docker 環境でビルドするらしい。
ネイティブが良ければGYPビルド。GYPビルドってなんぞや? -> Google のビルドプラットフォームらしいぞ。
う~ん分からん。

そんなところで閃いた。
せや、EPEL のソースRPM取ってきて、当該部分を書き換えてリビルドすれば確実や。

同じ事をと思いついた前任者は5年以上前に居るが、2016年の情報では古すぎる。
CentOS6での挑戦はCentOSが終わった今では参考にならない。

EPEL の国内ミラーサーバーをHTTPで参照する。
http://ftp.riken.jp/Linux/fedora/epel/7/SRPMS/Packages/m/
有ったあった、 mozc-2.17.2322.102-1.el7.src.rpm 、 ibus-mozc はこれをビルドすれば生成されるようだ。

では早速、ディレクトリを掘って展開。epel_mozc って名前のフォルダーを作った。
# rpm2cpio ./mozc-2.17.2322.102-1.el7.src.rpm | cpio -vid
コマンドでRPMを普通のファイル群に戻す。
# mv mozc-2.17.2322.102-1.el7.src.rpm ..
で元のソースRPMは退避しておく。
どうやら、 mozc-2.17.2322.102.tar.bz2 が mozc のソースコード本体のようだ。
1つ上のディレクトリに、作業用のディレクトリ mozc-main を掘る。
そして、mozc の bz2ファイルを解凍する。
# tar xvfj mozc-2.17.2322.102.tar.bz2 -C ../mozc-main/
# cd ../mozc-main/base/
# vim run_level.cc
270行目ぐらいにから始まる、getuid() 、 geteuid() システムコールでユーザIDを取得して、
RunLevel::DENY を返している if 文をコメントアウトで無効化する。
大学生時代に勉強しておいてよかったC言語。
書き換えた結果を下に記す。

#else  // OS_WIN
if (type == SERVER || type == RENDERER) {
//if (::geteuid() == 0) {
// This process is started by root, or the executable is setuid to root.
// TODO(yusukes): It would be better to add 'SAFE' run-level which
// prohibits all mutable operations to local resources and return the
// level after calling chroot("/somewhere/safe"), setgid("nogroup"),
// and setuid("nobody") here. This is because many novice Linux users
// tend to login to their desktop as root.
//return RunLevel::DENY;
//}

//if (::getuid() == 0) {
// The executable is setuided to non-root and is started by root user?
// This is unexpected. Returns DENY.
//return RunLevel::DENY;
//}
return RunLevel::NORMAL;
}
// type is 'CLIENT'
//if (::geteuid() == 0 || ::getuid() == 0) {
// When mozc.so is loaded into a privileged process, deny clients to use
// dictionary_tool and config_dialog.
//return RunLevel::DENY;
//}
return RunLevel::NORMAL;
#endif // OS_WIN

このコードを保存する。

終わったら、元の tar.bz2 ファイルを作る。
# cd ..
# tar cvfj ../mozc-2.17.2322.102.tar.bz2.2 *
# cd ..
念のためアーカイブファイルを比較する。
# chmod 664 mozc-2.17.2322.102.tar.bz2.2
tarに詳細を要求するvがあると細かすぎるので、vオプションは外す。
# tar tfj mozc-2.17.2322.102.tar.bz2 2>&1 > 1.txt
# tar tfj mozc-2.17.2322.102.tar.bz2.2 2>&1 > 2.txt
# diff 1.txt 2.txt
ファイルの並び順以外は一致している事。ファイルの並び順が若干違う。
ゴミ掃除をして、新しく作った、mozc-2.17.2322.102.tar.bz2.2 をもとの mozc-2.17.2322.102.tar.bz2 にリネームして置き換える。
# rm 1.txt 2.txt
# rm mozc-2.17.2322.102.tar.bz2
# mv mozc-2.17.2322.102.tar.bz2.2 mozc-2.17.2322.102.tar.bz2
# cp mozc-2.17.2322.102.tar.bz2 ./epel_mozc
# cd ./epel_mozc
ここで喜んで、 # rpmbuild -ba --clean mozc.spec を実行するとSPECが合わないとかで怒られた気がする。
せや、tar.gz なら -ta オプションでコンパイルできたはずやと閃く。
# tar cvfz ../mozc-2.17.2322.102-1.el7.src.tar.gz * 
# rpmbuild -ta mozc-2.17.2322.102-1.el7.src.tar.gz
今度は、辞書のZIPが無いとかで怒られた気がする。
# mv mozc-2.17.2322.102-1.el7.src.tar.gz ./epel_mozc/
# cd ./epel_mozc/
# rpmbuild -ta mozc-2.17.2322.102-1.el7.src.tar.gz
( # rpmbuild -tb mozc-2.17.2322.102-1.el7.src.tar.gz )でもコンパイルできた。
# ls ~/rpmbuild/RPMS/x86_64/
ビルドしたRPMファイルが3個出来ている。mozc、ibus-mozc、mozc-debuginfo の3個だったかと。
# ls ~/rpmbuild/SRPMS/
新しいソースRPMファイルができている。

ビルド段階で、依存ライブラリが無いと言われる場合は、以下のパッケージを入れる。
CentOS BASE、 UPDATE 、EPEL レポジトリで大体揃う。
# yum install --enablerepo=epel protobuf-devel protobuf-c qt-devel zinnia-devel gtk2-devel clang ninja-build gyp ibus-devel emacs xemacs xemacs-packages-extra
必要パッケージがいっぱいあるが、全部入れる。

最後に mozc 本体を入れる。
# cd ~/rpmbuild/RPMS/x86_64/
# yum install --enablerepo=epel *.rpm

これで、 mozc がインストールできただろうか。別な作業を全部保存してから、
# shutdown -r now 
で再起動を掛けてみよう。

GNOME にログインしようと1文字打つとGNOMEの最初に戻されたではないか?
CentOS7.9 が出ているきょうび、 CentOS7.4は古すぎるのでXと入力ドライバが対応できないのだ。
CentOS7.4 を捨てて、 CentOS7.9 にして良ければ、 # yum -y update --enablerepo=epel 、 # yum -y upgrade --enablerepo=epel 、をパッケージが無くなるまで繰り返せば動く。
どのパッケージが古くて問題を起こしているかまでは特定していない。
# yum update ibus* で動く気もしないでもないが・・・。
あっ、駄目だ。これだけだと、 Gnome-Terminal がクラッシュして起動しなくなる。
# yum update gunome-terminal* とシェルも更新してあげないと。
やっぱり、全上げしかないか。

CentOS の設定 Region& Language 、 input source 、 + ボタンから mozc を追加してする。
Mozc
rootユーザーでは勝手に閉じてしまう、 mozc setting が開くようになった。

どうだろうか。猛烈に面倒ではないだろうか。
Neologd や UT2 対応して CentOS7.4 最強の mozc を作りたかったが、またも心が折れた。
ここまで頑張るより、WindowsのクライアントにGoogle日本語入力を入れて、
テキストエディタで文章を書き、scpした方が絶対に早い。

コンパイル済のPRMファイルはどこかって?
ブログに貼るには重すぎるので、置いてないぜ。
Dropbox もそろそろ空きが無いし。

2022年1月 7日 (金)

コミケ完敗

2021年末、無理と思われていたコミケが開催された。

コミケに入るには2度のワクチン接種+3日以内のPCR陰性が必要だったか?

それ以前に、派遣先の関連機関から、
「品行方正な正月を過ごし、どこに行動履歴を出しても恥ずかしくないように。」
とのお達しがされた。

うるせぇ!と一蹴してしまう事もできるが、悲しいかな派遣社員の立場。
答えは「はい」か" Yes "しかない。

事後通販でそろえればいいかという甘えた考えが、今回の敗北につながった。

地元は、すべての入荷が無かった。

電車でD同人誌版:池袋2回・大宮1回行けど手に入らず

¥Cuスタ平さんのCD:そのうち

SuganoMusic: 事後通販予定は不明

ユーロバカ一代: 〇 Booth通販って便利ね。

とユーロバカ一代1点の仕入れとなって、コミケ頒布品は手に入らなかった。

正論が常に正解とは限らない」と言う、新聞記事があったが、結果的に自分の幸せよりも社畜ルートを選んだ。
自分の幸せを追求するのであれば、社会的・会社的正論を投げ捨てて、自分の幸せへの正解を行く必要がった。
正論と正解、ちゃんと使い分けて、幸せなヲタクライフを実現しないとな。

« 2021年12月 | トップページ | 2022年2月 »