OS X のセットアップを Ansible にだいたい任せる

新しい MacBook Pro がやってきたのでセットアップの記録を書いておく。

「だいたい」とあるように、実際のところ自分の手を動かさざるを得ない手順はまだまだあるし、むしろ増えたりもしている。

手順

  • App Store.app で Xcode をダウンロード
  • System PreferencesSecurity & PrivacyFirewall からファイアウォールを有効にする
  • System PreferencesSharing を開く
    • Computer Name を変更する (今回は izanagi にした)
    • Remote Login を有効にして sshd を起動する
  • Ansible Playbook を現マシンから SSH 越しに適用する
  • System PreferencesKeyboardModifier Keys ... から caps lock を control に (後述するが OS X におけるこの修飾キーの設定の扱いは思ったよりも込み入っていたので手作業することにした)
  • Xcode.app を開いて additional components と以下をインストール:
  • System PreferencesSecurity & PrivacyPrivacyAccessibility から Karabiner を許可する
  • (再度 Ansible Playbook を適用する)
  • Alfred の Powerpack License を入力する
  • Dropbox に認証情報を入力し同期させる

Ansible の Playbook について

github.com

今回、スクラッチから書いてみた。

以前にも Playbook を書いて公開しているのだけれども、Ansible の雰囲気に慣れながら書いていったものなので「今だったこう書くな・こう分けるな」と思っていたことと、Playbook に書いていた設定やインストールすべきソフトウェアにけっこう手垢がついており本当に必要な設定・ソフトウェアだけに絞りたい、という目的があってスクラッチから書いた。

また、前に書いた Playbook では別のホストでも実行できるような汎用性を持たせようとしていたけれども結果的に破綻して実現できていなかった反省とそもそもそのような汎用性は用途上不要だと考えて、今のマシンに特化させることにした。

書く時に考えた果たすべき冪等性の基準として「変更を加えない限り何度実行しても失敗しないこと」を掲げた。

「失敗しないこと」が意味するものは、Ansible の出力が failed にならないこと。

Ansible では task を実行した結果、副作用が及ぼされると changed というステータスになる。

Ansible のコアモジュールでは設定で記述した状態に既に収束していた場合、変更は実際に行わないように書かれている。

また、「変更を加えない限り」というのは、たとえば ssh でログインしてディレクトリが既に作られている場合などを特別に考慮しない、ということ。だいたいは Ansible のコアモジュールがカバーできるし、それらでカバーできない場合はおそらく自分でひとつモジュールをひとつ作るに相当する労力をかけることになるので、それはコストに見合わないと考えた。

また、前提条件をはっきりさせておかないと考慮すべき条件が爆発するという問題もある。

OS X の修飾キーの設定について

apple.stackexchange.com

上記 stackexchange のスレッドに書いてあることがすべてだが:

  • Property list でキーボードの修飾キーを設定する際には識別子が必要
  • MacBook シリーズの本体備え付けのキーボードは内部的には USB 接続のデバイスとして識別されている

……ということらしく、けっこうめんどうそうだったので諦めて手作業することにした。