[memtest86+] Added support for grub2, thanks to Michal Ambroz <rebus at seznam.cz>
Jaroslav Škarvada
jskarvad at fedoraproject.org
Mon Dec 5 14:20:11 UTC 2011
commit e7f3321cff1ed30d41cac1fdeca4665478385070
Author: Jaroslav Škarvada <jskarvad at redhat.com>
Date: Mon Dec 5 15:19:53 2011 +0100
Added support for grub2, thanks to Michal Ambroz <rebus at seznam.cz>
20_memtest | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
memtest-setup | 66 ++++++++++++++++++++++---------
memtest86+.spec | 23 +++++++++--
3 files changed, 185 insertions(+), 23 deletions(-)
---
diff --git a/20_memtest b/20_memtest
new file mode 100644
index 0000000..9481ff1
--- /dev/null
+++ b/20_memtest
@@ -0,0 +1,119 @@
+#! /bin/sh
+set -e
+
+# grub-mkconfig helper script.
+# Copyright (C) 2011 Michal Ambroz <rebus at seznam.cz>
+#
+# you can redistribute it and/or modify
+# it 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.
+#
+# 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.
+#
+# You should have received a copy of the GNU General Public License
+# along with the script. If not, see <http://www.gnu.org/licenses/>.
+
+prefix=/usr
+exec_prefix=/usr
+bindir=/usr/bin
+libdir=/usr/lib
+. ${libdir}/grub/grub-mkconfig_lib
+
+export TEXTDOMAIN=grub
+export TEXTDOMAINDIR=${prefix}/share/locale
+
+CLASS=""
+
+if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
+ OS=Memtest
+else
+ OS="${GRUB_DISTRIBUTOR} Memtest"
+fi
+
+# loop-AES arranges things so that /dev/loop/X can be our root device, but
+# the initrds that Linux uses don't like that.
+case ${GRUB_DEVICE} in
+ /dev/loop/*|/dev/loop[0-9])
+ GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
+ ;;
+esac
+
+if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
+ || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" \
+ || uses_abstraction "${GRUB_DEVICE}" lvm; then
+ LINUX_ROOT_DEVICE=${GRUB_DEVICE}
+else
+ LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
+fi
+
+if [ "x`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2>/dev/null || true`" = xbtrfs ]; then
+ rootsubvol="`make_system_path_relative_to_its_root /`"
+ rootsubvol="${rootsubvol#/}"
+ if [ "x${rootsubvol}" != x ]; then
+ GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
+ fi
+fi
+
+memtest_entry ()
+{
+ os="$1"
+ version="$2"
+ recovery="$3"
+ args="$4"
+ title="$(gettext_quoted "%s %s")"
+ printf "menuentry '${title}' {\n" "${os}" "${version}"
+
+
+ if [ x$dirname = x/ ]; then
+ if [ -z "${prepare_root_cache}" ]; then
+ prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | sed -e "s/^/\t/")"
+ fi
+ printf '%s\n' "${prepare_root_cache}"
+ else
+ if [ -z "${prepare_boot_cache}" ]; then
+ prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"
+ fi
+ printf '%s\n' "${prepare_boot_cache}"
+ fi
+ message="$(gettext_printf "Loading %s %s ..." ${os} ${version})"
+ cat << EOF
+ echo '$message'
+ linux16 ${rel_dirname}/${basename}
+}
+EOF
+}
+
+case x`uname -m` in
+ xi?86 | xx86_64)
+ list=`for i in /boot/memtest* ; do
+ if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
+ done` ;;
+ *)
+ list=`for i in /boot/memtest* ; do
+ if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
+ done` ;;
+esac
+
+prepare_boot_cache=
+prepare_root_cache=
+
+while [ "x$list" != "x" ] ; do
+ linux=`version_find_latest $list`
+ echo "Found memtest image: $linux" >&2
+ 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"`
+ alt_version=`echo $version | sed -e "s,\.old$,,g"`
+ linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
+
+
+ memtest_entry "${OS}" "${version}" false \
+ "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
+
+ list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
+done
diff --git a/memtest-setup b/memtest-setup
index b308d2f..91c3b24 100755
--- a/memtest-setup
+++ b/memtest-setup
@@ -6,34 +6,62 @@ PNAME="memtest86+"
# executable
ENAME="elf-memtest86+"
+# grub2 template
+G2TEMPL="20_memtest"
+
if [ -d /sys/firmware/efi ]; then
echo "memtest86+ does not support EFI platforms."
exit 254
fi
-MTVERSION=`rpm -q --qf '%{version}' $PNAME`
-MTPATH="/boot/$ENAME-$MTVERSION"
+if [ -f /boot/grub2/grub.cfg ]; then
+ echo "grub2 detected, installing template..."
+ if [ ! -d /etc/grub.d ]; then
+ echo "ERROR: unable to find /etc/grub.d"
+ exit 253
+ fi
+ if [ -x /etc/grub.d/$G2TEMPL ]; then
+ echo "grub2 template is already installed. Exiting..."
+ exit 252
+ fi
+ if [ -f /etc/grub.d/$G2TEMPL ]; then
+ echo "grub2 template is already in place, only enabling..."
+ else
+ if [ ! -r /usr/share/memtest86+/$G2TEMPL ]; then
+ echo "ERROR: unable to find grub2 template."
+ exit 251
+ fi
+ cp /usr/share/memtest86+/$G2TEMPL /etc/grub.d
+ fi
+ chmod a+x /etc/grub.d/$G2TEMPL
+ echo "grub 2 template installed."
+ echo "Do not forget to regenerate your grub.cfg by:"
+ echo " # grub2-mkconfig -o /boot/grub2/grub.cfg"
+else
+ MTVERSION=`rpm -q --qf '%{version}' $PNAME`
+ MTPATH="/boot/$ENAME-$MTVERSION"
-MENT=`cat /boot/grub/grub.conf | grep "$ENAME-$MTVERSION"` &> /dev/null
-if [ "$MENT" != "" ]; then
- echo "$MTPATH is already configured. Exiting..."
- exit 0
-fi
+ MENT=`cat /boot/grub/grub.conf | grep "$ENAME-$MTVERSION"` &> /dev/null
+ if [ "$MENT" != "" ]; then
+ echo "$MTPATH is already configured. Exiting..."
+ exit 0
+ fi
-if [ ! -f $MTPATH ]; then
- echo "ERROR: $MTPATH does not exist."
- exit 255
-fi
+ if [ ! -f $MTPATH ]; then
+ echo "ERROR: $MTPATH does not exist."
+ exit 255
+ fi
-/sbin/new-memtest-pkg --install $MTVERSION --banner="Memtest86+"
-RETVAL="$?"
+ /sbin/new-memtest-pkg --install $MTVERSION --banner="Memtest86+"
+ RETVAL="$?"
-if [ "$RETVAL" != "0" ]; then
- echo "ERROR: grubby failed to configure your bootloader for $MTPATH."
- exit $RETVAL
-else
- sed -i -e"s,kernel \(/boot\)\?/$ENAME,kernel --type=netbsd \1/$ENAME," /boot/grub/grub.conf
- sed -i -e"s,/$ENAME-$MTVERSION.*,/$ENAME-$MTVERSION," /boot/grub/grub.conf
+ if [ "$RETVAL" != "0" ]; then
+ echo "ERROR: grubby failed to configure your bootloader for $MTPATH."
+ exit $RETVAL
+ else
+ sed -i -e"s,kernel \(/boot\)\?/$ENAME,kernel --type=netbsd \1/$ENAME," /boot/grub/grub.conf
+ sed -i -e"s,/$ENAME-$MTVERSION.*,/$ENAME-$MTVERSION," /boot/grub/grub.conf
+ fi
fi
echo "Setup complete."
diff --git a/memtest86+.spec b/memtest86+.spec
index 7b42aaa..c522b4e 100644
--- a/memtest86+.spec
+++ b/memtest86+.spec
@@ -7,13 +7,14 @@
Name: memtest86+
Version: 4.20
-Release: 1%{?dist}
+Release: 2%{?dist}
License: GPLv2
Summary: Stand-alone memory tester for x86 and x86-64 computers
Group: System Environment/Base
Source0: http://www.memtest.org/download/%{version}/%{name}-%{version}.tar.gz
Source1: memtest-setup
Source2: new-memtest-pkg
+Source3: 20_memtest
URL: http://www.memtest.org
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
# require glibc-devel.i386 via this file:
@@ -65,13 +66,22 @@ install -m755 %{SOURCE2} %{buildroot}/sbin/new-memtest-pkg
install -m755 %{SOURCE1} %{buildroot}%{_sbindir}/memtest-setup
sed -i 's/\r//' $RPM_BUILD_DIR/%{name}-%{version}/README
+mkdir -p %{buildroot}%{_sysconfdir}/boot.d
+touch %{buildroot}%{_sysconfdir}/boot.d/20_memtest
+
+install -Dd %{buildroot}%{_datadir}/%{name}
+install -m644 %{SOURCE3} %{buildroot}%{_datadir}/%{name}
+
%if %{with update_grub}
%post -p /usr/sbin/memtest-setup
%endif
%preun
-sed -i -e's,kernel --type=netbsd /elf-%{name}-%{version},kernel /elf-%{name}-%{version},' /boot/grub/grub.conf
-/sbin/new-memtest-pkg --remove %{version}
+if [ -f /boot/grub/grub.conf ]
+then
+ sed -i -e's,kernel --type=netbsd /elf-%{name}-%{version},kernel /elf-%{name}-%{version},' /boot/grub/grub.conf
+ /sbin/new-memtest-pkg --remove %{version}
+fi
%clean
rm -rf %{buildroot}
@@ -82,10 +92,15 @@ rm -rf %{buildroot}
/boot/%{name}-%{version}
/boot/elf-%{name}-%{version}
/sbin/new-memtest-pkg
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}/20_memtest
+%ghost %attr(0755,-,-) %{_sysconfdir}/boot.d/20_memtest
%{_sbindir}/memtest-setup
-
%changelog
+* Mon Dec 5 2011 Jaroslav Škarvada <jskarvad at redhat.com> - 4.20-2
+- Added support for grub2, thanks to Michal Ambroz <rebus at seznam.cz>
+
* Mon Mar 07 2011 Jaroslav Škarvada <jskarvad at redhat.com> - 4.20-1
- Update to new version (#682425)
- Removed fix-asciimap patch (not needed now)
More information about the scm-commits
mailing list