背景
Yosemite 関係で homebrew が混乱してしまったので、すべて消して再インストールしました。せっかくなので、homebrew 関係も ansible 化できないかと思ったところ、すでに AnsibleでHomebrew, Cask, Atomエディターのパッケージを管理するという記事を発見しました。ansible-galaxy に登録してくれているようなので、便利に使わせていただきます。ということで、今回は ansible-galaxy の設定方法について書きます。
初期設定部分
ansible-galaxy は roles の共有サービスでさまざまな roles が登録されています。今回は、ansible の playbook を使えるようにして、ansible-galaxy から roles を取得するまでを shell スクリプトで行います。その後 ansible-playbook でパッケージ達をインストールし、インストール後の作業までを行います。
初期設定用のスクリプトは以下のようになりました。
#!/bin/sh ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" brew doctor brew install ansible ansible-galaxy install --roles-path=./roles hnakamur.homebrew-packages ansible-galaxy install --roles-path=./roles hnakamur.homebrew-cask-packages ansible-galaxy install --roles-path=./roles hnakamur.atom-packages
ansible 自体は brew でいれるので、ansible-playbook には入れられませんので、こちらのスクリプトでインストールします。ansible-galaxy では、roles の下に上記サイトで登録された roles 達をインストールしています。
ansible-playbook
今回の playbook は以下のようになりました。解説用なのでパッケージは少なめに書いています。実際にはこの他にも沢山インストールします。homebrew_packages_packages は homebrew でインストールするパッケージ一覧です。install_options で追加オプションなどが設定できます。
また、homebrew_cask_packages_packages は GUI アプリケーションの管理用です。AppStore で販売しているものは不可能ですが、ダウンロードタイプのものはかなり揃っているようです。ここでは、Google Chrome と Atom エディタを例にしてみました。デフォルトでは /opt/homebrew-cask/Caskroom に実体がインストールされ、~/Applications フォルダにはアプリへのショートカットが作成されるようです(当初、環境変数を設定して /Applications に入れるように設定を記述していましたが、学生の権限でここに置かせるのは面倒なので、link はデフォルトの自分のフォルダのままにしています)。なお、Yosemite からは Alfred の代わりに Spotlight をランチャーとして使うようになりましたが、Spotlight はちゃんと実体を探してくれました。
最後は、先ほどインストールした Atom エディタのパッケージ管理です。少し重いですが、学生に使わせるにはよいエディタかなと思いますので、いろいろなパッケージを試してみたいと思います。
(後日修正: aquaterm 対応の gnuplot を入れてみました。aquaterm が先にインストールされるように、cask を先に処理するようにしました。また install_options がうまく動いていませんでした)。
--- - hosts: localhost connection: local gather_facts: no sudo: no vars: homebrew_packages_taps: - homebrew/binary - homebrew/dupes homebrew_packages_packages: - { name: readline } - { name: openssl, state: linked } - { name: fish } - { name: rbenv } - { name: ruby-build } - { name: gnuplot, install_options: with-x,with-aquaterm,latex,pdf } homebrew_cask_packages_packages: - atom - google-chrome - aquaterm atom_packages_packages: - project-manager - recent-files - vim-mode - japanese-wrap roles: - hnakamur.homebrew-cask-packages - hnakamur.homebrew-packages - hnakamur.atom-packages - ruby-build
パッケージ管理などが終了したら、最後に ruby-build という role が実行されます。roles/ruby-build/main.yml は以下のようになっています。ここでは、rbenv versions としたときに、vars で設定したインストールしたいものが入っているかを調べ、入っていればインストールはスキップするようにしています。
--- - name: 現在インストールされているバージョン一覧を得る command: rbenv versions register: ruby_versions changed_when: false - name: readline の prefix を得る command: brew --prefix readline register: readline_prefix when: ruby_versions.stdout.find('{{ install_version }}') == -1 - name: openssl の prefix を得る command: brew --prefix openssl register: openssl_prefix when: ruby_versions.stdout.find('{{ install_version }}') == -1 - name: rbenv install {{ install_version }} command: rbenv install {{ install_version }} environment: RUBY_CONFIGURE_OPTS: "--with-readline-dir={{ readline_prefix.stdout }} --with-openssl-dir={{ openssl_prefix.stdout }}" when: ruby_versions.stdout.find('{{ install_version }}') == -1 - name: デフォルトを確認 command: rbenv global register: ruby_global changed_when: false - name: デフォルトを設定 command: rbenv global {{ install_version }} when: ruby_global.stdout.find('{{ install_version }}') == -1
vars にはインストールしたいバージョンを書いておきます。今回は 2.1.3 にしてみました。
--- install_version: 2.1.3
今回も bitbacket にリポジトリを置きました.必要であればクローンしてください.
https://bitbucket.org/hkob/ansible_homebrew