読者です 読者をやめる 読者になる 読者になる

CentOS 7用のrpmを作ってibus-mozcをインストールしてみる

CentOS 7でSublime Textを使おうとして調べたところ、以下の記事が見つかりました。

基本的にここに書いてある手順で問題ないとは思いますが、Fedora 19のrpmパッケージを使うという所が少し気になったので、CentOS 7用にビルドし直してインストールできないか試してみました。

準備

rpmをビルドするには、コンパイラなどのツールに加えてrpm-buildパッケージに含まれるツールが必要になります。またrpmビルド時にはうっかりシステムへ影響を与えるのを避けるためroot以外のユーザでの作業が推奨されています。

個人的な作業環境にrpmビルド環境を用意しても良かったのですが、dockerを使ってrpmビルド用のイメージを作成しました。

このイメージは以下のような内容になっていて、起動すればシステムに影響を与えることなくrpmをビルドできるようにしてあります。

  • CentOS 7ベース
  • Development Toolsグループのインストール
  • rpm-buildパッケージのインストール
  • rpmビルド作業用ユーザ(mockbuild)の追加

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 に必要とされています

protobufzinniaはパッケージとして提供されているので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-jazinnia-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-jazinnia-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のパッケージを直接インストールした場合と変わりないとは思いますが……