#!/bin/sh # # cloud-publish-tarball - wrapper for publishing cloud tarballs # # Copyright (C) 2010 Canonical Ltd. # # Authors: Scott Moser # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . EC2PRE=${EC2PRE:-euca-} TMPD="" VERBOSITY=1 error() { echo "$@" 1>&2; } debug() { [ ${VERBOSITY} -ge $1 ] || return 0; shift error "$@" } log() { debug "$1" "$(date): ====== $2 ======" ; } fail() { [ $# -eq 0 ] || error "$@"; exit 1; } cleanup() { [ -n "${TMPD}" -a -d "${TMPD}" ] || return 0; debug 2 "cleaning up ${TMPD}" rm -Rf "${TMPD}"; } bad_Usage() { Usage 1>&2; [ $# -eq 0 ] || error "$@"; exit 1; } Usage() { cat </dev/null || fail "Unable to run ${EC2PRE}-describe-images. Is environment for ${EC2PRE} set up?" utmp=${TEMPDIR:-${TMPDIR:-/tmp}} TMPD=$(mktemp -d "${utmp}/${0##*/}.XXXXXX") || fail "failed make temp" trap cleanup EXIT save_dir="${TMPD}" [ $save_dl -eq 1 ] && save_dir=$PWD dl_input_image "$tarball" "$save_dir" && tarball="$_RET" || fail "failed to download image $image to $save_dir" [ -f "${tarball}" ] && tbf=$(readlink -f "${tarball}") || fail "bad tarball: ${tarball}"; start=$PWD cd "${TMPD}" log 1 "extracting image" tar -S -xvzf "${tbf}" >list.out || fail "failed extract ${tarball}"; while read x; do [ -f "${x}" ] || continue case "$x" in *vmlinuz*) [ -z "${kernel}" -a -z "${eki}" ] && kernel=${x};; *initrd*) [ -z "${ramdisk}" -a -z "${eri}" ] && ramdisk=${x};; *.img) image=${x};; *-loader) [ -z "${loader}" ] && loader=${x};; esac done < list.out [ -z "${image}" ] && fail "can't find image"; [ -z "${loader}" -a ${use_loader} -eq 1 ] && fail "--use-loader specified, but no loader found in tarball" # if loader was found, and no kernel given (or found) # then set kernel to loader if [ -n "${loader}" ] && { [ ${use_loader} -eq 1 ] || [ -z "${kernel}" -a -z "${eki}" ]; } ; then debug 1 "using loader ${loader##*/} as kernel" kernel=${loader} fi [ -n "${kernel}" -o -n "${eki}" ] || bad_Usage "can't find kernel. specify '--kernel none' to register none"; [ -n "${ramdisk}" -o -n "${eri}" ] || { debug 1 "Warning: no ramdisk found, assuming '--ramdisk none'" eri="none"; } debug 1 "kernel : ${eki:-${kernel}}" debug 1 "ramdisk: ${eri:-${ramdisk}}" debug 1 "image : ${image##*/}" if [ -n "${resize}" ]; then log 1 "resizing ${image##*/} to ${resize}" out=$(resize-part-image "${image}" "${resize}" 2>&1) || { error "${out}"; fail "failed to resize image file to ${resize}"; } fi if [ -n "${kernel}" ]; then log 1 "bundle/upload kernel" upload_register --type kernel \ ${rename_kernel:+"--rename=${rename_kernel}"} \ "${iarch}" "${kernel}" "${bucket}" || fail "failed to upload kernel" eki=${_RET} fi if [ -n "${ramdisk}" ]; then log 1 "bundle/upload ramdisk" upload_register --type ramdisk \ ${rename_ramdisk:+"--rename=${rename_ramdisk}"} \ "${iarch}" "${ramdisk}" "${bucket}" || fail "failed ramdisk bundle/upload" eri=${_RET} fi log 1 "bundle/upload image" upload_register --type image \ ${rename_image:+"--rename=${rename_image}"} \ ${hook_img:+"--hook-img=${hook_img}"} \ "${iarch}" "${image}" "${bucket}" \ --kernel "${eki}" --ramdisk "${eri}" || fail "failed bundle/upload/register of image" emi=${_RET} log 1 "done" printf 'emi="%s"; eri="%s"; eki="%s";\n' "${emi}" "${eri}" "${eki}" # vi: ts=4 noexpandtab