aboutsummaryrefslogtreecommitdiff
path: root/system/memtest86+
diff options
context:
space:
mode:
authorKyle Guinn <elyk03@gmail.com>2022-12-11 16:46:17 -0600
committerWilly Sudiarto Raharjo <willysr@slackbuilds.org>2022-12-17 09:14:02 +0700
commitedcf9c5771fcc9666e00ef6257c50b51c1d1454a (patch)
tree0bf2fb4acdb32595969b264ecb78033e2e7170f4 /system/memtest86+
parentdb9f212d33f16900fcc7ff8b62aa7163b6deb453 (diff)
system/memtest86+: Add GRUB autodetection script
Signed-off-by: Kyle Guinn <elyk03@gmail.com> Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
Diffstat (limited to 'system/memtest86+')
-rw-r--r--system/memtest86+/20_memtest86+82
-rw-r--r--system/memtest86+/README34
-rw-r--r--system/memtest86+/doinst.sh14
-rw-r--r--system/memtest86+/memtest86+.SlackBuild9
4 files changed, 131 insertions, 8 deletions
diff --git a/system/memtest86+/20_memtest86+ b/system/memtest86+/20_memtest86+
new file mode 100644
index 0000000000000..f585a71cec46b
--- /dev/null
+++ b/system/memtest86+/20_memtest86+
@@ -0,0 +1,82 @@
+#!/bin/sh
+set -e
+
+prefix="/usr"
+exec_prefix="/usr"
+datarootdir="/usr/share"
+
+. "$pkgdatadir/grub-mkconfig_lib"
+
+CLASS="--class memtest86 --class gnu --class tool"
+
+prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | grub_add_tab)"
+
+memtest_entry ()
+{
+ image="$1"
+ args="$2"
+ rel_image="$(make_system_path_relative_to_its_root ${image})"
+
+ # Apply some heuristics to show some images only on particular platforms.
+ basename="$(basename ${image})"
+ ftype="$(file ${image} | cut -d: -f2)"
+ if echo "${basename}" | grep -q ".elf\$" || echo "${ftype}" | grep -q "ELF"; then
+ protocol="knetbsd"
+ platform="pc"
+ #platform="" # Uncomment to show on EFI platforms; see below.
+ elif echo "${basename}" | grep -q ".efi\$" || echo "${ftype}" | grep -q "EFI"; then
+ protocol="chainloader"
+ platform="efi"
+ else # .bin, DOS/MBR boot sector
+ protocol="linux16"
+ platform="pc"
+ #platform="" # Uncomment to show on EFI platforms; see below.
+ fi
+
+ # All images listed above should boot on EFI platforms, but many (those
+ # marked with platform="pc") will likely run without graphics and appear to
+ # the casual user to not work, so are hidden by default. (Some versions
+ # beep at startup, verifying it booted, but the display will be blank.)
+ # Serial consoles may still be useful.
+ #
+ # Uncomment this to un-hide all images on EFI platforms, or selectively edit
+ # the platform lines above to un-hide particular images.
+ #if [ "$platform" = "pc" ]; then
+ # platform=""
+ #fi
+
+ if echo "${ftype}" | grep -q "Linux"; then # Linux kernel x86 boot executable
+ # .efi or .bin images may also present themselves as a Linux kernel image.
+ # When booted using the "linux" protocol, these images can be used on
+ # either "pc" or "efi" platform, and on EFI platforms they may have better
+ # or native resolution graphics.
+ protocol="linux"
+ #platform="" # Uncomment to discard platform constraint chosen above.
+ fi
+
+ # TODO: Detect multiboot images, use protocol="multiboot"
+
+ # Emit the menuentry.
+ platform_indent=""
+ if [ -n "${platform}" ]; then
+ echo "if [ x\$grub_platform = x${platform} ]; then"
+ platform_indent="${grub_tab}"
+ fi
+ echo "${platform_indent}menuentry \"Memory Tester (${basename})\" ${CLASS} {"
+ if [ "${protocol}" = "linux" -o "${protocol}" = "knetbsd" ]; then
+ echo "${platform_indent}${grub_tab}load_video"
+ fi
+ printf '%s\n' "${prepare_boot_cache}" | sed "s/^/${platform_indent}/"
+ echo "${platform_indent}${grub_tab}${protocol} ${rel_image} ${args}"
+ echo "${platform_indent}}"
+ if [ -n "${platform}" ]; then
+ echo "fi"
+ fi
+}
+
+for image in $(find /boot -maxdepth 1 -type f -regex '/boot/memtest86\+.*' | sort -Vr); do
+ if is_path_readable_by_grub "${image}" ; then
+ gettext_printf "Found memtest86 image: %s\n" "${image}" >&2
+ memtest_entry "${image}" "${GRUB_CMDLINE_MEMTEST86}"
+ fi
+done
diff --git a/system/memtest86+/README b/system/memtest86+/README
index adf4504713529..5aa50f6a31852 100644
--- a/system/memtest86+/README
+++ b/system/memtest86+/README
@@ -15,13 +15,19 @@ Then run `/sbin/lilo` to update the boot loader.
Don't forget to re-run `/sbin/lilo` if you upgrade this package.
-GRUB 2 users: Append something like this to your /etc/grub.d/40_custom:
+ELILO users: Append this to your /boot/efi/EFI/Slackware/elilo.conf:
- menuentry 'memtest86+' {
- linux16 (hd0,1)/boot/memtest86+.bin
- }
+ image = memtest86+.bin
+ label = memtest86+
+
+Next, copy memtest86+.bin alongside ELILO in your ESP partition:
+`cp /boot/memtest86+.bin /boot/efi/EFI/Slackware/memtest86+.bin`
+(Alternatively, use the .efi file instead of the .bin file; both should
+work identically. Just ensure that "image" refers to an existing file.)
-Then run `grub-mkconfig -o /boot/grub/grub.cfg` to update the boot menu.
+When ELILO starts, press tab to show the available options. Increase
+the delay parameter in elilo.conf if necessary to give yourself enough
+time to make a selection.
GRUB Legacy users: Append something like this to your
@@ -31,4 +37,22 @@ GRUB Legacy users: Append something like this to your
kernel (hd0,0)/boot/memtest86+.bin
+GRUB 2 users: Auto-detected by the /etc/grub.d/20_memtest86+ script.
+Run `grub-mkconfig -o /boot/grub/grub.cfg` to update the boot menu.
+
+
+rEFInd users: Auto-detected, no additional steps required.
+You may wish to copy /boot/memtest86+-$EFIARCH-$VERSION.efi
+to /boot/efi/EFI/tools/memtest86.efi so that it will appear on the tools
+line as a memory tester tool. If at this point it appears on both
+lines, edit the "dont_scan_files" setting in your refind.conf to hide
+the extra entries, or just remove this package.
+
+
+It is possible to build an IA32 EFI image on Slackware64, if you have a
+need for it, using `ARCH=i586 ./memtest86+.SlackBuild`. Compilation
+will fail due to missing /usr/include/gnu/stubs-32.h from glibc. Copy
+that file from stubs-64.h in the same directory (or create a symlink),
+and you may delete your copy/symlink after you have created the package.
+
See /usr/doc/memtest86+-$VERSION/README.md for more info.
diff --git a/system/memtest86+/doinst.sh b/system/memtest86+/doinst.sh
new file mode 100644
index 0000000000000..26cd3dea88f69
--- /dev/null
+++ b/system/memtest86+/doinst.sh
@@ -0,0 +1,14 @@
+config() {
+ NEW="$1"
+ OLD="$(dirname $NEW)/$(basename $NEW .new)"
+ # If there's no config file by that name, mv it over:
+ if [ ! -r $OLD ]; then
+ mv $NEW $OLD
+ elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
+ # toss the redundant copy
+ rm $NEW
+ fi
+ # Otherwise, we leave the .new copy for the admin to consider...
+}
+
+config etc/grub.d/20_memtest86+.new
diff --git a/system/memtest86+/memtest86+.SlackBuild b/system/memtest86+/memtest86+.SlackBuild
index 8291411820db8..8e152e52df8ee 100644
--- a/system/memtest86+/memtest86+.SlackBuild
+++ b/system/memtest86+/memtest86+.SlackBuild
@@ -27,7 +27,7 @@ cd $(dirname $0) ; CWD=$(pwd)
PRGNAM=memtest86+
SRCNAM=memtest86plus
VERSION=${VERSION:-6.00}
-BUILD=${BUILD:-1}
+BUILD=${BUILD:-2}
TAG=${TAG:-_SBo}
PKGTYPE=${PKGTYPE:-tgz}
@@ -63,18 +63,21 @@ chmod -R u+w,go-w,a+rX-st .
cd $BUILDDIR
make
-install -D -m 0755 -s memtest.efi $PKG/boot/$PRGNAM-$EFIARCH-$VERSION.efi
-install -D -m 0644 memtest.bin $PKG/boot/$PRGNAM-$VERSION.bin
+install -D -m 0755 memtest.efi $PKG/boot/$PRGNAM-$EFIARCH-$VERSION.efi
+install -D -m 0644 memtest.bin $PKG/boot/$PRGNAM-$VERSION.bin
ln -s $PRGNAM-$EFIARCH-$VERSION.efi $PKG/boot/$PRGNAM-$EFIARCH.efi
ln -s $PRGNAM-$VERSION.bin $PKG/boot/$PRGNAM.bin
cd ..
+install -D -m 0755 $CWD/20_memtest86+ $PKG/etc/grub.d/20_memtest86+.new
+
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a $DOCS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
+cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE