aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2021-03-15 01:03:43 +0100
committerThomas Deutschmann <whissi@gentoo.org>2021-03-15 01:03:43 +0100
commit9722fb1b99011c720459fa5f11e9b78929b060ac (patch)
tree2d21dc16346b479261aebea5e6cec4edbf14b65c
parentlinuxrc: Refactor switch_root error handling (diff)
downloadgenkernel-9722fb1b99011c720459fa5f11e9b78929b060ac.tar.gz
genkernel-9722fb1b99011c720459fa5f11e9b78929b060ac.tar.bz2
genkernel-9722fb1b99011c720459fa5f11e9b78929b060ac.zip
Change --firmware-files handling
- Move from space-separated list to comma-separated list to add support for firmware files with spaces. - Add support for firmware files with spaces. - Check for specified firmware files in determine_real_args() which will allow us to error out early. - Clarify documentation. Fixes: c576f99b0b ("Misc improvements for FIRMWARE* handling") Bug: https://bugs.gentoo.org/775221 Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
-rw-r--r--doc/genkernel.8.txt4
-rwxr-xr-xgen_determineargs.sh12
-rwxr-xr-xgen_initramfs.sh4
-rw-r--r--genkernel.conf4
4 files changed, 14 insertions, 10 deletions
diff --git a/doc/genkernel.8.txt b/doc/genkernel.8.txt
index 44f3d59..aa18496 100644
--- a/doc/genkernel.8.txt
+++ b/doc/genkernel.8.txt
@@ -571,8 +571,8 @@ NOTE: System.map filename and System.map symlink name must be different.
Specify directory to copy firmware from (defaults to '/lib/firmware').
*--firmware-files*=<files>::
- Specifies specific firmware files to copy. This overrides *--firmware-dir*.
- For multiple files, separate the filenames with a comma.
+ Specifies specific firmware files or directories to copy, relative to
+ *--firmware-dir*. For multiple files, separate the filenames with a comma.
*--*[*no-*]*firmware-install*::
Enable or disables installation of firmware onto root filesystem.
diff --git a/gen_determineargs.sh b/gen_determineargs.sh
index 265c557..3e6e4dd 100755
--- a/gen_determineargs.sh
+++ b/gen_determineargs.sh
@@ -1240,10 +1240,14 @@ determine_real_args() {
if isTrue "${FIRMWARE}"
then
- for ff in ${FIRMWARE_FILES}; do
- [[ ${ff} = /* ]] && gen_die "FIRMWARE_FILES should list paths relative to FIRMWARE_DIR, not absolute."
+ IFS=',' read -r -a FIRMWARE_FILES <<< "${FIRMWARE_FILES}"
+ pushd "${FIRMWARE_DIR}" &>/dev/null || gen_die "Failed to chdir to '${FIRMWARE_DIR}'!"
+ local ff
+ for ff in "${FIRMWARE_FILES[@]}"
+ do
+ [[ ${ff} = /* ]] && gen_die "--firmware-files contains value '${ff}' which is not a relative path from '${FIRMWARE_DIR}'!"
+ [[ ! -e "${ff}" ]] && gen_die "--firmware-files contains value '${ff}' which was not found in '${FIRMWARE_DIR}'!"
done
-
- [[ "${FIRMWARE_FILES}" = *,* ]] && gen_die "FIRMWARE_FILES should be a space-separated list."
+ popd &>/dev/null || gen_die "Failed to chdir!"
fi
}
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 65a966d..9c030c5 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -1652,10 +1652,10 @@ append_firmware() {
mkdir -p "${TDIR}"/lib/firmware || gen_die "Failed to create '${TDIR}/lib/firmware'!"
- if [ -n "${FIRMWARE_FILES}" ]
+ if [ ${#FIRMWARE_FILES[@]} -gt 0 ]
then
pushd "${FIRMWARE_DIR}" &>/dev/null || gen_die "Failed to chdir to '${FIRMWARE_DIR}'!"
- cp -rL --parents --target-directory="${TDIR}/lib/firmware" ${FIRMWARE_FILES} 2>/dev/null \
+ cp -rL --parents --target-directory="${TDIR}/lib/firmware" "${FIRMWARE_FILES[@]}" 2>/dev/null \
|| gen_die "Failed to copy firmware files (${FIRMWARE_FILES}) to '${TDIR}/lib/firmware'!"
popd &>/dev/null || gen_die "Failed to chdir!"
else
diff --git a/genkernel.conf b/genkernel.conf
index a8507d1..6c350a6 100644
--- a/genkernel.conf
+++ b/genkernel.conf
@@ -147,9 +147,9 @@ NOCOLOR="false"
# Specify directory to pull from
#FIRMWARE_DIR="/lib/firmware"
-# Specify a space-separated list of firmware files or directories to include,
+# Specify a comma-separated list of firmware files or directories to include,
# relative to FIRMWARE_DIR. If empty or unset, the full contents of
-# FIRMWARE_DIR will be included.
+# FIRMWARE_DIR will be included (if FIRMWARE option above is set to YES).
#FIRMWARE_FILES=""
# Add new kernel to grub