curl, git の RPM ビルド
CentOS5にrpmforgeからgitを入れて使ってみるとcurlの古いバージョンが入った環境でビルドされているようで、git-http-pushが使えなかったのでcurl, gitともに最新版を手元でRPMビルドして入れたのでその時の手順を書こうと思う。
RPMビルド環境を用意する
まずはRPMビルド環境を用意する必要があるので下記コマンドを実行。
$ sudo yum install rpm-build $ mkdir rpmbuild $ cd rpmbuild $ mkdir BUILD RPMS SOURCES SPECS SRPMS
次に上記で作ったディレクトリ内でビルドを行うために .rpmmacros を設定する。
$ vi ~/.rpmmacros
%_topdir %(echo $HOME)/rpmbuild
これで最低限のビルド環境は設定完了。
curl RPMビルド
gitをビルドする前にcurlの最新版をビルド、インストールしておく。
標準だと 7.15.5 が入っていたのでオフィシャルから最新版の 7.21.2 の src.rpm を落としてくる。
$ wget http://curl.haxx.se/download/curl-7.21.2-1.src.rpm
そしてそれを展開する。
$ rpm -ivh curl-7.21.2-1.src.rpm
$ ls rpmbuild/SPECS/ curl.spec
$ ls rpmbuild/SOURCES/ curl-7.21.2.tar.bz2
では実際にビルドして最新版のcurl RPMを作りたいがそのままの curl.spec ではうまくビルドできなかったので、curl.spec に下記の変更を加えた。
-Copyright: MIT/X derivate +License: MIT/X derivate
また他のRPMも必要だったのでrpmforgeのリポジトリを追加して下記のように入れておいた。
$ sudo yum install gcc $ wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm $ sudo rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm $ sudo yum install libssh2-devel
これでcurlビルドに必要な環境は整ったので実際にビルドしてみる。
$ cd ~/rpmbuild/ $ rpmbuild -ba SPEC/curl.spec ...
エラーが出ずにうまくいけば ~/rpmbuild/SRPMS/, ~/rpmbuild/RPMS/i386/ にRPM が作られている。
$ ls ~/rpmbuild/SRPMS/
curl-7.21.2-1.src.rpm
$ ls ~/rpmbuild/RPMS/i386/ curl-7.21.2-1.i386.rpm libcurl4-7.21.2-1.i386.rpm libcurl4-devel-7.21.2-1.i386.rpm
以上で最新版curlのRPMビルドは完了。
あとは自前のyumリポジトリなどに反映させてインストールする。
$ sudo cp ~/rpmbuild/RPMS/i386/*curl* /var/www/html/centos/5/i386/ $ sudo createrepo -v /var/www/html/centos/5/i386/ $ sudo yum remove curl $ sudo yum install curl
一応、バージョンを確認。
$ curl --version
curl 7.21.2 (i686-redhat-linux-gnu) libcurl/7.21.2 OpenSSL/0.9.8b zlib/1.2.3 libssh2/1.2.7
git RPMビルド
本題のgit RPMビルドに入る。
git も curl 同様、オフィシャルから src.rpm を取得して展開しておく。
$ wget http://kernel.org/pub/software/scm/git/RPMS/SRPMS/git-1.7.3.2-1.fc11.src.rpm $ rpm -ivh git-1.7.3.2-1.fc11.src.rpm
git のビルドにはたくさんのパッケージ依存があってすごい大変。
そのため rpmforge も使っています。
以下に依存のあったパッケージを入れた手順を書きます。
$ sudo yum install expat-devel xmlto asciidoc perl-Error libcurl4-devel
では実際にビルドしてみます。
$ cd ~/rpmbuild/ $ rpmbuild -ba SPECS/git.spec
うまくいけば ~/rpmbuild/SRPMS/, ~/rpmbuild/RPMS/i386/ に RPM が出来ているので、上記curlの時と同様に /var/www/html/centos/5/i386/ にコピーして createrepo を実行すれば git-http-push が実行できる git を RPM で入れることが出来る。
$ sudo cp ~/rpmbuild/RPMS/i386/git* /var/www/html/centos/5/i386/ $ sudo cp ~/rpmbuild/RPMS/i386/perl-Git* /var/www/html/centos/5/i386/ $ sudo createrepo -v /var/www/html/centos/5/i386/
実際にインストールしてバージョンを確認してみます。
$ yum --disablerepo=* --enablerepo=local install git $ git --version
git version 1.7.3.2
うまくいかない場合は rpmbuild 時の並列処理がうまく処理できていない場合があるので下記のように git.spec ファイルを変更して試してみてください。
@@ -112,7 +112,7 @@ %setup -q %build -make %{_smp_mflags} CFLAGS="$RPM_OPT_FLAGS" \ +make CFLAGS="$RPM_OPT_FLAGS" \ %{path_settings} \ all %{!?_without_docs: doc}