AnsibleでGit(2.X)をインストール
yumモジュールを使って簡単にインストールはできそうなんですが
1.7.1とあまりに古い子がいたので、入れ直しました。
その際に地味にはまったのでメモ。
環境
Mac OSX(ローカル)
Vagrant仮想環境 CentOS 6.5
雑ですがまあそんなに影響しないと思うので…。
手順
Ansibleのplaybookとしてまとめる作業です。
yumリポジトリの追加
デフォルトで「yum install git」的にやっても
1.7.1までしかバージョンが上がらないようです。
先にリポジトリを追加して、そこからインストールする。
tasks: - name: install repositories yum: name={{item}} with_items: - http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/epel-release-6-5.noarch.rpm - http://dl.iuscommunity.org/pub/ius/stable/CentOS/6/x86_64/ius-release-1.0-13.ius.centos6.noarch.rpm
この辺で一生懸命探しました。
Index of /pub/ius/stable/CentOS/6/x86_64
目的のgitはIUSの方に入っていますが
IUSがEPELに依存しているらしいので、EPELを先に入れています。
gitのインストール
この状態で
sudo yum install git
とやると、たぶん1.7.1が返ってきました。
listをgrepしてみた結果、gitの2系は「git」ではなく「git2u」で管理されているようです。
なるほどと思って
sudo yum install git2u
としてもエラーが返ってきました。
エラーメッセージ曰く、旧バージョンの方とコンフリクトを起こしちゃうようです。
悩んだ末の結論として、こういうふうに書くことに。
- name: install the latest version of git yum: name=git2u state=latest register: result ignore_errors: true - name: remove old git yum: name=git state=absent when: result|failed - name: install the latest version of git again yum: name=git2u state=latest when: result|failed
やってること
- 一度git2uのインストールを試してみて、結果をresultに格納(エラーが出ても無視)
- もし1での結果がfailedの場合は古いgitを削除
- もし1での結果がfailedだった場合は改めてgit2uをインストール
ssh接続してバージョンを見ると、2系が入っているのを確認できます。
$ git --version
git version 2.2.2
まとめ
あえてエラーを起こすやり方があまりに泥臭すぎるので
バージョンを調べる方法とか、そもそものyumモジュールの使い方で
解決できればいいなと思います。
Ansibleは手軽に使えちゃいますが、綺麗に書くにはもっと勉強しないとですね。