+ echo '====== automated-ec2-builds [/tmp/automated-ec2-builds] ======' ====== automated-ec2-builds [/tmp/automated-ec2-builds] ====== + cd /tmp/automated-ec2-builds + bzr info Standalone tree (format: 2a) Location: branch root: . Related branches: parent branch: http://bazaar.launchpad.net/~ubuntu-on-ec2/vmbuilder/automated-ec2-builds/ + bzr version-info revision-id: ben.howard@ubuntu.com-20160105005557-fsgq9c7fdu86a2ep date: 2016-01-04 17:55:57 -0700 build-date: 2016-02-17 14:02:54 +0000 revno: 717 branch-nick: automated-ec2-builds + bzr log -p -r-1 ------------------------------------------------------------ revno: 717 committer: Ben Howard branch nick: master timestamp: Mon 2016-01-04 17:55:57 -0700 message: Revert prior commit, and build Wily using Updates. Per the Launchpad team, we are invocking buildds wrong; we should be using the Updates pocket. diff: === modified file 'build-buildd-image' --- build-buildd-image 2016-01-05 00:19:49 +0000 +++ build-buildd-image 2016-01-05 00:55:57 +0000 @@ -139,6 +139,11 @@ --cred-location /.lp_creds ) + # Only use the PPA for versions before wily + if dist_le "${suite}" vivid; then + cmd+=(--archive ppa:cloud-images-release-managers/cloud-image-tooling) + fi + # Xenial builds are failing due to disk types if dist_ge "${suite}" xenial; then cmd+=(--archive ppa:cloud-images-release-managers/cloud-image-tooling) === modified file 'livefs-build.py' --- livefs-build.py 2015-03-18 10:25:36 +0000 +++ livefs-build.py 2016-01-05 00:55:57 +0000 @@ -58,7 +58,7 @@ lfs = _get_livefs(lp, livefs_name, suite, image_format, project) metadata = {'image_format': image_format, 'project': project} build = lfs.requestBuild( - pocket='Release' if not proposed else 'Proposed', + pocket='Updates' if not proposed else 'Proposed', archive=archive, distro_arch_series='/ubuntu/{}/{}'.format(suite, arch), metadata_override=metadata) + echo '' + echo '====== ec2-publishing-scripts [/tmp/ec2-publishing-scripts] ======' ====== ec2-publishing-scripts [/tmp/ec2-publishing-scripts] ====== + cd /tmp/ec2-publishing-scripts + bzr info Standalone tree (format: unnamed) Location: branch root: . Related branches: parent branch: http://bazaar.launchpad.net/~ubuntu-on-ec2/ubuntu-on-ec2/ec2-publishing-scripts/ + bzr version-info revision-id: daniel.watkins@canonical.com-20160217100632-1ey1x36i63uvoe99 date: 2016-02-17 10:06:32 +0000 build-date: 2016-02-17 14:02:54 +0000 revno: 627 branch-nick: ec2-publishing-scripts + bzr log -p -r-1 ------------------------------------------------------------ revno: 627 committer: Daniel Watkins branch nick: ec2-publishing-scripts timestamp: Wed 2016-02-17 10:06:32 +0000 message: Revert merge causing build failures It is currently blocking publication of images containing critical CVE fixes, so we don't have the luxury of fixing it for now. diff: === modified file 'README' --- README 2016-01-12 20:39:08 +0000 +++ README 2016-02-17 10:06:32 +0000 @@ -3,13 +3,25 @@ git clone http://smoser.brickies.net/git/misc-starter-tools.git A general overview of these tools: +- label2bucketbase: + simply a takes in a 'label' and 'image type' (image or kernel) and + outputs the bucket to put it in according to the naming convention + Its a separate tool to remove duplication of code as it is used by both + publish-build and publish-build-krd - publish-build publishes build output for a given directory. Used by daily builds and for publishing release builds. +- publish-build-krd + called by publish-build, this publishes the kernel and ramdisks for a + given build. It reads the kernel-info.txt file and publishes to + correct buckets with correct name. If kernel or ramdisk already + exist, it exits with success as if it did that work. This is + intentional, to allow multiple nightly builds to use the same kernel + build. This way, publish-build knows nothing about that. - publish-image - This is called by publish-build. It is generally useful as a - "publish-to-ec2" script. It can take input of a kernel, ramdisk, - or image and just does the right thing. + This is called by both publish-build and publish-build-krd. It is + generally useful as a "publish-to-ec2" script. It can take input of a + kernel, ramdisk, or image and just does the right thing. - resize-cloud-image This is used by publish-build, it resizes an filesystem in a partition image === modified file 'ec2-image2ebs' --- ec2-image2ebs 2016-01-12 20:25:15 +0000 +++ ec2-image2ebs 2016-02-17 10:06:32 +0000 @@ -23,7 +23,7 @@ local level=${1} shift; [ "${level}" -gt "${VERBOSITY}" ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } get_volstate() { local vol="$1" tmp="" === modified file 'ids-private.txt' --- ids-private.txt 2016-01-12 20:17:38 +0000 +++ ids-private.txt 2016-02-17 10:06:32 +0000 @@ -1,5 +1,17 @@ # this file lists the ids that will be given access to for "private" builds +0634-9136-4108 : Eric Hammond +9500-4716-3771 : Scott Moser 0997-2010-9477 : Canonical User +5138-0173-3419 : Chuck Short +6928-2536-9385 : John Johansen +9611-0677-1079 : Andreas Hasenack +0140-7642-9749 : Stefan Bader +1277-1625-3753 : James Page 6491-0810-0275 : Ben Howard +0848-7184-7989 : Cloud 10 Account +1898-3582-6477 : Cloud Mirrors +6795-9333-3241 : AWS Marketplace +0891-6244-3385 : Cloud Workloads Team 9610-3542-6095 : Robert Jennnings 9398-7081-6389 : Daniel Watkins +1460-5404-3899 : Thor Nolen (AWS) === modified file 'modify-access' --- modify-access 2016-02-16 15:25:39 +0000 +++ modify-access 2016-02-17 10:06:32 +0000 @@ -9,7 +9,7 @@ local level=${1} shift; [ "${level}" -gt "${VERBOSITY}" ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } cleanup() { [ -z "${TEMP_D}" ] || rm -Rf "${TEMP_D}" === modified file 'promote-daily' --- promote-daily 2016-01-12 20:25:15 +0000 +++ promote-daily 2016-02-17 10:06:32 +0000 @@ -11,7 +11,7 @@ local level=${1} shift; [ "${level}" -gt "${VERBOSITY}" ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } cleanup() { === modified file 'publicize-build' --- publicize-build 2016-01-12 20:25:15 +0000 +++ publicize-build 2016-02-17 10:06:32 +0000 @@ -12,7 +12,7 @@ local level=${1} shift; [ ${level} -gt ${VERBOSE} ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } debug_file() { local level=${1}; shift; === modified file 'publish-build' --- publish-build 2016-01-28 22:18:38 +0000 +++ publish-build 2016-02-17 10:06:32 +0000 @@ -12,7 +12,7 @@ local level=${1} shift; [ "${level}" -gt "${VERBOSITY}" ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } Usage() { @@ -145,18 +145,31 @@ build_d_in=${4} arches=${5:-i386 amd64} -publish_uefi=1 # use uefi images for HVM -use_sriov_hvm=1 # Register with sriov simple +# for now, quick hack +case "${suite}" in + hardy|intrepid|jaunty|karmic) publish_ebs=0;; + *) ebs_size=8; publish_ebs=1;; +esac + +publish_hvm=0 # publish HVM images +publish_uefi=0 # use uefi images for HVM +use_sriov_hvm=0 # Register with sriov simple publish_i386=1 # Publish i386 images case "${suite}" in - precise) - publish_uefi=0 - use_sriov_hvm=0;; - trusty) + hardy|intrepid|jaunty|karmic|maverick) publish_hvm=0;; + lucid) + [ "${bd_name}" = "server" ] && publish_hvm=1 + publish_hvm=0; ## delete or comment out for lucid-server hvm builds ;; + precise|quantal|raring) + publish_hvm=1;; + saucy) + publish_hvm=1; use_sriov_hvm=1;; + trusty|utopic) + publish_hvm=1; publish_uefi=1; use_sriov_hvm=1;; vivid|*) # For Vivid and later, we only publish 64-bit AMIs. - publish_i386=0;; + publish_i386=0; publish_hvm=1; publish_uefi=1; use_sriov_hvm=1;; esac [ "${publish_i386:-0}" -eq 0 ] && arches="${5:-amd64}" @@ -170,6 +183,7 @@ bd_name=${bd_name} label=${label} build_d_in=${build_d_in} +publish_hvm=${publish_hvm} use_sriov_hvm=${use_sriov_hvm} publish_uefi=${publish_uefi} arches=${arches} @@ -293,7 +307,7 @@ case "${xtype}" in ramdisk) initrds="${initrds},${id}";; kernel) kernels="${kernels},${id}";; - *) failp "confused by output of find_kernel_list: %s\n" \ + *) failp "confused by output of publish-build-krd: %s\n" \ "${region} ${id} ${xarch} ${xtype} ${xpath}";; esac @@ -326,8 +340,8 @@ cat "${output}" >> "${all_output}" - # Publish the image as HVM - if [ "${arch}" == "amd64" ]; then + # Publish the image as HVM if we're allowed to + if [ "${publish_hvm}" == "1" -a "${arch}" == "amd64" ]; then # Use $prefix-disk1.img if not using the UEFI images if [ "${publish_uefi}" -eq 1 ]; then img_hvm="${build_d_in}/$prefix-uefi1.img" @@ -357,24 +371,25 @@ fi done -# Publish ebs -output="${TMPD}/publish-ebs.txt" -pubname="${bucket_prefix}/${pathprefix}/%t/ubuntu-${suite}-${flabel}-%a-${bd_name}-${serial}" -urlpath="${pathprefix}/ubuntu-${suite}-${flabel}-%a-${bd_name}-${serial}.tar.gz" +if [ "${publish_ebs}" != "0" ]; then + output="${TMPD}/publish-ebs.txt" + pubname="${bucket_prefix}/${pathprefix}/%t/ubuntu-${suite}-${flabel}-%a-${bd_name}-${serial}" + urlpath="${pathprefix}/ubuntu-${suite}-${flabel}-%a-${bd_name}-${serial}.tar.gz" + hvm_args=( ) + [ "${publish_hvm}" = "1" ] && hvm_args=( --publish-hvm ${sriov_arg} ) -ebs_size=8 -[ "${publish_i386:-0}" -eq 0 ] && export EBS_SKIP_ARCH="i386" -publish-build-ebs "${pthrough[@]}" --output "${output}" \ - --published-info "${all_output}" ${allow_existing} \ - "${ebs_pthrough[@]}" \ - --snapshot-desc "%t/ubuntu-${suite}-%a-${bd_name}-${serial}" \ - --size ${ebs_size} --publish-hvm \ - "${sriov_arg}" \ - "--upload-to=${urlpath}" \ - "${build_d}" "${pubname}" && - cat "${output}" && - cat "${output}" >> "${all_output}" || - fail "publish-build-ebs failed." + [ "${publish_i386:-0}" -eq 0 ] && export EBS_SKIP_ARCH="i386" + publish-build-ebs "${pthrough[@]}" --output "${output}" \ + --published-info "${all_output}" ${allow_existing} \ + "${ebs_pthrough[@]}" \ + --snapshot-desc "%t/ubuntu-${suite}-%a-${bd_name}-${serial}" \ + --size ${ebs_size} "${hvm_args[@]}" \ + "--upload-to=${urlpath}" \ + "${build_d}" "${pubname}" && + cat "${output}" && + cat "${output}" >> "${all_output}" || + fail "publish-build-ebs failed." +fi [ ${add_launch_given} -eq 0 ] && add_launch=( "${add_launch_default[@]}" ) === modified file 'publish-build-ebs' --- publish-build-ebs 2016-01-12 20:25:15 +0000 +++ publish-build-ebs 2016-02-17 10:06:32 +0000 @@ -15,7 +15,7 @@ local level=${1} shift; [ "${level}" -gt "${VERBOSITY}" ] && return - echo "$(date): ${@}" 1>&2 + error "$(date):" "${@}" } VERBOSITY=0 @@ -155,11 +155,13 @@ fi } write_buildinfo() { + set -x local output=${1} reg=${2} iid=${3} arch=${4} etype=${5} name=${6} outp "${output}" \ "%s\t%s\t%s\t%s\t%s\n" "${reg}" "${iid}" "${arch}" "${etype}" "${name}" || fail "failed to write to ${output}" - debug 0 "published ${name} [$arch] to ${reg} as ${iid}" + set +x + debug 1 "published ${name} [$arch] to ${reg} as ${iid}" } get_krd_info() { local arch=${1} region=${2} pubfile=${3} === added file 'publish-build-krd' --- publish-build-krd 1970-01-01 00:00:00 +0000 +++ publish-build-krd 2016-02-17 10:06:32 +0000 @@ -0,0 +1,180 @@ +#!/bin/bash +# vi: ts=4 noexpandtab + +TEMPFILE="" + +error() { echo "$@" 1>&2; } +errorp() { printf "$@" 1>&2; } +fail() { [ $# -eq 0 ] || error "$@"; exit 1; } +failp() { [ $# -eq 0 ] || errorp "$@"; exit 1; } + +Usage() { + cat <&2; [ $# -eq 0 ] || error "$@"; exit 1; } + +cleanup() { + [ -z "${TEMPFILE}" -o ! -e "${TEMPFILE}" ] || rm -f "${TEMPFILE}" +} +# useful for checking bash's PIPESTATUS +# simply counts the number of non-zero values in input +checkstatus() { + local x="" i=0 + for x in "$@"; do + [ "$x" = "0" ] || i=$(($i+1)) + done + return $i +} + +short_opts="hl:no:r:v" +long_opts="add-launch:,dry-run,help,output:,ramdisk-serial:,verbose" +getopt_out=$(getopt --name "${0##*/}" \ + --options "${short_opts}" --long "${long_opts}" -- "$@") && + eval set -- "${getopt_out}" || + bad_Usage + +ramdisk_serial=""; +dry_run=0 +add_launch_default=( --add all ) +add_launch=( ) +add_launch_given=0 +bucket_base=${BUCKET_BASE:-ubuntu} + +while [ $# -ne 0 ]; do + cur=${1}; next=${2}; + case "$cur" in + -h|--help) Usage; exit 0;; + -l|--add-launch) + add_launch_given=1 + add_launch[${#add_launch[@]}]="--add"; + add_launch[${#add_launch[@]}]="${next}"; + + # special arg 'none' means "do not modify" + [ "${next}" = "none" ] && add_launch=( ); + shift;; + -n|--dry-run) + dry_run=1; + pthrough[${#pthrough[@]}]=${cur};; + -v|--verbose) + pthrough[${#pthrough[@]}]=${cur};; + -o|--output) + pthrough[${#pthrough[@]}]=${cur}; + pthrough[${#pthrough[@]}]=${next}; + shift; + ;; + -r|--ramdisk-serial) ramdisk_serial=${next}; shift;; + --) shift; break;; + -*) bad_Usage "confused by ${cur}";; + esac + shift; +done + +[ $# -lt 3 ] && bad_Usage "must provide suite, release-type, kernel-info file" +[ $# -gt 4 ] && bad_Usage " too many args: $*" + +suite=${1} +label=${2} +kinfo=${3} + +if [ -z "${ramdisk_serial}" ]; then + ramdisk_serial=$(date "+%Y%m%d") || + fail "failed to get date for ramdisk serial" +fi + +# collect all info about kernels, and publish them if +# they don't already exist + +[ -f "${kinfo}" ] || fail "${kinfo}: is not a file" +filedir=$(dirname "${kinfo}") + +which pathprefix4label >/dev/null 2>&1 || + fail "unable to find pathprefix4label" + +path_prefix=$(pathprefix4label "${label}" kernel) || + failp "bad release type ${label}. must be one of\n\t%s" \ + "$(pathprefix4label --show-labels)" + +TEMPFILE=$(mktemp ${TMPDIR:-/tmp}/${0##*/}.XXXXXX) || + fail "failed to make temp file" +publish_out=${TEMPFILE} +trap cleanup EXIT + +# published-filename original-filename arch package version +while read fname oname arch package version; do + case "${fname}" in + *-ec2|*-xen) : ;; + *) continue;; + esac + + fpath="" + if [ -f "${filedir}/${fname}" ]; then + fpath="${filedir}/${fname}" + fi + # if the file under its expected name doesn't exist + # then it might have been renamed to the same format as kinfo + if [ -z "${fpath}" ]; then + kbase=${kinfo%-kernel-info.txt} + kbase=${kbase##*/} + # fname would look like -vmlinuz- + # the last 2 tokens are the "ksuff" + # given lucid-server-cloudimg-amd64-vmlinuz-virtual, ksuff + # should end up with -vmlinuz-virtual. This should also + # work for the suffix -initrd-virtual. + tmp=${fname%-*}; tmp=${tmp%-*}; + ksuff=${fname#${tmp}-} + [ -f "${filedir}/${kbase}-${ksuff}" ] && + fpath="${filedir}/${kbase}-${ksuff}" + fi + [ -n "${fpath}" ] || + fail "did not find ${fname} or ${kbase}-${ksuff} in ${filedir}" + + ftype=kernel; + [ "${fname#*initrd}" = "${fname}" ] || ftype="ramdisk" + + ec2_name_b="ubuntu-${suite}-${arch}-${package}-v-${version}-${ftype}"; + if [ "${ftype}" = "kernel" ]; then + ec2_name=${ec2_name_b}.img + else + ec2_name=${ec2_name_b}.${ramdisk_serial}.img + fi + + [ -n "${TEST_PUBLISH_KRD_FILETYPE}" ] && ftype=${TEST_PUBLISH_KRD_FILETYPE} + + publish-image \ + --bucket-prefix "${bucket_base}" --type "${ftype}" \ + --path-prefix "${path_prefix}" \ + --allow-existing --rename "${ec2_name}" \ + "${pthrough[@]}" \ + "${arch}" "${fpath}" | tee -a "${publish_out}" + + # we use a pipe above rather than redirect + # to hopefully be less buffered + checkstatus "${PIPESTATUS[@]}" || fail "publish of ${fpath} failed" +done < "${kinfo}" + +[ ${add_launch_given} -eq 0 ] && add_launch=( "${add_launch_default[@]}" ) + +if [ "${#add_launch[@]}" -ne 0 ]; then + if [ ${dry_run} -eq 0 ]; then + modify-access "${add_launch[@]}" "${publish_out}" 1>&2 || + fail "failed to grant access" + else + error "modify-access ${add_launch[*]} publish_output" + fi +fi + +exit 0 === modified file 'publish-hvm-image' --- publish-hvm-image 2016-01-12 20:25:15 +0000 +++ publish-hvm-image 2016-02-17 10:06:32 +0000 @@ -31,7 +31,7 @@ --dry-run : only report what would be done --name name : register with '--name' to ec2-register --path-prefix
    : path inside bucket to put image in
-         --resize        size     : resize the image with 'qemu-img resize'
+         --resize        size     : resize the image with 'resize-cloud-image'
                                     before publishing.
          --regions          : list of regions to publish to
                                     default: all (per describe-regions)
@@ -68,7 +68,7 @@
 	local level=${1}
 	shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "$(date):" "${@}"
 }
 run() {
 	local dir="${1}" pre=${2} msg=${3};
@@ -378,6 +378,7 @@
         fail "failed to copy image for manipulation"
 
 	if [ -n "$resize" ]; then
+		# resize the image to 10G
 		debug 1 "resizing image to $resize"
 		qemu-img resize "${pub_image}" "$resize" 1>&2 ||
 			fail "failed to resize ${image}"

=== modified file 'publish-image'
--- publish-image	2016-01-12 20:25:15 +0000
+++ publish-image	2016-02-17 10:06:32 +0000
@@ -73,7 +73,7 @@
 	local level=${1}
 	shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "$(date):" "${@}"
 }
 run() {
 	local dir="${1}" pre=${2} msg=${3};

=== modified file 'reap-by-tag'
--- reap-by-tag	2016-01-12 20:25:15 +0000
+++ reap-by-tag	2016-02-17 10:06:32 +0000
@@ -54,7 +54,7 @@
 debug() {
 	local level=${1}; shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "${@}"
 }
 
 short_opts="hmrv"

=== modified file 'reap-ec2-instances'
--- reap-ec2-instances	2016-01-12 20:25:15 +0000
+++ reap-ec2-instances	2016-02-17 10:06:32 +0000
@@ -46,7 +46,7 @@
 debug() {
 	local level=${1}; shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "${@}"
 }
 
 short_opts="hmrv"

=== modified file 'remove-build'
--- remove-build	2016-01-12 20:25:15 +0000
+++ remove-build	2016-02-17 10:06:32 +0000
@@ -9,7 +9,7 @@
 	local level=${1}
 	shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "$(date):" "${@}"
 }
 
 Usage() {

=== modified file 'remove-image'
--- remove-image	2016-01-12 20:25:15 +0000
+++ remove-image	2016-02-17 10:06:32 +0000
@@ -11,7 +11,7 @@
 	local level=${1}
 	shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "$(date):" "${@}"
 }
 get_img_entry() {
 	# get all entries correlating to ami from describe-images output in input

=== modified file 'run-instance-and-wait'
--- run-instance-and-wait	2016-01-12 20:25:15 +0000
+++ run-instance-and-wait	2016-02-17 10:06:32 +0000
@@ -33,7 +33,7 @@
 	local level=${1}
 	shift;
 	[ "${level}" -gt "${VERBOSITY}" ] && return
-	echo "$(date): ${@}" 1>&2
+	error "$(date)" "${@}"
 }
 cleanup() {
 	[ -z "${TEMP_D}" ] || rm -Rf "${TEMP_D}"

=== added file 'wip-publish-ebs.sh'
--- wip-publish-ebs.sh	1970-01-01 00:00:00 +0000
+++ wip-publish-ebs.sh	2016-02-17 10:06:32 +0000
@@ -0,0 +1,43 @@
+#!/bin/sh
+fail() { [ $# -eq 0 ] || echo "$@" 1>&2; exit 1; }
+
+# very hacky at the moment
+#  Requires user to run instances in each region, and 
+#  - update inst_list below with region:instance_id
+#  - update serial
+
+inst_list="
+us-west-1:i-af4b46ea
+us-east-1:i-2d825846
+eu-west-1:i-e69f3e91
+"
+
+serial="20100311"
+suite="lucid"
+build_name="server"
+burl="http://cloud-images.ubuntu.com/${suite}/${serial}"
+bucket="ebs/ubuntu-images-testing"
+
+query_info="http://cloud-images.ubuntu.com/query/${suite}/${build_name}/daily.txt"
+wget "${query_info}" -O daily.txt
+
+PATH=~/src/ec2-publishing-scripts:$PATH
+
+for x in ${inst_list}; do
+   region=${x%:*}; iid=${x#*:}
+   for arch in i386 amd64; do
+       url=${burl}/unpacked/${suite}-${build_name}-cloudimg-${arch}.img.tar.gz 
+       name="${bucket}/ubuntu-${suite}-daily-${arch}-${build_name}-${serial}"
+       kern=$(awk '-F\t' '$4 == ser && $6 == arch && $7 == reg { print $9 }' \
+           ser=${serial} arch=${arch} reg=${region} < daily.txt) && 
+           [ -n "${kern}" ] || fail "failed to get kernel"
+       ramd=$(awk '-F\t' '$4 == ser && $6 == arch && $7 == reg { print $10 }' \
+           ser=${serial} arch=${arch} reg=${region} < daily.txt)
+       [ -n "${ramd}" ] && rdargs="--ramdisk=${ramd}" || rdargs=""
+       kargs="--kernel=${kern}"
+       echo "======= ${region} ${iid} ${arch} ${url} ${name} ========"
+       ec2-image2ebs --region "${region}" -vv ${kargs} ${rdargs} \
+           "${iid}" "${arch}" "${url}" "${name}" ||
+           fail "failed ec2-image2ebs ${iid} ${arch} ${url} ${name}"
+   done
+done
+ echo ''

+ echo '====== live-build [/tmp/live-build] ======'
====== live-build [/tmp/live-build] ======
+ cd /tmp/live-build
+ bzr info
Standalone tree (format: 1.9-rich-root)
Location:
  branch root: .

Related branches:
  parent branch: http://bazaar.launchpad.net/~ubuntu-on-ec2/live-build/cloud-images/
+ bzr version-info
revision-id: ben.howard@canonical.com-20150612123735-zf4q8vxmjb7vaq7w
date: 2015-06-12 06:37:35 -0600
build-date: 2016-02-17 14:02:54 +0000
revno: 1884
branch-nick: live-build
+ bzr log -p -r-1
------------------------------------------------------------
revno: 1884
committer: Ben Howard 
branch nick: live-build
timestamp: Fri 2015-06-12 06:37:35 -0600
message:
  Drop kernel from ubuntu-cloud-t-hwe package list; use live build cli to configure
diff:
=== modified file 'package-lists/ubuntu-cloud-t-hwe'
--- package-lists/ubuntu-cloud-t-hwe	2015-06-11 22:55:21 +0000
+++ package-lists/ubuntu-cloud-t-hwe	2015-06-12 12:37:35 +0000
@@ -6,4 +6,4 @@
 standard^ cloud-image^
 
 # Packages
-linux-image-virtual-lts-vivid landscape-client ubuntu-minimal
+landscape-client ubuntu-minimal
+ echo ''

+ echo '====== vmbuilder-0.11 [/tmp/vmbuilder-0.11] ======'
====== vmbuilder-0.11 [/tmp/vmbuilder-0.11] ======
+ cd /tmp/vmbuilder-0.11
+ bzr info
Standalone tree (format: 2a)
Location:
  branch root: .

Related branches:
  parent branch: http://bazaar.launchpad.net/~ubuntu-on-ec2/vmbuilder/0.11a/
+ bzr version-info
revision-id: ben.howard@canonical.com-20120605221454-crv9cc4612f907lh
date: 2012-06-05 16:14:54 -0600
build-date: 2016-02-17 14:02:55 +0000
revno: 398
branch-nick: vmbuilder-0.11
+ bzr log -p -r-1
------------------------------------------------------------
revno: 398
committer: Ben Howard 
branch nick: vmbuilder
timestamp: Tue 2012-06-05 16:14:54 -0600
message:
  Fix for allow vmbuilder to run on 12.04 LTS.
diff:
=== modified file 'VMBuilder/plugins/ubuntu/dapper.py'
--- VMBuilder/plugins/ubuntu/dapper.py	2011-05-18 20:49:25 +0000
+++ VMBuilder/plugins/ubuntu/dapper.py	2012-06-05 22:14:54 +0000
@@ -157,18 +157,15 @@
             self.vm.addpkg += ['openssh-server']
 
     def mount_dev_proc(self):
-        run_cmd('mount', '--bind', '/dev', '%s/dev' % self.destdir)
-        self.vm.add_clean_cmd('umount', '%s/dev' % self.destdir, ignore_fail=True)
-
-        run_cmd('mount', '--bind', '/dev/pts', '%s/dev/pts' % self.destdir)
+        run_cmd('mkdir', '-p', '%s/dev/pts' % self.destdir)
+        run_cmd('mount', '-t', 'devpts',  'devpts-live', '%s/dev/pts' % self.destdir)
         self.vm.add_clean_cmd('umount', '%s/dev/pts' % self.destdir, ignore_fail=True)
 
-        self.run_in_target('mount', '-t', 'proc', 'proc', '/proc')
+        run_cmd('mount', '-t', 'proc', 'proc-live', '%s/proc' % self.destdir)
         self.vm.add_clean_cmd('umount', '%s/proc' % self.destdir, ignore_fail=True)
 
     def unmount_dev_proc(self):
         run_cmd('umount', '%s/dev/pts' % self.destdir)
-        run_cmd('umount', '%s/dev' % self.destdir)
         run_cmd('sh', '-c', 'grep -q "$1" /proc/mounts || exit 0; umount "$1"',
                 'umount_binfmt', "%s/proc/sys/fs/binfmt_misc" % self.destdir)
         run_cmd('umount', '%s/proc' % self.destdir)
+ echo ''