ようへいの日々精進XP

よかろうもん

もうすぐ 2014 年だけど boxen を独りで使ってみる

はじめに

  • 2013 年の最後の記事(だと思う)
  • Mac の設定を自動化してくれるツール boxen を試してみる
  • 既に 2014 年なのでこちらの記事から丸々一年遅れで試すことになります...

boxen とは

以下、自分の認識。

  • Mac の設定が自動出来る(パッケージのインストールや簡単な画面のカスタマイズなど)
  • github が社内でも利用している開発環境構築フレームワーク
  • ベースは puppet

Mac のセットアップはそれほど頻繁に行うわけではないけど、設定が自動化出来るという点とベースが puppet であるという点、そして puppet を利用しているということでその設定をコードで管理出来るという点が個人的には魅力的。また、puppet は少し齧ったことがあるのが嬉しい。


参考


使ってみる

環境

ステップ

とりあえずステップの個人的なおさらい。

  • githubboxen 用のリポジトリを作成する
  • Xcode のインストール
  • Command Line Tools for Xcode のインストール
  • https://github.com/boxen/our-boxen.gitgit 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... を選択。

f:id:inokara:20131231152017p:plain

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

f:id:inokara:20131231152537p:plain

~/our-boxen/manifests/site.pp の修正

boxen がデフォルトでインストールする noderuby のバージョンを指定する。

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 の中で定義した osxthunderbird を呼び出している。include osx:: 又は class osx:: することで Dock の大きさや位置、マウスのポイントなどのカスタマイズもコードで書くことが出来る。(includeclass の使い分けについてはこちらでも少し突っ込んで書く)

また、include thunderbirdthunderbird がインストールされる。更に github に登録されていないパッケージなども package リソースを使ってインストールすることが出来るし、homebrew を介して python 等のパッケージも導入出来る。

改めて ~/our-boxen/script/boxen --no-fde を実行する

~/our-boxen/script/boxen --no-fde

以下のように結果が出力される。

f:id:inokara:20131231183946p:plain

一通り構築したら以下のようにして、あらかじめ作成したリポジトリ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 をセットアップする機会は無いが設定の記録としても十分に利用出来る