github boxen使ってみてハマったところ

もうすっかりDBを触る機会が減って、最近はソシャゲの開発なんぞをやってます。

で、先日開発機のmacが来ました。 よく考えたらここ半年で4台目のセットアップだなーとか思ったので、前から気になってたboxenを使ってみました。

boxenってなんぞ

macのセットアップを自動化できます。 例えばgithubからcloneしてきたり、homebrewでパッケージを入れたり、BetterTouchToolなどのdmgをインストールしたり、macの設定を変更したり。

基本はチームやプロジェクトといった環境での自動化に力を発揮しますが、個人用設定も記述できるので個人用でも問題ないです。使いこなすにはpuppetの知識が必要ですが、ゆるふわに使う分には知らなくても問題ないです。

導入方法

このQiitaの記事を読めばわかります。

Boxen使わなくても許されるのは2012年までだよね - Qiita[キータ]

が、すこしハマったところがあったので補足したいと思います。

resourceのバージョン

Puppetfileに以下のgithub "mysql", "1.1.0"とか書くんですが、このバージョン名どこからくるのか最初わかりませんでした。

これは普通にtag名でした。いちいち調べるのめんどくさいです。第一の関門。

script/boxen実行時の警告

実行するとBoxen has a dirty tree, won't auto-update!とか言われることがありました。 これはローカルリポジトリとリモートリポジトリで差異があると出るメッセージなので、ちゃんと同期をとりましょう。

boxenの削除方法

正しいやり方かどうかはわかりませんが、script/nukeで削除できます(核…?)。

script/nuke --optで/opt/boxenを削除、など。

osxのエラーがでる

これが本題なんですが、Error: Could not find class osx for mac.local on node mac.localといったエラーが出てハマりました。

結論をいうと、ほかのresourceと違ってinclude osxが不要でした。。 このエラーのせいで何度書き直したことか…!

script/boxenでエラー(2013/11/29追記)

仕事で使ってたmacのSSDがフォーマットされてしまったのでboxenを実行しようとしたら以下のようなエラーが。OSXは10.9。

sudo mkdir -p /opt/boxen

sudo chown ${USER}:staff /opt/boxen

git clone https://github.com/akiomik/my-boxen.git /opt/boxen/repo

cd /opt/boxen/repo

script/boxen
> ...
> Bundler is not compatible with Rubygems 2.0.
> Please upgrade to Bundler 1.3 or higher.

これはfetchされてきたbundlerが古いことで起こるものっぽい。 以下のコマンドで解決。

sudo gem install bundler --pre

参考 - ruby on rails - Bundler is not compatible with Rubygems 2.0. Please upgrade to Bundler 1.3 or higher - Stack Overflow

個人用設定が反映されない(2013/11/29追記)

modules/people/manifests/FOOBAR.ppのファイル名はgithubのアカウント名に紐づいているという仕様をすっかり失念しており別アカウントで実行したところうまく作られず。 複数アカウントある人は注意。

で、このアカウントの情報がどこに残っているかわからず、sudo rm -rf /opt/boxenしたりscript/nuke --all --forceしたり再起動したりいろいろしましたが結局だめで、別アカウントに切り替えられませんでした。 結局OSXのユーザを再作成したところようやくうまく行きました…。

さいごに

さすがmac用というだけあって、結構いろいろできます。 もうちょっとmac用の設定が増えたり、appstoreのアプリがインストールできるようになるとより便利度があがりますね。

puppetを全然使ったことないので使いこなせてない感がありますが、 githubにboxenの設定を上げてみたのでよかったら参考にしてみてください。

akiomik/my-boxen - Github