vagrant 環境構築 (2)

Vagrantfile の vb.gui な記述をコメントアウトしてたのですが

   config.vm.provider :virtualbox do |vb|
     # Don't boot with headless mode
#     vb.gui = true

fsck が必要で起動途中で止まってて固まっていた模様。とりあえず無理やり fsck して正常起動を確認。とりあえず名前解決らへんの不具合対応に着手。
って無問題に見えますな。この状態で knife solo cook してみるとどうなるか。

挙動変わらず

リモート側に rsync 入っていないようなので導入してリトライしてみます。
む、なんか出力が違いますね。ようやく、なのかどうなのかorz

Running Chef...
[2013-05-01T23:27:21+00:00] INFO: *** Chef 10.16.4 ***
[2013-05-01T23:27:21+00:00] INFO: Setting the run_list to ["nginx"] from JSON
[2013-05-01T23:27:21+00:00] INFO: Run List is [recipe[nginx]]
[2013-05-01T23:27:21+00:00] INFO: Run List expands to [nginx]
[2013-05-01T23:27:21+00:00] INFO: Starting Chef Run for localhost
[2013-05-01T23:27:21+00:00] INFO: Running start handlers
[2013-05-01T23:27:21+00:00] INFO: Start handlers complete.
[2013-05-01T23:27:22+00:00] ERROR: Running exception handlers
[2013-05-01T23:27:22+00:00] ERROR: Exception handlers complete
[2013-05-01T23:27:22+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-05-01T23:27:22+00:00] FATAL: Chef::Exceptions::CookbookNotFound: Cookbook nginx not found. If you're loading nginx from another cookbook, make sure you configure the dependency in your metadata
ERROR: RuntimeError: chef-solo failed. See output above.

あ、でも失敗してるや。nginx って cookbook が、って何でしょ。またナチュラルかな。

むむむ

なんかよくよく見てみるに色々と微妙ですね。knife が 0.2.0 だな。
ええと以下な warning から対応。

WARNING: solo.rb found, but since knife-solo v0.3.0 it is not used any more
WARNING: Please read the upgrade instructions: 
  https://github.com/matschaffer/knife-solo/wiki/Upgrading-to-0.3.0

ちょっとやりなおしてみよ。

$ knife kitchen chef-repo
WARNING: `knife kitchen` is deprecated! Please use:
  knife solo init DIRECTORY

あらら、こうか。

$ rm -rf chef-repo
 knife solo init chef-solo
Creating kitchen...
Creating knife.rb in kitchen...
ERROR: knife encountered an unexpected error
This may be a bug in the 'solo init' knife command or plugin
Please collect the output of this command with the `-VV` option before filing a bug report.
Exception: NameError: uninitialized constant KnifeSolo::Pathname

ぐぬ。knife kitchen でアレ。次に以下か。

$ knife solo prepare 192.168.33.10

これ、昨晩のログを見るに curl が名前解決に失敗しとるぞ。何故か今日はイケている模様。なんだこの不安定さ。以下な出力が正常動作な模様です。

$ knife solo prepare 192.168.33.10
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6510  100  6510    0     0   5343      0  0:00:01  0:00:01 --:--:-- 27702
Downloading Chef 11.4.4 for el...
Installing Chef 11.4.4
warning: /tmp/tmp.dWpcQQP6/chef-11.4.4.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 83ef826a: NOKEY
Preparing...                ########################################### [100%]
   1:chef                   ########################################### [100%]
Thank you for installing Chef!
Generating node config 'nodes/192.168.33.10.json'...

昨日のナニは色々な意味で駄目だったことがよく分かります。

$ knife cookbook create nginx -o cookbooks/
** Creating cookbook nginx
** Creating README for cookbook: nginx
** Creating CHANGELOG for cookbook: nginx
** Creating metadata for cookbook: nginx

ええと、cookbooks/nginx/recipes/default.rb を以下にして

#
# Cookbook Name:: nginx
# Recipe:: default
#
# Copyright 2013, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#

package "nginx" do
  action :install
end

service "nginx" do
  supports :status => true, :restart => true, :reload => true
  action [ :enable, :start ]
end

template "nginx.conf" do
  path "/etc/nginx/nginx.conf"
  source "nginx.conf.erb"
  owner "root"
  group "root"
  mode 0644
  notifies :reload, 'service[nginx]'
end

あるいは cookbooks/nginx/templates/default/nginx.conf.erb を以下にして

user nginx;
worker_processes 1;
error_log /var/log/nginx/error_log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server {
        listen <%= node['nginx']['port'] %>
        server_name localhost;
        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }
    }
}

あるいは nodes/192.168.33.10.json を以下に。

{
    "nginx": {
        "port" : 80
    },
    "run_list":[
        "nginx"
    ]
}

これでリトライしてみます。

$ knife solo cook 192.168.33.10
Running Chef on 192.168.33.10...
Checking Chef version...
Uploading the kitchen...
Generating solo config...

warning 出力なし。昨日のソレは一体何が悪かったんだろ。正常動作してるようなそうでもないような。続きが以下。

Running Chef...
Starting Chef Client, version 11.4.4
Compiling Cookbooks...
Converging 3 resources
Recipe: nginx::default
  * package[nginx] action install
    * No version specified, and no candidate version available for nginx
================================================================================
Error executing action `install` on resource 'package[nginx]'
================================================================================


Chef::Exceptions::Package
-------------------------
No version specified, and no candidate version available for nginx


Resource Declaration:
---------------------
# In /home/vagrant/chef-solo/cookbooks-1/nginx/recipes/default.rb

 10: package "nginx" do
 11:   action :install
 12: end
 13: 



Compiled Resource:
------------------
# Declared in /home/vagrant/chef-solo/cookbooks-1/nginx/recipes/default.rb:10:in `from_file'

package("nginx") do
  action [:install]
  retries 0
  retry_delay 2
  package_name "nginx"
  cookbook_name :nginx
  recipe_name "default"
end



[2013-05-02T00:29:00+00:00] ERROR: Running exception handlers
[2013-05-02T00:29:00+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated
[2013-05-02T00:29:00+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-05-02T00:29:00+00:00] FATAL: Chef::Exceptions::Package: package[nginx] (nginx::default line 10) had an error: Chef::Exceptions::Package: No version specified, and no candidate version available for nginx
ERROR: RuntimeError: chef-solo failed. See output above.

まだ例外吐いてますね。スタックトレイス確認してみたら以下とのこと。

Chef::Exceptions::Package: package[nginx] (nginx::default line 10) 
 had an error: Chef::Exceptions::Package: 
 No version specified, and no candidate version available for nginx

対象ホストで確認してみたら nginx なんてパケジ知らん、と。ググッてみたら以下なコマンド実行したら見える模様。

$ sudo rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

確かに見えた。ここまで来るともう何とも言えぬ。
再度 knife solo 実行。

$ knife solo cook 192.168.33.10
(略
Chef Client finished, 4 resources updated

一応正常終了している模様。80 番も開放を確認。
前提として

  • rsync は導入されてる雛形が必要

なのかどうか。つうか nginx が依存してる上のソレとかってどうなんでしょうね。

別途

serverspec も確認の方向。色々微妙なので全般な纏めも作成の方向です。