commit: 73689f82a7ef090c4d8c22eced7a56471be14156
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 23 21:06:51 2020 +0000
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
CommitDate: Thu Jul 23 22:56:48 2020 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=73689f82
ZFS: Enable UDEV support
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
defaults/initrd.scripts | 24 +++++++++++++++++-------
gen_initramfs.sh | 23 ++++++++++++++++++++++-
2 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index d2db059..304d634 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -1641,12 +1641,11 @@ start_volumes() {
local zfs_cmd="run /sbin/zpool import -N -a
${ZPOOL_CACHE} ${ZPOOL_FORCE} 2>&1"
is_log_enabled && zfs_cmd="${zfs_cmd} | tee -a
'${GK_INIT_LOG}'"
+
eval "${zfs_cmd}"
- if [ $? -eq 0 ]
+ if [ $? -ne 0 ]
then
- good_msg "Importing ZFS pools succeeded!"
- else
- bad_msg "Imported ZFS pools failed!"
+ bad_msg "Importing ZFS pools failed!"
fi
else
@@ -1660,22 +1659,33 @@ start_volumes() {
local zfs_cmd="run /sbin/zpool export
-f '${ZFS_POOL}' 2>&1"
is_log_enabled && zfs_cmd="${zfs_cmd} |
tee -a '${GK_INIT_LOG}'"
+
eval "${zfs_cmd}"
+ if [ $? -ne 0 ]
+ then
+ bad_msg "Exporting ZFS pools
failed!"
+ else
+ udevsettle
+ fi
zfs_cmd="run /sbin/zpool import -N
${ZPOOL_CACHE} ${ZPOOL_FORCE} '${ZFS_POOL}' 2>&1"
is_log_enabled && zfs_cmd="${zfs_cmd} |
tee -a '${GK_INIT_LOG}'"
+
eval "${zfs_cmd}"
+ if [ $? -ne 0 ]
+ then
+ bad_msg "Re-importing ZFS pools
failed!"
+ fi
fi
else
good_msg "Importing ZFS pool ${ZFS_POOL} ..."
local zfs_cmd="run /sbin/zpool import -N
${ZPOOL_CACHE} ${ZPOOL_FORCE} '${ZFS_POOL}' 2>&1"
is_log_enabled && zfs_cmd="${zfs_cmd} | tee -a
'${GK_INIT_LOG}'"
+
eval "${zfs_cmd}"
- if [ $? -eq 0 ]
+ if [ $? -ne 0 ]
then
- good_msg "Import of ${ZFS_POOL}
succeeded!"
- else
bad_msg "Import of ${ZFS_POOL} failed!"
fi
fi
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 24b23bb..570100e 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -992,7 +992,6 @@ append_zfs() {
fi
mkdir "${TDIR}" || gen_die "Failed to create '${TDIR}'!"
- cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!"
mkdir -p "${TDIR}"/etc/zfs || gen_die "Failed to create
'${TDIR}/etc/zfs'!"
@@ -1022,6 +1021,28 @@ append_zfs() {
copy_binaries "${TDIR}" /sbin/{mount.zfs,zdb,zfs,zpool}
+ local udevdir=$(get_udevdir)
+ local udevdir_initramfs="/usr/lib/udev"
+ local udev_files=( $(qlist -e sys-fs/zfs:0 \
+ | xargs --no-run-if-empty realpath \
+ | grep -E -- "^${udevdir}")
+ )
+
+ if [ ${#udev_files[@]} -eq 0 ]
+ then
+ gen_die "Something went wrong: Did not found any udev-related
files for sys-fs/zfs!"
+ fi
+
+ mkdir -p "${TDIR}"/usr/lib/udev/rules.d || gen_die "Failed to create
'${TDIR}/usr/lib/udev/rules.d'!"
+
+ local udev_files
+ for udev_file in "${udev_files[@]}"
+ do
+ local
dest_file="${TDIR%/}${udev_file/${udevdir}/${udevdir_initramfs}}"
+ cp -aL "${udev_file}" "${dest_file}" \
+ || gen_die "Failed to copy '${udev_file}' to
'${dest_file}'"
+ done
+
cd "${TDIR}" || gen_die "Failed to chdir to '${TDIR}'!"
log_future_cpio_content
find . -print0 | "${CPIO_COMMAND}" ${CPIO_ARGS} --append -F
"${CPIO_ARCHIVE}" \