From e01efa4e1cd4604a9f59c6020440d012e6445a77 Mon Sep 17 00:00:00 2001 From: Jonathan Steffan Date: Fri, 30 Jun 2023 15:12:20 -0600 Subject: [PATCH] Use kernel-install to manage BLS (rhbz#2209779) - Use KERNEL_INSTALL_PLUGINS to define configuration logic - Require systemd > 252 that has support for KERNEL_INSTALL_PLUGINS --- memtest86+.kernel-install-plugin | 98 ++++++++++++++++++++++++++++++++ memtest86+.spec | 43 +++++++------- 2 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 memtest86+.kernel-install-plugin diff --git a/memtest86+.kernel-install-plugin b/memtest86+.kernel-install-plugin new file mode 100644 index 0000000..9710771 --- /dev/null +++ b/memtest86+.kernel-install-plugin @@ -0,0 +1,98 @@ +#!/usr/bin/bash + +# Sanity Checks +if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then + exit 0 +fi +if ! [[ $KERNEL_INSTALL_BOOT_ROOT ]]; then + exit 0 +fi + +# Setup variables +[[ -f /etc/default/grub ]] && . /etc/default/grub +[[ -f /etc/os-release ]] && . /etc/os-release + +COMMAND="$1" +MEMTEST_VERSION="$2" +BOOT_DIR_ABS="$3" +MEMTEST_IMAGE="$4" + +IMAGE_DIR="${MEMTEST_IMAGE%/*}" +BOOT_ROOT="${KERNEL_INSTALL_BOOT_ROOT}" +MACHINE_ID="${KERNEL_INSTALL_MACHINE_ID}" +BLS_DIR="${BOOT_ROOT}/loader/entries" +BLS_ENTRY="${BLS_DIR}/${MACHINE_ID}-0-memtest86+.conf" + +# Setup functions +mkbls_grub() { + local memtestver=$1 && shift + local memtestimg=$1 && shift + + cat </dev/null && \ + restorecon -R "${BOOT_ROOT}/${i##*/}" + done + fi + + # Generate GRUB BLS, if enabled + if [[ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]]; then + [[ -d "$BLS_DIR" ]] || mkdir -m 0700 -p "$BLS_DIR" + mkbls_grub "${MEMTEST_VERSION}" "${MEMTEST_IMAGE##*/}" > "${BLS_ENTRY}" + command -v restorecon &>/dev/null && restorecon -R "${BLS_ENTRY}" + + MEMTEST_LOC="$(grep '^linux[ \t]' "${BLS_ENTRY}" | sed -e 's,^linux[ \t]*,,')" + if [[ "$(grub2-probe --device $(grub2-probe --target=device /) --target=fs)" == "btrfs" && + "${SUSE_BTRFS_SNAPSHOT_BOOTING}" == "true" ]]; then + MEMTEST_RELPATH="$(grub2-mkrelpath -r ${BOOT_ROOT}${MEMTEST_LOC})" + else + MEMTEST_RELPATH="$(grub2-mkrelpath ${BOOT_ROOT}${MEMTEST_LOC})" + fi + + BOOTPREFIX="$(dirname ${MEMTEST_RELPATH})" + + if [[ "${MEMTEST_LOC}" != "${MEMTEST_RELPATH}" ]]; then + sed -i -e "s,^linux.*,linux ${BOOTPREFIX}${MEMTEST_LOC},g" "${BLS_ENTRY}" + fi + + exit 77 + fi + ;; + remove) + # Find MEMTEST_IMAGE location in BLS_ENTRY, delete both MEMTEST_IMAGE and BLS_ENTRY + if [[ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]]; then + if [[ -f "${BLS_ENTRY}" ]]; then + MEMTEST_IMAGE="$(grep '^linux[ \t]' "${BLS_ENTRY}" | sed -e 's,^linux[ \t]*,,')" + if [[ -f "${BOOT_ROOT}${MEMTEST_IMAGE}" ]]; then + rm -f "${BOOT_ROOT}${MEMTEST_IMAGE}" + fi + rm -f "${BLS_ENTRY}" + fi + + exit 77 + fi + ;; + *) + ;; +esac diff --git a/memtest86+.spec b/memtest86+.spec index a4f2d98..4e52b8d 100644 --- a/memtest86+.spec +++ b/memtest86+.spec @@ -15,16 +15,18 @@ Memtest86+. %global mt_isa ia32 %endif -Name: memtest86+ -Version: 6.20 -Release: %autorelease -Summary: Stand-alone memory tester for x86-64 computers -License: GPL-2.0-only -URL: https://www.memtest.org/ -Source0: https://github.com/memtest86plus/memtest86plus/archive/v%{version}/memtest86-plus-%{version}.tar.gz +Name: memtest86+ +Version: 6.20 +Release: %autorelease +Summary: Stand-alone memory tester for x86-64 computers +License: GPL-2.0-only +URL: https://www.memtest.org/ +Source0: https://github.com/memtest86plus/memtest86plus/archive/v%{version}/memtest86-plus-%{version}.tar.gz +Source1: memtest86+.kernel-install-plugin -BuildRequires: gcc, make, xorriso, dosfstools, mtools -ExclusiveArch: x86_64 %{ix86} +BuildRequires: gcc, make, xorriso, dosfstools, mtools +Requires(pre): systemd-udev >= 252 +ExclusiveArch: x86_64 %{ix86} %description %wordwrap -v common_description @@ -49,6 +51,7 @@ pushd build%{__isa_bits} install -m 0644 memtest.efi %{buildroot}%{_libdir}/%{name}/memtest86+%{mt_isa}.efi install -m 0644 memtest.bin %{buildroot}%{_libdir}/%{name}/memtest86+%{mt_isa}.bin install -m 0644 memtest.iso %{buildroot}%{_datarootdir}/%{name}/memtest86+%{mt_isa}.iso +install -m 0755 %{SOURCE1} %{buildroot}%{_libdir}/%{name}/memtest86+.kernel-install-plugin popd @@ -56,27 +59,23 @@ popd %license LICENSE %doc README.md %{_libdir}/%{name}/memtest86+%{mt_isa}.* +%{_libdir}/%{name}/memtest86+.kernel-install-plugin %{_datarootdir}/%{name}/memtest86+%{mt_isa}.iso %posttrans -install -m 0644 %{_libdir}/%{name}/memtest86+%{mt_isa}.* /boot/ +MEMTEST_IMAGE="memtest86+%{mt_isa}.bin" if [ -d /sys/firmware/efi/ ]; then -cat << EOBLSEFI > /boot/loader/entries/`cat /etc/machine-id`-0-memtest86+-%{version}-uefi.%{mt_isa}.conf -title Memtest86+ v%{version} %{mt_isa} UEFI -linux /memtest86+%{mt_isa}.efi -EOBLSEFI -else -cat << EOBLSBIN > /boot/loader/entries/`cat /etc/machine-id`-0-memtest86+-%{version}-bios.%{mt_isa}.conf -title Memtest86+ v%{version} %{mt_isa} BIOS -linux /memtest86+%{mt_isa}.bin -EOBLSBIN +MEMTEST_IMAGE="memtest86+%{mt_isa}.efi" fi +KERNEL_INSTALL_PLUGINS=%{_libdir}/%{name}/memtest86+.kernel-install-plugin \ +kernel-install add %{version} %{_libdir}/%{name}/${MEMTEST_IMAGE} exit 0 -%postun + +%preun if [ $1 -eq 0 ]; then -rm -f /boot/memtest86+%{mt_isa}.* -rm -f /boot/loader/entries/`cat /etc/machine-id`-0-memtest86+-%{version}-*.%{mt_isa}.conf +KERNEL_INSTALL_PLUGINS=%{_libdir}/%{name}/memtest86+.kernel-install-plugin \ +kernel-install remove %{version} fi exit 0