はじめに
- 2013 年の最後の記事(だと思う)
Macの設定を自動化してくれるツールboxenを試してみる- 既に 2014 年なのでこちらの記事から丸々一年遅れで試すことになります...
boxen とは
以下、自分の認識。
- Mac の設定が自動出来る(パッケージのインストールや簡単な画面のカスタマイズなど)
- github が社内でも利用している開発環境構築フレームワーク
- ベースは
puppet
Mac のセットアップはそれほど頻繁に行うわけではないけど、設定が自動化出来るという点とベースが puppet であるという点、そして puppet を利用しているということでその設定をコードで管理出来るという点が個人的には魅力的。また、puppet は少し齧ったことがあるのが嬉しい。
参考
使ってみる
環境
- MacBook Air mid 2011
- OS X Mavericks(Lion をクリーンインストールしてアップグレード)
ステップ
とりあえずステップの個人的なおさらい。
- github に
boxen用のリポジトリを作成する - Xcode のインストール
- Command Line Tools for Xcode のインストール
- https://github.com/boxen/our-boxen.git を
git cloneする - 必要なディレクトリ(
/opt/boxen)の作成とオーナー($USER:staff)の変更 our-boxen/script/bootstrapスクリプトの実行our-boxen/manifests/site.ppの修正- 初回の
our-boxen/script/boxen --no-fdeを実行 - パスの設定をしてくれる
source /opt/boxen/env.shを実行 our-boxen/Puppetfileを修正して導入したいパッケージを記載するour-boxen/modules/people/manifests/${github_ID}.ppを作成(個別に設定したい内容を記述する)- 改めて
./script/boxen --no-fdeを実行して設定を反映させる - そこそこ構築出来たら
githubにあらかじめ作成しておいたリポジトリにpushする
以下は個人的にポイントだと感じた部分。
Mavericks で Command Line Tools for Xcode のインストール
Command Line Tools for Xcode のインストールはちょっとステップが必要。Xcode を起動して...Open Developer Tool から More Developer Tool... を選択。

https://developer.apple.com からダウンロードする。

~/our-boxen/manifests/site.pp の修正
boxen がデフォルトでインストールする node と ruby のバージョンを指定する。
kappabookair% diff -u site.pp.bk site.pp --- site.pp.bk 2013-12-31 07:43:41.000000000 +0900 +++ site.pp 2013-12-31 10:25:06.000000000 +0900 @@ -64,14 +64,14 @@ } # node versions - include nodejs::v0_6 - include nodejs::v0_8 + #include nodejs::v0_6 + #include nodejs::v0_8 include nodejs::v0_10 # default ruby versions - include ruby::1_8_7 - include ruby::1_9_2 - include ruby::1_9_3 + #include ruby::1_8_7 + #include ruby::1_9_2 + #include ruby::1_9_3 include ruby::2_0_0 # common, useful packages
開発は殆どしないし、出来るだけ新しい環境が入っていた方が良いかなって思うので上記のように設定した。
boxen 用のディレクトリを作成する
sudo mkdir -p /opt/boxen
chown -R ${USER}:staff /opt/boxen
/opt/boxen 以外は指定出来ないらしいので注意する。
初回の ~/our-boxen/script/boxen --no-fde を実行
root パーティションを暗号化しない場合(暗号化しないので)-no-fde オプションを付けて実行する。
cd our-boxen script/boxen --no-fde --> Hey, I need your current GitHub credentials to continue. GitHub login: |kappa| inokappa GitHub password: *************** Password for sudo:
最初に github のアカウントと sudo パスワードの入力を促される。正常に入力されると処理が開始される。(初回は処理の完了に小一時間ほど時間を要する。)処理が終わった後で以下を実行して boxen に必要なパスの設定を行う。
source /opt/boxen/env.sh
設定後、以下を実行して設定内容を確認する。
~/our-boxen/script/boxen --env
以下のような内容が出力される。
BOXEN_BIN_DIR=/opt/boxen/bin
BOXEN_CONFIG_DIR=/opt/boxen/config
BOXEN_DATA_DIR=/opt/boxen/data
BOXEN_ENV_DIR=/opt/boxen/env.d
BOXEN_GITHUB_LOGIN=${github_ID}
BOXEN_HOME=/opt/boxen
BOXEN_LOG_DIR=/opt/boxen/log
BOXEN_SETUP_VERSION=
BOXEN_SOCKET_DIR=/opt/boxen/data/project-sockets
BOXEN_SRC_DIR=/Users/${USER}/src
尚、ログイン時に ~/our-boxen/script/boxen --env が実行されるように ~/.zshrc に設定しておく(zsh の場合)。
source /opt/boxen/env.sh
導入パッケージを Puppetfile に記述する
こちらにて puppet- のプレフィックスがついているパッケージの中に導入したいパッケージがあれば、以下のように記述する。
github "osx", "2.2.2" github "thunderbird", "1.1.0"
右側の数値はバージョンとなり、github のブランチプルダウンの tag からバージョン番号を取得して記載する。ちなみにこちらに存在していないパッケージなどについては他の方法で導入することが出来る。(以下、参照)
個別設定を記述する
boxen がチームでの利用を前提としている所以がどうかはわからないが、~/our-boxen/our-boxen/modules/people/manifests/ 以下に github のアカウント ID 名でファイル作成して個別に設定したい内容なパッケージを指定出来る。
vim ~/our-boxen/our-boxen/modules/people/manifests/${github_ID}.pp
以下のように記載する。
class people::${github_ID} { include osx::dock::autohide class osx::dock::kill_dashbord{ include osx::dock boxen::osx_defaults { 'kill dashbord': user => $::boxen_user, domain => 'com.apple.dashboard', key => 'mcx-disabled', value => YES, notify => Exec['killall Dock']; } } include thunderbird # via homebrew package { [ 'python' ]: } package { # utility 'Kobito': source => "http://kobito.qiita.com/download/Kobito_v1.8.6.zip", provider => compressed_app; 'GoogleJapaneseInput': source => "https://dl.google.com/japanese-ime/latest/GoogleJapaneseInput.dmg", provider => pkgdmg; }
include または class を使って Puppetfile の中で定義した osx と thunderbird を呼び出している。include osx:: 又は class osx:: することで Dock の大きさや位置、マウスのポイントなどのカスタマイズもコードで書くことが出来る。(include と class の使い分けについてはこちらでも少し突っ込んで書く)
また、include thunderbird で thunderbird がインストールされる。更に github に登録されていないパッケージなども package リソースを使ってインストールすることが出来るし、homebrew を介して python 等のパッケージも導入出来る。
改めて ~/our-boxen/script/boxen --no-fde を実行する
~/our-boxen/script/boxen --no-fde
以下のように結果が出力される。

一通り構築したら以下のようにして、あらかじめ作成したリポジトリに push する。
git remote rm origin
git remote add origin https://github.com/${github_ID}/yourrepo.git
git push -u origin master
github で管理することで Mac の環境をコードで管理、差分の管理も出来るようになるのはすばらしい!
最後に
- 今更ながら
boxenを使ってみたけどとても便利に感じた - 「はじめに」にも書いたけどそんなに
Macをセットアップする機会は無いが設定の記録としても十分に利用出来る