CentOS7にFedoraのパッケージをインストールする

# 目的

CentOS7(≒Redhat Enterprise Linux 7)はFedora 19に基づいて作成されていますが、Fedora 19の豊富なソフトウェア(パッケージ)のすべてを利用できるわけではありません。
この文書は、Fedora 19に存在しCentOS7に存在しないパッケージを、Fedora 19のソースコードから構築し、導入する方法を説明します。

# 準備

## rootで実行
以降の手順はrootユーザで実施します。

## パッケージのアップデート

あらかじめパッケージをアップデートしておきます。
```
yum update
```

## ビルドの準備

### ビルド用のパッケージ群をインストール

ビルドするためのgccなどのソフトウェアを以下のコマンドでまとめてインストールします。

```
yum groupinstall "Development Tools"
```

### ビルドに必要な環境構築

rpmdevtoolsパッケージをインストールします
```
yum install rpmdevtools
```
ビルドに必要な環境を構築するために、以下のコマンドを実行します
```
rpmdev-setuptree
```

### mockbuildユーザの作成

作らなくてもかまわないのですが、後の手順で余計なエラーメッセージを出力させないために、mockbuildユーザを作成します
```
useradd mockbuild
```
なお、本来ならこのmockbuildユーザでビルドを行うことが望ましいですが、今回は頻繁にyumコマンドを発行するため、以降の操作はrootユーザで実施します。

## 公開鍵のインポート
Fedora 19の公開鍵を
https://fedoraproject.org/ja/keys
から取得しインポートします。
この公開鍵をインポートすることで、後の手順で取得するrpmが確かにFedora Projectから提供されていることを証明できます。

```
wget https://fedoraproject.org/static/FB4B18E6.txt
rpm --import FB4B18E6.txt
wget https://fedoraproject.org/static/BA094068.txt
rpm --import BA094068.txt
```

# ビルドとインストール

CentOS 7では日本語インプットメソッドがibus-anthyからibus-kkc(Kana Kanji)に変わってしまい、ibus-anthyはofficialなパッケージとして存在しません。
そこで、Fedora 19からibus-anthyのソースコードを取得し、CentOS 7用のパッケージを作成してみます。

以下の手順ではホームディレクトリで作業します。
```
cd ~
```
## ibus-anthyのビルド

ibus-anthyのソースrpmをダウンロードします。
```
wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/19/Everything/source/SRPMS/i/ibus-anthy-1.5.3-1.fc19.src.rpm
```
ダウンロードしたソースrpmをインストールします。
```
rpm -ivh ibus-anthy-1.5.3-1.fc19.src.rpm
```
ホームディレクトリにrpmbuildというディレクトリが作成されます。
rpmbuildディレクトリ内は以下のディレクトリで構成されています。
- BUILD
　- ビルドするためのワークディレクトリです。
- RPMS
　- ビルドにより作成されたrpmファイルが格納されます。
- SOURCES
　- ソースコードのtarボール(圧縮ファイル)やパッチが格納されます。
- SPECS
　- ビルド、rpm作成のための情報が記述されているspecファイルが格納されます。
- SRPMS
　- ビルドによる作成されたソースrpmファイルが格納されます。

ビルドを行うためには、ビルドするためのソフトウェア群が必要です。
これらのソフトウェアをまとめてインストールするために、以下のコマンドを実行します。
```
yum-builddep ~/rpmbuild/SPECS/ibus-anthy.spec
```
すると、以下のようなエラーが表示されてしまいました。
```
...
Error: anthy-devel のパッケージが見つかりません
```
このエラーは、ibus-anthyのビルドにはanthy-develが必要ですがCentOS7の標準パッケージとして存在しない、ことをを意味します。

## anthyのビルド

では、先ほどまでの手順を用いて、先にanthyをソースコードからビルドし、インストールしてみます。
```
wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/19/Everything/source/SRPMS/a/anthy-9100h-21.fc19.src.rpm
rpm -ivh anthy-9100h-21.fc19.src.rpm
yum-builddep ~/rpmbuild/SPECS/anthy.spec
```
anthyのビルドに必要なソフトウェアまでインストールできました。

anthyをビルドするためにrpmbuildコマンドを利用します。
今回はSPECファイルを用いてビルドしrpmを作成したいので、以下のコマンドを実行します。
```
rpmbuild -bb ~/rpmbuild/SPECS/anthy.spec
```

rpmbuildコマンドは無事に完了しました。
作成されたrpmは、`~/rpmbuild/RPMS/`ディレクトリに格納されます。

anthy-develをインストールします。
anthy-develのインストールには、anthyのインストールも必要です。
インストールは`yum localinstall`コマンドで実施します。

```
yum localinstall ~/rpmbuild/RPMS/x86_64/anthy-9100h-21.el7.centos.x86_64.rpm
yum localinstall ~/rpmbuild/RPMS/x86_64/anthy-devel-9100h-21.el7.centos.x86_64.rpm
```
無事インストールが完了しました。

ではyum-builddepコマンドを再実行し、ibus-anthyに必要なパッケージを取得します
```
yum-builddep ~/rpmbuild/SPECS/ibus-anthy.spec
```
今度は問題なく完了します。

最後に、生成されたibus-anthyをインストールしましょう
```
rpmbuild -bb ~/rpmbuild/SPECS/ibus-anthy.spec
yum localinstall ~/rpmbuild/RPMS/x86_64/ibus-anthy-1.5.3-1.el7.centos.x86_64.rpm
```
あれ、今度はkasumiがないと、怒られてしまいました。
kasumiはibus-anthyから利用する辞書ツールです。

## kasumiのビルド

今までの手順を用いてkasumiをインストールします
```
wget http://ftp.jaist.ac.jp/pub/Linux/Fedora/releases/19/Everything/source/SRPMS/k/kasumi-2.5-11.fc19.src.rpm
rpm -ivh kasumi-2.5-11.fc19.src.rpm
yum-builddep ~/rpmbuild/SPECS/kasumi.spec
rpmbuild -bb ~/rpmbuild/SPECS/kasumi.spec
yum localinstall ~/rpmbuild/RPMS/x86_64/kasumi-2.5-11.el7.centos.x86_64.rpm
```
無事インストール完了しました。

## ibus-anthyのインストール

ibus-anthyのインストールを再々チャレンジしてみます。
```
yum localinstall ~/rpmbuild/RPMS/x86_64/ibus-anthy-1.5.3-1.el7.centos.x86_64.rpm
```
無事インストールできました。

# Tips

その他、ビルドする際のTipsをまとめました。

## ビルド環境は別のマシンで行う
ビルドするためには、多くのビルド用のパッケージが必要となり、OSの環境を汚します。
したがって、実際の利用環境とビルド環境を分け、ビルド環境で作成したrpmを実際の利用環境にインストールするのが好ましいです。

## ビルドするためのパッケージが存在しない場合

ビルドするためのパッケージが存在しない場合、都度Fedora 19からパッケージを取得してビルドしても良いのですが、面倒です。

例えば、ビルドにpython3-develを利用している場合がありますが、CentOS7ではpython3を提供していません。
このような場合は、SPECファイルを開き
```
BuildRequires:  python3-devel
```
を
```
BuildRequires:  python2-devel
```
に変更して、ビルドしてみる価値はあります。

同様に微妙にパッケージ名が異なる場合がありますので、パッケージ名を修正する、もしくは必要と思われるパッケージを推測しインストールのうえ、該当するBuildRequires行をコメントアウトする、等の工夫が必要になってくることもあります。

## セキュリティホールのないソフトウェアからビルドする

今回の手順では最新のソースrpmを取得していませんが、セキュリティホールやバグのない最新のrpmを取得してビルドするのが望ましいです。
Fedora 19であれば、
http://ftp.jaist.ac.jp/pub/Linux/Fedora/updates/
以下のアップデートされたパッケージを取得しましょう。

なお、Fedora 19のサポートはFedora 21リリースの1ヵ月後までですので、それ以降はFedora 20以降の最新のパッケージを取得してビルドするのがよいかもしれません。
ただし、Fedora 20以降はCentOS7からアーキテクチャが大きく変わる部分があるので、場合によってはビルドできないソフトウェアがあると思います。