Bill's Kitchen
A DevPack with all you (or Bill Gates would) need for cooking with Chef, Vagrant and Docker on Windows, shrink-wrapped in a portable package.
Installation and Usage
As the only prerequisite you need to have a recent version of VirtualBox installed (sorry, couldn't make that one portable).
Using Bill's Kitchen itself is fairly simple. There is nothing to install, just unpack and go:
- Grab the latest
bills-kitchen-<version>.7z
package from the releases page and unpack it - Mount the kitchen to the
W:\
drive by double-clicking themount-drive.bat
file - Click
W:\Launch ConEmu.lnk
to open a command prompt (also runsW:\set-env.bat
to set up the environment) - Start hacking!
What's included?
Main Tools
The main tools for cooking with Chef / Vagrant:
- ChefDK 0.13.21, with embedded Ruby 2.1.8
- DevKit 4.7.2
- Vagrant 1.8.1
- Terraform 0.6.16
- Packer 0.10.1
- Consul 0.6.4
- Docker 1.7.1 (using boot2docker)
Plugins
These plugins are pre-installed:
- vagrant plugins:
- vagrant-omnibus - installs omnibus chef in a vagrant VM
- vagrant-cachier - caches all kinds of packages you install in the vagrant VMs
- vagrant-berkshelf - berkshelf integration for vagrant
- vagrant-toplevel-cookbooks - support for one top-level cookbook per vagrant VM
- vagrant-proxyconf - for configuring a proxy inside the VMs
- vagrant-winrm - super useful when setting up Windows VMs
- ...use
vagrant install <plugin>
to install more
- knife plugins (just as an example):
- knife-audit - keeps track of which cookbooks are used by which node
- knife-server - sets up and backs up a chef server
- ...use
chef gem install <plugin>
to install more
Supporting Tools
Useful additions for a better cooking experience:
- ConEmu - a better Windows console with colours, tabs, etc...
- Atom - a hackable text editor for the 21st Century
- PortableGit - git client for Windows (preconfigured with kdiff3 as diff/merge tool)
- putty - the SSH client for Windows
- clink - command completion and Bash-like line editing for Windows
- cwRsync which includes
ssh.exe
andrsync.exe
to make rsync-based Vagrant synced folders work on Windows
Environmental Changes
The following changes are applied to your environment by running W:\set-env.bat
:
- Constraining as much as possible to the
W:\
drive: %HOME%
points toW:\home
%VAGRANT_HOME%
points toW:\home\.vagrant.d
%CHEFDK_HOME%
points toW:\home\.chefdk
%PATH%
is preprended with the bin dirs of the tools inW:\tools\
- exception:
%VBOX_USER_HOME%
points to%USERPROFILE%
, i.e. VirtualBox VMs are still stored under%USERPROFILE%
- Fixing annoyances:
set TERM=cygwin
to fix vagrant ssh issuesset CYGWIN=nodosfilewarning
to mute vagrant ssh warningsset ANSICON=true
to get coloured output with Vagrant on Windowsset SSL_CERT_FILE=W:\home\cacert.pem
pointing to recent CA certs avoiding Ruby SSL errors
Aliases
Registered doskey aliases:
- run
be <command>
forbundle exec <command>
- run
vi <file_or_dir>
foratom <file_or_dir>
- run
b2d <args>
forboot2docker <args>
Examples
These repositories are used for acceptance-testing the common usage scenarios:
- A sample-toplevel-cookbook with all kinds cookbook tests: syntax check, style checks, linting, unit and integration tests
- A sample-infrastructure-repo which defines a sample server infrastructure with environments and databages via Vagrant / Chef Solo
Building from Source (Development)
As a prerequisite for building bill's kitchen you need:
- a Windows host
- 7zip installed in
C:\Program Files\7-Zip\7z.exe
- a Ruby environment (if you don't have one, use this Ruby DevPack)
Building Bill's Kitchen
To build the kitchen (make sure you don't have spaces in the path):
$ gem install bundler
$ bundle install
$ rake build
This might take a while (you can go fetch a coffee). It will download the external dependencies, install the tools and prepare everything else we need in the kitchen into the target/build
directory. Finally it runs the spec/integration
examples to ensure everything is properly installed.
Running the Acceptance Tests
To run the more comprehensive spec/acceptance
tests:
$ rake acceptance
This will use various of the tools in combination by running the main usage scenarios, e.g.:
- cloning a sample top-level cookbook and sample infrastructure repository
- running various commands like
bundle install
,vagrant plugin install
,vagrant up
- running different kinds of cookbook tests via
knife cookbook test
,foodcritic
,chefspec
andtest-kitchen
Packaging
Finally, if all the tests pass you can create a portable zip package:
$ rake package
This will and finally package everything in the target/build
directory into target/bills-kitchen-<version>.7z
.
Changing the Mount Drive Letter
By default the Ruby DevPack will be mounted to the W:\
drive. If you need to change it you only have to update the references in these two files:
mount-drive.cmd
unmount-drive.cmd
Acknowledgements & Licensing
Bill's Kitchen bundles lots of awesome Open Source software. The copyright owners of this software are mentioned here. For a full-text version of the licenses mentioned above please have a look in the tools
directory where the respective software is installed.
- Atom - Copyright (c) 2014 GitHub Inc. (MIT license)
- Vagrant - Copyright (c) 2010-2014 Mitchell Hashimoto (MIT license)
- Packer - Copyright (c) 2013-2014 Mitchell Hashimoto (MPL-2.0)
- Terraform - Copyright (c) 2014-2015 HashiCorp (MPL-2.0)
- Consul - Copyright (c) 2014 HashiCorp (MPL-2.0)
- ChefDK - Copyright (c) 2014 Chef Software (Apache 2.0 license)
- ConEmu - Copyright (c) 2006-2008 Zoin [email protected], 2009-2013 Maximus5 [email protected] (BSD 3-Clause license)
- clink - Copyright (c) 2012-2014 Martin Ridgers (MIT license), 1994β2012 Lua.org, PUC-Rio (GPLv3)
- PortableGit - by msysGit team (GPLv2 license)
- DevKit - Copyright (c), 2007-2014 RubyInstaller Team (BSD 3-Clause license)
- kdiff3 - Copyright (c) 2002-2012 Joachim Eibl (GPLv2 license)
- putty - Copyright (c) 1997-2014 Simon Tatham (MIT license)
- cwRsync - October 2014, provided by Itefix - https://www.itefix.net/cwrsync (BSD 2-Clause license)
Bill's Kitchen itself is published under the MIT license. It is not "derivative work" but rather "mere aggregation" of other software and thus does not need to be licensed under GPL itself.