|
|
|
@ -1,22 +1,22 @@
|
|
|
|
|
#!/bin/bash -eux
|
|
|
|
|
#!/bin/bash -ex
|
|
|
|
|
# vi: ts=4 noexpandtab
|
|
|
|
|
#
|
|
|
|
|
# Generate a generic Vagrant Box.
|
|
|
|
|
#
|
|
|
|
|
# Vagrant images are essentially nothing more than OVA's with extra-metadata.
|
|
|
|
|
# Vagrant images are essentially nothing more than OVA's with extra-metadata and
|
|
|
|
|
# some preinstalled packages.
|
|
|
|
|
#
|
|
|
|
|
# We can't use the OVA's for Vagrant since Vagrant uses SSH to modify the instance.
|
|
|
|
|
# This build step creates a cloud-config ISO so that Cloud-Init will configure
|
|
|
|
|
# the initial user, creates meta-data that tells Vagrant how to interact with
|
|
|
|
|
# the cloud-init created users, and finally create the OVA.
|
|
|
|
|
#
|
|
|
|
|
# For this step, we re-use the VMDK's made in 040-vmdk-image.binary
|
|
|
|
|
# For this step, we make a deriviative of binary/boot/disk.ext4 and install some
|
|
|
|
|
# packages in it, convert it to a vmdk, and then assemble the vagrant box.
|
|
|
|
|
|
|
|
|
|
cur_d=${PWD}
|
|
|
|
|
my_d=$(dirname $(readlink -f ${0}))
|
|
|
|
|
|
|
|
|
|
base_vmdk="livecd.ubuntu-cpc.disk1.vmdk"
|
|
|
|
|
|
|
|
|
|
case $ARCH in
|
|
|
|
|
amd64|i386) ;;
|
|
|
|
|
*)
|
|
|
|
@ -24,11 +24,6 @@ case $ARCH in
|
|
|
|
|
exit 0
|
|
|
|
|
esac
|
|
|
|
|
|
|
|
|
|
if [ ! -e ${base_vmdk} ]; then
|
|
|
|
|
echo "Did not find VMDK to produce Vagrant images."
|
|
|
|
|
exit 0
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
. /build/config/functions
|
|
|
|
|
|
|
|
|
|
# Virtualbox is needed for making a small VMDK
|
|
|
|
@ -37,7 +32,27 @@ apt-get -qqy install genisoimage qemu-utils
|
|
|
|
|
# Lets be safe about this
|
|
|
|
|
box_d=$(mktemp -d)
|
|
|
|
|
seed_d=$(mktemp -d)
|
|
|
|
|
trap "rm -rf ${box_d} ${seed_d}" EXIT
|
|
|
|
|
mount_d=$(mktemp -d)
|
|
|
|
|
trap "rm -rf ${box_d} ${seed_d} ${mount_d}" EXIT
|
|
|
|
|
|
|
|
|
|
pkgs=(virtualbox-guest-dkms
|
|
|
|
|
virtualbox-guest-utils
|
|
|
|
|
linux-headers-generic
|
|
|
|
|
nfs-common
|
|
|
|
|
python-apport
|
|
|
|
|
puppet
|
|
|
|
|
chef
|
|
|
|
|
byobu
|
|
|
|
|
juju
|
|
|
|
|
ruby
|
|
|
|
|
libnss-myhostname
|
|
|
|
|
)
|
|
|
|
|
# Package list from: http://bazaar.launchpad.net/~ubuntu-on-ec2/vmbuilder/jenkins_kvm/view/head:/templates/img-vagrant.tmpl#L249
|
|
|
|
|
|
|
|
|
|
create_derivative "disk" "vagrant" #sets ${derivative_img}
|
|
|
|
|
mount_disk_image ${derivative_img} ${mount_d}
|
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot ${mount_d} apt-get install --no-install-recommends -y ${pkgs[@]}
|
|
|
|
|
umount_disk_image ${mount_d}
|
|
|
|
|
|
|
|
|
|
# Used to identify bits
|
|
|
|
|
suite=$(chroot chroot lsb_release -c -s)
|
|
|
|
@ -47,7 +62,8 @@ distro=$(chroot chroot lsb_release --id --short | tr [:upper:] [:lower:])
|
|
|
|
|
# Get the VMDK in place
|
|
|
|
|
prefix="${distro}-${suite}-${version}-cloudimg"
|
|
|
|
|
vmdk_f="${box_d}/${prefix}.vmdk"
|
|
|
|
|
cp ${base_vmdk} ${vmdk_f}
|
|
|
|
|
create_vmdk ${derivative_img} ${vmdk_f}
|
|
|
|
|
rm -f ${derivative_img}
|
|
|
|
|
|
|
|
|
|
# Vagrant needs a base user. We either inject the well-known SSH key
|
|
|
|
|
# or use password authentication. Both are ugly. So we'll use a password
|
|
|
|
@ -111,15 +127,11 @@ Vagrant.configure("2") do |config|
|
|
|
|
|
config.vm.base_mac = "${macaddr}"
|
|
|
|
|
config.ssh.username = "ubuntu"
|
|
|
|
|
config.ssh.password = "${ubuntu_user_pass}"
|
|
|
|
|
config.vm.synced_folder '.', '/vagrant', disabled: true
|
|
|
|
|
|
|
|
|
|
config.vm.provider "virtualbox" do |vb|
|
|
|
|
|
vb.name = "${prefix}"
|
|
|
|
|
vb.customize [ "modifyvm", :id, "--uart1", "0x3F8", "4" ]
|
|
|
|
|
vb.customize [ "modifyvm", :id, "--uartmode1", "file", File.join(Dir.pwd, "%s-console.log" % vb.name) ]
|
|
|
|
|
vb.customize [ "modifyvm", :id, "--uartmode1", "file", File.join(Dir.pwd, "${prefix}-console.log") ]
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|