16 3 / 2013

Publishing cookbook to chef community site

After creating my first errbit cookbook, and publishing it on the chef community site, I’d to do some stretches to publish it.

First, you need to tgz your cookbook and it should have the metadata.json file otherwise the validation fails and the cookbook won’t be published.

So, I am putting it here for me and others:

In your cookbook dir, create a dir .chef with a knife.rb file in it with the following line:

cookbook_path "."

Then issue the command knife cookbook metadata . (Don’t forget the dot) This will generate metadata.json file.

Better to commit it here and push the changes to your git repo.

Now step out 1 dir path from your cookbook folder and do the compressing.

cd ..
tar -czf errbit.tgz --exclude bin --exclude .envrc --exclude .vagrant --exclude .bundle errbit

You might have to change/add the --exclude vars according to your setup.

Now we’ve the errbit.tgz file with the metadata.json file in it which you can upload to the community site at http://community.opscode.com/cookbooks/new

When updating the cookbook later, do change the version in metadata.rb file and repeat the same process to publish your cookbook’s changes.


Permalink 1 note

07 12 / 2011

How to manage multiple chef servers chef client?

I was stupid enough on how to manage multiple chef clients for multiple chef servers.


I played with Opscode hosted chef servers. Actually, I was astonished with chef through those guys presentations/talks. And later I installed one local chef-server to play around.

But I was always confused on what are the files do I need to change while switching to the previous or another one. Should I keep them(3 files; client key, organization validator key and knife.rb) in ~/chef or ~/.chef or ~/other_folder/.chef.

But, today I find this approach simple and simple.

Do cd inside any folder that you’re managing for different servers. Make one directory named .chef and put your client key, orgnization validator kye, knife.rb

Now when you run any knife -h commands being inside that folder, the configuration will be read first from the .chef directory.

It made me much simpler, should have known before!!


Permalink 42 notes

23 11 / 2011

Build your own Vagrant box ready to use with chef-solo using Veewee

This is my first screencast and its a bit glitchy. The voice is not good because I’d to use the built-in microphone of my MacBook pro. I’ve to get a good one. So bare with me and the audio.

Things to shop


  • You know what is Virtual Box and Vagrant
  • You are familiar with Git and Github
  • You use Bundler and RVM

Building a brand new box using Ubuntu 11.10 32-bit iso image

Visit https://github.com/jedi4ever/veewee and Fork the repo under your account

Git clone git clone git://github.com/millisami/veewee cd veewee

Bundle install (if you don’t have Bundler installed, do gem install bundler --pre)

millisami at sachin in ~/gitcodes/veewee on master
± bundle install                                                                                                                                                                                                 
Fetching gem metadata from http://rubygems.org/.......
Using Platform (0.4.0) 
Using archive-tar-minitar (0.5.2) 
Using bundler (1.1.rc) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
millisami at sachin in ~/gitcodes/veewee on master

Gems required

gem install vagrant
gem install veewee

Define a basebox template

First, lets see what are the templates available.

millisami at sachin in ~/gitcodes/veewee on master
± bundle exec vagrant basebox templates                                                                                                                                                             
The following templates are available:
vagrant basebox define '<boxname>' 'ubuntu-10.10-server-i386-netboot'
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-amd64'
vagrant basebox define '<boxname>' 'ubuntu-11.04-server-i386'

So, the ubuntu 11.10 has not been defined yet. Lets build one based off the ubuntu-11.04-server-i386

millisami at sachin in ~/gitcodes/veewee on master
± bundle exec vagrant basebox define 'milli-ubuntu-11-10-32-bit' 'ubuntu-11.04-server-i386'                                                                                                         
The basebox 'milli-ubuntu-11-10-32-bit' has been successfully created from the template ''ubuntu-11.04-server-i386'
You can now edit the definition files stored in definitions/milli-ubuntu-11-10-32-bit
or build the box with:
vagrant basebox build 'milli-ubuntu-11-10-32-bit'

Lets see the structure of the generated folder

millisami at sachin in ~/gitcodes/veewee on master
± tree definitions                                                                                                                                                                                  
└── milli-ubuntu-11-10-32-bit
    ├── definition.rb
    ├── postinstall.sh
    └── preseed.cfg

1 directory, 3 files

Open up the folder in your editor

Open up the file definition.rb and change the version numbers from 11.04 to 11.10

# definition.rb
  :cpu_count => '1', :memory_size=> '384', 
  :disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off',
  :os_type_id => 'Ubuntu',
  :iso_file => "ubuntu-11.10-server-i386.iso",
  :iso_src => "http://releases.ubuntu.com/11.10/ubuntu-11.10-server-i386.iso",
  :iso_md5 => "881d188cb1ca5fb18e3d9132275dceda",
  :iso_download_timeout => "1000",
  :boot_wait => "10", :boot_cmd_sequence => [
    '/install/vmlinuz noapic preseed/url=http://%IP%:%PORT%/preseed.cfg ',
    'debian-installer=en_US auto locale=en_US kbd-chooser/method=us ',
    'hostname=%NAME% ',
    'fb=false debconf/frontend=noninteractive ',
    'keyboard-configuration/layout=USA keyboard-configuration/variant=USA console-setup/ask_detect=false ',
    'initrd=/install/initrd.gz -- <Enter>'
  :kickstart_port => "7122", :kickstart_timeout => "10000", :kickstart_file => "preseed.cfg",
  :ssh_login_timeout => "10000", :ssh_user => "vagrant", :ssh_password => "vagrant", :ssh_key => "",
  :ssh_host_port => "7222", :ssh_guest_port => "22",
  :sudo_cmd => "echo '%p'|sudo -S sh '%f'",
  :shutdown_cmd => "shutdown -P now",
  :postinstall_files => [ "postinstall.sh"], :postinstall_timeout => "10000"

Open up the file postinstall.sh and change libreadline5-dev to libreadline5 because the Ubuntu Oneiric doesn’t have libreadline5-dev package.

millisami at sachin in ~/gitcodes/veewee on master
± be vagrant basebox build 'milli-ubuntu-11-10-32-bit'

23 11 / 2011