diff --git a/srcpkgs/grub/files/kernel.d/grub.post b/srcpkgs/grub/files/kernel.d/grub.post
new file mode 100644
index 00000000000..8fcff2ba4db
--- /dev/null
+++ b/srcpkgs/grub/files/kernel.d/grub.post
@@ -0,0 +1,31 @@
+#!/bin/sh
+#
+# Kernel hook for GRUB 2.
+#
+# Arguments passed to this script: $1 pkgname, $2 version.
+#
+PKGNAME="$1"
+VERSION="$2"
+
+[ -r /boot/grub/grub.cfg ] \
+	&& groot=$(awk '/^set root=/{print substr($2, 8, 3); exit}' \
+		/boot/grub/grub.cfg)
+[ -e /boot/grub/device.map ] && [ -n "${groot}" ] \
+	&& dev=$(awk "/${groot}/{ print \$NF}" /boot/grub/device.map)
+
+if [ -n "${dev}" -a -r "${dev}" ]; then
+	dd if="${dev}" bs=512 skip=0 count=1 2>/dev/null|grep -q GRUB
+	[ $? -eq 0 ] && grub_installed=1
+fi
+
+if [ -n "${dev}" -a -z "$grub_installed" ]; then
+	echo "WARNING: GRUB2 has not been installed into ${dev}."
+	echo "WARNING: please run 'grub-install ${dev}'."
+fi
+
+if command -v grub-mkconfig >/dev/null 2>&1; then
+	grub-mkconfig -o /boot/grub/grub.cfg
+	exit $?
+fi
+
+exit 0
diff --git a/srcpkgs/grub/template b/srcpkgs/grub/template
index a0ed08e9128..acea18a27db 100644
--- a/srcpkgs/grub/template
+++ b/srcpkgs/grub/template
@@ -1,7 +1,7 @@
 # Template file for 'grub'
 pkgname=grub
 version=1.99
-revision=2
+revision=3
 distfiles="http://ftp.gnu.org/gnu/grub/grub-$version.tar.xz"
 build_style=gnu_configure
 short_desc="GRand Unified Bootloader 2"
@@ -24,7 +24,7 @@ Add_dependency run device-mapper
 
 Add_dependency build xz
 Add_dependency build flex
-Add_dependency build bison
+Add_dependency build texinfo
 Add_dependency build zlib-devel
 Add_dependency build libusb-compat-devel
 Add_dependency build ncurses-devel
@@ -36,6 +36,14 @@ Add_dependency full os-prober
 
 post_install()
 {
-	install -d ${DESTDIR}/etc/default
-	install -m644 ${FILESDIR}/grub.default ${DESTDIR}/etc/default/grub
+	# Required to compress info files.
+	vmkdir usr/share/info
+	touch -f ${DESTDIR}/usr/share/info/dir
+
+	vinstall ${FILESDIR}/grub.default 644 etc/default grub
+	# Kernel hooks.
+	vinstall ${FILESDIR}/kernel.d/grub.post 750 \
+		etc/kernel.d/post-install 50-grub
+	vinstall ${FILESDIR}/kernel.d/grub.post 750 \
+		etc/kernel.d/post-remove 50-grub
 }