What is warden?
"The project's primary goal is to provide a simple API for managing isolated environments. These isolated environments -- or containers -- can be limited in terms of CPU usage, memory usage, disk usage, and network access. As of writing, the only supported OS is Linux."
read more here: https://github.com/cloudfoundry/warden/tree/master/warden
Warden is a key component in the Cloud Foundry ecosystem. When you push a new app to Cloud Foundry a new container will be created.
So, lets go to the point, the idea is to install warden in a debian wheezy system, I added debian support to warden in my fork in the Altoro's repo: https://github.com/Altoros/warden
In order make a fresh installation we are going to use vagrant with virtualbox provider, lets start downloading the vagrant box from http://www.vagrantbox.es/.
axel -n 10 http://downloads.shadoware.org/wheezy64.box
Then add the new box to vagrant:
vagrant box add debian-wheezy64 wheezy64.box
Then list all the available boxes to see if it was added ok:
vagrant box list
and you should see something like that:
debian-wheezy64 (virtualbox) precise64 (virtualbox)
Then lets create a new folder and create our vagrant VM using the box that we just already added:
mkdir testing-warden-on-debian cd testing-warden-on-debian vagrant init debian-wheezy64
Now we are ready to start installing warden in the VM:
vagrant ssh sudo apt-get install -y build-essential debootstrap quota
Edit fstab and add this line:
sudo vi /etc/fstab cgroup /sys/fs/cgroup cgroup defaults 0 0
Now clone the warden repo and checkout the add-debian-rootfs branch
git@github.com:Altoros/warden.git cd warden git checkout add-debian-rootfs
add warden as shared folder in Vagrant file
edit Vagrant file and add this line:
config.vm.synced_folder "warden", "/warden"
then login into the vm with ssh and install all required gems:
vagrant ssh
cd /warden sudo gem install bundler sudo bundle
edit config/linux.yml and change the container_rootfs_path, if you don't change it the setup will be lost after you reboot the vm because it is pointed to /tmp by default. I've created a new dir in /tmp-warden and pointed the root_fs to it.
After that you can run the setup
sudo bundle exec rake setup[config/linux.yml]
and when it finishes you will be able to start the warden server:
sudo bundle exec rake warden:start
and then run the client to be able to manage containers:
bundle exec bin/warden
Lets run some basic warden commands:
Create 2 new containers:
bundle exec bin/wardenwarden> create handle : 171hpgcl82u warden> create handle : 171hpgcl82v warden>
List the already created containers:
warden> list handles[0] : 171hpgcl82u handles[1] : 171hpgcl82v warden>
You can see the directories of the containers, replace [tmp-warden] with the folder that your filled in the config/linux.yml:
ls -l /[tmp-warden]/warden/containers/drwxr-xr-x 9 root root 4096 Jul 15 13:55 171hpgcl82u drwxr-xr-x 9 root root 4096 Jul 15 13:58 171hpgcl82v drwxr-xr-x 2 root root 4096 Jul 15 12:18 tmp
If you take a look to the logs while you create a container, you can figure out that this is the flow more or less:
1. method: "set_deferred_success"
/home/gramos/src/altoros/warden/warden/lib/warden/container/spawn.rb
2. Create the container
/home/gramos/src/altoros/warden/warden/root/linux/create.sh /[tmp-warden]/warden/containers/171hpgcl831
3. method:"do_create"
/home/gramos/src/altoros/warden/warden/lib/warden/container/linux.rb
4. Start the container
/[tmp-warden]/containers/171hpgcl831/start.sh
5. method: "write_snapshot"
/home/gramos/src/altoros/warden/warden/lib/warden/container/base.rb
6. method: "dispatch"
/home/gramos/src/altoros/warden/warden/lib/warden/container/base.rb
And thats all, if you have any comments feel free to post them here!