eiryu梅雨のプロビジョニング祭りやってみた

以前やると言っていたやつ。以下の2つについて実施。

  • Ansible
  • Brewfile

github.com

尚、ServerKitでもやろうとしたのだが、なぜかしょっぱなからエラーが出て動かないため断念。

https://github.com/serverkit/serverkit/issues/9

共通点

クリーンインストール状態からprovision.shを実行してプロビジョニングする。

手順

Ansible

基本的にt-wadaさんのもの踏襲。

http://t-wada.hatenablog.jp/entry/mac-provisioning-by-ansible

  • hostファイルを実行可能にしていたらエラーになった
ERROR: The file hosts is marked as executable, but failed to execute correctly. If this is not supposed to be an executable script, correct this with `chmod -x hosts`.

言われるままchmod -xして回避

  • Mavenを入れる際にJavaがないとエラーになった
PLAY [localhost] ************************************************************** 

TASK: [homebrew の tap リポジトリを追加] ***************************** 
<localhost> REMOTE_MODULE homebrew_tap tap=caskroom/cask state=present
changed: [localhost] => (item=caskroom/cask) => {"changed": true, "item": "caskroom/cask", "msg": "added: 1, unchanged: 0"}

TASK: [homebrew をアップデート] **************************************** 
<localhost> REMOTE_MODULE homebrew update_homebrew=yes
ok: [localhost] => {"changed": false, "msg": "Homebrew already up-to-date."}

TASK: [brew パッケージをインストール] ***************************** 
<localhost> REMOTE_MODULE homebrew name=git state=latest install_options=
changed: [localhost] => (item={'name': 'git'}) => {"changed": true, "item": {"name": "git"}, "msg": "Package upgraded: git"}
<localhost> REMOTE_MODULE homebrew name=maven state=latest install_options=
failed: [localhost] => (item={'name': 'maven'}) => {"failed": true, "item": {"name": "maven"}}
msg: Error: An unsatisfied requirement failed this build.
<localhost> REMOTE_MODULE homebrew name=tig state=latest install_options=
changed: [localhost] => (item={'name': 'tig'}) => {"changed": true, "item": {"name": "tig"}, "msg": "Package upgraded: tig"}

FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/Users/eiryu/localhost.retry

localhost                  : ok=2    changed=1    unreachable=0    failed=1   

Mavenbrewで、Javabrew caskで入れるのだが、この逆の依存関係になっているものもあったら嫌だなあと思い、brewbrew caskそれぞれを実行するtaskを分離した。

自分のパターンは、brew caskをしてからbrewするようにするだけで解決出来たと思われるが、タスクを別ファイルに分割する際にAnsibleについて少し手を動かすことが出来たのでよしとする。変数のデバッグ便利。- debug: var=packages

Brewfile

以下を参考に作業。

http://rcmdnk.github.io/blog/2015/03/24/computer-mac/

brew file dumpで/usr/local/Library/Brewfileに現在インストールされているものが出力される。

その出力されたファイルはbrew file installでそのまま使える。ここがすごく便利。

Ansibleと違い、BrewfileはJavaの前にMavenを書いてもエラーにならなかった。裏側でその部分についてはよしなにやってくれている?

まとめ

Brewfileの方がインストールの依存関係に悩まされないということと、現在インストールされているものを出力出来てそのままプロビジョニングの元ネタとして使えるのでよいと思う。

おまけ

brewbrew caskのインストール済みのものを削除する。

for i in `brew cask list`; do brew cask uninstall $i; done
for i in `brew list`; do brew uninstall $i; done