--- /dev/null
+#!/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