From 55b087f5e57aab092222a7e436f730b49e20fcc5 Mon Sep 17 00:00:00 2001 From: Doan Tran Cong Danh Date: Sat, 9 Nov 2019 16:02:49 +0700 Subject: [PATCH] refind: add hook to update refind.conf on changing kernel --- srcpkgs/refind/files/kernel.post-install | 54 ++++++++++++++++++++ srcpkgs/refind/files/kernel.post-remove | 28 ++++++++++ srcpkgs/refind/files/refind-kernel-hook.conf | 22 ++++++++ srcpkgs/refind/template | 8 ++- 4 files changed, 111 insertions(+), 1 deletion(-) create mode 100755 srcpkgs/refind/files/kernel.post-install create mode 100755 srcpkgs/refind/files/kernel.post-remove create mode 100644 srcpkgs/refind/files/refind-kernel-hook.conf diff --git a/srcpkgs/refind/files/kernel.post-install b/srcpkgs/refind/files/kernel.post-install new file mode 100755 index 00000000000..20dd149a807 --- /dev/null +++ b/srcpkgs/refind/files/kernel.post-install @@ -0,0 +1,54 @@ +#!/bin/sh +# +# Kernel hook for refind. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +. "${ROOTDIR}/etc/default/refind-kernel-hook.conf" +if [ "z$UPDATE_REFIND_CONF" != "z1" ]; then + exit 0; +fi + +# Default refind.conf +REFIND_CONF="${REFIND_CONF:-/boot/EFI/refind/refind.conf}" + +zrefind_dir="${REFIND_CONF%/*}" +mkdir -p "$zrefind_dir" +touch "$REFIND_CONF" + +zefi_mountpoint=$(df -P "$REFIND_CONF" | awk 'NR==2{print $6}') +zicon="${zrefind_dir#$zefi_mountpoint}/icons/os_void.png" + +mkedscript() { + zversion=$(echo $VERSION | sed 's/[.]/[.]/g') + zexpr='^menuentry "Void Linux '"$zversion"'" {$' + if grep -q "$zexpr" "$REFIND_CONF"; then + # Do not merge into /expr/,/}/d, it doesn't work + printf '%s\n' "/$zexpr/" '.,/}/d' + fi + + cat </dev/null +exit 0 diff --git a/srcpkgs/refind/files/kernel.post-remove b/srcpkgs/refind/files/kernel.post-remove new file mode 100755 index 00000000000..98ff754f570 --- /dev/null +++ b/srcpkgs/refind/files/kernel.post-remove @@ -0,0 +1,28 @@ +#!/bin/sh +# +# Kernel hook for refind. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +. "${ROOTDIR}/etc/default/refind-kernel-hook.conf" +if [ "z$UPDATE_REFIND_CONF" != "z1" ]; then + exit 0; +fi + +# Default refind.conf +REFIND_CONF="${REFIND_CONF:-/boot/EFI/refind/refind.conf}" + +[ -f "$REFIND_CONF" ] || exit 0 + +tmpfile=$(mktemp /tmp/refind.XXXXXXX) +zversion=$(echo $VERSION | sed 's/[.]/[.]/g') +sed "/^menuentry \"Void Linux $zversion\" [{]\$/,/[}]/d" "$REFIND_CONF" >"$tmpfile" + +if ! cmp -s "$REFIND_CONF" "$tmpfile"; then + mv "$tmpfile" "$REFIND_CONF" +else + rm -f "$tmpfile" +fi diff --git a/srcpkgs/refind/files/refind-kernel-hook.conf b/srcpkgs/refind/files/refind-kernel-hook.conf new file mode 100644 index 00000000000..c674f477a22 --- /dev/null +++ b/srcpkgs/refind/files/refind-kernel-hook.conf @@ -0,0 +1,22 @@ +#!/bin/sh + +# Change this line to 1 to update refind conf whenever new kernel is installed +UPDATE_REFIND_CONF=1 + +# refind.conf location +# It usually stay in +# +# /boot/EFI/refind/refind.conf +# if you use all default configuration and EFI partition mounted to /boot +# /boot/efi/EFI/refind/refind.conf +# if using default configuration and EFI partition mounted to /boot/efi +# /boot/EFI/BOOT/refind.conf +# if you run refind-install ==usedefault and EFI partition mounted to /boot +# /boot/efi/EFI/BOOT/refind.conf +# likewise, EFI mounted to /boot/efi +# /efi/EFI/refind/refind.conf +# /eif/EFI/BOOT/refind.conf +REFIND_CONF=/boot/EFI/refind/refind.conf + +# addition kernel cmdline +OPTIONS="quiet" diff --git a/srcpkgs/refind/template b/srcpkgs/refind/template index dd247174d5f..5417f03a46b 100644 --- a/srcpkgs/refind/template +++ b/srcpkgs/refind/template @@ -1,7 +1,7 @@ # Template file for 'refind' pkgname=refind version=0.11.4 -revision=1 +revision=2 makedepends="gnu-efi-libs git" depends="bash dosfstools efibootmgr" short_desc="An EFI boot manager utility" @@ -10,6 +10,7 @@ license="GPL-3.0-only, BSD-3-Clause" homepage="https://sourceforge.net/projects/refind/" distfiles="${SOURCEFORGE_SITE}/refind/refind-src-${version}.tar.gz" checksum=39baf140603951da098238c1cbf4176fdd7d4a45fab0399e9985ad7368034dae +conf_files="/etc/default/refind-kernel-hook.conf" case "$XBPS_TARGET_MACHINE" in x86_64|i686|aarch64) ;; @@ -85,4 +86,9 @@ do_install() { vmkdir etc/refind.d vcopy keys /etc/refind.d/ + vinstall "${FILESDIR}/refind-kernel-hook.conf" 644 etc/default + vinstall ${FILESDIR}/kernel.post-install 744 \ + etc/kernel.d/post-install 50-refind + vinstall ${FILESDIR}/kernel.post-remove 744 \ + etc/kernel.d/post-remove 50-refind }