疑問文

PythonとかRubyについて、疑問や学びをまとめる場所

勉強しないと。しないと。

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  

やってること

  1. 一度git2uのインストールを試してみて、結果をresultに格納(エラーが出ても無視)
  2. もし1での結果がfailedの場合は古いgitを削除
  3. もし1での結果がfailedだった場合は改めてgit2uをインストール

ssh接続してバージョンを見ると、2系が入っているのを確認できます。

$ git --version
git version 2.2.2

まとめ

あえてエラーを起こすやり方があまりに泥臭すぎるので
バージョンを調べる方法とか、そもそものyumモジュールの使い方で
解決できればいいなと思います。

Ansibleは手軽に使えちゃいますが、綺麗に書くにはもっと勉強しないとですね。