boxenを使ってMacのセットアップ

気になってたので使ってみた。
Boxen (redirecting)

いくつか記事を参考にやろうとしたけど、どうやらversion上がって、boxenのinstall方法(というかinstall先の構成か)が変わったらしく、とりあえずboxenをuninstallしてやり直すところから。

$ /opt/boxen/repo/script/nuke --all --force

気を取り直して、セットアップ。
事前準備として、Xcode, Command Line Toolsをinstallしておく。
Xcode開発環境のインストール

boxenをinstallすると、自前のhomebrewを /opt/boxen/homebrew/bin/brew に持つので、既存のhomebrewと共存させたい場合は少しめんどくさそうだし注意。homebrewで入れられるやつはboxen経由で入れられるので、基本的にboxenの持ってるbrewで全部管理するようにしようかなと。

あとは、boxenはデフォルトでディスクの暗号化を要求するので、それも設定する。

$ sudo mkdir -p /opt/boxen
$ sudo chown $USER:admin /opt/boxen
$ git clone git://github.com/boxen/our-boxen /opt/boxen/repo
$ echo '[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh' >> ~/.bashrc
$ source /opt/boxen/env.sh
# システム環境設定→セキュリティとプライバシー→FileVaultを有効に
$ boxen

これで一通り動く。

boxenで必要なものをいれてから、はじめてのvagrantまで。

Vagrant(Vagrant by HashiCorp)で遊ぼうと思い立ったのだけど、せっかくboxen入れたので、必要なものをとりあえずboxen経由で入れてみようかと。

ということで、まずboxen経由でvirtualboxVagrantをinstall

# ~/src/our-boxen/Puppetfileに追記
# 現在のところ、boxen入れると/opt/boxen/repoのシンボリックリンクが~/src以下に作られる
github "virthualbox", "1.0.2"

# ~/src/our-boxen/modules/people/manifests/{github-user-name}.pp
class people::{github-user-name} {
    include virtualbox

    package {
        'Vagrant1.2.2':
            provider => 'pkgdmg',
            source   => 'http://files.vagrantup.com/packages/7e400d00a3c5a0fdf2809c8b5001a035415a607b/Vagrant-1.2.2.dmg'
    }
}

# 上記のものをinstall
$ boxen

dmg指定でVagrantの現時点で最新1.2.2をいれてるのだけど、latestのaliasがあると便利だなぁ。あと、boxenで入れたアプリの削除とかアップデートとかどうなってるんだろうというのが気になったので、機会あったらコード追ってみよう。

ここまでで必要なものはそろったので、あとはVagrantを試してみる。いろいろやりたいけど、とりあえずhello worldまで。

# box追加
$ vagrant box add centos6.4-x86-minimal http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130309.box

# 初期化。
$ vagrant init
# できたVagrantfile編集してconfig.vm.box = "centos6.4-x86-minimal"に。

# instance立ち上げ
$ vagrant up

# とりあえずつないでみる
$ vagrant ssh

こんな感じでカジュアルにvm立てれると。便利。
Vagrantfileとかをgitとかで管理するときに、boxファイル自体は同管理するのがいいんだろ。これは後で調べよう。

複数台構成をVagrantで立ててみたり、Vagrantで立てたサーバをchefでセットアップしてみたり、capistranoとかでそこにdeployしてみたりとかはこれから試してみるつもり。あと、途中までセットアップしたboxを配る、みたいなのとかも。

【追記1】
config.vm.box_urlが指定で来て、ローカルにboxがない場合はそこ見にいってくれるっぽい。

【追記2】
Vagrantfileのあるディレクトリが/vagrantとしてマウントされていて、ファイルが共有される。地味に便利っぽい。

boxenでログインシェルをzshにする

osx_chshを使うのだけど、このResourceはpuppet-osxに依存してるので、それも追加しておく。
dotfilesちゃんと管理して.zshrcとかもよしなにしたいけど、それはまたそのうち。

# ~/src/our-boxen/Puppetfileに追記
github "osx", "1.0.0"

# ~/src/our-boxen/modules/people/manifests/{github-user-name}.pp
class people::{github-user-name} {
    package {
        'zsh':
            install_options => [
                '--disable-etcdir',
            ];
    }

    file_line { 'add zsh to /etc/shells':
        path    => '/etc/shells',
        line    => "${boxen::config::homebrewdir}/bin/zsh",
        require => Package['zsh'],
        before  => Osx_chsh[$::luser];
    }

    osx_chsh { $::luser:
        shell => "${boxen::config::homebrewdir}/bin/zsh";
    }

# 上記をinstall
$ boxen