The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / bin / prepare-grub
diff --git a/cirros-testvm/src-cirros/bin/prepare-grub b/cirros-testvm/src-cirros/bin/prepare-grub
new file mode 100755 (executable)
index 0000000..bec0f3a
--- /dev/null
@@ -0,0 +1,52 @@
+#!/bin/bash
+# vi: ts=4 noexpandtab
+
+# these urls are for lucid release version of grub
+i386_url="https://launchpad.net/ubuntu/+archive/primary/+files/grub_0.97-29ubuntu60_i386.deb"
+x86_64_url="https://launchpad.net/ubuntu/+archive/primary/+files/grub_0.97-29ubuntu60_amd64.deb"
+TEMP_D=""
+
+Usage() {
+       cat <<EOF
+Usage: ${0##*/} out_d
+       prepare out_d for grub
+       creates 'bootgrub.tar' and 'grub' binary
+EOF
+}
+cleanup() {
+       [ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
+}
+error() { echo "$@" 1>&2; }
+fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
+
+[ "$1" = "-h" -o "$1" = "--help" ] && { Usage; exit 0; }
+[ $# -eq 1 ] || { Usage 1>&2; error "must give out_d"; exit 1; }
+out_d_in=$1
+
+mkdir -p "$out_d_in" || fail "failed to make $out_d"
+out_d=$(cd "$out_d_in" && pwd)
+mkdir -p "$out_d/dl"
+
+case "$(uname -m)" in
+       x86_64) url="${x86_64_url}";;
+       i?86) url="${i386_url}";;
+esac
+
+TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/.${0##*/}.XXXXXX") ||
+       fail "failed to make tempd"
+trap cleanup EXIT
+
+deb="${out_d}/dl/${url##*/}"
+if [ ! -e "${deb}" ]; then
+       wget "${url}" -O "${TEMP_D}/deb" &&
+               mv "${TEMP_D}/deb" "$deb" || fail "failed download of ${url}"
+fi
+
+cd "${TEMP_D}"
+dpkg -x "$deb" . &&
+       cp usr/sbin/grub "$out_d/grub" &&
+       mkdir -p boot/grub &&
+       cp usr/lib/grub/*/{stage1,stage2,e2fs_stage1_5} boot/grub &&
+       tar cf "${out_d}/bootgrub.tar" boot/ ||
+       fail "failed to create $out_d"
+exit 0