From 71aa65208f4fe669f6d908fa2577b014bbfcad9e 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 EFI kernel hook Also made some small formatting changes. --- srcpkgs/dracut/files/dracut-uefi-hook.confd | 19 +++++++++++++ .../dracut/files/kernel-uefi-hook-postinst | 28 +++++++++++++++++++ srcpkgs/dracut/files/kernel-uefi-hook-postrm | 20 +++++++++++++ srcpkgs/dracut/template | 20 +++++++++---- 4 files changed, 82 insertions(+), 5 deletions(-) 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/files/dracut-uefi-hook.confd b/srcpkgs/dracut/files/dracut-uefi-hook.confd new file mode 100644 index 00000000000..9bee61c1530 --- /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. + +CREATE_UEFI_BUNDLES=0 +# To allow dracut to create EFI bundles, set +#CREATE_UEFI_BUNDLES=1 +# This requires an EFI stub, usually provided by the gummiboot package, +# as well as setting the kernel command line. + +# You can set the kernel command line with +#KERNEL_CMDLINE="root=..." +# or by setting kernel_cmdline in a dracut.conf(5) file. +# If you configure it there, set +#SKIP_KERNEL_CMDLINE=1 + +# You can set command line options for the dracut command +#OPTIONS= + +# Output directory for the EFI bundle +#UEFI_BUNDLE_DIR="/boot/efi/EFI/Void/" diff --git a/srcpkgs/dracut/files/kernel-uefi-hook-postinst b/srcpkgs/dracut/files/kernel-uefi-hook-postinst new file mode 100644 index 00000000000..606698dde53 --- /dev/null +++ b/srcpkgs/dracut/files/kernel-uefi-hook-postinst @@ -0,0 +1,28 @@ +#!/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 [ "x${CREATE_UEFI_BUNDLES}" != x1 ]; then + exit 0 +fi + +if [ ! -x bin/dracut ]; then + exit 0 + fi + +if [ -z "${KERNEL_CMDLINE}" ] && [ "x${SKIP_KERNEL_CMDLINE}" != x1 ]; then + echo "ERROR: You need to set the kernel command line in /etc/default/dracut-uefi-hook" + exit 1 +fi + +UEFI_BUNDLE_DIR="${UEFI_BUNDLE_DIR:-boot/efi/EFI/Void}" +OPTIONS="${OPTIONS} --force --uefi ${UEFI_BUNDLE_DIR}/linux-${VERSION}.efi ${VERSION}" + +dracut --kernel-cmdline="${KERNEL_CMDLINE}" ${OPTIONS} +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..96262222e7d --- /dev/null +++ b/srcpkgs/dracut/files/kernel-uefi-hook-postrm @@ -0,0 +1,20 @@ +#!/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" +if [ "x${CREATE_UEFI_BUNDLES}" != x1 ]; then + exit 0 +fi + +UEFI_BUNDLE_DIR="${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 3c6aca0ada6..55fdf8390f4 100644 --- a/srcpkgs/dracut/template +++ b/srcpkgs/dracut/template @@ -1,10 +1,10 @@ # Template file for 'dracut' pkgname=dracut version=050 -revision=2 +revision=3 build_style=configure configure_args="--prefix=/usr --sysconfdir=/etc" -conf_files="/etc/dracut.conf" +conf_files="/etc/dracut.conf /etc/default/dracut-uefi-hook" hostmakedepends="asciidoc pkg-config" makedepends="libkmod-devel" depends="bash coreutils cpio eudev gzip kmod>=3.7 kpartx util-linux" @@ -16,8 +16,8 @@ distfiles="https://github.com/dracutdevs/dracut/archive/${version}.tar.gz" checksum=f9dbf18597e5929221365964293212c8c9ffb7d84529c5a338c834ecab06e333 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 @@ -40,6 +40,16 @@ 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 + + # EFI bundle config and hooks + case "$XBPS_TARGET_MACHINE" in + i686*|x86_64*|aarch64*) + 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 + ;; + esac + # 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,7 +62,7 @@ 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 }