CentOS5.10でVim7.3のsrc.rpmからrpmを作成する方法

## 概説
ここでは、CentOS5.10の環境で、Vim7.3のsrc.rpmファイルから、以下のrpmファイル群を作成する方法を示します。

+ vim-X11-7.3.712-1.x86_64.rpm
+ vim-common-7.3.712-1.x86_64.rpm
+ vim-debuginfo-7.3.712-1.x86_64.rpm
+ vim-enhanced-7.3.712-1.x86_64.rpm
+ vim-filesystem-7.3.712-1.x86_64.rpm
+ vim-minimal-7.3.712-1.x86_64.rpm

## 前提
作業はrootユーザーのカレントディレクトリ「/root」で行うこととします。

## ビルドに必要な関連パッケージの確認
```コマンド:コマンド
$ rpm -qp --requires ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/v/vim-7.3.712-1.fc18.src.rpm
warning: ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/v/vim-7.3.712-1.fc18.src.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID de7f38bd
python-devel
ncurses-devel
gettext
perl-devel
perl(ExtUtils::Embed)
libacl-devel
gpm-devel
autoconf
libselinux-devel
ruby-devel
ruby
desktop-file-utils >= 0.2.93
gtk2-devel
libSM-devel
libXt-devel
libXpm-devel
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
```
```コマンド:コマンド
$ rpm -qp --requires ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/a/autoconf-2.69-3.fc18.src.rpm
warning: ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/a/autoconf-2.69-3.fc18.src.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID de7f38bd
m4 >= 1.4.14
emacs
perl-macros
perl(Data::Dumper)
gcc-gfortran
erlang
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
```

## 事前準備
上記の手順で確認した、ビルドするために必要な関連パッケージをインストールします。
なお、perl-devel、perl-macrosについては、標準パッケージに含まれていないため、ここではインストールを行いません。

参考URL:[Buliding Vim 7.3 RPM packages for 64-bit CentOS 5 / 6](http://rahul.amaram.name/blog/2011/11/07/buliding-vim-73-rpm-packages-64-bit-centos-5-6)

```コマンド:コマンド
# yum groupinstall "Development Tools"
# yum install \
> python-devel \
> ncurses-devel \
> libacl-devel \
> gpm-devel \
> libselinux-devel \
> ruby-devel \
> gtk2-devel \
> libSM-devel \
> libXt-devel \
> libXpm-devel \
> emacs \
> erlang
```

## m4のインストール
Vim7.3のsrc.rpmの取得元として、Fedora18(CentOS5.x相当)を利用しましたが、Vim7.3のビルドには、上記の確認作業でも分かるようにautoconfが必要となります。
さらに、autoconfはm4の1.4.14以上を依存パッケージとして要求するため、ここでは、Fedora18でのm4の最新版をsrc.rpmからビルドしインストールします。（CentOS5.x標準のm4のバージョンは1.4.5）

```コマンド:コマンド
# wget ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/m/m4-1.4.16-5.fc18.src.rpm
# rpm -Uvh --nomd5 m4-1.4.16-5.fc18.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/m4.spec
・
・
省略
・
・
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/m4-1.4.16-5-root-root
Wrote: /usr/src/redhat/SRPMS/m4-1.4.16-5.src.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/m4-1.4.16-5.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/m4-debuginfo-1.4.16-5.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.25937
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd m4-1.4.16
+ rm -rf /var/tmp/m4-1.4.16-5-root-root
+ exit 0
```

もし、rpmbuildコマンドでエラーになるようであれば、下記の手順でspecファイルを修正し、再度ビルドを行います。

参考URL:[Porting Fedora RPM Spec File to CentOS Error: find: invalid predicate](http://www.osterman.com/wordpress/2011/04/27/porting-fedora-rpm-spec-file-centos-error-find-invalid-predicate)

```コマンド:コマンド
# vi /usr/src/redhat/SPECS/m4.spec
```

```spec:21行目：修正前
Provides: bundled(gnulib)
```

```spec:21行目：修正後
Provides: bundled(gnulib)
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot ←この行を追加
```

m4のパッケージが正常に作成されたら、インストールを行います。

```ruby:コマンド
# rpm -Uvh /usr/src/redhat/RPMS/x86_64/m4-1.4.16-5.x86_64.rpm
```

## autoconfのインストール
m4がインストールされたら、次はautoconfのインストールを行います。手順はほぼm4と同じです。

```コマンド:コマンド
# wget ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/a/autoconf-2.69-3.fc18.src.rpm
# rpm -Uvh --nomd5 autoconf-2.69-3.fc18.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/autoconf.spec
error: Failed build dependencies:
        perl-macros is needed by autoconf-2.69-3.noarch
```

rpmbuildコマンドの実行直後に依存パッケージのエラーで怒られます。理由は、標準パッケージとして存在しないperl-macrosが導入されていないためです。
この問題を解決するために、specファイルを修正し、perl-macrosを依存パッケージから除外します。

```コマンド:コマンド
# vi /usr/src/redhat/SPECS/autoconf.spec
```

```spec:20行目：修正前
BuildRequires:      perl-macros
```

```spec:20行目：修正後
#BuildRequires:      perl-macros ←この行をコメントアウト
```

気を取り直して、ビルドの再実行を行います。
ただし、ビルド途中のチェック処理でエラーが発生し、ビルドが正常に完了しないため、ここではチェック処理をスキップする指定を付加しています。

```コマンド:コマンド
# rpmbuild --without check -ba /usr/src/redhat/SPECS/autoconf.spec
・
・
省略
・
・
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/autoconf-2.69-3-root-root
Wrote: /usr/src/redhat/SRPMS/autoconf-2.69-3.src.rpm
Wrote: /usr/src/redhat/RPMS/noarch/autoconf-2.69-3.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.12305
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd autoconf-2.69
+ rm -rf /var/tmp/autoconf-2.69-3-root-root
+ exit 0
```

autoconfのパッケージが正常に作成されたら、インストールを行います。

```コマンド:コマンド
# rpm -Uvh /usr/src/redhat/RPMS/noarch/autoconf-2.69-3.noarch.rpm
```

## Vim7.3のsrc.rpmを取得

```コマンド:コマンド
# wget ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/v/vim-7.3.712-1.fc18.src.rpm
```

## 依存パッケージの確認

autoconfと同様に、ビルドを行うと依存パッケージのエラーで怒られるので、今回も標準パッケージとして存在しないperl-develを依存パッケージから除外します。

```ruby:コマンド
# wget ftp://rpmfind.net/linux/fedora/linux/releases/18/Fedora/source/SRPMS/v/vim-7.3.712-1.fc18.src.rpm
# rpm -Uvh --nomd5 vim-7.3.712-1.fc18.src.rpm
# rpmbuild -ba /usr/src/redhat/SPECS/vim.spec
error: Failed build dependencies:
        perl-devel is needed by vim-7.3.712-1.x86_64
```

```コマンド:コマンド
# vi /usr/src/redhat/SPECS/vim.spec
```

```spec:785行目：修正前
BuildRequires: python-devel ncurses-devel gettext perl-devel
```

```spec:785行目：修正後
BuildRequires: python-devel ncurses-devel gettext ←「perl-devel」を削除する
```

ビルドの再実行を行います。

```コマンド:コマンド
# rpmbuild -ba /usr/src/redhat/SPECS/vim.spec
・
・
省略
・
・
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/vim-7.3.712-1-root-root
Wrote: /usr/src/redhat/SRPMS/vim-7.3.712-1.src.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-common-7.3.712-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-minimal-7.3.712-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-enhanced-7.3.712-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-filesystem-7.3.712-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-X11-7.3.712-1.x86_64.rpm
Wrote: /usr/src/redhat/RPMS/x86_64/vim-debuginfo-7.3.712-1.x86_64.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.99047
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd vim73
+ rm -rf /var/tmp/vim-7.3.712-1-root-root
+ exit 0
```

以下のディレクトリにファイルが作成されています。

```コマンド:コマンド
# ls -l /usr/src/redhat/RPMS/x86_64/vim-*
-rw-r--r-- 1 root root 1191026 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-X11-7.3.712-1.x86_64.rpm
-rw-r--r-- 1 root root 7732543 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-common-7.3.712-1.x86_64.rpm
-rw-r--r-- 1 root root 6069786 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-debuginfo-7.3.712-1.x86_64.rpm
-rw-r--r-- 1 root root 1044001 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-enhanced-7.3.712-1.x86_64.rpm
-rw-r--r-- 1 root root   11065 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-filesystem-7.3.712-1.x86_64.rpm
-rw-r--r-- 1 root root  401410 Dec 13 02:46 /usr/src/redhat/RPMS/x86_64/vim-minimal-7.3.712-1.x86_64.rpm
```

## 現在インストールされているVimのバージョンを確認

```コマンド:コマンド
# rpm -qa |grep vim
vim-enhanced-7.0.109-7.2.el5
vim-minimal-7.0.109-7.2.el5
vim-common-7.0.109-7.2.el5
```

## 作成したVim7.3のrpmをインストールする（現在インストールされているものと入れ替え）

``vim-filesystem`` は ``vim-common`` と依存関係があるため、一緒に入れます。

```コマンド:コマンド
# rpm -e --nodeps vim-enhanced vim-common vim-minimal
# rpm -Uvh /usr/src/redhat/RPMS/x86_64/vim-{m,c,e,f}*
Preparing...                ########################################### [100%]
   1:vim-minimal            ########################################### [ 25%]
   2:vim-filesystem         ########################################### [ 50%]
   3:vim-common             ########################################### [ 75%]
   4:vim-enhanced           ########################################### [100%]
```

## その他参考URL

[CentOS5にvim7.3をrpmでインストールする方法](http://www.ryuzee.com/contents/blog/4513)