既に「入門Chef Solo - Infrastructure as Code」は購入していて、肩は温まっていたものの。
正直「じゃぁ、何をどうすればいいのか?」がイマイチ理解できず、はや数ヶ月。。。
vagrant + berkshelf + chefで環境をつくってみたら鼻血が出た - リア充爆発日記:http://d.hatena.ne.jp/ria10/20130520/1369057214
この記事を見かけて「BUN も鼻血出さなきゃ!!!」と再度チャレンジしてみましたが、幾度となく vagrant destroy を繰り返し、別な意味で鼻血が出そうでした w
それなりに形になったと思うので、備忘録をかねてまとめてみます。
今回は Vagrant の VM を Chef で管理できるようにするまでの「準備編」です。
update 2014.06.19
Vagrant + Chef Solo で Movable Type が動く LAMP 環境を作ってみた レシピ篇を書きました。
イメージしたら、なんとなく理解できた
そもそも、Chef Solo や Knife Solo を導入する場合、どこにインストールするのか?
恥ずかしながら、そこから誤解していました。
例示されているターミナルコマンドの対象が、ホスト(Mac)なのかゲスト(VM)なのかを勘違いしていたようで、なるほど前途多難な訳です。
そこで、改めて全体の流れをニュアンスで妄想してみました。
イラスト素材:いらすとや
- 自宅を店舗に料理人として独立(Mac へ Chef Solo をインストール)
- 多目的に使える万能ナイフをとある筋から入手(Mac へ Knife Sofo をインストール)
- 支店にどんなメニューも再現してくれる凄腕料理人を雇う(Vagrant へ Chef をインストール)
- レシピを書きとめるひな形(たぶん、木の皮)をナイフで削りだし(Cookbook の作成)
- 新しいメニューを開発(apache や php など、必要とするレシピの作成)
- ナイフでレシピを放り投げて、凄腕料理人に料理してもらう(Knife Solo の実行)
いきなり独立とは無謀だな・・・とか、人にお願いするときナイフを投げるって・・・などなど。ツッコミどころは多々ありますが、理解できればよしとします。
あとは、この流れにそって諸々インストールや設定を進めていきます。
なお、Berkshelf なる敏腕エージェントに仲介を依頼するとオンラインで公開済みの Cookbook を導入できますが、どんなレシピを実行するのか把握しておきたいため、現時点では取引を見送りました。
Vagrant の準備
Vagrant をインストールしていない場合は、下記などを参考に。
今すぐVagrantを始めよう | 株式会社シンメトリック公式ブログ:
http://www.symmetric.co.jp/blog/archives/533
テストで利用した CentOS 6.5 の Box はミニマムな構成だったので、Development Tools をインストール。
ついでに、yum もアップデートしておきます。
$ vagrant ssh
[vagrant@localhost ~]$ sudo yum groupinstall 'Development Tools'
[vagrant@localhost ~]$ sudo yum update
あわせて、ホスト名で ssh できるよう調整。
$ vagrant ssh-config --host localhost >> ~/.ssh/config
カレントディレクトリに関わらず、下記のコマンドで vagrant ssh と同じ状態になります。
$ ssh localhost
Mac に Chef Solo と Knife Solo をインストール
gem の管理は Bundler で行っているため、Gemfile に追記します。
gem "chef"
gem "knife-solo"
これらをインストールして、反映させます。
$ sudo bundle install
$ rbenv rehash
Vagrant に Chef をインストール
Vagrant の VM へ Chef をインストールするためのプラグインを導入します。
$ vagrant plugin install vagrant-omnibus
Vagrantfile にも一行追加し、次の起動から常に最新版にアップデートされるよう設定しておきます。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# vagrant-omnibus プラグイン用の記述
config.omnibus.chef_version = :latest
end
Knife の初期化
Knife Solo インストール後、初期化のコマンドを実行します。
$ knife configure
ワラワラと質問されますが、デフォルトでも先に進めるので割愛。
リポジトリと Cookbook の作成
任意のディレクトリへ移動し Chef のリポジトリを作成します。
$ cd ~/LocalHost
$ knife solo init chef_repo
作成したリポジトリ内に移動後、Cookbook を作成。
$ cd chef_repo
$ knife cookbook create apache -o cookbooks
サンプルでは ~/LocalHost/chef_repo/apache 配下へ作成されたひな形をベースに、あとは煮るなり焼くなりお好みで w
SSL 関連の警告が出たら...
「SSL validation of HTTPS requests is disabled.」といった警告を消すには、次に挙げるいずれか(もしくは両方)の調整が必要です。
knife solo コマンド実行時の警告は、 ~/LocalHost/.chef/knife.rb に一行追記します。
~/.chef/knife.rb にも同名ファイルがあるため、間違わないように注意します。
ssl_verify_mode :verify_peer
vagrant up や vagrant provision した際の警告は、Vagrantfile を修正します。
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.provision :chef_solo do |chef|
# ssl_verify_mode の設定
chef.custom_config_path = "Vagrantfile.chef"
end
end
指定したパスに Vagrantfile.chef を作成し、設定を記述しておきます。
Chef::Config.ssl_verify_mode = :verify_peer
準備完了
ここまでで、ひと通り準備できました。
あとはレシピを作って、ナイフを投げるだけです w
しかし、終わってみれば思いのほか単純だった・・・ということは、ままありますよね(。-_-。)