VIM-ShellのRPMを作ってみました
最近社内のVim使いの方々の間で、VIM-Shellというパッチが話題になっています。これはVimのなかでシェルを実行できるというもので、EmacsのシェルモードがVimにも欲しいねという話が発端です。
Vim&CentOSの環境で開発している人が多いこともあり、どうせならとRPMパッケージを作ってみました。
まずは、RPMを作成するために必要なものをインス トールします。今回はひとつひとつ入れていきますが、面倒な場合やビルド専用マシンにする場合などは、開発ツールや開発ライブラリを次のようにまとめてインストールしておくと楽かと思います。
# yum grouplist
# yum groupinstall "Development Tools"
# yum groupinstall "Development Libraries"
まずは、何は無くともrpmbuildコマンドが必要ですので、インストールします。
# yum install rpm-build
SRPMを取得するためにyumdownloaderコマンドを使いますので、インストールします。
# yum install yum-utils
yumdownloaderコマンドでSRPMを取得するためのリポジトリを設定します。一から書くのは面倒ですので /etc/yum.repos.d/CentOS-Base.repo をコピーして書き換えます。
# cd /etc/yum.repos.d/
# cp CentOS-Base.repo CentOS-Source.repo
# vi CentOS-Source.repo
baseurlを近くのミラーサイトにします。また、普段は見に行く必要はありませんので「enabled=0」にしておきます。
# CentOS-Source.repo
[base-source]
name=CentOS-$releasever - Base Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/os/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#released updates
[updates-source]
name=CentOS-$releasever - Updates Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/updates/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#packages used/produced in the build but not released
[addons-source]
name=CentOS-$releasever - Addons Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/addons/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extras-source]
name=CentOS-$releasever - Extras Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/extras/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centosplus-source]
name=CentOS-$releasever - Plus Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
#contrib - packages by Centos Users
[contrib-source]
name=CentOS-$releasever - Contrib Source
baseurl=http://ftp.riken.jp/Linux/centos/$releasever/contrib/SRPMS/
gpgcheck=1
enabled=0
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
次に、一般ユーザでRPMを作成するための設定をします。RPMの作成をrootで行うと、SPECファイルの記述ミスや操作ミスなどで環境を破壊する恐れがあるためです。
以下、一般ユーザーで作業を行います。
$ mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ echo "%_topdir $HOME/rpm" >> ~/.rpmmacros
これで、HOMEのrpmディレクトリがRPM作成の作業場になります。
さて、準備が整いましたので、Vimのカスタムパッケージ作りに入ります。
まずは、インストールされて いるVimのバージョンを調べます。
$ yum list installed | grep vim
vim-common.i386 2:7.0.109-3.el5.3 installed
vim-enhanced.i386 2:7.0.109-3.el5.3 installed
vim-minimal.i386 2:7.0.109-3.el5.3 installed
次にパッケージを提供しているリポジトリを調べます。
$ yum search vim | grep vim-common.i386
vim-common.i386 2:7.0.109-3 base
vim-common.i386 2:7.0.109-3.el5.3 updates
vim-common.i386 2:7.0.109-3.el5.3 installed
先ほど調べたバージョンのパッケージは、updatesリポジトリのようですね。では、updatesからSRPMを取得します。
$ yumdownloader --enablerepo=updates-source --source vim
カレントディレクトリに vim-7.0.109-3.el5.3.src.rpm がダウンロードされましたので、これをインストールします。
$ rpm -ivh vim-7.0.109-3.el5.3.src.rpm
VIM-Shellのパッチをダウンロードして、SOURCEディレクトリへ入れます。
$ cd ~/rpm/SOURCES/
$ wget http://www.wana.at/vimshell/vimshell_1.0_vim7.0.patch.bz2
SPECファイルを修正します。
1. Releaseの末尾にVIM-Shellリリース1の意味で「vs1」を追加
2. Patch行の最後にVIM-Shellのパッチ ファイルを追加
3. %prep部の後半へVIM-Shellパッチの実行処理を追加
4. %changelog部へ変更履歴を追加
Summary: The VIM editor.
Name: vim
Version: %{baseversion}.%{beta}%{patchlevel}
Release: 3%{?dist}.3<strong>vs1</strong>
License: freeware
Group: Applications/Editors
Source0: ftp://ftp.vim.org/pub/vim/unix/vim-%{baseversion}%{?beta}%{?CVSDATE}.tar.bz2
Patch3100: vim-selinux.patch
Patch3101: vim-selinux2.patch
<strong># VIM-Shell</strong>
<strong>Patch9000: http://www.wana.at/vimshell/vimshell_1.0_vim7.0.patch.bz2</strong>
Buildroot: %{_tmppath}/%{name}-%{version}-root
%patch3101 -p1
%endif
<strong># VIM-Shell</strong>
<strong>%patch9000 -p0</strong>
%if "%{withcvim}" == "1"
mkdir cvim
%changelog
<strong>* Mon Nov 26 2007 Your Name <mail@example.com> 7.0.109-3.3vs1</strong>
<strong>- add VIM-Shell 1.0</strong>
それではビルドします。折角なので、アーキテクチャにi686を指定します。また、リリース番号を揃えるためにdist定義を付与します。
$ rpmbuild -ba --target i686 --define 'dist .el5' ~/rpm/SPECS/vim.spec
ビルド対象プラットフォーム: i686
ターゲット i686 用にビルド中
エラー: ビルド依存性の失敗:
python-devel は vim-7.0.109-3.3.i386 に必要とされています
libtermcap-devel は vim-7.0.109-3.3.i386 に必要とされています
libacl-devel は vim-7.0.109-3.3.i386 に必要とされています
gpm-devel は vim-7.0.109-3.3.i386 に必要とされています
autoconf は vim-7.0.109-3.3.i386 に必要とされています
libselinux-devel は vim-7.0.109-3.3.i386 に必要とされています
gtk2-devel は vim-7.0.109-3.3.i386 に必要とされています
libSM-devel は vim-7.0.109-3.3.i386 に必要とされています
libXt-devel は vim-7.0.109-3.3.i386 に必要とされています
libXpm-devel は vim-7.0.109-3.3.i386 に必要とされています
gccと表示された必要なものをインストールします。
$ sudo yum install gcc python-devel libtermcap-devel libacl-devel gpm-devel autoconf libselinux-devel gtk2-devel libSM-devel libXt-devel libXpm-devel
再度rpmbuildコマンドを実行します。無事コンパイルまでいったようですが、エラーで止まってしまいました。
gui.c: