CentOS 6 に最新 Git をソースからインストール。コピペ用 - Qiita に触発されてパッケージ化してインストールする方法を書きました。
tl;dr
curl -fsSL https://gist.githubusercontent.com/eru/2a8a342e499809cd12b4/raw/install-git-rpm-centos6.sh | sh
解説
yumコマンド実行時にsudoを付けるか
MY_YUM="sudo yum"
if [ ${EUID:-${UID}} = 0 ]; then
MY_YUM="yum"
fi
${MY_YUM}
に、コマンド名を指定しておいて、eval ${MY_YUM}
で実行することで、非rootユーザでも動くハズ
gitパッケージが既にインストールされている場合には削除
eval ${MY_YUM} erase -y git
最終的なインストール時にコンフリクトがでるので予め削除しておく
ビルドに必要なパッケージ類のインストール
eval ${MY_YUM} install -y tar gcc-c++ curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker rpmdevtools rpm-build xmlto asciidoc perl-Error
rpmbuildを行うためのディレクトリツリーを作成と移動
rpmdev-setuptree
cd ~/rpmbuild/SOURCES
最新リリースの取得
GIT_VERSION=$(curl -sL https://www.kernel.org/pub/software/scm/git/ | sed -nre 's/<a href="git-([0-9\.]+)\.tar\.gz">.*/\1/p' | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -r | head -n 1)
ほぼ@hidekuroの方法をパクらせてもらった。詳細はTOPのリンク先からどうぞ。
ソースコードのアーカイブをダウンロード
curl -OL https://www.kernel.org/pub/software/scm/git/git-${GIT_VERSION}.tar.gz
早速取得したバージョン情報を使う。
SPECファイルの抽出
cd ../SPECS
tar xvf ../SOURCES/git-${GIT_VERSION}.tar.gz git-${GIT_VERSION}/git.spec
mv git-${GIT_VERSION}/git.spec .
ビルドに必要なSPECファイルだけ展開する。実際はファイルを移動される必要はないが、所有者がビルドユーザと同一でないとrpmbuildでエラーがでるので、移動することで所有者を直してる。
パッケージのビルド
rpmbuild -bb git.spec
srpmは特に必要ないので、-bb
でバイナリパッケージだけ生成
ビルドして出来上がったものをインストール
eval ${MY_YUM} localinstall -y ~/rpmbuild/RPMS/x86_64/git-${GIT_VERSION}-1.el6.x86_64.rpm ~/rpmbuild/RPMS/x86_64/perl-Git-${GIT_VERSION}-1.el6.x86_64.rpm
必要用最低限のものだけインストールしている。必要であれば、git-svn
などもインストールできる。
後片付け
unset MY_YUM
unset GIT_VERSION
echo "Complete\!\nYou can delete build files 'rm -rf ~/rpmbuild'"
環境変数をアンセットして、完了した旨のメッセージを表示。
~/rpmbuild
も削除してしまって問題ないが、前述の通り他のパッケージもインストールしたい人用にあえて残してある。
追記
2016-04-04
各バージョン番号が2桁以上になった場合に、最新の番号が取得できなかったので修正