livecd-rootfs/live-build/ubuntu-cpc/hooks/041-vmdk-ova-image.binary
Robert C Jennings 742985bb4d Clean/refactor to add raspi2, plus ubuntu-cpc fixes
[ Steve Langasek ]
  * Add hooks to ubuntu-cpc to divert /bin/sync in the chroot and undivert it
    at the end.  This is a general-purpose change that should be applied to
    all flavors and archs, but at the moment it's only needed on armhf+raspi2
    to work around the raspberrypi2-firmware postinst calling sync, which is
    actually warranted in the normal case.
  * If a subarch is specified for a cloud image build, don't build rootfs
    artifacts; these should come from the 'generic' build.
  * Fix architecture handling in hooks.  We know we're always being invoked
    from a launchpad-buildd-like setup, which passes ARCH and SUBARCH in the
    environment, because auto/config and auto/build both rely on this.  So
    don't scatter dpkg --print-architecture calls throughout, especially
    when many of these are not cross-build-aware.
  * Refactor ubuntu-cpc hooks to allow us to handle images where the root
    partition should not be partition 1.

  [ Ben Howard ]
  * ubuntu-cpc: fix hooks/032-disk-image.binary call to
    create_empty_partition, which requires five args due to "-u"
  * ubuntu-cpc: in hooks/030-root-tarball.binary create /lib/modules to fix
    (LP: 1543204).

  [ Steve Langasek ]
  * Refactor ubuntu-cpc hooks to always produce a 'plain' rootfs via
    live-build and reuse this for the tarball, instead of lb_binary_rootfs
    creating some artifact that we ignore / throw away.
  * Initial support for raspi2 subarch.
  * Import live-build/ubuntu-cpc/hooks/raspi2/mkknlimg from
    https://github.com/raspberrypi/linux/blob/rpi-4.1.y/scripts/mkknlimg
    and use it to install a bootable uboot.bin.
2017-05-25 20:35:26 -05:00

90 lines
2.5 KiB
Bash

#!/bin/bash -eux
# vi: ts=4 expandtab
#
# Generate OVA images
#
# OVA images are, by defintiion a tarball consisting of a disk image, OVF file
# and checksums. This step produces an OVA that is suitable for use with
# Cloud's that support the OVF specification.
#
# For this step, we re-use the VMDK's made in 040-vmdk-image.binary
case $ARCH in
amd64|i386) ;;
*) echo "OVA images are not supported for $ARCH yet.";
exit 0;;
esac
cur_d=${PWD}
my_d=$(dirname $(readlink -f ${0}))
base_vmdk="livecd.ubuntu-cpc.disk1.vmdk"
if [ "$ARCH" = "amd64" ]; then
base_vmdk="livecd.ubuntu-cpc.uefi.vmdk"
fi
if [ ! -e ${base_vmdk} ]; then
find . | grep vmdk
exit 0
fi
# Lets be safe about this
scratch_d=$(mktemp -d)
trap "rm -rf ${scratch_d}" EXIT
# Used to identify bits
suite=$(chroot chroot lsb_release -c -s)
version=$(chroot chroot lsb_release --release --short)
distro=$(chroot chroot lsb_release --id --short | tr [:upper:] [:lower:])
# Put our vmdk in place for OVA conversion
prefix="${distro}-${suite}-${version}-cloudimg"
vmdk_f="${scratch_d}/${prefix}.vmdk"
cp ${base_vmdk} ${vmdk_f}
# Get information about the VMDK
vmdk_size=$(du -b "${vmdk_f}" | cut -f1)
vmdk_capacity=$(qemu-img info "${vmdk_f}" | awk '-F[\( ]' '$1 ~ /virtual/ && $NF ~ /bytes.*/ {print$(NF-1)}')
# Populate the OVF template
ovf="${scratch_d}/${prefix}.ovf"
cp ${my_d}/ovf/ubuntu-ova-v1-vmdk.tmpl ${ovf}
serial_stamp=$(date +%Y%m%d)
sed -i "${ovf}" \
-e "s/@@NAME@@/${prefix}-${serial_stamp}/g" \
-e "s/@@FILENAME@@/${vmdk_f##*/}/g" \
-e "s/@@VMDK_FILE_SIZE@@/${vmdk_size}/g" \
-e "s/@@VMDK_CAPACITY@@/${vmdk_capacity}/g" \
-e "s/@@NUM_CPUS@@/2/g" \
-e "s/@@VERSION@@/${version}/g" \
-e "s/@@DATE@@/${serial_stamp}/g" \
-e "s/@@MEM_SIZE@@/1024/g"
# Get the checksums
vmdk_sha256=$(sha256sum ${vmdk_f} | cut -d' ' -f1)
ovf_sha256=$(sha256sum ${ovf} | cut -d' ' -f1)
# Generate the manifest
manifest="${scratch_d}/${prefix}.mf"
cat > "${manifest}" <<EOF
SHA256(${vmdk_f##*/})= ${vmdk_sha256}
SHA256(${ovf##*/}.ovf)= ${ovf_sha256}
EOF
# Now create the OVA
echo "Creating OVA with the following attributes:"
cat <<EOM
OVA information:
Name: ${prefix}
Size: ${vmdk_size}
Capacity: ${vmdk_capacity}
VMDK Name: ${vmdk_f##*/}
VMDK SHA256: ${vmdk_sha256}
OVF SHA256: ${ovf_sha256}
EOM
tar -C ${scratch_d} \
-cf ${cur_d}/livecd.ubuntu-cpc.ova \
${prefix}.ovf \
${prefix}.mf \
${vmdk_f##*/}