       Licensed to the Apache Software Foundation (ASF) under one
       or more contributor license agreements.  See the NOTICE file
       distributed with this work for additional information
       regarding copyright ownership.  The ASF licenses this file
       to you under the Apache License, Version 2.0 (the
       "License"); you may not use this file except in compliance
       with the License.  You may obtain a copy of the License at

         http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing,
       software distributed under the License is distributed on an
       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
       KIND, either express or implied.  See the License for the
       specific language governing permissions and limitations
       under the License.

To build an Allura vagrant box:

$ mkdir ~/vagrant_allura && cd ~/vagrant_allura

# Get the base box, see http://www.vagrantbox.es/
# 12.04 is LTS, so will be good to stick with for some time
$ vagrant box add ubuntu-1204-server-amd64 http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-vagrant-amd64-disk1.box
$ vagrant init ubuntu-1204-server-amd64

# Get a copy of the provisioning scripts (note, Vagrantfile may change from
# release to release and may need manual updating)
$ cp -R /var/local/allura/vagrant/* .

# At this point you can make whatever changes you want to the provisioning
# scripts.  Currently, the .pp puppet file runs first and sets some stuff up
# and then allura_setup.sh runs and does more.

# Provision the box (this will take a while)
$ vagrant up

# If you get an error, you can run `vagrant ssh` to get in and debug, and then
# `vagrant destroy` to start over

# Once the provisioning succeeds, `vagrant ssh` to the vm and do any testing
# you want to do. You should at least run `./update.sh && ~/start_allura` and
# make sure you can access the app at http://localhost:8080. After testing,
# remain logged into the vm for the next step (compression).

# Compress the VM. This will make your final .box file much smaller. It'll
# take a while. Once it finished, logout of the vm.
$ sudo /vagrant/compress.sh

# Package the Allura box
$ vagrant package --vagrantfile Vagrantfile.pkg

# Test your new box
$ mkdir ~/vagrant_allura_test && cd ~/vagrant_allura_test
$ vagrant box add allura ~/vagrant_allura/package.box
$ vagrant init allura
$ vagrant up
$ vagrant ssh

# Do whatever testing you want...

# If everything checks out, you can rename your package.box and upload it
