diff options
author | Manuel Bentele | 2020-10-07 14:34:25 +0200 |
---|---|---|
committer | Manuel Bentele | 2020-10-07 14:34:25 +0200 |
commit | 23008cde712028bc7e7d56d9fd7cbe3da07d80fa (patch) | |
tree | 71bfe3acea3a81d8bd8621d2d051240123d997e2 | |
parent | Updated QCOW file format driver with upstream patches (diff) | |
download | xloop-23008cde712028bc7e7d56d9fd7cbe3da07d80fa.tar.gz xloop-23008cde712028bc7e7d56d9fd7cbe3da07d80fa.tar.xz xloop-23008cde712028bc7e7d56d9fd7cbe3da07d80fa.zip |
Added udev rules to kernel module build of xloop
The added rules allow udev to properly detect disks and partitions
exposed by the xloop kernel module. A proper detection of disks and
partitions is needed by some command line tools from the util-linux
package.
-rw-r--r-- | CMakeLists.txt | 10 | ||||
-rw-r--r-- | kernel/CMakeLists.txt | 6 | ||||
-rw-r--r-- | kernel/udev/50-xloop.rules (renamed from udev/50-xloop.rules) | 25 |
3 files changed, 34 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 5ecf3e5..3095d7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,21 +55,23 @@ if(${CMAKE_BUILD_TYPE} MATCHES Release) set(CPACK_PACKAGING_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) # set DEB generator specific packaging options set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc-bin") - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postinst "depmod -a\n") - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postrm "depmod -a\n") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postinst "depmod -a\nudevadm control --reload-rules\n") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postrm "depmod -a\nudevadm control --reload-rules\n") set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postinst ${CMAKE_CURRENT_BINARY_DIR}/package/deb/postrm) # set RPM generator specific packaging options set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION "/lib" "/lib/modules" + "/lib/udev" "/lib/modules/${CMAKE_SYSTEM_VERSION}" "/lib/modules/${CMAKE_SYSTEM_VERSION}/extra" + "/lib/udev/rules.d" "${CPACK_PACKAGING_INSTALL_PREFIX}/share/bash-completion" "${CPACK_PACKAGING_INSTALL_PREFIX}/share/bash-completion/completions" "${CPACK_PACKAGING_INSTALL_PREFIX}/share/man" "${CPACK_PACKAGING_INSTALL_PREFIX}/share/man/man8") - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/post "depmod -a\n") - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/postun "depmod -a\n") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/post "depmod -a\nudevadm control --reload-rules\n") + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/postun "depmod -a\nudevadm control --reload-rules\n") set(CPACK_RPM_POST_INSTALL_SCRIPT_FILE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/post) set(CPACK_RPM_POST_UNINSTALL_SCRIPT_FILE ${CMAKE_CURRENT_BINARY_DIR}/package/rpm/postun) # include CPack functionality diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt index 2dace3f..0e867f6 100644 --- a/kernel/CMakeLists.txt +++ b/kernel/CMakeLists.txt @@ -74,3 +74,9 @@ add_kernel_module(xloop_file_fmt_qcow "${KERNEL_DIR}" if(${CMAKE_BUILD_TYPE} MATCHES Debug) add_subdirectory(tests) endif() + +# install udev rules for xloop devices exposed by the xloop kernel module +install(PROGRAMS ${CMAKE_CURRENT_SOURCE_DIR}/udev/50-xloop.rules + DESTINATION /lib/udev/rules.d + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + COMPONENT main) diff --git a/udev/50-xloop.rules b/kernel/udev/50-xloop.rules index 5d727bf..fac04e0 100644 --- a/udev/50-xloop.rules +++ b/kernel/udev/50-xloop.rules @@ -5,6 +5,7 @@ # scheme based on "Linux persistent device names", 2004, Hannes Reinecke <hare@suse.de> ACTION=="remove", GOTO="xloop_storage_end" +ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="xloop_storage_end" SUBSYSTEM!="block", GOTO="xloop_storage_end" KERNEL!="xloop*", GOTO="xloop_storage_end" @@ -12,15 +13,33 @@ KERNEL!="xloop*", GOTO="xloop_storage_end" # ignore partitions that span the entire disk TEST=="whole_disk", GOTO="xloop_storage_end" -# for partitions import parent information -ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" +# For partitions import parent disk ID_* information, except ID_FS_*. +# +# This is particularly important on media where a filesystem superblock and +# partition table are found on the same level, e.g. common Linux distro ISO +# installation media. +# +# In the case where a partition device points to the same filesystem that +# was detected on the parent disk, the ID_FS_* information is already +# present on the partition devices as well as the parent, so no need to +# propagate it. In the case where the partition device points to a different +# filesystem, merging the parent ID_FS_ properties would lead to +# inconsistencies, so we avoid doing so. +ENV{DEVTYPE}=="partition", \ + IMPORT{parent}="ID_[!F]*", IMPORT{parent}="ID_", \ + IMPORT{parent}="ID_F[!S]*", IMPORT{parent}="ID_F", \ + IMPORT{parent}="ID_FS[!_]*", IMPORT{parent}="ID_FS" # by-path ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" +KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" +# compatible links for ATA devices +KERNEL!="mmcblk[0-9]boot[0-9]", ENV{DEVTYPE}=="disk", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}" +ENV{DEVTYPE}=="partition", ENV{ID_PATH_ATA_COMPAT}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH_ATA_COMPAT}-part%n" # probe filesystem metadata of disks -IMPORT{builtin}="blkid" +KERNEL!="sr*", IMPORT{builtin}="blkid" # by-label/by-uuid links (filesystem metadata) ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" |