~ubuntu-on-ec2/ubuntu-on-ec2/cloud-utils

« back to all changes in this revision

Viewing changes to uec-publish-tarball

  • Committer: Bazaar Package Importer
  • Author(s): Scott Moser
  • Date: 2010-02-05 18:37:57 UTC
  • Revision ID: james.westby@ubuntu.com-20100205183757-2w2dspl8v0a8irus
Tags: 0.1ubuntu1
Initial release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# vi: ts=4 noexpandtab
 
3
 
 
4
TMPD=""
 
5
error() { echo "$@" 1>&2; }
 
6
log() { error "$(date): ====== $1 ======" ; }
 
7
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
 
8
cleanup() {
 
9
        [ -n "${TMPD}" -a -d "${TMPD}" ] || return 0;
 
10
        echo "cleaning up ${TMPD}"
 
11
        rm -Rf "${TMPD}";
 
12
}
 
13
bad_Usage() { Usage 1>&2; [ $# -eq 0 ] || error "$@"; exit 1; }
 
14
Usage() {
 
15
        cat <<EOF
 
16
Usage: ${0##*/} [ options ] tarfile bucket [arch]
 
17
 
 
18
   register a UEC tarball (ie, per http://uec-images.ubuntu.com)
 
19
   if arch is not provided, a name-based attempt is made to guess
 
20
 
 
21
   options:
 
22
      -k | --kernel  k        use previously registered kernel with id 'k'
 
23
                              specify 'none' for no kernel
 
24
      -K | --kernel-file f    bundle, upload, use file 'f' as kernel
 
25
      -r | --ramdisk r        use previously registered ramdisk with id 'r'
 
26
                              specify 'none' for no ramdisk
 
27
      -R | --ramdisk-file f   bundle, upload, use file 'f' as ramdisk
 
28
 
 
29
   Example:
 
30
   - ${0##*/} lucid-uec-i386.tar.gz my-lucid-bucket i386
 
31
EOF
 
32
}
 
33
 
 
34
upload_register() {
 
35
        local out=""
 
36
        out=$(uec-publish-image "${@}") || return
 
37
        set -- ${out}
 
38
        _RET=${2}
 
39
}
 
40
 
 
41
 
 
42
short_opts="hk:K:r:R:"
 
43
long_opts="help,kernel:,kernel-file:,ramdisk:,ramdisk-file:"
 
44
getopt_out=$(getopt --name "${0##*/}" --shell sh \
 
45
    --options "${short_opts}" --long "${long_opts}" -- "$@") &&
 
46
    eval set -- "${getopt_out}" ||
 
47
    bad_Usage
 
48
 
 
49
ramdisk=""
 
50
kernel=""
 
51
eki=""
 
52
eri=""
 
53
image=""
 
54
emi=""
 
55
 
 
56
while [ $# -ne 0 ]; do
 
57
        cur=${1}; next=${2};
 
58
        case "$cur" in
 
59
                --) shift; break;;
 
60
                -h|--help) Usage; exit 0;;
 
61
                -k|--kernel) eki=${next}; shift;;
 
62
                -K|--kernel-file)
 
63
                        [ -f "${next}" ] && kernel=$(readlink -f "${next}") ||
 
64
                                fail "failed to get path to ${next}"
 
65
                        shift;;
 
66
                -r|--ramdisk) eri=${next}; shift;;
 
67
                -R|--ramdisk-file)
 
68
                        [ -f "${next}" ] && ramdisk=$(readlink -f "${next}") ||
 
69
                                fail "failed to get path to ${next}"
 
70
                        shift;;
 
71
        esac
 
72
        shift;
 
73
done
 
74
 
 
75
tarball=${1}
 
76
bucket=${2}
 
77
arch=${3}
 
78
 
 
79
[ $# -eq 3 -o $# -eq 2 ] || bad_Usage
 
80
 
 
81
if [ -z "${arch}" ]; then
 
82
        case "${tarball}" in
 
83
                *i386*) arch=i386;;
 
84
                *amd64*|*x86_64*) arch=amd64;;
 
85
                *) fail "unable to guess arch by tarball name. give 3rd arg";;
 
86
        esac
 
87
fi
 
88
 
 
89
[ $arch = "amd64" ] && iarch=x86_64 || iarch=i386
 
90
 
 
91
[ -f "${tarball}" ] && tbf=$(readlink -f "${tarball}") ||
 
92
        fail "bad tarball: ${tarball}";
 
93
 
 
94
TMPD=$(mktemp -d ${TEMPDIR:-/tmp}/${0##*/}.XXXXXX) || fail "failed make temp"
 
95
trap cleanup EXIT
 
96
 
 
97
start=$PWD
 
98
 
 
99
cd "${TMPD}"
 
100
 
 
101
log "extracting image"
 
102
tar -S -xzf "${tbf}" || fail "failed extract ${tarball}"
 
103
 
 
104
for x in *; do
 
105
        case "$x" in
 
106
                *vmlinuz*)
 
107
                        [ -z "${kernel}" -a -z "${eki}" ] && kernel=${x};;
 
108
                *initrd*)
 
109
                        [ -z "${ramdisk}" -a -z "${eri}" ] && ramdisk=${x};;
 
110
                *.img) image=${x};;
 
111
        esac
 
112
done
 
113
 
 
114
[ -z "${image}" ] && fail "can't find image";
 
115
[ -n "${kernel}" -o -n "${eki}" ] ||
 
116
        bad_Usage "can't find kernel. specify '--kernel none' to register none";
 
117
[ -n "${ramdisk}" -o -n "${eri}" ] || {
 
118
        error "Warning: no ramdisk found, assuming '--ramdisk none'"
 
119
        eri="none";
 
120
}
 
121
 
 
122
error "kernel : ${eki:-${kernel}}"
 
123
error "ramdisk: ${eri:-${ramdisk}}"
 
124
error "image  : ${image##*/}"
 
125
 
 
126
tmp_rd=${TMPD}/tmp-ramdisk
 
127
tmp_kn=${TMPD}/tmp-kernel
 
128
tmp_im=${TMPD}/tmp-image
 
129
 
 
130
mkdir ${tmp_rd} ${tmp_kn} ${tmp_im}
 
131
 
 
132
if [ -n "${kernel}" ]; then
 
133
        log "bundle/upload kernel"
 
134
        upload_register --type kernel "${iarch}" "${kernel}" "${bucket}" ||
 
135
                fail "failed to upload kernel"
 
136
        eki=${_RET}
 
137
fi
 
138
 
 
139
if [ -n "${ramdisk}" ]; then
 
140
        log "bundle/upload ramdisk"
 
141
        upload_register --type ramdisk "${iarch}" "${ramdisk}" "${bucket}" ||
 
142
                fail "failed ramdisk bundle/upload"
 
143
        eri=${_RET}
 
144
fi
 
145
 
 
146
upload_register --type image "${iarch}" "${image}" "${bucket}" \
 
147
        --kernel "${eki}" --ramdisk "${eri}" ||
 
148
                fail "failed bundle/upload/register of image"
 
149
emi=${_RET}
 
150
 
 
151
log "done"
 
152
printf 'emi="%s"; eri="%s"; eki="%s";\n' "${emi}" "${eri}" "${eki}"