From 2dfbcd36f7753bbc3a70e0c23724789ea6ac9e1a Mon Sep 17 00:00:00 2001 From: moparisthebest Date: Tue, 27 Dec 2016 00:53:40 -0500 Subject: [PATCH] Add memtest86-efi --- src/memtest86-efi/.SRCINFO | 29 +++ src/memtest86-efi/.gitignore | 9 + src/memtest86-efi/PKGBUILD | 45 +++++ src/memtest86-efi/grub.conf | 10 + src/memtest86-efi/memtest86-efi | 258 ++++++++++++++++++++++++ src/memtest86-efi/memtest86-efi.conf | 9 + src/memtest86-efi/memtest86-efi.install | 12 ++ src/memtest86-efi/systemd-boot.conf | 2 + 8 files changed, 374 insertions(+) create mode 100644 src/memtest86-efi/.SRCINFO create mode 100644 src/memtest86-efi/.gitignore create mode 100644 src/memtest86-efi/PKGBUILD create mode 100644 src/memtest86-efi/grub.conf create mode 100644 src/memtest86-efi/memtest86-efi create mode 100644 src/memtest86-efi/memtest86-efi.conf create mode 100644 src/memtest86-efi/memtest86-efi.install create mode 100644 src/memtest86-efi/systemd-boot.conf diff --git a/src/memtest86-efi/.SRCINFO b/src/memtest86-efi/.SRCINFO new file mode 100644 index 0000000..466e11c --- /dev/null +++ b/src/memtest86-efi/.SRCINFO @@ -0,0 +1,29 @@ +# Generated by mksrcinfo v8 +# Wed Dec 14 06:57:48 UTC 2016 +pkgbase = memtest86-efi + pkgdesc = A free, thorough, stand alone memory test as an EFI application + pkgver = 7.2 + pkgrel = 1 + url = http://www.memtest86.com + install = memtest86-efi.install + arch = i686 + arch = x86_64 + license = GPL2 + license = custom:PassMark + makedepends = libarchive + optdepends = efibootmgr: to add a new EFI boot entry + optdepends = grub: to add MemTest86 entry in GRUB2 menu + backup = etc/memtest86-efi/memtest86-efi.conf + source = memtest86-7.2.iso.tar.gz::http://www.memtest86.com/downloads/memtest86-iso.tar.gz + source = memtest86-efi + source = memtest86-efi.conf + source = grub.conf + source = systemd-boot.conf + md5sums = 5ac971dbe3af784c1847a693f587a667 + md5sums = 6d78d97e54e9feb75e3b1f835297ffd8 + md5sums = 6c096df3f55baf3e27c3bd605a418aa2 + md5sums = 8b4aa0e2f5d769d902459c8f8d514336 + md5sums = 496120c33c2af986933bf33456fa6cf3 + +pkgname = memtest86-efi + diff --git a/src/memtest86-efi/.gitignore b/src/memtest86-efi/.gitignore new file mode 100644 index 0000000..62786e6 --- /dev/null +++ b/src/memtest86-efi/.gitignore @@ -0,0 +1,9 @@ +* +!.gitignore +!.SRCINFO +!PKGBUILD +!memtest86-efi +!memtest86-efi.conf +!memtest86-efi.install +!grub.conf +!systemd-boot.conf diff --git a/src/memtest86-efi/PKGBUILD b/src/memtest86-efi/PKGBUILD new file mode 100644 index 0000000..8875da7 --- /dev/null +++ b/src/memtest86-efi/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: X0rg + +_pkgbasename=memtest86 +pkgname=$_pkgbasename-efi +pkgver=7.2 +pkgrel=1 +pkgdesc="A free, thorough, stand alone memory test as an EFI application" +arch=('i686' 'x86_64') +url="http://www.memtest86.com" +license=('GPL2' 'custom:PassMark') +makedepends=('libarchive') +optdepends=('efibootmgr: to add a new EFI boot entry' + 'grub: to add MemTest86 entry in GRUB2 menu') +backup=(etc/$pkgname/$pkgname.conf) +install=$pkgname.install +source=("$_pkgbasename-$pkgver.iso.tar.gz::http://www.memtest86.com/downloads/$_pkgbasename-iso.tar.gz" + "memtest86-efi" + "memtest86-efi.conf" + "grub.conf" + "systemd-boot.conf") +md5sums=('5ac971dbe3af784c1847a693f587a667' + '6d78d97e54e9feb75e3b1f835297ffd8' + '6c096df3f55baf3e27c3bd605a418aa2' + '8b4aa0e2f5d769d902459c8f8d514336' + '496120c33c2af986933bf33456fa6cf3') + +prepare() { + msg2 "Extract ISO..." + bsdtar -xf "Memtest86-$pkgver.iso" +} + +package() { + msg2 "Move MemTest86 stuff in share directory..." + [[ "$CARCH" == "i686" ]] && install -Dvm755 "$srcdir/EFI/BOOT/BOOTIA32.EFI" "$pkgdir/usr/share/$pkgname/bootia32.efi" + [[ "$CARCH" == "x86_64" ]] && install -Dvm755 "$srcdir/EFI/BOOT/BOOTX64.EFI" "$pkgdir/usr/share/$pkgname/bootx64.efi" + install -Dvm644 "$srcdir/EFI/BOOT/MT86.PNG" "$pkgdir/usr/share/$pkgname/mt86.png" + install -Dvm644 "$srcdir/EFI/BOOT/UNIFONT.BIN" "$pkgdir/usr/share/$pkgname/unifont.bin" + install -Dvm644 "$srcdir/LICENSE.RTF" "$pkgdir/usr/share/licenses/$pkgname/LICENSE.rtf" + + msg2 "Install AUR provided script..." + install -Dvm755 "$srcdir/memtest86-efi" "$pkgdir/usr/bin/memtest86-efi" + install -Dvm644 "$srcdir/memtest86-efi.conf" "$pkgdir/etc/memtest86-efi/memtest86-efi.conf" + install -Dvm644 "$srcdir/grub.conf" "$pkgdir/etc/memtest86-efi/grub.conf" + install -Dvm644 "$srcdir/systemd-boot.conf" "$pkgdir/etc/memtest86-efi/systemd-boot.conf" +} diff --git a/src/memtest86-efi/grub.conf b/src/memtest86-efi/grub.conf new file mode 100644 index 0000000..62487f1 --- /dev/null +++ b/src/memtest86-efi/grub.conf @@ -0,0 +1,10 @@ +#!/bin/sh + +cat < /dev/stderr + exit -1 + fi +} + +checkcommand() { + if ! $1 &> /dev/null; then + echo -e "${CE}Command $1 not found. Aborted.${CR}" > /dev/stderr + exit 3 + fi +} + +install() { + if [[ $install == 1 ]]; then + echo "MemTest86 is already installed in ESP. Nothing to do." > /dev/stderr + exit 1 + fi + + # Find ESP device number + partition=$(fdisk -l | grep "EFI System" | awk '{print $1}' | tail -n1) + echo -en "Press Enter if ${CB}$partition${CR} is your ESP partition, " + echo -en "else enter device path manually (like ${CB}/dev/sdXY${CR}): " + read choice + [[ -n $choice ]] && partition=$choice + + # Find ESP mount point + esp=$(mount | grep $partition | awk '{print $3}' | tail -n1) + echo -en "Press Enter if ${CB}$esp${CR} is your mount point, " + echo -en "else enter mount point manually (like ${CB}/boot/efi${CR}): " + read choice + [[ -n $choice ]] && esp=$choice + + # Check if ESP is mounted + if ! mount | grep $partition | grep -q $esp; then + echo -e "ESP ${CB}$partition${CR} is not mounted, mounting..." + if ! mount "$partition" "$esp"; then + echo -e "${CE}Fail to mount $partition on $esp. Aborted.${CR}" > /dev/stderr + exit 2 + fi + fi + echo -e "The target is: ${CB}$partition${CR} (mounted on ${CB}$esp${CR}).\n" + + # Get user choice + echo "Select $PRGNAME action to perform:" + echo -e "${CB}1${CR}: Copy shellx64.efi file on ESP's root (bit safe)" + echo -e "${CB}2${CR}: Add a new EFI boot entry (more safe)" + echo -e "${CB}3${CR}: Add a boot entry for GRUB2 menu" + echo -e "${CB}4${CR}: Add a boot entry for systemd-boot menu" + echo -e "${CB}5${CR}: Cancel" + choice=0 + while [[ $choice < 1 ]] || [[ $choice > 5 ]]; do + read choice + echo + done + + case $choice in + 1) # Install MemTest86 in $esp/ + echo -e "MemTest86 will be installed in ${CB}$esp/${CR}." + [[ -f "$esp/shell$ARCH.efi" ]] && mv -v "$esp/shell$ARCH.efi" "$esp/shell$ARCH.efi.bak" # Backup if exist + cp -v "$MEMTEST86_PATH/"* "$esp/" # Move files in ESP root + mv -v "$esp/boot$ARCH.efi" "$esp/shell$ARCH.efi" # Rename .efi file + ;; + + 2) # Install MemTest86 in $esp/EFI/memtest86/ & add an EFI boot entry + checkcommand efibootmgr + + echo -e "MemTest86 will be installed in ${CB}$esp/EFI/memtest86/${CR}." + mkdir -pv "$esp/EFI/memtest86" + cp -v "$MEMTEST86_PATH/"* "$esp/EFI/memtest86/" # Move files in memtest ESP directory + mv -v "$esp/EFI/memtest86/boot$ARCH.efi" "$esp/EFI/memtest86/memtest$ARCH.efi" # Rename .efi file + + echo -e "\nAdd a new EFI boot entry..." + efibootmgr -c -d ${partition:0:8} -p ${partition:8} -w -L "MemTest86" -l "\EFI\memtest86\memtest$ARCH.efi" # Manage efi entry + ;; + + 3) # Install MemTest86 in $esp/EFI/memtest86/ & add a file for GRUB2 + checkcommand grub-mkconfig + if [[ ! -d "/etc/grub.d/" ]]; then + echo -e "${CE}GRUB2 seems not installed on your system. Aborted.${CR}" > /dev/stderr + exit 2 + fi + + echo -e "MemTest86 will be installed in ${CB}$esp/EFI/memtest86/${CR}." + mkdir -pv "$esp/EFI/memtest86" + cp -v "$MEMTEST86_PATH/"* "$esp/EFI/memtest86/" # Move files in memtest ESP directory + mv -v "$esp/EFI/memtest86/boot$ARCH.efi" "$esp/EFI/memtest86/memtest$ARCH.efi" # Rename .efi file + + echo -e "\nAdd a new configuration file for GRUB..." + /bin/install -Dvm755 "$CONFDIR/grub.conf" "/etc/grub.d/86_memtest" + uuid=$(blkid $partition -s UUID -o value) + sed -i "s|@UUID@|$uuid|g" "/etc/grub.d/86_memtest" + sed -i "s|@ARCH@|$ARCH|g" "/etc/grub.d/86_memtest" + grub-mkconfig -o "/boot/grub/grub.cfg" + ;; + + 4) # Install MemTest86 in $esp/EFI/memtest86/ & add a file for systemd-boot + echo -e "MemTest86 will be installed in ${CB}$esp/EFI/memtest86/${CR}." + mkdir -pv "$esp/EFI/memtest86" "$esp/loader/entries" + cp -v "$MEMTEST86_PATH/"* "$esp/EFI/memtest86/" # Move files in memtest ESP directory + mv -v "$esp/EFI/memtest86/boot$ARCH.efi" "$esp/EFI/memtest86/memtest$ARCH.efi" # Rename .efi file + + echo -e "\nAdd a new configuration file for systemd-boot..." + /bin/install -Dvm644 "$CONFDIR/systemd-boot.conf" "$esp/loader/entries/memtest86-efi.conf" + sed -i "s|@ARCH@|$ARCH|g" "$esp/loader/entries/memtest86-efi.conf" + ;; + + *) # Do nothing and quit + echo -e "Canceled. MemTest86 will not be installed." + exit 0 + ;; + esac + + echo "Writting configuration..." + sed -i "s|@PARTITION@|$partition|g" "$CONFFILE" + sed -i "s|@ESP@|$esp|g" "$CONFFILE" + sed -i "s|@CHOICE@|$choice|g" "$CONFFILE" + sed -i "s|install=0|install=1|g" "$CONFFILE" + + echo -e "\nMemTest86 has been installed in ESP." +} + +update() { + if [[ $install == 0 ]]; then + echo "MemTest86 is not installed in ESP: it cannot be updated." > /dev/stderr + exit 1 + fi + + case $choice in + 1) # Update files in $esp/ + echo -e "MemTest86 will be updated in ${CB}$esp/${CR}." + cp -fv "$MEMTEST86_PATH/"* "$esp/" + mv -fv "$esp/boot$ARCH.efi" "$esp/shell$ARCH.efi" + ;; + + 2|3|4) # Update files in $esp/EFI/memtest86/ + echo -e "MemTest86 will be updated in ${CB}$esp/EFI/memtest86/${CR}." + cp -fv "$MEMTEST86_PATH/"* "$esp/EFI/memtest86/" + mv -fv "$esp/EFI/memtest86/boot$ARCH.efi" "$esp/EFI/memtest86/memtest$ARCH.efi" + ;; + esac + + echo -e "\nMemTest86 has been updated in ESP." +} + +remove() { + if [[ $install == 0 ]]; then + echo "MemTest86 is not installed in ESP: it cannot be removed." > /dev/stderr + exit 1 + fi + + case $choice in + 1) # Remove files in $esp/ + echo -e "MemTest86 will be removed from ${CB}$esp/${CR}." + rm -v "$esp/mt86.png" "$esp/shell$ARCH.efi" + [[ -f "$esp/shell$ARCH.efi.bak" ]] && mv -v "$esp/shell$ARCH.efi.bak" "$esp/shell$ARCH.efi" + ;; + + 2) # Remove files in $esp/EFI/memtest86/ & delete EFI boot entry + checkcommand efibootmgr + + echo -e "MemTest86 will be removed from ${CB}$esp/EFI/memtest86/${CR}." + rm -rfv "$esp/EFI/memtest86/" + + echo -e "\nRemove MemTest86 EFI boot entry..." + entry=$(efibootmgr | grep MemTest86 | cut -c 5-8) + [[ -n $entry ]] && efibootmgr -b $entry -B + ;; + + 3) # Remove files in $esp/EFI/memtest86/ & delete file for GRUB2 + checkcommand grub-mkconfig + + echo -e "MemTest86 will be removed from ${CB}$esp/EFI/memtest86/${CR}." + rm -rfv "$esp/EFI/memtest86/" + + echo -e "\nRemove configuration file for GRUB..." + rm -v "/etc/grub.d/86_memtest" + grub-mkconfig -o "/boot/grub/grub.cfg" + ;; + + 4) # Remove files in $esp/EFI/memtest86/ & delete file for systemd-boot + echo -e "MemTest86 will be removed from ${CB}$esp/EFI/memtest86/${CR}." + rm -rfv "$esp/EFI/memtest86/" + + echo -e "\nRemove configuration file for systemd-boot..." + rm -v "$esp/loader/entries/memtest86-efi.conf" + ;; + esac + + echo "Writting configuration..." + sed -i "s|$partition|@PARTITION@|g" "$CONFFILE" + sed -i "s|$esp|@ESP@|g" "$CONFFILE" + sed -i "s|$choice|@CHOICE@|g" "$CONFFILE" + sed -i "s|install=1|install=0|g" "$CONFFILE" + + echo -e "\nMemTest86 has been removed from ESP." +} + +status() { + echo -e "${CB}Default MemTest86 directories:${CR}" + echo -e "Configuration directory: $CONFDIR/" + echo -e "Data directory: $MEMTEST86_PATH/\n" + + if [[ $install == 0 ]]; then + echo -e "${CB}MemTest86 is not installed on your system.${CR}" + exit 1 + else + echo -e "${CB}MemTest86 is installed on your system with following parameters:${CR}" + echo -e "ESP device name: $partition" + echo -e "ESP mount point: $esp" + echo -e "Type of installation: $choice" + exit 0 + fi +} + +help() { + echo -e "Usage: $PRGNAME ACTION\n" + echo -e "Available ACTION:" + echo -e "\t-i, --install\t Install MemTest86 in ESP" + echo -e "\t-u, --update\t Update an existing installation of MemTest86" + echo -e "\t-r, --remove\t Remove MemTest86 from ESP" + echo -e "\t-s, --status\t Print and return status" + echo -e "\t-h, --help\t Print this help and exit" + echo -e "\t-a, --about\t Print informations about $PRGNAME and exit" +} + +about() { + echo -e "MemTest86 is a stand alone memory testing software, it cannot be run under an operating system." + echo -e "$PRGNAME is a script which helps you to easily use MemTest86 with your UEFI, as an EFI application." +} + +case "$1" in + -i|--install) warn; checkuid; install; exit 0;; + -u|--update) checkuid; update; exit 0;; + -r|--remove) checkuid; remove; exit 0;; + -s|--status) status;; + -h|--help) help; exit 0;; + -a|--about) warn; about; exit 0;; + *) help; exit 1;; +esac diff --git a/src/memtest86-efi/memtest86-efi.conf b/src/memtest86-efi/memtest86-efi.conf new file mode 100644 index 0000000..bbb4a10 --- /dev/null +++ b/src/memtest86-efi/memtest86-efi.conf @@ -0,0 +1,9 @@ +# +# /etc/memtest86-efi.conf +# + +MEMTEST86_PATH=/usr/share/memtest86-efi +partition=@PARTITION@ +esp=@ESP@ +choice=@CHOICE@ +install=0 diff --git a/src/memtest86-efi/memtest86-efi.install b/src/memtest86-efi/memtest86-efi.install new file mode 100644 index 0000000..a4406bc --- /dev/null +++ b/src/memtest86-efi/memtest86-efi.install @@ -0,0 +1,12 @@ +post_install() { + echo -e "You can use command \033[4mmemtest86-efi --install\033[0m as root to install MemTest86 in your ESP." +} + +post_upgrade() { + [[ -f /etc/memtest86-efi.conf.pacsave ]] && mv /etc/memtest86-efi.conf.pacsave /etc/memtest86-efi/memtest86-efi.conf + /usr/bin/memtest86-efi --status &> /dev/null && /usr/bin/memtest86-efi --update +} + +pre_remove() { + /usr/bin/memtest86-efi --status &> /dev/null && /usr/bin/memtest86-efi --remove +} diff --git a/src/memtest86-efi/systemd-boot.conf b/src/memtest86-efi/systemd-boot.conf new file mode 100644 index 0000000..593166b --- /dev/null +++ b/src/memtest86-efi/systemd-boot.conf @@ -0,0 +1,2 @@ +title MemTest86 +efi /EFI/memtest86/memtest@ARCH@.efi