Macを買う度にアプリケーション入れたり、環境構築するのが面倒?!ならBoxenを使おう
お詫び
ただのBoxen入れる際に作ったメモを、導入手順書のように書き置こしたものです。
まずはじめに
Macを買い換えるたび、アプリをApple Storeからダウンロードしたり WEB上を徘徊したり、vimの設定をしたりめんうなんですー。何かいい方法はないのですか!!
Boxenって何?
説明しよう!BOXENとは、
GitHub社で使われている、Mac の環境を自動構築するためのツール(フレームワーク)です。GitHub ではローカルの Mac を開発環境として使っているので、新しく人が加わった時に Boxen で開発環境構築してもらっているとのこと。
やってみよう!
とりあえず準備
Command Line Toolを手に入れる
途中cのコンパイルでエラーになるので、そうならない為に必要になるものをいれます。
からダウンロード次にターミナルを立ち上げて、以下のコマンドを実行
xcode-select --install
「インストール」を押す。
Boxenの雛形を手に入れる
まだ手元にBoxenなんてものは存在しないので、 https://github.com/boxen/our-boxenをforkして、からMacにclone
$ mkdir ~/src $ git clone git@github.com:{your_name}/our-boxen.git ~/src/boxen $ cd ~/src/out-boxen
とりあえず、これで最低限必要なものは準備完了かな
初期状態のまま検証開始
実行~! Boxen はデフォルトではディスクの暗号化を要求するらしいから、 システム設定 → セキュリティとプライバシー → FileVault で有効にする
ではでは、実行してみよう 暗号化しなくても以下のコマンドで実行できるらしいけど
$ script/boxen --no-fde
今回は、推奨通り通常実行
$ script/boxen Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/bin]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data/project-sockets]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/data/puppet]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/log]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/Users/sonots/src]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/env.d]/ensure: created Notice: /Stage[main]/Boxen::Config/File[/opt/boxen/env.d/config.sh]/ensure: defined content as ...
おお、何か動いてる感がある
処理が終わった時に、作成される /opt/boxen/env.shを実行したらboxenで入れたアプリが使えるようになるので .zshrc や .bashrcなどに以下を追加
[ -f /opt/boxen/env.sh ] && source /opt/boxen/env.sh
追加したら、exec $SHELL -Lをしておく。
このとき、Lunchpadに
が追加される。
本格的にアプリを入れてみよう
まずは手始めに、chromeと、chrome canaryを入れてみる
Puppetfile にgithubを定義
github "chrome", "1.1.2"
次に、個人用の設定ファイルを作成 boxenでの個人設定はgithubアカウントにひもづくので、githubアカウントは作っておく それから、以下のファイルに個人用設定を定義します。 /modules/people/manifests/{{github アカウント名}}.pp
class people::{{github アカウント名}} { include chrome include chrome::canary }
Puppetfileでchromeのgithubを定義して、個人用ファイルで chromeと、chrome canaryをincludeすると定義
ちゃんと入るか確認してみよう
$ script/boxen
処理が終わってからLunchpadを見たら chromeとchrome canaryがインストール出来てる事が確認できた!
楽!!(定義めんどいけど、定義済みだったとしたら楽!!)
次はhomebrew入れれるパッケージを入れてみる
技術ブログ書いてると使いたくなる、treeコマンドとか ファイルを取得する時とかに使いたくなる、wgetコマンドを入れてみる。
さっき作った個人用ファイルに以下を追加 /modules/people/manifests/{{github アカウント名}}.pp
package { [ 'tree', 'wget' ]:; }
はい、実行
$ script/boxen
treeとwgetが入ってるか確認
$ source ~/.bash_profile $ which wget /opt/boxen/homebrew/bin/wget $ which tree /opt/boxen/homebrew/bin/tree
おお、入ってる!!
次は、dmgパッケージを指定してみる。今回はgoogle日本語入力で確認
さっき作った個人用ファイルに以下を追加 /modules/people/manifests/{{github アカウント名}}.pp
package { 'GoogleJapaneseInput': source => "http://dl.google.com/japanese-ime/latest/GoogleJapaneseInput.dmg", provider => pkgdmg; }
簡単にsourceでダウンロードURLを指定して、providorでdmg pkgをインストールすると、定義してるのかな に追加します。
はい、実行
$ script/boxen
google日本語入力がLunchpadに追加されてる!!
最後はちょっと応用すぎるけど、.dotfiles系を構築時に作れるようにしてみる(今回はvim only)
Puppetfile にgithubを定義
github "vim", "1.0.5"
/modules/people/manifests/{{github アカウント名}}.ppには、以下を追加、編集
package { [ 'tree', 'wget', 'fontforge' ]:; } # settings for dotfiles $home = "/Users/${::boxen_user}" $dotfiles = "${home}/.dotfiles" file { $home: ensure => directory } # $dotfilesパスに、sourceをcloneしますよって定義 repository { $dotfiles: source => 'git@github.com:yshinoha/.dotfiles.git', require => File[$home]; } # settings for vim include vim # Example of how you can manage your .vimrc file { "${vim::vimrc}": target => "/Users/${::boxen_user}/.dotfiles/.vimrc", require => Repository[$dotfiles] } # $dotfilesに依存してます # .dotfiles/.vimrcを ~/.vimrcにコピー # いろいろ変数定義 $vim = "${home}/.vim" $neobundle = "${vim}/bundle" $powerline = "${neobundle}/vim-powerline" $fontpatcherdir = "${neobundle}/vim-powerline/fontpatcher" $fontpatcher = "${fontpatcherdir}/fontpatcher" $inconsolata = "${fontpatcherdir}/Inconsolata.otf" $wgetInconsolata = "wget http://levien.com/type/myfonts/Inconsolata.otf" $vimPluginInstall = "yes | vim -c 'q'" vim::bundle { [ 'scrooloose/syntastic', 'sjl/gundo.vim' ]: } repository { $neobundle: source => "git@github.com:Shougo/neobundle.vim", path => "${neobundle}/neobundle.vim" #require => File[$vim] } exec { $vimPluginInstall: creates => "${fontpatcher}", require => Repository[$neobundle], } exec { $wgetInconsolata: cwd => $fontpatcherdir, creates => "$inconsolata", require => Package['wget'], } exec { "fontforge -script ${fontpatcher} ${inconsolata}": cwd => $fontpatcherdir, require => [ Exec[$vimPluginInstall], Exec[$wgetInconsolata], Package['fontforge'] ], }
NeoBundleInstallとかまでやってるけどこれは https://github.com/yshinoha/.dotfiles を参考にしてください。
ここまで、準備して
$ script/boxen
をしたら、.vimrcが入って、.vimが作成されて vimを一度ひらいて、NeoBundleInstallが走って、vimを閉じる を一気にやります。
vimでファイルを開いてみたら
ここまで自動で出来たらまじ便利
他になにができるの?(今回は説明を省略して、紹介)
チームで共有
もともとboxenはgithub社が、チームで同じ環境をつくるため 新メンバーが同じ環境を手軽に作る目的で作られた物なので、今回書いた内容とは別に、チームで管理する方法もある その場合は、modules/projects/manifests/いかにファイルを作成するけど、今回は無しで。
modules/projects/manifests でチーム単位で環境を共有して 各々入れたいものがあれば、個別に /modules/people/manifests/{{github アカウント名}}.ppに記述するイメージかな
また今後やってみよう
これでMacを買い換えるのも怖くない!!???
今回使ったソース
今回作ったboxen完全版
今回使った.dotfiles完全版(ではない)
参考
Puppet http://docs.puppetlabs.com/references/latest/type.html