CentOS 7用のrpmを作ってibus-mozcをインストールしてみる
CentOS 7でSublime Textを使おうとして調べたところ、以下の記事が見つかりました。
基本的にここに書いてある手順で問題ないとは思いますが、Fedora 19のrpmパッケージを使うという所が少し気になったので、CentOS 7用にビルドし直してインストールできないか試してみました。
準備
- HowTos/SetupRpmBuildEnvironment - CentOS Wiki
- How to create an RPM package - FedoraProject
- RPM を使ってソフトウェアをパッケージ化する: 第 1 回 パッケージのビルドと配布
rpmをビルドするには、コンパイラなどのツールに加えてrpm-buildパッケージに含まれるツールが必要になります。またrpmビルド時にはうっかりシステムへ影響を与えるのを避けるためroot以外のユーザでの作業が推奨されています。
個人的な作業環境にrpmビルド環境を用意しても良かったのですが、dockerを使ってrpmビルド用のイメージを作成しました。
このイメージは以下のような内容になっていて、起動すればシステムに影響を与えることなくrpmをビルドできるようにしてあります。
rpmのビルド
コンテナ起動
ホスト側ではdockerを使ってrpmビルド用コンテナを起動します。この時rpmビルド先ディレクトリをホスト側ディレクトリにマウントしておくことによって、コンテナからrpmファイルを取り出す手間を省いておきます。
[host]$ mkdir -p ~/work/RPMS/ [host]$ docker pull tnanba/rpmbuild [host]$ docker run --rm -ti -v ~/work/RPMS:/home/mockbuild/rpmbuild/RPMS tnanba/rpmbuild /bin/bash
rpmビルドに必要なパッケージインストール
ビルドするのは「クロの思考ノート」さんの記事でも使用されているibus-mozc-1.10.1390.102-1.fc19.x86_64.rpm
を使用しました。これより新しいものもありましたが、CentOS 7のパッケージとして用意されているibus-develより新しいバージョンに依存していてうまくいかなかったためこのバージョンにしました。
対応するsrpmを取ってきて、まずは何も考えずにビルドしてみます。
[container]$ curl -O ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/releases/19/Everything/source/SRPMS/m/mozc-1.10.1390.102-1.fc19.src.rpm [container]$ rpmbuild --rebuild mozc-1.10.1390.102-1.fc19.src.rpm error: Failed build dependencies: openssl-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 zlib-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 libxcb-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 protobuf-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 glib2-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 qt-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 zinnia-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 gtk2-devel is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 gyp >= 0.1-0.4.840svn is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 ibus-devel >= 1.4.1 is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 emacs is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 xemacs is needed by mozc-1.10.1390.102-1.el7.centos.x86_64 xemacs-packages-extra is needed by mozc-1.10.1390.102-1.el7.centos.x86_64
ビルドに必要となるパッケージが不足しているため、これらを解決する必要があります。幸いにもこれらは全てパッケージとして提供されているので、yumでインストールします。
[container]$ sudo yum -y install openssl-devel zlib-devel libxcb-devel \ protobuf-devel glib2-devel qt-devel zinnia-devel gtk2-devel gyp \ ibus-devel emacs xemacs xemacs-packages-extra
この状態で再度rpmbuild --rebuild
を実行すればrpmのできあがり……なのですが、できあがったrpmの依存関係がCentOS 7のパッケージと整合しないため問題が発生します。
試しにできあがったrpmをホスト側でインストールしようとすると、以下のような依存関係のエラーが発生します。
[host]$ sudo rpm -ivh ~/work/RPMS/x86_64/mozc-1.10.1390.102-1.el7.centos.x86_64.rpm エラー: 依存性の欠如: libprotobuf.so.8()(64bit) は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています libzinnia.so.0()(64bit) は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています zinnia-tomoe は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています
protobuf
とzinnia
はパッケージとして提供されているのでyumでインストールすれば解決するのですが、zinnia-tomoe
はパッケージとして提供されていないため依存関係を解決できません。
しかしながらパッケージを検索すると、関連のありそうなものがありました。
[host]$ sudo yum search zinnia-tomoe zinnia-tomoe-ja.x86_64 : Japanese tomoe model file for zinnia zinnia-tomoe-zh_CN.x86_64 : Simplified Chinese tomoe model file for zinnia
どうやらzinnia-tomoe
パッケージはzinnia-tomoe-ja
とzinnia-tomoe-zh_CN
に分割されたようなので、rpmの依存関係も修正しておきます。
specファイルの修正
ここで再びコンテナ側に戻って、specファイルを修正した上でrpmを作成することにします。specファイルを修正するため、srpmをインストールします。これによってsrpmに含まれているファイルが展開されて修正できるようになります。
[container]$ $ rpm -ivh mozc-1.10.1390.102-1.fc19.src.rpm
~/rpmbuild/SPEC/mozc.spec
というファイルが展開されるので、ここに含まれている依存関係の記述をCentOS 7のパッケージに合わせて修正します。
[container]$ cd ~/rpmbuild/SPECS/ [container]$ vi mozc.spec Requires: zinnia-tomoe <-- 削除 Requires: zinnia-tomoe-ja <-- 追加 Requires: zinnia-tomoe-zh_CN <-- 追加
zinnia-tomoe
を取り除いてzinnia-tomoe-ja
とzinnia-tomoe-zh_CN
の記述を加えておきます。後はこの修正したspecファイルを使ってrpmをビルドすれば完了です。できあがったrpmファイルはホスト側の~/work/RPMS
配下に出力されます。
[container]$ cd ~/rpmbuild/SPECS/ [container]$ rpmbuild -ba mozc.spec
rpmインストール
できあがったrpmファイルをホスト側でインストールします。
[host]$ sudo rpm -ivh ~/work/RPMS/x86_64/mozc-1.10.1390.102-1.el7.centos.x86_64.rpm エラー: 依存性の欠如: libprotobuf.so.8()(64bit) は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています libzinnia.so.0()(64bit) は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています zinnia-tomoe-ja は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています zinnia-tomoe-zh_CN は mozc-1.10.1390.102-1.el7.centos.x86_64 に必要とされています
依存関係が修正されているので、yumで追加してやれば解決します。
[host]$ sudo yum -y install protobuf zinnia zinnia-tomoe-ja zinnia-tomoe-zh_CN [host]$ sudo rpm -ivh ~/work/RPMS/x86_64/mozc-1.10.1390.102-1.el7.centos.x86_64.rpm [host]$ sudo rpm -ivh ~/work/RPMS/x86_64/ibus-mozc-1.10.1390.102-1.el7.centos.x86_64.rpm
後は再ログインすれば設定画面に「日本語(Mozc)」が出てくるようになるはずです。
なおemacs-common-mozcとemac-mozcも同時にビルドされるので、必要に応じてこれらもインストールしておきます。
結局の所、Fedoraのパッケージを直接インストールした場合と変わりないとは思いますが……