2017年8月6日日曜日

華麗なるlinuxの世界8 〜燃えよ! ibus-mozcカスタマイズ道!〜

さて、いまだ「うぃんどうず」とかいう
ゴミOSからのアクセスが後を絶たない当ブログだが(苦笑
忘れた頃に華麗なるlinuxの世界のパート8を書きたい。

今回は一気にレベルを上げて中級者向けの記事を書く。
linuxそのものを含むフリーソフトの特徴のひとつは
改変ができるという事だ。

linuxの世界はうぃんどうずのボンクラの世界とは違う。
うぃんどうずに不平不満は人一倍のくせに
結局何もしない、できない、バカどもとは違う。
linuxの世界では文句があるなら自分で作ってしまうという
荒業が許される。

ソフトが無いのなら自分で作ればいいのに
(某マリー=アントワネット)
もちろん、ゼロから作るのは時間も手間もかかって大変だ。
最初は、既存のソフトを部分的に改変するのがよいかと思う。

(ここにおいて、"プログラミングぐらいwinでもできますけど?"
という反論は一気にトーンダウンする。
既存のソフトのパクリ上等というオープンソースの世界と
裁判覚悟でなければパクリなんかできないwinの世界
初心者にやさしいのはどちらか?)

その過程で開発ツールやソースコードの取扱いを勉強すれば
将来的なステップアップに役立つはずだ。

今回はibus-mozcを取り上げる。
まずはこれのどこに不満があるか?という問題点を書く。

私自身はUS配列のキーボードを使っている。
この条件でibus-mozcを使うと困る事がある。
入力をibus-mozcに切替えると最初は「直接入力」になる。
これは単に半角英数を打つのと同じだ。

日本語を入力しようと思った

だからibus-mozcに切り替えた(キーボードのsuper + space)

しかし英語入力のままである

切り替えた意味ねえじゃん!

という問題だ。
どうもJISキーボードを使う場合だとまた違う対応があるようだが
私のようなUSキーボードの場合は、この後に

マウスを持つ

画面右上の「A」の所をクリック

input modeをクリック

hiraganaをクリック

準備おk

ここまでやって初めて日本語が打てる。これは邪魔くさい。
文字入力はキーボードで行う作業だ。
だったらキーボード操作だけで文字入力ができたっていいはずだ。
それなのにマウスで3箇所もクリックするのは馬鹿らしい。

(注意 私はlinuxは基本的に英語でインストールしている
日本語でインストールすると表記が違うかもしれない)

日本語を入力しようと思った

(1)だからibus-mozcに切り替えた(キーボードのsuper + space)

(2)マウスを持って

(3)画面右上の「A」の所をクリック

(4)input modeをクリック

(5)hiraganaをクリック

準備おk

・・・上記の5段階が

日本語を入力しようと思った

(1)だからibus-mozcに切り替えた(キーボードのsuper + space)

準備おk

・・・1段階になったらいいよね?という話だ。
通常のibus-mozcの3倍以上の速度で準備が済めば
シャア大佐にも勝てるかもしれない
もしくはトランザム
でなければ人類の未来ガー イノベイターガー

元々この記事はある人のブログ記事を元ネタにしている。
しかし2017年8月時点でそのブログそのものが削除されている。
しかも元記事自体、内容が古くなってしまっている。
(記事内容そのものはコピペで保存してある)
「古い」の具体的内容は、元記事の公開後に、
ibus-mozcがバージョンアップされた事が原因。
ibus-mozcのソースコードが変わってしまっている。
だから「○○行目の○○を、○○に修正」という
肝心要の内容が違ってきてしまっている。
もうひとつは、fedoraがyumからdnfへ移行したのが原因。
yumで書いてある箇所をdnfに直さないといけない。
だから私自身がfedora26で実際に検証した結果を踏まえて
最新版に修正した情報を公開する事に意味はあると思う。

では、早速、その新手順を解説しよう
想定する環境はfedora 26 64bit gnome版

尚、fedora 26はインストール直後から日本語が入力できる。
設定画面で"japanese (kana kanji)"を選べば良い。
settings -> region&language -> input sources -> 「+」
だからインストール直後で、
まだ、ibus-mozcの修正作業が終わっていない段階で
何かググりたい事があっても日本語は使える。

しかし、
「え?じゃあ、そもそもibus-mozcいらなくね?」
という事にはならない。
"japanese (kana kanji)"では漢字変換がバカなので
うぃんどうず並みに誤変換を連発する。
だからibus-mozcを使いたい。

尚、"input sources"の、"japanese"は違う。これは別物。
これはキーボード配列がJISになるだけで日本語入力はできない。

では、以下に作業内容を解説付きで書く。
基本的に青字の所をコピペすればいい。
バージョンの数字等細かい所が変わる事はよくあるので
エラーが出るようなら解説部分でも見て
「これは何の作業をしているのか?」を考えれば
どうにかなるはず。

$ su // 管理者権限取得
# dnf update // とりあえずアップデート

この後、普段の私はibus-mozcよりも先に色々インストールする。
例えばclangとかvlcとかその他多数。
その時にrpmfusionが必須。参考リンク
最近unitedrpmsもいいかなあと悩み中。
ひとつにはunitedrpmsを入れるとunrarが簡単に入るから。

しかしrpmfusionとunitedrpmsは相性が悪いかもと
指摘するHPがある。参考リンク
一体何の話だろう?と見てみるとこのへんの事みたい。
新版が出た時のアップグレードに問題が出たらしいが
本当にrpmfusionとunitedrpmsの共存が悪いのかどうかは
ブログの筆者自身ちゃんと調べてはいない。

OSのアップグレードってべつにfedoraに限らず
winでも評判悪いので、この記事がどこまで信用できるのか不明。
私がrpmfusionとunitedrpmsを両方入れた感じでは
一応動く。即座に不具合が出るわけではなさそう。

# dnf groupinstall -y development-tools gcc-c++ rpm-build
// 開発ツールインスコ
# exit // 一般ユーザーにもどる
$ cd ~ // ホームに戻る(べつにこれは必須ではない)
$ dnf download --source ibus-mozc
// これはyum時代は
// yumdownloader --source ibus-mozc
// と打っていた内容。ソースをダウソしている。
$ rpm -ivh mozc* //rpmインスコ
// ここで下記のような警告が大量に出るが全部放置する。
// warning: user mockbuild does not exist - using root
// warning: group mockbuild does not exist - using root

// 次に必要なもの=依存関係を準備する
// 依存関係というのは
//「風呂を沸かすなら、まずは湯船に水貯めなきゃダメだろ?」
//「目玉焼き作りたいならフライパンぐらい買ってこいよ」
// みたいなもの
// 直接的な目的とは別物であったとしても
// 準備として必要なものが依存関係。
// ちなみにここまでの手順が済んでいれば
~/rpmbuild/SPECS/mozc.spec
// ↑ここに依存関係の記述がある。
// Requires:xxx等と書いてあるのがソレだ。
// しかし、1個1個手作業で拾い集めなくても一括ダウソができる。

# su // また管理者になった
# dnf builddep mozc-2.20.2677.102-1.fc26.src.rpm
// これで依存関係が一括ダウソされる
// yum時代にはyum-builddep mozc-2.20.2677.102-1.fc26.src.rpm
// と書いたであろう内容だ。
// dnf移行済みのfedora26ではyum-builddepはエラーが出る
// bash: yum-builddep: command not found...
// 先程のyumdownloaderもそうだがdnf移行にしてから
// fedoraのコマンドが色々変わっている。
// 勿論、これは将来的にcentosがdnf移行するという意味もあるので
// https://fedoraproject.org/wiki/Yum_to_DNF_Cheatsheet
// こういう所↑などを参照しておくのがよい

# exit // 一般ユーザーに戻る
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp mozc.spec
// これでソース展開&パッチ適用&適用済みソースが
// ~/rpmbuild/BUILD/mozc-2.20.2677.102/ 以下に展開。
// 最後に「+ exit 0」が表示されれば正常終了
$ cd ~/rpmbuild/BUILD/
$ cp -r mozc-2.20.2677.102/ mozc-2.20.2677.102.org/
// オリジナルのソースを保存
$ cd ~/rpmbuild/BUILD/mozc-2.20.2677.102
$ nano ./unix/ibus/property_handler.cc
// ここからソース改変 下記のグレー背景部分がソース。
// 編集に使うのはnanoに限らずvimでもemacsでも何でもいい
  // Some users expect that Mozc is turned off by default on IBus 1.5.0 and later.
  // https://github.com/google/mozc/issues/201
  // On IBus 1.4.x, IBus expects that an IME should always be turned on and
  // IME on/off keys are handled by IBus itself rather than each IME.
  #if IBUS_CHECK_VERSION(1, 5, 0)
  const bool kActivatedOnLaunch = true;
// 83行目のここをtrueにする
  #else
  const bool kActivatedOnLaunch = true;
// ここは元々true
  #endif // IBus>=1.5.0

$ cd ~/rpmbuild/BUILD/
$ diff -aurN mozc-2.20.2677.102.org mozc-2.20.2677.102 > hiragana.patch
// 差分パッチの作成
// これを作らないとビルドの過程で勝手にソースが元に戻る
// 名前はなんでもいい。unko.patchでもgachi-kgb.patchでもいい
// ただ、後の作業で必要になる名前なので
// 最低限、名前を覚えておくこと
$ mv hiragana.patch ~/rpmbuild/SOURCES 
// 先程のパッチを移動
$ cd ~/rpmbuild/SPECS
$ nano mozc.spec
// 再度ソースの編集
  # Public Domain
  Source2: http://www.post.japanpost.jp/zipcode/dl/kogaki/zip/ken_all.zip
  Source3: http://www.post.japanpost.jp/zipcode/dl/jigyosyo/zip/jigyosyo.zip
  Source4: ibus-setup-mozc-jp.desktop
  Patch0: mozc-build-ninja.patch
  ## to avoid undefined symbols with clang.
  Patch1: mozc-build-gcc.patch
  Patch2: mozc-build-verbosely.patch
  Patch3: mozc-build-id.patch
  Patch10: hiragana.patch
// 51行目にこれ(↑)追加 Patch10の数字は何でもいい
// 他(Patch1/Patch2/Patch3)と重複してなけりゃおk
(ソース中略)
  %prep
  %setup -q -c -n %{name}-%{version} -a 2 -a 3
  %patch0 -p1 -b .0-ninja
  #%%patch1 -p1 -b .1-gcc
  %patch2 -p1 -b .2-verbose
  %patch3 -p1 -b .3-build-id
  %patch10 -p1 
// 96行目にこれ(↑)追加 
// ここも何でもいい。但し、なんでもいいと言っても
// 51行目と一致はさせること
参考 http://d.hatena.ne.jp/cactusman/20080315/p1

// rpmbuild -bb コマンドでソースをビルドして
// Binary RPM を作成するが、ビルド中に
// "/usr/lib64/qt-3.3/bin/rcc"を実行しようとして
// "No such file or directory"が出る。
// その対策として"/usr/bin/rcc"を参照するよう事前に環境変数を操作
$ export QTDIR= QTINC= QTLIB=
$ PATH=/usr/bin:$PATH
$ cd ~/rpmbuild/SPECS
$ rpmbuild -bb mozc.spec 
// ビルド実行。最後に"+ exit 0"が出れば正常終了
# rpm -evh --nodeps mozc ibus-mozc
// 古いibus-mozc削除
// もちろんこれはソース改変無しの、
// ノーマルibus-mozcをインスコしていた場合のみに必要な作業
# cd ~/rpmbuild/RPMS/x86_64
# dnf install mozc-2.20.2677.102-1.fc26.x86_64.rpm ibus-mozc-2.20.2677.102-1.fc26.x86_64.rpm
// dnf installはいんたーねっつからダウソする時以外でも使える。
// 今回のケースではローカルでビルドされた.rpmを
// インスコしている。yumでは"yum localinstall"していた。
// ちなみに"yum localinstall"をdnfでどう書くんだろう?
// とぐぐるとここが見つかる
//  Please implement "yum localinstall" feture to dnf
//  dnfに「yum localinstall」の機能をつけてください
// という2013年4月のbugzilla記事だ
// ここでAles Kozumplikを名乗る人物が
// This was the reason why I removed localinstall.
// と言い出している。
// 「ええ、俺様がlocalinstallを消しましたけどそれが何か?」
// と平然と語るこの人物。何者?と思って調べると
// 実はredhatの社員でdnfを書いた張本人。
// ガチの「中の人」だったりするw

再起動してsetting -> region&languageで選び直しして終了。

最後はお約束のひと言をオナシャス
「黒幕はキリスト教徒!」

0 件のコメント: