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

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

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

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

## 事前準備
まず、rpmファイルを作成する際に必要な関連パッケージをインストールしておきます。

参考URL:[Building an rpm package for vim 7.3 under CentOS6](http://dogvoiceman.org.uk/index.php?m=07&y=13&entry=entry130709-122242)

```コマンド:コマンド
# 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 \
> perl-ExtUtils-Embed
```

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

[Rpmfind mirror](http://rpmfind.net/) のFTPサイトから対象のrpmを取得します。今回は、バージョン7.3.944を利用することにしました。

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

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

このように、 `rpmbuild --rebuild` を実行すると、依存パッケージが確認できるので、足りない分は追加でインストールします。

```コマンド:コマンド
# rpmbuild --rebuild vim-7.3.944-1.fc19.src.rpm
エラー: ビルド依存性の失敗:
        gpm-devel は vim-2:7.3.944-1.el6.x86_64 に必要とされています
        ruby-devel は vim-2:7.3.944-1.el6.x86_64 に必要とされています
        ruby は vim-2:7.3.944-1.el6.x86_64 に必要とされています
        libXpm-devel は vim-2:7.3.944-1.el6.x86_64 に必要とされています
# yum install -y gpm-devel ruby-devel ruby libXpm-devel
```

``rpmbuild --rebuild`` の際に、以下のような警告が大量に表示される場合があります。


```
警告: ユーザ mockbuild は存在しません - root を使用します
警告: グループ mockbuild は存在しません - root を使用します
```

警告なので無視してもよいですが、気になる場合は、以下のコマンドを実行し、ダミーでユーザーを作成しておきます。

```コマンド:コマンド
# useradd -s /sbin/nologin mockbuild
```

## specファイル等の作成

```コマンド:コマンド
# rpm -Uvh --nomd5 vim-7.3.944-1.fc19.src.rpm
警告: vim-7.3.944-1.fc19.src.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID fb4b18e6: NOKEY
   1:vim                    ########################################### [100%]
```

## rpmファイルの作成（「不正な終了ステータス」が発生するパターン）

``rpmbuild`` を実行すると、以下のようなエラーが大量に発生します。

```コマンド:コマンド
# rpmbuild -ba ~/rpmbuild/SPECS/vim.spec
・
・
省略
・
・
objects/term.o: In function `set_termname':
/root/rpmbuild/BUILD/vim73/src/term.c:1686: undefined reference to `PC'
/root/rpmbuild/BUILD/vim73/src/term.c:1672: undefined reference to `tgetnum'
/root/rpmbuild/BUILD/vim73/src/term.c:1670: undefined reference to `tgetnum'
/root/rpmbuild/BUILD/vim73/src/term.c:1647: undefined reference to `tgetflag'
/root/rpmbuild/BUILD/vim73/src/term.c:1679: undefined reference to `tgetnum'
/root/rpmbuild/BUILD/vim73/src/term.c:1644: undefined reference to `tgetflag'
/root/rpmbuild/BUILD/vim73/src/term.c:1641: undefined reference to `tgetflag'
/root/rpmbuild/BUILD/vim73/src/term.c:1638: undefined reference to `tgetflag'
/root/rpmbuild/BUILD/vim73/src/term.c:1635: undefined reference to `tgetflag'
collect2: ld returned 1 exit status
link.sh: Linking failed
make: *** [vim] Error 1
エラー: /var/tmp/rpm-tmp.FNOnSy の不正な終了ステータス (%build)

RPM ビルドエラー:
    /var/tmp/rpm-tmp.FNOnSy の不正な終了ステータス (%build)
```

参考URL:[Building an rpm package for vim 7.3 under CentOS6](http://dogvoiceman.org.uk/index.php?m=07&y=13&entry=entry130709-122242)
↑このサイトを参考に対象ファイル(7.3.050)の修正を行います。

```コマンド:コマンド
# vi ~/rpmbuild/SOURCES/7.3.050
```

```shell:58-63行目：修正前
+ LINK_AS_NEEDED=
+ # Check if linker supports --as-needed and --no-as-needed options
+ if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+   LDFLAGS="$LDFLAGS -Wl,--as-needed"
+   LINK_AS_NEEDED=yes
+ fi
```

```shell:58-63行目：修正後
+ LINK_AS_NEEDED=no
+ # Check if linker supports --as-needed and --no-as-needed options
+ #if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+ #  LDFLAGS="$LDFLAGS -Wl,--as-needed"
+ #  LINK_AS_NEEDED=yes
+ #fi
```

```shell:100-105行目：修正前
+ LINK_AS_NEEDED=
+ # Check if linker supports --as-needed and --no-as-needed options
+ if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+   LDFLAGS="$LDFLAGS -Wl,--as-needed"
+   LINK_AS_NEEDED=yes
+ fi
```

```shell:100-105行目：修正後
+ LINK_AS_NEEDED=no
+ # Check if linker supports --as-needed and --no-as-needed options
+ #if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+ #  LDFLAGS="$LDFLAGS -Wl,--as-needed"
+ #  LINK_AS_NEEDED=yes
+ #fi
```

## rpmファイルの作成（気を取り直して）

```コマンド:コマンド
# rpmbuild -ba ~/rpmbuild/SPECS/vim.spec
```

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

```コマンド:コマンド
# ls -l ~/rpmbuild/RPMS/x86_64/
合計 14048
-rw-r--r--. 1 root root 1138160 11月  7 04:33 2013 vim-X11-7.3.944-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 6617976 11月  7 04:33 2013 vim-common-7.3.944-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 5220484 11月  7 04:33 2013 vim-debuginfo-7.3.944-1.el6.x86_64.rpm
-rw-r--r--. 1 root root 1002028 11月  7 04:33 2013 vim-enhanced-7.3.944-1.el6.x86_64.rpm
-rw-r--r--. 1 root root   11484 11月  7 04:33 2013 vim-filesystem-7.3.944-1.el6.x86_64.rpm
-rw-r--r--. 1 root root  388240 11月  7 04:33 2013 vim-minimal-7.3.944-1.el6.x86_64.rpm
```

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

```コマンド:コマンド
# rpm -qa |grep vim
vim-enhanced-7.2.411-1.8.el6.x86_64
vim-common-7.2.411-1.8.el6.x86_64
vim-minimal-7.2.411-1.8.el6.x86_64
```

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

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

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

## その他参考URL

[CentOS: rpmbuild-ing Vim w/ Ruby support](http://kzhiwei.wordpress.com/2011/09/21/centosrpmbuild-ing-vim-w-ruby-support/)