PaaS(Platform as a Service)が注目されだして久しいですが、注目企業PivotalからPivotal CFなんかも出てきていよいよ広く知られていきそうですね。
このPivotal CFの心臓部であるOpen PaaSソフトウェアであるCloud Foundry v2がVagrantで簡単に構築できるようになっているようです。PaaSといってもイマイチ利便性が分からない私のような人なんかはぜひ動かしてみたいところです。
v1では仮想マシンイメージ(Micro Cloud Foundry)を配布してましたが、現在は公開停止されています。
参考にさせていただいたサイト
- [Installing Cloud Foundry on Vagrant]
(http://blog.cloudfoundry.com/2013/06/27/installing-cloud-foundry-on-vagrant/)
動作環境 (2013-11-01更新)
先に言っておきますが、大ハマリしました。 バージョン重要 です。
vagrant up
に成功した組み合わせを貼っておきます。
- OS X 10.8.5
- Vagrant 1.3.5 (1.3.3でエラー)
[Berkshelf] Updating Vagrant's berkshelf: '~/.berkshelf/cf-install/vagrant/berkshelf-20131031-62519-onsa33-cf-install'
[Berkshelf] Using apt (1.10.0)
[Berkshelf] Using git (2.7.0)
[Berkshelf] Using sqlite (1.0.0)
[Berkshelf] Installing mysql (3.0.12) from site: 'http://cookbooks.opscode.com/api/v1/cookbooks' -> 3.0.10でエラー
[Berkshelf] Using postgresql (3.0.4)
[Berkshelf] Using chef-golang (1.0.1)
[Berkshelf] Using java (1.14.0)
[Berkshelf] Using ruby_build (0.8.0)
[Berkshelf] Installing rbenv (0.7.3) from github: 'fnichol/chef-rbenv' with branch: 'e10f98d5fd07bdb8d212ebf42160b65c39036b90' over protocol: 'git' -> このコミット限定!
[Berkshelf] Using rbenv-alias (0.0.0) at './chef/rbenv-alias'
[Berkshelf] Using rbenv-sudo (0.0.1) at './chef/rbenv-sudo'
[Berkshelf] Using cloudfoundry (0.0.0) at './chef/cloudfoundry'
[Berkshelf] Using dmg (2.0.2)
[Berkshelf] Using build-essential (1.4.2)
[Berkshelf] Using yum (2.3.4)
[Berkshelf] Using windows (1.11.0)
[Berkshelf] Using chef_handler (1.1.4)
[Berkshelf] Using runit (1.2.0)
[Berkshelf] Using openssl (1.1.0)
[Berkshelf] Using aws (0.101.6)
##やってみよ(だが未完) ← 解決!!!!!(末尾の追記参照)
インストーラを持ってきます。
$ git clone https://github.com/Altoros/cf-vagrant-installer.git
cf-vagrant-installer
ディレクトリに移動して、コマンド一発。
今回はデプロイ先としてVMware Fusionを指定しています。
$ cd cf-vagrant-installer
$ rake host:bootstrap
$ vagrant up --provider=vmware_fusion
と思いきや…
Bringing machine 'cf-install' up with 'vmware_fusion' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:
Vagrant:
* Unknown configuration section 'berkshelf'.
* Unknown configuration section 'omnibus'.
何か足りないと言われています。
参考サイトをよく見ると、
The number of Chef recipes may be limited, so be sure to use Berkshelf to manage your cookbooks or their dependencies. Berkshelf maintains proven and stable recipes downloaded from OpsCode.
と書いてありますので、以下のプラグインをインストールします。
- Berkshelf
- OpsCode
実はこの辺り、全部リポジトリのREADMEに書いてました。
ちゃんと読まないといけませんね。
$ vagrant plugin install vagrant-berkshelf
$ vagrant plugin install vagrant-omnibus
ちなみに、同マニュアルにはこんなことも書いてありました。
Stop!! If you are going to use the VMware provider, you must follow the instructions here first, or the next steps will result in an environment that will not work.
引用文中のリンク先はこちら。
要するに以下のコマンド叩いてprecise64のVMware_fusion版入れといてね、て話なんですけど、2013/10/8現在のインストーラなら、なければ最初に入れてくれるみたいです。なので無視しても問題ない(はずです)。
$ vagrant box add precise64 http://files.vagrantup.com/precise64_vmware.box --provider=vmware_fusion
いざ再挑戦。がしかし。
[Berkshelf] Failed to download 'rbenv' from github: 'fnichol/chef-rbenv' with branch: 'e10f98d5fd07bdb8d212ebf42160b65c39036b90' over protocol: 'git'
Berkshelf::CookbookNotFound: Cookbook 'rbenv' not found in any of the default locations
rbenvの指定されたブランチが見つかりません!と怒られます。
現象としてはこのサイトと同じです。Berksfile
でchef-rbenvのコミットが指定されているのですが、どうやらこのコミットのchef-rbenvでないとうまく動作しないらしく、根本原因は調査中(Pending Root Cause Analysis)、ってな感じみたいです。
と、とりあえず中断。
2013-11-01追記:解決しました
真面目にググってみたところ、Vagrantのバージョンを1.3.4にあげたら似たような問題が解決したぜ!という書き込みを見かけたので、半信半疑でVagrantを1.3.3から1.3.5にアップデートして再度cloneからやりなおしたところ、成功しました。
Vagrant V1.Xからのアップデートの場合、Vagrant公式サイトから最新パッケージをダウンロードしてきてそのままインストールすれば上書きしてくれます。
バージョンチェック方法は以下。
$ vagrant -v
Vagrant 1.3.5
これで$vagrant up --provider=vmware_fusion
で動作するかと思いましたが、Chef-Soloの実行が下記のエラーで失敗しました。
[2013-10-31T07:39:47-07:00] FATAL: Errno::EINVAL: link[/vagrant] (cloudfoundry::vagrant-provision-start line 18) had an error: Errno::EINVAL: Invalid argument - /vagrant
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.
これはVagrantのproviderをVMware Fusionにしている場合限定の問題らしく、解決法も既知です。
細かいことは書いてませんでしたが以下でうまくいきました。
-
$ vagrant destroy
で一旦起動済みVMを削除します。 -
chef/cloudfoundry/recipes/vagrant-provision-start.rb
をvi等で編集して18-25行目をコメントアウトします(下記参照)。 -
$ vagrant up --provider=vmware_fusion
で再度立ち上げ。
17 # Delete the vagrant link if vmware guest
18 # link "/vagrant" do
19 # action :delete
20 # only_if { node[:virtualization][:system] == "vmware" }
21 # only_if { node[:virtualization][:role] == "guest" }
22 # only_if do File.readlink("/vagrant") == "/mnt/hgfs/!%vagrant" end
23 # notifies :create, "directory[/vagrant]", :immediately
24 # notifies :mount, "mount[/vagrant]", :immediately
25 # end
続いてのエラーです(つらい)。
今度はmysqlのリスタートに失敗しているみたい。
================================================================================
Error executing action `restart` on resource 'service[mysql]'
================================================================================
Chef::Exceptions::Exec
----------------------
/sbin/start mysql returned 1, expected 0
Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/server.rb
251: service 'mysql' do
252: action :start
253: end
254: end
Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/mysql/recipes/server.rb:251:in `from_file'
service("mysql") do
provider Chef::Provider::Service::Upstart
action [:start]
supports {:status=>true, :restart=>true, :reload=>true}
retries 0
retry_delay 2
service_name "mysql"
pattern "mysql"
startup_type :automatic
cookbook_name :mysql
recipe_name "server"
end
ググってみました。コレですかね。
更に調べた感じMySQL Cookbookのバグか…?
とりあえずこの問題はv3.0.12のリリースで修正されたみたいです。
Berkshelfのログを見てみると…
[Berkshelf] Using mysql (3.0.10)
というログが出てます。
なのでBerksfile
を編集して最新リリース(3.0.12)を指定してみます。(指定バージョンを再取得するため、Berksfile.lock
は削除しました)
cookbook 'mysql', '3.0.12'
今度こそ!と思いながら最早何度目か分からない$ vagrant up --provider=vmware_fusion
を実行しましたところ、30分弱ほどかけつつ、ついに、ついに最後まで動作しました。や、やっと動いた(ただしVMであってCFではない)!
[2013-11-01T05:38:06-07:00] INFO: Chef Run complete in 1590.212645206 seconds
これだけ関連コンポーネントがあると常に動作するリリースを出し続けるのも無理な話、ということですかね。。
というわけでCloudFoundryの起動 -> サンプル動作までは後日別記事にする予定ですが( また何が起こるか分かりませんが )、本記事はトラブルシューティングリファレンスとして残しておくつもりです。
追記以上です。