From 421b1c00b15b19b6d51c59da8befeda9741ae36b Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Fri, 15 Jan 2016 22:29:15 +0000
Subject: grub: update to 2.02.beta2

---
 ...y-issue-when-reading-username-and-passwor.patch |  47 ++
 abs/core/grub/10_archlinux                         | 194 +++++++++
 abs/core/grub/20_memtest86+                        |  29 --
 abs/core/grub/60_memtest86+                        |  32 ++
 abs/core/grub/PKGBUILD                             | 481 ++++++++++++++-------
 abs/core/grub/__changelog                          |   3 +-
 abs/core/grub/archlinux_grub_mkconfig_fixes.patch  |  22 +-
 .../grub-10_linux-detect-archlinux-initramfs.patch |  54 +++
 abs/core/grub/grub-2.00-mkinitcpio-0.15.patch      |  11 +
 abs/core/grub/grub-2.00.5086-fix-lvm-parsing.patch |  54 +++
 abs/core/grub/grub-add-GRUB_COLOR_variables.patch  |  32 ++
 abs/core/grub/grub-intel-ucode.patch               |  26 ++
 abs/core/grub/grub.cfg                             |   8 +-
 abs/core/grub/grub_bzr_export.sh                   | 113 -----
 14 files changed, 781 insertions(+), 325 deletions(-)
 create mode 100644 abs/core/grub/0001-Fix-security-issue-when-reading-username-and-passwor.patch
 create mode 100755 abs/core/grub/10_archlinux
 delete mode 100644 abs/core/grub/20_memtest86+
 create mode 100644 abs/core/grub/60_memtest86+
 create mode 100644 abs/core/grub/grub-10_linux-detect-archlinux-initramfs.patch
 create mode 100644 abs/core/grub/grub-2.00-mkinitcpio-0.15.patch
 create mode 100644 abs/core/grub/grub-2.00.5086-fix-lvm-parsing.patch
 create mode 100644 abs/core/grub/grub-add-GRUB_COLOR_variables.patch
 create mode 100644 abs/core/grub/grub-intel-ucode.patch
 delete mode 100644 abs/core/grub/grub_bzr_export.sh

diff --git a/abs/core/grub/0001-Fix-security-issue-when-reading-username-and-passwor.patch b/abs/core/grub/0001-Fix-security-issue-when-reading-username-and-passwor.patch
new file mode 100644
index 0000000..aa07f2f
--- /dev/null
+++ b/abs/core/grub/0001-Fix-security-issue-when-reading-username-and-passwor.patch
@@ -0,0 +1,47 @@
+From e16eeda1200deabd0d3a4af968d526d62845a85f Mon Sep 17 00:00:00 2001
+From: Hector Marco-Gisbert <hecmargi@upv.es>
+Date: Fri, 13 Nov 2015 16:21:09 +0100
+Subject: [PATCH] Fix security issue when reading username and password
+
+  This patch fixes two integer underflows at:
+    * grub-core/lib/crypto.c
+    * grub-core/normal/auth.c
+
+Resolves: CVE-2015-8370
+
+Signed-off-by: Hector Marco-Gisbert <hecmargi@upv.es>
+Signed-off-by: Ismael Ripoll-Ripoll <iripoll@disca.upv.es>
+---
+ grub-core/lib/crypto.c  | 2 +-
+ grub-core/normal/auth.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/grub-core/lib/crypto.c b/grub-core/lib/crypto.c
+index 010e550..524a3d8 100644
+--- a/grub-core/lib/crypto.c
++++ b/grub-core/lib/crypto.c
+@@ -468,7 +468,7 @@ grub_password_get (char buf[], unsigned buf_size)
+ 	  break;
+ 	}
+ 
+-      if (key == '\b')
++      if (key == '\b' && cur_len)
+ 	{
+ 	  cur_len--;
+ 	  continue;
+diff --git a/grub-core/normal/auth.c b/grub-core/normal/auth.c
+index c6bd96e..5782ec5 100644
+--- a/grub-core/normal/auth.c
++++ b/grub-core/normal/auth.c
+@@ -172,7 +172,7 @@ grub_username_get (char buf[], unsigned buf_size)
+ 	  break;
+ 	}
+ 
+-      if (key == '\b')
++      if (key == '\b' && cur_len)
+ 	{
+ 	  cur_len--;
+ 	  grub_printf ("\b");
+-- 
+2.6.4
+
diff --git a/abs/core/grub/10_archlinux b/abs/core/grub/10_archlinux
new file mode 100755
index 0000000..f86578a
--- /dev/null
+++ b/abs/core/grub/10_archlinux
@@ -0,0 +1,194 @@
+#!/usr/bin/env bash
+
+##
+## grub-mkconfig helper script specific to Arch Linux
+## Contributed by "Keshav Amburay" <the ddoott ridikulus ddoott rat aatt geemmayil ddoott ccoomm>
+## Updated on 08 February 2014
+##
+## Script based on do_grub_config() function in Arch Linux Archboot ISO Installer/Setup script 
+## Some parts taken from /etc/grub.d/10_linux script shipped by GRUB(2) upstream
+##
+## This script can be freely distributed and/or modified 
+## under the terms of the GNU General Public License as published by
+## the Free Software Foundation, either version 3 of the License, or
+## (at your option) any later version.
+##
+## This script is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+
+_FUNC_GRUB_FILE_PRESENT() {
+    
+    [[ -z "${GRUB_PLATFORM}" ]] && GRUB_PLATFORM="x86"
+    
+    if [[ "${GRUB_PLATFORM}" == "x86" ]]; then
+        check="--is-x86-linux32"
+    elif [[ "${GRUB_PLATFORM}" == "i386-xen-pae" ]]; then
+        check="--is-i386-xen-pae-domu"
+    elif [[ "${GRUB_PLATFORM}" == "x86_64-xen" ]]; then
+        check="--is-x86_64-xen-domu"
+    else
+        check="--is-${GRUB_PLATFORM}-linux"
+    fi
+    
+    case "${GRUB_PLATFORM}" in
+        x86)
+            list="$(for i in "${GRUB_ROOT}"/boot/vmlinuz-linux* ; do
+                        if grub_file_is_not_garbage "${i}" && "${grub_file}" ${check} "${i}" ; then echo -n "${i} " ; fi
+                    done)" ;;
+        *) 
+          list="$(for i in "${GRUB_ROOT}"/boot/vmlinuz-linux* ; do
+                      if grub_file_is_not_garbage "${i}" && "${grub_file}" ${check} "${i}" ; then echo -n "${i} " ; fi
+                  done)" ;;
+    esac
+}
+
+set -e
+
+prefix="/usr"
+exec_prefix="${prefix}"
+datarootdir="/usr/share"
+datadir="${datarootdir}"
+sysconfdir="/etc"
+
+. "${datarootdir}/grub/grub-mkconfig_lib"
+
+. "${sysconfdir}/default/grub"
+
+export TEXTDOMAIN="grub"
+export TEXTDOMAINDIR="${datarootdir}/locale"
+
+CLASS="--class arch-linux --class arch --class gnu-linux --class gnu --class os"
+
+[[ "${grub_file}" != "" ]] && _FUNC_GRUB_FILE_PRESENT
+
+BOOT_PART_FS_UUID="$(${grub_probe} --target="fs_uuid" "/boot" 2>/dev/null)"
+BOOT_PART_HINTS_STRING="$(${grub_probe} --target="hints_string" "/boot" 2>/dev/null || true)"
+BOOT_PART_FS="$(${grub_probe} --target="fs" "/boot" 2>/dev/null)"
+
+ROOT_PART_GRUB_DEVICE="$(${grub_probe} --target=device / || true)"
+ROOT_PART_FS="$(${grub_probe} --device ${ROOT_PART_GRUB_DEVICE} --target=fs 2> /dev/null || echo "unknown")"
+
+if [[ "${GRUB_LINUX_ROOT_DEVICE}" == "" ]]; then
+    
+    case "${ROOT_PART_FS}" in
+        btrfs)
+            rootsubvol="$(make_system_path_relative_to_its_root /)"
+            rootsubvol="${rootsubvol#/}"
+            if [[ "${rootsubvol}" != "" ]]; then
+                GRUB_LINUX_ROOT_DEVICE="subvol=${rootsubvol}"
+            fi
+        ;;
+        zfs)
+            rpool="$(${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true)"
+            bootfs="$(make_system_path_relative_to_its_root / | sed -e "s,@$,,")"
+            GRUB_LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
+        ;;
+    esac
+    
+    if [[ "${GRUB_DEVICE_UUID}" == "" ]] || \
+       [[ "${GRUB_DISABLE_LINUX_UUID}" == "true" ]] || \
+       [[ ! -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ]] || \
+       uses_abstraction "${GRUB_DEVICE}" lvm ; then
+           GRUB_LINUX_ROOT_DEVICE="${GRUB_DEVICE}"
+    else
+       GRUB_LINUX_ROOT_DEVICE="UUID=${GRUB_DEVICE_UUID}"
+    fi
+fi
+
+[[ "${GRUB_LINUX_PARAMS}" == "" ]] && GRUB_LINUX_PARAMS="${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+
+for _KERNEL_ in ${list} ; do
+    
+    echo "Found linux image: ${_KERNEL_}" >&2
+    
+    basename="$(basename "${_KERNEL_}")"
+    dirname="$(dirname "${_KERNEL_}")"
+    REAL_DIR="$(make_system_path_relative_to_its_root "${dirname}")"
+  
+    _KERNEL_FILE_="$(echo ${_KERNEL_} | sed 's,/boot/,,g')"
+    _KERNEL_PKG_="pkg-$(echo ${_KERNEL_FILE_} | sed 's,vmlinuz-,,g')"
+    
+    _INITRAMFS_="${_KERNEL_FILE_/vmlinuz-/initramfs-}.img"
+    
+    if [[ -e "/boot/${_INITRAMFS_}" ]]; then
+    
+    echo "Found initramfs image: /boot/${_INITRAMFS_}" >&2
+    
+cat << EOF
+
+menuentry "Arch Linux ${_KERNEL_PKG_} kernel" ${CLASS} {
+    $(save_default_entry)
+    if [ x\$feature_all_video_module = xy ]; then
+        insmod all_video
+    fi
+    set gfxpayload=keep
+    insmod ${BOOT_PART_FS}
+    if [ x\$feature_platform_search_hint = xy ]; then
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_HINTS_STRING} ${BOOT_PART_FS_UUID}
+    else
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_FS_UUID}
+    fi
+    echo 'Loading Arch Linux ${_KERNEL_PKG_} kernel ...'
+    linux ${REAL_DIR}/${_KERNEL_FILE_} root=${GRUB_LINUX_ROOT_DEVICE} rw ${GRUB_LINUX_PARAMS}
+    echo 'Loading Arch Linux ${_KERNEL_PKG_} kernel initramfs ...'
+    initrd ${REAL_DIR}/${_INITRAMFS_}
+}
+
+EOF
+    fi
+    
+    _INITRAMFS_FALLBACK_="${_KERNEL_FILE_/vmlinuz-/initramfs-}-fallback.img"
+    
+    if [[ -e "/boot/${_INITRAMFS_FALLBACK_}" ]]; then
+    
+    echo "Found fallback initramfs image: /boot/${_INITRAMFS_FALLBACK_}" >&2
+    
+cat << EOF
+
+menuentry "Arch Linux ${_KERNEL_PKG_} kernel (fallback initramfs)" ${CLASS} {
+    $(save_default_entry)
+    if [ x\$feature_all_video_module = xy ]; then
+        insmod all_video
+    fi
+    set gfxpayload=keep
+    insmod ${BOOT_PART_FS}
+    if [ x\$feature_platform_search_hint = xy ]; then
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_HINTS_STRING} ${BOOT_PART_FS_UUID}
+    else
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_FS_UUID}
+    fi
+    echo 'Loading Arch Linux ${_KERNEL_PKG_} kernel ...'
+    linux ${REAL_DIR}/${_KERNEL_FILE_} root=${GRUB_LINUX_ROOT_DEVICE} rw ${GRUB_LINUX_PARAMS}
+    echo 'Loading Arch Linux ${_KERNEL_PKG_} kernel fallback initramfs ...'
+    initrd ${REAL_DIR}/${_INITRAMFS_FALLBACK_}
+}
+
+EOF
+    fi
+    
+    if [[ ! -e "/boot/${_INITRAMFS_}" ]] && [[ ! -e "/boot/${_INITRAMFS_FALLBACK_}" ]]; then
+cat << EOF
+
+menuentry "Arch Linux ${_KERNEL_PKG_} kernel (no initramfs)" ${CLASS} {
+    $(save_default_entry)
+    if [ x\$feature_all_video_module = xy ]; then
+        insmod all_video
+    fi
+    set gfxpayload=keep
+    insmod ${BOOT_PART_FS}
+    if [ x\$feature_platform_search_hint = xy ]; then
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_HINTS_STRING} ${BOOT_PART_FS_UUID}
+    else
+        search --no-floppy --fs-uuid  --set=root ${BOOT_PART_FS_UUID}
+    fi
+    echo 'Loading Arch Linux ${_KERNEL_PKG_} kernel ...'
+    linux ${REAL_DIR}/${_KERNEL_FILE_} root=${GRUB_LINUX_ROOT_DEVICE} rw ${GRUB_LINUX_PARAMS}
+}
+
+EOF
+    fi
+    
+done
diff --git a/abs/core/grub/20_memtest86+ b/abs/core/grub/20_memtest86+
deleted file mode 100644
index 1d3096f..0000000
--- a/abs/core/grub/20_memtest86+
+++ /dev/null
@@ -1,29 +0,0 @@
-#! /bin/sh -e
-########################################################
-# This script generates a memtest86+ entry on grub.cfg #
-# if memtest is installed on the system.               #
-########################################################
-
-prefix="/usr"
-exec_prefix="${prefix}"
-
-datarootdir="/usr/share"
-datadir="${datarootdir}"
-
-. "${datadir}/grub/grub-mkconfig_lib"
-
-MEMTEST86_IMAGE="/boot/memtest86+/memtest.bin"
-CLASS="--class memtest86 --class gnu --class tool"
-
-if [ -e $MEMTEST86_IMAGE ] && is_path_readable_by_grub $MEMTEST86_IMAGE; then
-  # image exists, create menu entry
-  echo "Found memtest86+ image: $MEMTEST86_IMAGE" >&2
-  cat << EOF
-menuentry "Memory test (memtest86+)" $CLASS {
-EOF
-  prepare_grub_to_access_device `${grub_probe} --target=device $MEMTEST86_IMAGE` | sed -e "s/^/  /"
-  cat << EOF
-  linux16 (\$root)`make_system_path_relative_to_its_root $MEMTEST86_IMAGE`
-}
-EOF
-fi
diff --git a/abs/core/grub/60_memtest86+ b/abs/core/grub/60_memtest86+
new file mode 100644
index 0000000..086f0cc
--- /dev/null
+++ b/abs/core/grub/60_memtest86+
@@ -0,0 +1,32 @@
+#!/usr/bin/env bash
+########################################################
+# This script generates a memtest86+ entry on grub.cfg #
+# if memtest is installed on the system.               #
+########################################################
+
+prefix="/usr"
+exec_prefix="${prefix}"
+
+datarootdir="/usr/share"
+datadir="${datarootdir}"
+
+. "${datadir}/grub/grub-mkconfig_lib"
+
+MEMTEST86_IMAGE="/boot/memtest86+/memtest.bin"
+CLASS="--class memtest86 --class gnu --class tool"
+
+if [ -e "${MEMTEST86_IMAGE}" ] && is_path_readable_by_grub "${MEMTEST86_IMAGE}" ; then
+    ## image exists, create menu entry
+    echo "Found memtest86+ image: ${MEMTEST86_IMAGE}" >&2
+    _GRUB_MEMTEST_HINTS_STRING="$(${grub_probe} --target=hints_string ${MEMTEST86_IMAGE})"
+    _GRUB_MEMTEST_FS_UUID="$(${grub_probe} --target=fs_uuid ${MEMTEST86_IMAGE})"
+    _GRUB_MEMTEST_REL_PATH="$(make_system_path_relative_to_its_root ${MEMTEST86_IMAGE})"
+    cat << EOF
+if [ "\${grub_platform}" == "pc" ]; then
+    menuentry "Memory Tester (memtest86+)" ${CLASS} {
+        search --fs-uuid --no-floppy --set=root ${_GRUB_MEMTEST_HINTS_STRING} ${_GRUB_MEMTEST_FS_UUID}
+        linux16 ${_GRUB_MEMTEST_REL_PATH} ${GRUB_CMDLINE_MEMTEST86}
+    }
+fi
+EOF
+fi
diff --git a/abs/core/grub/PKGBUILD b/abs/core/grub/PKGBUILD
index 460935d..e7daa70 100644
--- a/abs/core/grub/PKGBUILD
+++ b/abs/core/grub/PKGBUILD
@@ -1,90 +1,173 @@
-# Maintainer: Ronald van Haren <ronald.archlinux.org>
-# Contributor: Keshav P R <(the.ridikulus.rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
+# Maintainer : Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer : Ronald van Haren <ronald.archlinux.org>
+# Contributor: Keshav Amburay <(the ddoott ridikulus ddoott rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
 
-_grub_lua_ver=24
-_grub_ntldr_ver=21
-_grub_915_ver=9
+## "1" to enable IA32-EFI build in Arch x86_64, "0" to disable
+_IA32_EFI_IN_ARCH_X64="1"
 
-pkgname=('grub-common' 'grub-bios' 'grub-efi-i386')
-pkgbase=grub
-pkgver=2.00
-pkgrel=2
-url="https://www.gnu.org/software/grub/"
-arch=('i686' 'x86_64')
-license=('GPL3')
-makedepends=('xz' 'bdf-unifont' 'ttf-dejavu' 'python2' 'autogen'
-             'texinfo' 'help2man' 'gettext' 'device-mapper' 'fuse')
+## "1" to enable EMU build, "0" to disable
+_GRUB_EMU_BUILD="0"
 
-source=("http://ftp.gnu.org/gnu/grub/grub-${pkgver}.tar.xz"
-        "ftp://ftp.archlinux.org/other/grub2/grub2_extras_lua_r${_grub_lua_ver}.tar.xz"
-        "ftp://ftp.archlinux.org/other/grub2/grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz"
-        "ftp://ftp.archlinux.org/other/grub2/grub2_extras_915resolution_r${_grub_915_ver}.tar.xz"
-        'archlinux_grub_mkconfig_fixes.patch'
-        'grub.default'
-        'grub.cfg'
-        '20_memtest86+'
-        'grub_bzr_export.sh')
-
-noextract=("grub2_extras_lua_r${_grub_lua_ver}.tar.xz"
-           "grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz"
-           "grub2_extras_915resolution_r${_grub_915_ver}.tar.xz")
-
-sha1sums=('274d91e96b56a5b9dd0a07accff69dbb6dfb596b'
-          '89290031b974780c6df76893836d2477d4add895'
-          'eb4b35b4c36b64f9405cbcbc538cb205171c1c0a'
-          'd5ae2efec25616028a9d89e98b6e454f1c4c415f'
-          '26e4e946190bea1f03632658cf08ba90e11dec57'
-          'dbf493dec4722feb11f0b5c71ad453a18daf0fc5'
-          '76ae862a945a8848e6999adf8ad1847f0f7008b9'
-          'ce35d7ae75cd1b5b677e894e528f96add40e77b9'
-          '0cfd4e51cdb14a92f06cfd3c607f2aa21f3e55fc')
+_pkgver="2.02"
+_GRUB_GIT_TAG="grub-2.02-beta2"
+_GRUB_EXTRAS_COMMIT=4a56e2c2cc3d78f12f1788c27669a651071dee49
 
-_build_grub-common_and_bios() {
+_UNIFONT_VER="6.3.20131217"
 
-	## copy the source for building the common/bios package
-	cp -r "${srcdir}/grub-${pkgver}" "${srcdir}/grub_bios-${pkgver}"
-	cd "${srcdir}/grub_bios-${pkgver}"
-        #sed -i -e '/gets is a security/d' grub-core/gnulib/stdio.in.h
-	## Apply Archlinux specific fixes to enable grub-mkconfig detect Arch kernels and initramfs
-	patch -Np1 -i "${srcdir}/archlinux_grub_mkconfig_fixes.patch"
-	echo
+[[ "${CARCH}" == "x86_64" ]] && _EFI_ARCH="x86_64"
+[[ "${CARCH}" == "i686" ]] && _EFI_ARCH="i386"
 
-	## fix unifont.bdf location so that grub-mkfont can create *.pf2 files
-	sed 's|/usr/share/fonts/unifont|/usr/share/fonts/unifont /usr/share/fonts/misc|g' -i "${srcdir}/grub_bios-${pkgver}/configure.ac"
+[[ "${CARCH}" == "x86_64" ]] && _EMU_ARCH="x86_64"
+[[ "${CARCH}" == "i686" ]] && _EMU_ARCH="i386"
 
-	## fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme
-	sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "${srcdir}/grub_bios-${pkgver}/configure.ac"
+pkgname="grub"
+pkgdesc="GNU GRand Unified Bootloader (2)"
+pkgver=2.02.beta2
+pkgrel=6
+epoch=1
+url="https://www.gnu.org/software/grub/"
+arch=('x86_64' 'i686')
+license=('GPL3')
+backup=('boot/grub/grub.cfg' 'etc/default/grub' 'etc/grub.d/40_custom')
+install="${pkgname}.install"
+options=('!makeflags')
 
-	## add the grub-extra sources
-	export GRUB_CONTRIB="${srcdir}/grub_bios-${pkgver}/grub-extras/"
-	install -d "${srcdir}/grub_bios-${pkgver}/grub-extras"
+conflicts=('grub-common' 'grub-bios' 'grub-emu' "grub-efi-${_EFI_ARCH}" 'grub-legacy')
+replaces=('grub-common' 'grub-bios' 'grub-emu' "grub-efi-${_EFI_ARCH}")
+provides=('grub-common' 'grub-bios' 'grub-emu' "grub-efi-${_EFI_ARCH}")
 
-	bsdtar xf "${srcdir}/grub2_extras_lua_r${_grub_lua_ver}.tar.xz" \
-		-C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+makedepends=('git' 'rsync' 'xz' 'freetype2' 'ttf-dejavu' 'python2' 'autogen'
+             'texinfo' 'help2man' 'gettext' 'device-mapper' 'fuse')
+depends=('sh' 'xz' 'gettext' 'device-mapper')
+optdepends=('freetype2: For grub-mkfont usage'
+            'fuse: For grub-mount usage'
+            'dosfstools: For grub-mkrescue FAT FS and EFI support' 
+            'efibootmgr: For grub-install EFI support'
+            'libisoburn: Provides xorriso for generating grub rescue iso using grub-mkrescue'
+            'os-prober: To detect other OSes when generating grub.cfg in BIOS systems'
+            'mtools: For grub-mkrescue FAT FS support')
+
+if [[ "${_GRUB_EMU_BUILD}" == "1" ]]; then
+    makedepends+=('libusbx' 'sdl')
+    optdepends+=('libusbx: For grub-emu USB support'
+                 'sdl: For grub-emu SDL support')
+fi
+
+source=("grub-${_pkgver}::git+git://git.sv.gnu.org/grub.git#tag=${_GRUB_GIT_TAG}"
+        "grub-extras::git+git://git.sv.gnu.org/grub-extras.git#commit=${_GRUB_EXTRAS_COMMIT}"
+        "http://ftp.gnu.org/gnu/unifont/unifont-${_UNIFONT_VER}/unifont-${_UNIFONT_VER}.bdf.gz"
+        "http://ftp.gnu.org/gnu/unifont/unifont-${_UNIFONT_VER}/unifont-${_UNIFONT_VER}.bdf.gz.sig"
+        '0001-Fix-security-issue-when-reading-username-and-passwor.patch'
+        'grub-10_linux-detect-archlinux-initramfs.patch'
+        'grub-intel-ucode.patch'
+        'grub-add-GRUB_COLOR_variables.patch'
+        '60_memtest86+'
+        'grub.default'
+        'grub.cfg')
+
+md5sums=('SKIP'
+         'SKIP'
+         '728b7439ac733a7c0d56049adec364c7'
+         'SKIP'
+         '9589ec46a04f9bb4d5da987340a4a324'
+         '945527e0de8d384166a4cf23439ae9ee'
+         'a678629bc82c4e70c48d28242036d1d7'
+         'e506ae4a9f9f7d1b765febfa84e10d48'
+         'be55eabc102f2c60b38ed35c203686d6'
+         'a03ffd56324520393bf574cefccb893d'
+         'c8b9511586d57d6f2524ae7898397a46')
+validpgpkeys=('95D2E9AB8740D8046387FD151A09227B1F435A33')  #Paul Hardy
+
+_pkgver() {
+	cd "${srcdir}/grub-${_pkgver}/"
+	echo "$(git describe --tags)" | sed -e 's|grub.||g' -e 's|-|\.|g'
+}
 
-	bsdtar xf "${srcdir}/grub2_extras_ntldr-img_r${_grub_ntldr_ver}.tar.xz" \
-		-C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+prepare() {
+	
+	cd "${srcdir}/grub-${_pkgver}/"
 
-	bsdtar xf "${srcdir}/grub2_extras_915resolution_r${_grub_915_ver}.tar.xz" \
-		-C "${srcdir}/grub_bios-${pkgver}/grub-extras"
+	# CVE-2015-8370
+	patch -Np1 -i ../0001-Fix-security-issue-when-reading-username-and-passwor.patch
+	
+	msg "Patch to load Intel microcode"
+	patch -Np1 -i "${srcdir}/grub-intel-ucode.patch"
+	echo
 
-	## Requires python2
-	 sed 's|python |python2 |g' -i "${srcdir}/grub_bios-${pkgver}/autogen.sh"
+	msg "Patch to detect of Arch Linux initramfs images by grub-mkconfig"
+	patch -Np1 -i "${srcdir}/grub-10_linux-detect-archlinux-initramfs.patch"
+	echo
+	
+	msg "Patch to enable GRUB_COLOR_* variables in grub-mkconfig"
+	## Based on http://lists.gnu.org/archive/html/grub-devel/2012-02/msg00021.html
+	patch -Np1 -i "${srcdir}/grub-add-GRUB_COLOR_variables.patch"
+	echo
+	
+	msg "Fix DejaVuSans.ttf location so that grub-mkfont can create *.pf2 files for starfield theme"
+	sed 's|/usr/share/fonts/dejavu|/usr/share/fonts/dejavu /usr/share/fonts/TTF|g' -i "${srcdir}/grub-${_pkgver}/configure.ac"
+	
+	msg "Fix mkinitcpio 'rw' FS#36275"
+	sed 's| ro | rw |g' -i "${srcdir}/grub-${_pkgver}/util/grub.d/10_linux.in"
+	
+	msg "Fix OS naming FS#33393"
+	sed 's|GNU/Linux|Linux|' -i "${srcdir}/grub-${_pkgver}/util/grub.d/10_linux.in"
+	
+	# msg "autogen.sh requires python (2/3). since bzr is in makedepends, use python2 and no need to pull python3"
+	# sed 's|python |python2 |g' -i "${srcdir}/grub-${_pkgver}/autogen.sh"
+	
+	msg "Pull in latest language files"
+	./linguas.sh
+	echo
+	
+	msg "Remove not working langs which need LC_ALL=C.UTF-8"
+	sed -e 's#en@cyrillic en@greek##g' -i "${srcdir}/grub-${_pkgver}/po/LINGUAS"
+	
+	msg "Avoid problem with unifont during compile of grub, http://savannah.gnu.org/bugs/?40330 and https://bugs.archlinux.org/task/37847"
+	cp "${srcdir}/unifont-${_UNIFONT_VER}.bdf" "${srcdir}/grub-${_pkgver}/unifont.bdf"
+	
+}
 
-	## start the actual build process
-	cd "${srcdir}/grub_bios-${pkgver}"
+_build_grub-common_and_bios() {
+	
+	msg "Set ARCH dependent variables for bios build"
+	if [[ "${CARCH}" == 'x86_64' ]]; then
+		_EFIEMU="--enable-efiemu"
+	else
+		_EFIEMU="--disable-efiemu"
+	fi
+	
+	msg "Copy the source for building the bios part"
+	cp -r "${srcdir}/grub-${_pkgver}" "${srcdir}/grub-${_pkgver}-bios"
+	cd "${srcdir}/grub-${_pkgver}-bios/"
+	
+	msg "Add the grub-extra sources for bios build"
+	install -d "${srcdir}/grub-${_pkgver}-bios/grub-extras"
+	cp -r "${srcdir}/grub-extras/915resolution" "${srcdir}/grub-${_pkgver}-bios/grub-extras/915resolution"
+	export GRUB_CONTRIB="${srcdir}/grub-${_pkgver}-bios/grub-extras/"
+	
+	msg "Unset all compiler FLAGS for bios build"
+	unset CFLAGS
+	unset CPPFLAGS
+	unset CXXFLAGS
+	unset LDFLAGS
+	unset MAKEFLAGS
+	
+	cd "${srcdir}/grub-${_pkgver}-bios/"
+	
+	msg "Run autogen.sh for bios build"
 	./autogen.sh
 	echo
-
-	CFLAGS="" ./configure \
+	
+	msg "Run ./configure for bios build"
+	./configure \
 		--with-platform="pc" \
 		--target="i386" \
-		--host="${CARCH}-unknown-linux-gnu" \
 		"${_EFIEMU}" \
 		--enable-mm-debug \
 		--enable-nls \
 		--enable-device-mapper \
 		--enable-cache-stats \
+		--enable-boot-time \
 		--enable-grub-mkfont \
 		--enable-grub-mount \
 		--prefix="/usr" \
@@ -94,42 +177,47 @@ _build_grub-common_and_bios() {
 		--infodir="/usr/share/info" \
 		--datarootdir="/usr/share" \
 		--sysconfdir="/etc" \
-		--program-prefix="" \
+	 	--program-prefix="" \
 		--with-bootdir="/boot" \
 		--with-grubdir="grub" \
+		--disable-silent-rules \
 		--disable-werror
 	echo
-
-	CFLAGS="" make
+	
+	msg "Run make for bios build"
+	make
 	echo
-
 }
 
-_build_grub-efi-i386() {
-
-	## copy the source for building the efi package
-	cp -r "${srcdir}/grub-${pkgver}" "${srcdir}/grub_efi-${pkgver}"
-	cd "${srcdir}/grub_efi-${pkgver}"
-        #sed -i -e '/gets is a security/d' grub-core/gnulib/stdio.in.h
-	export GRUB_CONTRIB="${srcdir}/grub_efi-${pkgver}/grub-extras/"
-	install -d "${srcdir}/grub_efi-${pkgver}/grub-extras"
-
-	bsdtar xf "${srcdir}/grub2_extras_lua_r${_grub_lua_ver}.tar.xz" \
-		-C "${srcdir}/grub_efi-${pkgver}/grub-extras"
-
-	cd "${srcdir}/grub_efi-${pkgver}"
+_build_grub-efi() {
+	
+	msg "Copy the source for building the ${_EFI_ARCH} efi part"
+	cp -r "${srcdir}/grub-${_pkgver}" "${srcdir}/grub-${_pkgver}-efi-${_EFI_ARCH}"
+	cd "${srcdir}/grub-${_pkgver}-efi-${_EFI_ARCH}/"
+	
+	msg "Unset all compiler FLAGS for ${_EFI_ARCH} efi build"
+	unset CFLAGS
+	unset CPPFLAGS
+	unset CXXFLAGS
+	unset LDFLAGS
+	unset MAKEFLAGS
+	
+	cd "${srcdir}/grub-${_pkgver}-efi-${_EFI_ARCH}/"
+	
+	msg "Run autogen.sh for ${_EFI_ARCH} efi build"
 	./autogen.sh
 	echo
-
-	CFLAGS="" ./configure \
+	
+	msg "Run ./configure for ${_EFI_ARCH} efi build"
+	./configure \
 		--with-platform="efi" \
-		--target="i386" \
-		--host="${CARCH}-unknown-linux-gnu" \
+		--target="${_EFI_ARCH}" \
 		--disable-efiemu \
 		--enable-mm-debug \
 		--enable-nls \
 		--enable-device-mapper \
 		--enable-cache-stats \
+		--enable-boot-time \
 		--enable-grub-mkfont \
 		--enable-grub-mount \
 		--prefix="/usr" \
@@ -142,108 +230,167 @@ _build_grub-efi-i386() {
 		--program-prefix="" \
 		--with-bootdir="/boot" \
 		--with-grubdir="grub" \
+		--disable-silent-rules \
 		--disable-werror
 	echo
-
-	CFLAGS="" make
+	
+	msg "Run make for ${_EFI_ARCH} efi build"
+	make
 	echo
+	
+}
 
+_build_grub-emu() {
+	
+	msg "Copy the source for building the emu part"
+	cp -r "${srcdir}/grub-${_pkgver}/" "${srcdir}/grub-${_pkgver}-emu/"
+	
+	msg "Unset all compiler FLAGS for emu build"
+	unset CFLAGS
+	unset CPPFLAGS
+	unset CXXFLAGS
+	unset LDFLAGS
+	unset MAKEFLAGS
+	
+	cd "${srcdir}/grub-${_pkgver}-emu/"
+	
+	msg "Run autogen.sh for emu build"
+	./autogen.sh
+	echo
+	
+	msg "Run ./configure for emu build"
+	./configure \
+		--with-platform="emu" \
+		--target="${_EMU_ARCH}" \
+		--enable-mm-debug \
+		--enable-nls \
+		--enable-device-mapper \
+		--enable-cache-stats \
+		--enable-grub-mkfont \
+		--enable-grub-mount \
+		--enable-grub-emu-usb=no \
+		--enable-grub-emu-sdl=no \
+		--disable-grub-emu-pci \
+		--prefix="/usr" \
+		--bindir="/usr/bin" \
+		--sbindir="/usr/bin" \
+		--mandir="/usr/share/man" \
+		--infodir="/usr/share/info" \
+		--datarootdir="/usr/share" \
+		--sysconfdir="/etc" \
+		--program-prefix="" \
+		--with-bootdir="/boot" \
+		--with-grubdir="grub" \
+		--disable-silent-rules \
+		--disable-werror
+	echo
+	
+	msg "Run make for emu build"
+	make
+	echo
+	
 }
 
 build() {
-
-	## set architecture dependent variables
-	if [[ "${CARCH}" == 'x86_64' ]]; then
-		_EFIEMU="--enable-efiemu"
-	else
-		_EFIEMU="--disable-efiemu"
-	fi
-
-	_HOST="${CARCH}"
-
-	cd "${srcdir}/grub-${pkgver}"
-	# _get_locale_files
-        sed -i -e '/gets is a security/d' grub-core/gnulib/stdio.in.h
+	
+	cd "${srcdir}/grub-${_pkgver}/"
+	
+	msg "Build grub bios stuff"
 	_build_grub-common_and_bios
 	echo
-
-	_build_grub-efi-i386
+	
+	msg "Build grub ${_EFI_ARCH} efi stuff"
+	_build_grub-efi
 	echo
-
+	
+	if [[ "${CARCH}" == "x86_64" ]] && [[ "${_IA32_EFI_IN_ARCH_X64}" == "1" ]]; then
+		msg "Build grub i386 efi stuff"
+		_EFI_ARCH="i386" _build_grub-efi
+		echo
+	fi
+	
+	if [[ "${_GRUB_EMU_BUILD}" == "1" ]]; then
+		msg "Build grub emu stuff"
+		_build_grub-emu
+		echo
+	fi
+    
 }
 
-package_grub-common() {
-
-	pkgdesc="GNU GRand Unified Bootloader - Utilities and Common Files"
-	depends=('sh' 'xz' 'freetype2' 'gettext' 'device-mapper' 'fuse')
-	conflicts=('grub-legacy' 'grub')
-	replaces=('grub2-common')
-	provides=('grub2-common')
-	backup=('boot/grub/grub.cfg' 'etc/default/grub' 'etc/grub.d/40_custom')
-	optdepends=('libisoburn: provides xorriso for generating grub rescue iso using grub-mkrescue'
-	            'os-prober: to detect other OSes when generating grub.cfg in BIOS systems'
-	            'mtools: for grub-mkrescue FAT FS support')
-	install="grub.install"
-	options=('strip' 'purge' 'docs' 'zipman' '!emptydirs')
-
-	cd "${srcdir}/grub_bios-${pkgver}"
+_package_grub-common_and_bios() {
+	
+	cd "${srcdir}/grub-${_pkgver}-bios/"
+	
+	msg "Run make install for bios build"
 	make DESTDIR="${pkgdir}/" bashcompletiondir="/usr/share/bash-completion/completions" install
 	echo
-
-	## install extra /etc/grub.d/ files
-	install -D -m0755 "${srcdir}/20_memtest86+" "${pkgdir}/etc/grub.d/20_memtest86+"
-
-	## install /etc/default/grub (used by grub-mkconfig)
+	
+	msg "Remove gdb debugging related files for bios build"
+	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.module || true
+	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.image || true
+	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/{kernel.exec,gdb_grub,gmodule.pl} || true
+	
+	msg "Install extra /etc/grub.d/ files"
+	install -D -m0755 "${srcdir}/60_memtest86+" "${pkgdir}/etc/grub.d/60_memtest86+"
+	
+	msg "Install /etc/default/grub (used by grub-mkconfig)"
 	install -D -m0644 "${srcdir}/grub.default" "${pkgdir}/etc/default/grub"
-
-	## install grub.cfg (needed so it doesn't get removed on upgrading because it was previously here)
+	
+	msg "Install grub.cfg for backup array"
 	install -D -m0644 "${srcdir}/grub.cfg" "${pkgdir}/boot/grub/grub.cfg"
-
-	# remove platform specific files
-	rm -rf "${pkgdir}/usr/lib/grub/i386-pc/"
-
+	
 }
 
-package_grub-bios() {
-
-	pkgdesc="GNU GRand Unified Bootloader - i386 PC BIOS Modules"
-	depends=("grub-common=${pkgver}")
-	options=('!strip' '!emptydirs')
-	replaces=('grub2-bios')
-	provides=('grub2-bios')
-
-	cd "${srcdir}/grub_bios-${pkgver}"
-	make DESTDIR="${pkgdir}/" install
+_package_grub-efi() {
+	
+	cd "${srcdir}/grub-${_pkgver}-efi-${_EFI_ARCH}/"
+	
+	msg "Run make install for ${_EFI_ARCH} efi build"
+	make DESTDIR="${pkgdir}/" bashcompletiondir="/usr/share/bash-completion/completions" install
 	echo
-
-	## remove non platform-specific files
-	rm -rf "${pkgdir}"/{boot,etc,usr/{share,bin,sbin}}
-
-	## remove gdb debugging related files
-	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.module || true
-	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/*.image || true
-	rm -f "${pkgdir}/usr/lib/grub/i386-pc"/{kernel.exec,gdb_grub,gmodule.pl} || true
-
+	
+	msg "Remove gdb debugging related files for ${_EFI_ARCH} efi build"
+	rm -f "${pkgdir}/usr/lib/grub/${_EFI_ARCH}-efi"/*.module || true
+	rm -f "${pkgdir}/usr/lib/grub/${_EFI_ARCH}-efi"/*.image || true
+	rm -f "${pkgdir}/usr/lib/grub/${_EFI_ARCH}-efi"/{kernel.exec,gdb_grub,gmodule.pl} || true
+	
 }
 
-package_grub-efi-i386() {
-
-	pkgdesc="GNU GRand Unified Bootloader - i386 UEFI Modules"
-	depends=("grub-common=${pkgver}" 'dosfstools' 'efibootmgr')
-	options=('!strip' '!emptydirs')
-	replaces=('grub2-efi-i386')
-	provides=('grub2-efi-i386')
-
-	cd "${srcdir}/grub_efi-${pkgver}"
-	make DESTDIR="${pkgdir}/" install
+_package_grub-emu() {
+	
+	cd "${srcdir}/grub-${_pkgver}-emu/"
+	
+	msg "Run make install for emu build"
+	make DESTDIR="${pkgdir}/" bashcompletiondir="/usr/share/bash-completion/completions" install
 	echo
+	
+	msg "Remove gdb debugging related files for emu build"
+	rm -f "${pkgdir}/usr/lib/grub/${_EMU_ARCH}-emu"/*.module || true
+	rm -f "${pkgdir}/usr/lib/grub/${_EMU_ARCH}-emu"/*.image || true
+	rm -f "${pkgdir}/usr/lib/grub/${_EMU_ARCH}-emu"/{kernel.exec,gdb_grub,gmodule.pl} || true
+	
+}
 
-	## remove non platform-specific files
-	rm -rf "${pkgdir}"/{boot,etc,usr/{share,bin,sbin}}
-
-	## remove gdb debugging related files
-	rm -f "${pkgdir}/usr/lib/grub/i386-efi"/*.module || true
-	rm -f "${pkgdir}/usr/lib/grub/i386-efi"/*.image || true
-	rm -f "${pkgdir}/usr/lib/grub/i386-efi"/{kernel.exec,gdb_grub,gmodule.pl} || true
-
+package() {
+	
+	cd "${srcdir}/grub-${_pkgver}/"
+	
+	msg "Package grub ${_EFI_ARCH} efi stuff"
+	_package_grub-efi
+	
+	if [[ "${CARCH}" == "x86_64" ]] && [[ "${_IA32_EFI_IN_ARCH_X64}" == "1" ]]; then
+		msg "Package grub i386 efi stuff"
+		_EFI_ARCH="i386" _package_grub-efi
+		echo
+	fi
+	
+	if [[ "${_GRUB_EMU_BUILD}" == "1" ]]; then
+		msg "Package grub emu stuff"
+		_package_grub-emu
+		echo
+	fi
+	
+	msg "Package grub bios stuff"
+	_package_grub-common_and_bios
+	
 }
diff --git a/abs/core/grub/__changelog b/abs/core/grub/__changelog
index 0be82a4..608798d 100644
--- a/abs/core/grub/__changelog
+++ b/abs/core/grub/__changelog
@@ -1 +1,2 @@
- -e '/gets is a security/d' grub-core/gnulib/stdio.in.h
+PKGBUILD:
+- change dep python to python2
diff --git a/abs/core/grub/archlinux_grub_mkconfig_fixes.patch b/abs/core/grub/archlinux_grub_mkconfig_fixes.patch
index c8bd3e4..c87a428 100644
--- a/abs/core/grub/archlinux_grub_mkconfig_fixes.patch
+++ b/abs/core/grub/archlinux_grub_mkconfig_fixes.patch
@@ -1,8 +1,8 @@
 diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
-index 516be86..5f37db2 100644
+index db58ab9..e66e139 100644
 --- a/util/grub-mkconfig.in
 +++ b/util/grub-mkconfig.in
-@@ -213,6 +213,8 @@ export GRUB_DEFAULT \
+@@ -212,6 +212,8 @@ export GRUB_DEFAULT \
    GRUB_THEME \
    GRUB_GFXPAYLOAD_LINUX \
    GRUB_DISABLE_OS_PROBER \
@@ -12,10 +12,10 @@ index 516be86..5f37db2 100644
    GRUB_SAVEDEFAULT \
    GRUB_ENABLE_CRYPTODISK \
 diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in
-index 765bfdc..b148558 100644
+index 9838720..dbb5dd2 100644
 --- a/util/grub.d/00_header.in
 +++ b/util/grub.d/00_header.in
-@@ -115,6 +115,14 @@ cat <<EOF
+@@ -125,6 +125,14 @@ cat <<EOF
  
  EOF
  
@@ -31,7 +31,7 @@ index 765bfdc..b148558 100644
  gfxterm=0;
  for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
 diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
-index 14402e8..64c9bb5 100644
+index e27d6f7..0a255f5 100644
 --- a/util/grub.d/10_linux.in
 +++ b/util/grub.d/10_linux.in
 @@ -87,6 +87,8 @@ linux_entry ()
@@ -49,7 +49,7 @@ index 14402e8..64c9bb5 100644
    fi      
 -  if [ x$type != xrecovery ] ; then
 +  if [ x$type != xrecovery ] && [ x$type != xfallback ] ; then
-       save_default_entry | sed -e "s/^/\t/"
+       save_default_entry | grub_add_tab
    fi
  
 @@ -132,7 +134,8 @@ linux_entry ()
@@ -60,7 +60,7 @@ index 14402e8..64c9bb5 100644
 +
 +  message="$(gettext_printf "Loading Linux %s ..." "${version}")"
    sed "s/^/$submenu_indentation/" << EOF
- 	echo	'$message'
+ 	echo	'$(echo "$message" | grub_quote)'
  	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
 @@ -190,7 +193,22 @@ while [ "x$list" != "x" ] ; do
    alt_version=`echo $version | sed -e "s,\.old$,,g"`
@@ -115,11 +115,11 @@ index 14402e8..64c9bb5 100644
 +    done
 +  fi
 +
-   if [ "x$is_first_entry" = xtrue ]; then
+   if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
      linux_entry "${OS}" "${version}" simple \
      "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
-@@ -239,8 +274,11 @@ while [ "x$list" != "x" ] ; do
-     echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
+@@ -240,8 +275,11 @@ while [ "x$list" != "x" ] ; do
+     is_top_level=false
    fi
  
 +  if ! test -e "/etc/arch-release" ; then
@@ -135,7 +135,7 @@ index 14402e8..64c9bb5 100644
  # If at least one kernel was found, then we need to
  # add a closing '}' for the submenu command.
 +if ! test -e "/etc/arch-release" ; then
- if [ x"$is_first_entry" != xtrue ]; then
+ if [ x"$is_top_level" != xtrue ]; then
    echo '}'
  fi
 +fi
diff --git a/abs/core/grub/grub-10_linux-detect-archlinux-initramfs.patch b/abs/core/grub/grub-10_linux-detect-archlinux-initramfs.patch
new file mode 100644
index 0000000..18d9d52
--- /dev/null
+++ b/abs/core/grub/grub-10_linux-detect-archlinux-initramfs.patch
@@ -0,0 +1,54 @@
+From b470ffd22e43acc7c11231180187a720efd88de1 Mon Sep 17 00:00:00 2001
+From: Keshav Amburay <the.ridikulus.rat@gmail.com>
+Date: Sat, 5 Apr 2014 20:40:51 -0400
+Subject: [PATCH] 10_linux: Detect Arch Linux main and fallback initramfs
+ images
+
+---
+ util/grub.d/10_linux.in | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
+index 00d1931..7d4086b 100644
+--- a/util/grub.d/10_linux.in
++++ b/util/grub.d/10_linux.in
+@@ -81,6 +81,8 @@ linux_entry ()
+       case $type in
+ 	  recovery)
+ 	      title="$(gettext_printf "%s, with Linux %s (recovery mode)" "${os}" "${version}")" ;;
++	  fallback)
++	      title="$(gettext_printf "%s, with Linux %s (fallback initramfs)" "${os}" "${version}")" ;;
+ 	  *)
+ 	      title="$(gettext_printf "%s, with Linux %s" "${os}" "${version}")" ;;
+       esac
+@@ -180,7 +182,7 @@ while [ "x$list" != "x" ] ; do
+   basename=`basename $linux`
+   dirname=`dirname $linux`
+   rel_dirname=`make_system_path_relative_to_its_root $dirname`
+-  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
++  version=`echo $basename | sed -e "s,vmlinuz-,,g"`
+   alt_version=`echo $version | sed -e "s,\.old$,,g"`
+   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
+ 
+@@ -236,6 +238,18 @@ while [ "x$list" != "x" ] ; do
+ 
+   linux_entry "${OS}" "${version}" advanced \
+               "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
++  
++  if test -e "${dirname}/initramfs-${version}-fallback.img" ; then
++    initrd="initramfs-${version}-fallback.img"
++    
++    if test -n "${initrd}" ; then
++      gettext_printf "Found fallback initramfs image: %s\n" "${dirname}/${initrd}" >&2
++    fi
++    
++    linux_entry "${OS}" "${version}" fallback \
++    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
++  fi
++  
+   if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
+     linux_entry "${OS}" "${version}" recovery \
+                 "single ${GRUB_CMDLINE_LINUX}"
+-- 
+1.9.1
+
diff --git a/abs/core/grub/grub-2.00-mkinitcpio-0.15.patch b/abs/core/grub/grub-2.00-mkinitcpio-0.15.patch
new file mode 100644
index 0000000..1af848f
--- /dev/null
+++ b/abs/core/grub/grub-2.00-mkinitcpio-0.15.patch
@@ -0,0 +1,11 @@
+--- util/grub.d/10_linux.in.old	2013-07-28 08:55:47.825946239 +0200
++++ util/grub.d/10_linux.in	2013-07-28 08:56:14.082201512 +0200
+@@ -138,7 +138,7 @@
+   message="$(gettext_printf "Loading Linux %s ..." "${version}")"
+   sed "s/^/$submenu_indentation/" << EOF
+ 	echo	'$(echo "$message" | grub_quote)'
+-	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
++	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} rw ${args}
+ EOF
+   if test -n "${initrd}" ; then
+     # TRANSLATORS: ramdisk isn't identifier. Should be translated.
diff --git a/abs/core/grub/grub-2.00.5086-fix-lvm-parsing.patch b/abs/core/grub/grub-2.00.5086-fix-lvm-parsing.patch
new file mode 100644
index 0000000..60128ba
--- /dev/null
+++ b/abs/core/grub/grub-2.00.5086-fix-lvm-parsing.patch
@@ -0,0 +1,54 @@
+There is no explicit option to turn off alignment; it is implicitly
+disabled if one of --separator or --nameprefixes option is used.
+
+--separator was added in 2007, --nameprefixes - in 2009. So let's use
+--separator to extend range of versions we are compatible with. Note that
+one or another must be used, current parsing is broken otherwise.
+
+Signed-off-by: Andrey Borzenkov <address@hidden>
+
+---
+ util/getroot.c | 12 +++++++++---
+ 1 file changed, 9 insertions(+), 3 deletions(-)
+
+diff --git a/util/getroot.c b/util/getroot.c
+index 2ad8a55..3afcf96 100644
+--- a/util/getroot.c
++++ b/util/getroot.c
+@@ -1322,7 +1322,7 @@ grub_util_get_dev_abstraction (const char *os_dev)
+ static void
+ pull_lvm_by_command (const char *os_dev)
+ {
+-  char *argv[6];
++  char *argv[8];
+   int fd;
+   pid_t pid;
+   FILE *mdadm;
+@@ -1351,12 +1351,17 @@ pull_lvm_by_command (const char *os_dev)
+ 
+   /* execvp has inconvenient types, hence the casts.  None of these
+      strings will actually be modified.  */
++  /* by default PV name is left aligned in 10 character field, meaning that
++     we do not know where name ends. Using dummy --separator disables
++     alignment. We have a single field, so separator itself is not output */
+   argv[0] = (char *) "vgs";
+   argv[1] = (char *) "--options";
+   argv[2] = (char *) "pv_name";
+   argv[3] = (char *) "--noheadings";
+-  argv[4] = vgname;
+-  argv[5] = NULL;
++  argv[4] = (char *) "--separator";
++  argv[5] = (char *) ":";
++  argv[6] = vgname;
++  argv[7] = NULL;
+ 
+   pid = exec_pipe (argv, &fd);
+   free (vgname);
+@@ -1376,6 +1381,7 @@ pull_lvm_by_command (const char *os_dev)
+   while (getline (&buf, &len, mdadm) > 0)
+     {
+       char *ptr;
++      /* LVM adds two spaces as standard prefix */
+       for (ptr = buf; ptr < buf + 2 && *ptr == ' '; ptr++);
+       if (*ptr == '\0')
+        continue;
\ No newline at end of file
diff --git a/abs/core/grub/grub-add-GRUB_COLOR_variables.patch b/abs/core/grub/grub-add-GRUB_COLOR_variables.patch
new file mode 100644
index 0000000..c113a81
--- /dev/null
+++ b/abs/core/grub/grub-add-GRUB_COLOR_variables.patch
@@ -0,0 +1,32 @@
+diff --git a/util/grub-mkconfig.in b/util/grub-mkconfig.in
+index 3390ba9..c416489 100644
+--- a/util/grub-mkconfig.in
++++ b/util/grub-mkconfig.in
+@@ -218,6 +218,8 @@ export GRUB_DEFAULT \
+   GRUB_THEME \
+   GRUB_GFXPAYLOAD_LINUX \
+   GRUB_DISABLE_OS_PROBER \
++  GRUB_COLOR_NORMAL \
++  GRUB_COLOR_HIGHLIGHT \
+   GRUB_INIT_TUNE \
+   GRUB_SAVEDEFAULT \
+   GRUB_ENABLE_CRYPTODISK \
+diff --git a/util/grub.d/00_header.in b/util/grub.d/00_header.in
+index d2e7252..8259f45 100644
+--- a/util/grub.d/00_header.in
++++ b/util/grub.d/00_header.in
+@@ -125,6 +125,14 @@ cat <<EOF
+ 
+ EOF
+ 
++if [ x$GRUB_COLOR_NORMAL != x ] && [ x$GRUB_COLOR_HIGHLIGHT != x ] ; then
++    cat << EOF
++set menu_color_normal=$GRUB_COLOR_NORMAL
++set menu_color_highlight=$GRUB_COLOR_HIGHLIGHT
++
++EOF
++fi
++
+ serial=0;
+ gfxterm=0;
+ for x in ${GRUB_TERMINAL_INPUT} ${GRUB_TERMINAL_OUTPUT}; do
diff --git a/abs/core/grub/grub-intel-ucode.patch b/abs/core/grub/grub-intel-ucode.patch
new file mode 100644
index 0000000..de6bd28
--- /dev/null
+++ b/abs/core/grub/grub-intel-ucode.patch
@@ -0,0 +1,26 @@
+diff --git a/util/grub.d/10_linux.in b/util/grub.d/10_linux.in
+index d2e2a8f..f67e50f 100644
+--- a/util/grub.d/10_linux.in
++++ b/util/grub.d/10_linux.in
+@@ -65,6 +65,12 @@ case x"$GRUB_FS" in
+ 	;;
+ esac
+ 
++intel_ucode=
++if test -e "/boot/intel-ucode.img" ; then
++    gettext_printf "Found Intel Microcode image\n" >&2
++    intel_ucode="$(make_system_path_relative_to_its_root /boot/intel-ucode.img)"
++fi
++
+ title_correction_code=
+ 
+ linux_entry ()
+@@ -136,7 +142,7 @@ EOF
+     message="$(gettext_printf "Loading initial ramdisk ...")"
+     sed "s/^/$submenu_indentation/" << EOF
+ 	echo	'$(echo "$message" | grub_quote)'
+-	initrd	${rel_dirname}/${initrd}
++	initrd	${intel_ucode} ${rel_dirname}/${initrd}
+ EOF
+   fi
+   sed "s/^/$submenu_indentation/" << EOF
diff --git a/abs/core/grub/grub.cfg b/abs/core/grub/grub.cfg
index 1f08102..9d9144f 100644
--- a/abs/core/grub/grub.cfg
+++ b/abs/core/grub/grub.cfg
@@ -78,7 +78,7 @@ set timeout=5
 ### END /etc/grub.d/00_header ###
 
 ### BEGIN /etc/grub.d/10_linux ###
-menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-ad4103fa-d940-47ca-8506-301d8071d467' {
+menuentry 'Arch Linux, with Linux core repo kernel' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-true-ad4103fa-d940-47ca-8506-301d8071d467' {
 	load_video
 	set gfxpayload=keep
 	insmod gzio
@@ -91,11 +91,11 @@ menuentry 'Arch GNU/Linux, with Linux core repo kernel' --class arch --class gnu
 	  search --no-floppy --fs-uuid --set=root ad4103fa-d940-47ca-8506-301d8071d467
 	fi
 	echo	'Loading Linux core repo kernel ...'
-	linux	/boot/vmlinuz-linux root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 ro  quiet
+	linux	/boot/vmlinuz-linux root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 rw  quiet
 	echo	'Loading initial ramdisk ...'
 	initrd	/boot/initramfs-linux.img
 }
-menuentry 'Arch GNU/Linux, with Linux core repo kernel (Fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-fallback-ad4103fa-d940-47ca-8506-301d8071d467' {
+menuentry 'Arch Linux, with Linux core repo kernel (Fallback initramfs)' --class arch --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-core repo kernel-fallback-ad4103fa-d940-47ca-8506-301d8071d467' {
 	load_video
 	set gfxpayload=keep
 	insmod gzio
@@ -108,7 +108,7 @@ menuentry 'Arch GNU/Linux, with Linux core repo kernel (Fallback initramfs)' --c
 	  search --no-floppy --fs-uuid --set=root ad4103fa-d940-47ca-8506-301d8071d467
 	fi
 	echo	'Loading Linux core repo kernel ...'
-	linux	/boot/vmlinuz-linux root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 ro  quiet
+	linux	/boot/vmlinuz-linux root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 rw  quiet
 	echo	'Loading initial ramdisk ...'
 	initrd	/boot/initramfs-linux-fallback.img
 }
diff --git a/abs/core/grub/grub_bzr_export.sh b/abs/core/grub/grub_bzr_export.sh
deleted file mode 100644
index ff8f99e..0000000
--- a/abs/core/grub/grub_bzr_export.sh
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/env bash
-
-## For actual repos
-
-# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/lua lua
-# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/gpxe gpxe
-# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/ntldr-img ntldr-img
-# bzr branch bzr://bzr.savannah.gnu.org/grub-extras/915resolution 915resolution
-
-## For launchpad mirror
-
-# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-lua lua
-# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-gpxe gpxe
-# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-ntldr-img ntldr-img
-# bzr branch lp:~the-ridikulus-rat/grub/grub-extras-915resolution 915resolution
-
-## grub-extras zfs is integrated into grub bzr main repo and is no longer needed separately.
-
-_WD="${PWD}/"
-_OUTPUT_DIR="${_WD}/"
-
-_ACTUAL_PKGVER="2.00"
-
-_GRUB_BZR_REPO_DIR="${_WD}/grub_mainline_BZR/"
-_GRUB_BZR_EXP_REPO_DIR="${_WD}/grub_experimental_BZR/"
-_GRUB_EXTRAS_REPOS_DIR="${_WD}/grub_extras_BZR/"
-
-_MAIN_SNAPSHOT() {
-	
-	cd "${_GRUB_BZR_REPO_DIR}/"
-	echo
-	
-	_REVNUM="$(bzr revno ${_GRUB_BZR_REPO_DIR})"
-	bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub_r${_REVNUM}.tar"
-	echo
-	
-	cd "${_OUTPUT_DIR}/"
-	
-	xz -9 "${_OUTPUT_DIR}/grub_r${_REVNUM}.tar"
-	echo
-	
-}
-
-_EXP_SNAPSHOT() {
-	
-	cd "${_GRUB_BZR_EXP_REPO_DIR}/"
-	echo
-	
-	_REVNUM="$(bzr revno ${_GRUB_BZR_EXP_REPO_DIR})"
-	bzr export --root="grub-${_ACTUAL_PKGVER}" --format="tar" "${_OUTPUT_DIR}/grub_exp_r${_REVNUM}.tar"
-	echo
-	
-	cd "${_OUTPUT_DIR}/"
-	
-	xz -9 "${_OUTPUT_DIR}/grub_exp_r${_REVNUM}.tar"
-	echo
-	
-}
-
-_EXTRAS_SNAPSHOT() {
-	
-	cd "${_GRUB_EXTRAS_REPOS_DIR}/${_GRUB_EXTRAS_NAME}/"
-	echo
-	
-	_REVNUM="$(bzr revno ${_GRUB_EXTRAS_REPOS_DIR}/${_GRUB_EXTRAS_NAME})"
-	bzr export --root="${_GRUB_EXTRAS_NAME}" --format="tar" "${_OUTPUT_DIR}/grub_extras_${_GRUB_EXTRAS_NAME}_r${_REVNUM}.tar"
-	echo
-	
-	cd "${_OUTPUT_DIR}/"
-	echo
-	
-	xz -9 "${_OUTPUT_DIR}/grub_extras_${_GRUB_EXTRAS_NAME}_r${_REVNUM}.tar"
-	echo
-	
-}
-
-echo
-
-set -x -e
-
-echo
-
-_MAIN_SNAPSHOT
-
-echo
-
-# _EXP_SNAPSHOT
-
-echo
-
-_GRUB_EXTRAS_NAME="lua"
-_EXTRAS_SNAPSHOT
-
-# _GRUB_EXTRAS_NAME="gpxe"
-# _EXTRAS_SNAPSHOT
-
-_GRUB_EXTRAS_NAME="ntldr-img"
-_EXTRAS_SNAPSHOT
-
-_GRUB_EXTRAS_NAME="915resolution"
-_EXTRAS_SNAPSHOT
-
-echo
-
-set +x +e
-
-echo
-
-unset _WD
-unset _OUTPUT_DIR
-unset _GRUB_BZR_REPO_DIR
-unset _GRUB_EXTRAS_REPOS_DIR
-unset _GRUB_EXTRAS_NAME
-- 
cgit v0.12