Add support for cloud-based VM images.

This commit is contained in:
parazyd 2018-10-08 12:36:15 +02:00
parent c922031a0c
commit 589d62ca0e
No known key found for this signature in database
GPG Key ID: F0CB28FCF78637DE
2 changed files with 40 additions and 0 deletions

View File

@ -81,6 +81,7 @@ build_vagrant_dist() {
vm_umount_${imageformat} || { zerr; wrapup }
vm_vbox_setup || { zerr; wrapup }
vm_vagrant_package || { zerr; wrapup }
vm_init_cloud || { zerr; wrapup }
vm_pack_dist || { zerr; wrapup }
}

View File

@ -169,6 +169,39 @@ EOF
popd
}
vm_init_cloud() {
fn vm_init_cloud
req=(workdir strapdir imageformat loopdevice)
ckreq || return 1
[ -n "$makecloud" ] || return
[ "$imageformat" = qcow2 ] || {
die "imageformat is not qcow2"
zerr
}
notice "Creating a cloud-based image"
pushd "$workdir"
cp -v "base.qcow2" "base-cloud.qcow2"
notice "Connecting qemu-nbd and mounting"
sudo mkdir -p "$strapdir"
sudo qemu-nbd --connect=${loopdevice} base-cloud.qcow2 || zerr
sudo mount ${loopdevice}p1 $strapdir || zerr
notice "Installing cloud-init"
cat <<EOF | sudo tee ${strapdir}/initcloud >/dev/null
#!/bin/sh
apt-get update
apt-get --yes --force-yes install cloud-init
apt-get clean
EOF
chroot-script -d initcloud || zerr
vm_umount_${imageformat} || zerr
popd
}
vm_pack_dist() {
fn vm_pack_dist
req=(workdir imageformat)
@ -180,6 +213,9 @@ vm_pack_dist() {
mv $workdir/base.${imageformat} $R/dist/${vm_name}.${imageformat}
cp $workdir/base.vdi $R/dist/${vm_name}.vdi
[ -n "$makecloud" ] && \
mv base-cloud.${imageformat} $R/dist/${vm_name}-cloud.${imageformat}
act "calculating sha256 sums..."
silly
sha256sum $R/dist/${vm_name}.box > \
@ -188,6 +224,9 @@ vm_pack_dist() {
$R/dist/${vm_name}.${imageformat}.sha
sha256sum $R/dist/${vm_name}.vdi > \
$R/dist/${vm_name}.vdi.sha
[ -n "$makecloud" ] && \
sha256sum $R/dist/${vm_name}-cloud.${imageformat} > \
$R/dist/${vm_name}-cloud.${imageformat}.sha
notice "cleaning up virtualbox leftovers"
pushd "$workdir"