概説
ここでは、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
# 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 の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
↑このサイトを参考に対象ファイル(7.3.050)の修正を行います。
# vi ~/rpmbuild/SOURCES/7.3.050
+ 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
+ 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
+ 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
+ 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%]