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}" \