From eec3911242b8cf6240c442dc36fcd5494aa4c5a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89rico=20Rolim?= Date: Sun, 31 May 2020 21:39:55 -0300 Subject: [PATCH] dracut: add UEFI bundle hook in dracut-uefi subpkg - small formatting changes - use relative path in kernel-hook-postrm --- srcpkgs/dracut-uefi | 1 + srcpkgs/dracut/files/dracut-uefi-hook.confd | 19 +++++++++++ srcpkgs/dracut/files/kernel-hook-postrm | 4 +-- .../dracut/files/kernel-uefi-hook-postinst | 23 +++++++++++++ srcpkgs/dracut/files/kernel-uefi-hook-postrm | 17 ++++++++++ srcpkgs/dracut/template | 34 ++++++++++++++++--- 6 files changed, 92 insertions(+), 6 deletions(-) create mode 120000 srcpkgs/dracut-uefi create mode 100644 srcpkgs/dracut/files/dracut-uefi-hook.confd create mode 100644 srcpkgs/dracut/files/kernel-uefi-hook-postinst create mode 100644 srcpkgs/dracut/files/kernel-uefi-hook-postrm diff --git a/srcpkgs/dracut-uefi b/srcpkgs/dracut-uefi new file mode 120000 index 00000000000..b3ae25a9bdd --- /dev/null +++ b/srcpkgs/dracut-uefi @@ -0,0 +1 @@ +dracut \ No newline at end of file diff --git a/srcpkgs/dracut/files/dracut-uefi-hook.confd b/srcpkgs/dracut/files/dracut-uefi-hook.confd new file mode 100644 index 00000000000..fc96090b38d --- /dev/null +++ b/srcpkgs/dracut/files/dracut-uefi-hook.confd @@ -0,0 +1,19 @@ +# Options for the dracut-uefi kernel hook script installed by the dracut package. + +# To enable EFI bundle creation in dracut, uncomment +#CREATE_UEFI_BUNDLES=yes +# This requires an EFI stub, usually provided by the gummiboot package, +# as well as setting the kernel command line. +# Booting without a kernel command line is unsupported. + +# You can set the kernel command line with +#KERNEL_CMDLINE="loglevel=4 slub_debug=P page_poison=1" +# or by setting kernel_cmdline in a dracut.conf(5) file. +# The bundle can also use the command line from a bootloader / boot manager +# if Secure Boot is disabled. + +# You can set command line options for the dracut command +#DRACUT_OPTIONS= + +# Output directory for the EFI bundle +#UEFI_BUNDLE_DIR="boot/efi/EFI/void/" diff --git a/srcpkgs/dracut/files/kernel-hook-postrm b/srcpkgs/dracut/files/kernel-hook-postrm index f35d076193b..f99458a4bfa 100644 --- a/srcpkgs/dracut/files/kernel-hook-postrm +++ b/srcpkgs/dracut/files/kernel-hook-postrm @@ -7,7 +7,7 @@ PKGNAME="$1" VERSION="$2" -if [ -f /boot/initramfs-${VERSION}.img ]; then - rm -f /boot/initramfs-${VERSION}.img +if [ -f boot/initramfs-${VERSION}.img ]; then + rm -f boot/initramfs-${VERSION}.img fi exit $? diff --git a/srcpkgs/dracut/files/kernel-uefi-hook-postinst b/srcpkgs/dracut/files/kernel-uefi-hook-postinst new file mode 100644 index 00000000000..d623c3f86df --- /dev/null +++ b/srcpkgs/dracut/files/kernel-uefi-hook-postinst @@ -0,0 +1,23 @@ +#!/bin/sh +# +# Kernel post-install hook for dracut EFI bundle. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +. "${ROOTDIR}/etc/default/dracut-uefi-hook" +if [ -z "${CREATE_UEFI_BUNDLES}" ]; then + exit 0 +fi + +if [ ! -x bin/dracut ]; then + exit 0 +fi + +mkdir -p ${UEFI_BUNDLE_DIR:=boot/efi/EFI/void} + +dracut -q --force ${KERNEL_CMDLINE:+--kernel-cmdline="${KERNEL_CMDLINE}"} ${DRACUT_OPTIONS} \ + --uefi ${UEFI_BUNDLE_DIR}/linux-${VERSION}.efi ${VERSION} +exit $? diff --git a/srcpkgs/dracut/files/kernel-uefi-hook-postrm b/srcpkgs/dracut/files/kernel-uefi-hook-postrm new file mode 100644 index 00000000000..8183bb26f08 --- /dev/null +++ b/srcpkgs/dracut/files/kernel-uefi-hook-postrm @@ -0,0 +1,17 @@ +#!/bin/sh +# +# Kernel post-remove hook for dracut EFI bundle. +# +# Arguments passed to this script: $1 pkgname, $2 version. +# +PKGNAME="$1" +VERSION="$2" + +. "${ROOTDIR}/etc/default/dracut-uefi-hook" + +: "${UEFI_BUNDLE_DIR:=boot/efi/EFI/void}" + +if [ -f "${UEFI_BUNDLE_DIR}/linux-${VERSION}.efi" ]; then + rm -fv "${UEFI_BUNDLE_DIR}/linux-${VERSION}.efi" +fi +exit $? diff --git a/srcpkgs/dracut/template b/srcpkgs/dracut/template index b11335d06e3..00a7f801192 100644 --- a/srcpkgs/dracut/template +++ b/srcpkgs/dracut/template @@ -1,7 +1,7 @@ # Template file for 'dracut' pkgname=dracut version=050 -revision=3 +revision=4 build_style=configure configure_args="--prefix=/usr --sysconfdir=/etc" conf_files="/etc/dracut.conf" @@ -14,10 +14,11 @@ license="GPL-2.0-or-later, LGPL-2.0-or-later" homepage="http://www.kernel.org/pub/linux/utils/boot/dracut/dracut.html" distfiles="https://github.com/dracutdevs/dracut/archive/${version}.tar.gz" checksum=f9dbf18597e5929221365964293212c8c9ffb7d84529c5a338c834ecab06e333 +subpackages="dracut-network" make_dirs=" - /etc/dracut.conf.d 0755 root root - /usr/lib/dracut/dracut.conf.d 0755 root root" + /etc/dracut.conf.d 0755 root root + /usr/lib/dracut/dracut.conf.d 0755 root root" case "$XBPS_TARGET_MACHINE" in *-musl) # Add musl-fts implementation @@ -25,6 +26,13 @@ case "$XBPS_TARGET_MACHINE" in ;; esac +case "$XBPS_TARGET_MACHINE" in + i686*|x86_64*|aarch64*) # EFI bundle config and hooks + _efi_bundle=1 + subpackages+=" dracut-uefi" + ;; +esac + do_build() { case "$XBPS_TARGET_MACHINE" in *-musl) make ${makejobs} LDLIBS="-lfts" ;; @@ -40,6 +48,13 @@ post_install() { # kernel hooks. vinstall ${FILESDIR}/kernel-hook-postinst 755 etc/kernel.d/post-install 20-dracut vinstall ${FILESDIR}/kernel-hook-postrm 755 etc/kernel.d/post-remove 20-dracut + + if [ "${_efi_bundle}" ]; then + vinstall ${FILESDIR}/dracut-uefi-hook.confd 644 etc/default dracut-uefi-hook + vinstall ${FILESDIR}/kernel-uefi-hook-postinst 755 etc/kernel.d/post-install 20-dracut-uefi + vinstall ${FILESDIR}/kernel-uefi-hook-postrm 755 etc/kernel.d/post-remove 20-dracut-uefi + fi + # We don't need the systemd stuff. rm -rf ${DESTDIR}/usr/lib/dracut/modules.d/*systemd* rm -f ${DESTDIR}/usr/share/man/man8/*.service.* @@ -52,8 +67,19 @@ dracut-network_package() { archs=noarch pkg_install() { for f in 40network 90livenet 95fcoe 95iscsi \ - 95nbd 95nfs 95zfcp 95znet; do + 95nbd 95nfs 95zfcp 95znet; do vmove usr/lib/dracut/modules.d/${f} done } } + +dracut-uefi_package() { + depends="gummiboot dracut-${version}_${revision}" + short_desc+=" - UEFI bundle hook" + conf_files="/etc/default/dracut-uefi-hook" + pkg_install() { + vmove etc/kernel.d/post-install/20-dracut-uefi + vmove etc/kernel.d/post-remove/20-dracut-uefi + vmove etc/default/dracut-uefi-hook + } +}