mirror of
				https://git.launchpad.net/livecd-rootfs
				synced 2025-10-31 08:54:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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
 | |
| 
 | |
| 
 | |
| # Switch on $ARCH to determine which ID and description to use in the produced
 | |
| # OVF. We have fancy Ubuntu-specific IDs in the OVF specification, we might as
 | |
| # well use them.
 | |
| case $ARCH in
 | |
|         amd64)
 | |
|             ovf_id=94
 | |
|             ovf_os_type="ubuntu64Guest"
 | |
|             ovf_desc_bits=64 ;;
 | |
|         i386)
 | |
|             ovf_id=93
 | |
|             ovf_os_type="ubuntu32Guest"
 | |
|             ovf_desc_bits=32 ;;
 | |
|         *)
 | |
|             echo "OVA images are not supported for $ARCH yet.";
 | |
|             exit 0;;
 | |
| esac
 | |
| 
 | |
| case ${IMAGE_TARGETS:-} in
 | |
| 	""|*vmdk*)
 | |
| 		;;
 | |
| 	*)
 | |
| 		echo "Skipping OVA image build"
 | |
| 		exit 0
 | |
| 		;;
 | |
| esac
 | |
| 
 | |
| cur_d=${PWD}
 | |
| my_d=$(dirname $(readlink -f ${0}))
 | |
| 
 | |
| base_vmdk="livecd.ubuntu-cpc.vmdk"
 | |
| if [ "$ARCH" = "amd64" ]; then
 | |
|     base_vmdk="livecd.ubuntu-cpc.vmdk"
 | |
| fi
 | |
| 
 | |
| if [ ! -e ${base_vmdk} ]; then
 | |
|     find . | grep vmdk
 | |
|     exit 1
 | |
| 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" \
 | |
|     -e "s/@@OVF_ID@@/${ovf_id}/g" \
 | |
|     -e "s/@@OVF_OS_TYPE@@/${ovf_os_type}/g" \
 | |
|     -e "s/@@OVF_DESC_BITS@@/${ovf_desc_bits}/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_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##*/}
 |