diff options
author | Kyle Guinn <elyk03@gmail.com> | 2022-12-11 16:46:29 -0600 |
---|---|---|
committer | Willy Sudiarto Raharjo <willysr@slackbuilds.org> | 2022-12-17 09:14:03 +0700 |
commit | 2ceb83a4a5e7cbb2fb7f42d3a1d40fa2470583c2 (patch) | |
tree | 7362bcf999d9c1844e807561e0a70624c64932a9 | |
parent | edcf9c5771fcc9666e00ef6257c50b51c1d1454a (diff) |
system/memtest86: Add GRUB autodetection script
Signed-off-by: Kyle Guinn <elyk03@gmail.com>
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
-rw-r--r-- | system/memtest86/20_memtest86 | 82 | ||||
-rw-r--r-- | system/memtest86/README | 13 | ||||
-rw-r--r-- | system/memtest86/doinst.sh | 14 | ||||
-rw-r--r-- | system/memtest86/memtest86.SlackBuild | 15 |
4 files changed, 110 insertions, 14 deletions
diff --git a/system/memtest86/20_memtest86 b/system/memtest86/20_memtest86 new file mode 100644 index 000000000000..2e820018e048 --- /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 cdb6a2877aee..b42a45b16e6a 100644 --- a/system/memtest86/README +++ b/system/memtest86/README @@ -15,15 +15,6 @@ 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: - - menuentry 'memtest86' { - linux16 (hd0,1)/boot/memtest86.bin - } - -Then run `grub-mkconfig -o /boot/grub/grub.cfg` to update the boot menu. - - GRUB Legacy users: Append something like this to your /boot/grub/menu.lst: @@ -31,4 +22,8 @@ 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. + + See /usr/doc/memtest86-$VERSION/README for more info. diff --git a/system/memtest86/doinst.sh b/system/memtest86/doinst.sh new file mode 100644 index 000000000000..22414beaee46 --- /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 62f991c21aba..1e8e9e469562 100644 --- a/system/memtest86/memtest86.SlackBuild +++ b/system/memtest86/memtest86.SlackBuild @@ -26,16 +26,18 @@ cd $(dirname $0) ; CWD=$(pwd) PRGNAM=memtest86 VERSION=${VERSION:-4.3.7} -BUILD=${BUILD:-2} +BUILD=${BUILD:-3} TAG=${TAG:-_SBo} PKGTYPE=${PKGTYPE:-tgz} # i486 only. Modify the Makefile at your own risk :-) -ARCH=i486 +ARCH=${ARCH:-$(uname -m)} +case $ARCH in + i?86) ARCH=i486 ;; + x86_64) ARCH=i486 ;; + *) echo "$ARCH is not supported." >&2; exit 1 ;; +esac -# If the variable PRINT_PACKAGE_NAME is set, then this script will report what -# the name of the created package would be, and then exit. This information -# could be useful to other scripts. if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" exit 0 @@ -94,12 +96,15 @@ install -D -m 0644 memtest.bin $PKG/boot/$PRGNAM-$VERSION.bin ln -s $PRGNAM-$VERSION $PKG/boot/$PRGNAM ln -s $PRGNAM-$VERSION.bin $PKG/boot/$PRGNAM.bin +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 |