bec0f3afa3f72ab883eef8e01db68e56450943a6
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / bin / prepare-grub
1 #!/bin/bash
2 # vi: ts=4 noexpandtab
3
4 # these urls are for lucid release version of grub
5 i386_url="https://launchpad.net/ubuntu/+archive/primary/+files/grub_0.97-29ubuntu60_i386.deb"
6 x86_64_url="https://launchpad.net/ubuntu/+archive/primary/+files/grub_0.97-29ubuntu60_amd64.deb"
7 TEMP_D=""
8
9 Usage() {
10         cat <<EOF
11 Usage: ${0##*/} out_d
12         prepare out_d for grub
13         creates 'bootgrub.tar' and 'grub' binary
14 EOF
15 }
16 cleanup() {
17         [ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
18 }
19 error() { echo "$@" 1>&2; }
20 fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
21
22 [ "$1" = "-h" -o "$1" = "--help" ] && { Usage; exit 0; }
23 [ $# -eq 1 ] || { Usage 1>&2; error "must give out_d"; exit 1; }
24 out_d_in=$1
25
26 mkdir -p "$out_d_in" || fail "failed to make $out_d"
27 out_d=$(cd "$out_d_in" && pwd)
28 mkdir -p "$out_d/dl"
29
30 case "$(uname -m)" in
31         x86_64) url="${x86_64_url}";;
32         i?86) url="${i386_url}";;
33 esac
34
35 TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/.${0##*/}.XXXXXX") ||
36         fail "failed to make tempd"
37 trap cleanup EXIT
38
39 deb="${out_d}/dl/${url##*/}"
40 if [ ! -e "${deb}" ]; then
41         wget "${url}" -O "${TEMP_D}/deb" &&
42                 mv "${TEMP_D}/deb" "$deb" || fail "failed download of ${url}"
43 fi
44
45 cd "${TEMP_D}"
46 dpkg -x "$deb" . &&
47         cp usr/sbin/grub "$out_d/grub" &&
48         mkdir -p boot/grub &&
49         cp usr/lib/grub/*/{stage1,stage2,e2fs_stage1_5} boot/grub &&
50         tar cf "${out_d}/bootgrub.tar" boot/ ||
51         fail "failed to create $out_d"
52 exit 0