eiryu梅雨のプロビジョニング祭りやってみた
以前やると言っていたやつ。以下の2つについて実施。
- Ansible
- Brewfile
尚、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
して回避
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
Mavenはbrewで、Javaはbrew caskで入れるのだが、この逆の依存関係になっているものもあったら嫌だなあと思い、brewとbrew 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の方がインストールの依存関係に悩まされないということと、現在インストールされているものを出力出来てそのままプロビジョニングの元ネタとして使えるのでよいと思う。
おまけ
brew、brew caskのインストール済みのものを削除する。
for i in `brew cask list`; do brew cask uninstall $i; done for i in `brew list`; do brew uninstall $i; done