diff options
author | Kyle Guinn <elyk03@gmail.com> | 2022-12-11 16:46:17 -0600 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2022-12-17 09:14:02 +0700 |
commit | edcf9c5771fcc9666e00ef6257c50b51c1d1454a (patch) | |
tree | 0bf2fb4acdb32595969b264ecb78033e2e7170f4 /system/memtest86+ | |
parent | db9f212d33f16900fcc7ff8b62aa7163b6deb453 (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+/README | 34 | ||||
-rw-r--r-- | system/memtest86+/doinst.sh | 14 | ||||
-rw-r--r-- | system/memtest86+/memtest86+.SlackBuild | 9 |
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 |