summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Bentele2020-10-07 14:34:25 +0200
committerManuel Bentele2020-10-07 14:34:25 +0200
commit23008cde712028bc7e7d56d9fd7cbe3da07d80fa (patch)
tree71bfe3acea3a81d8bd8621d2d051240123d997e2
parentUpdated QCOW file format driver with upstream patches (diff)
downloadxloop-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.txt10
-rw-r--r--kernel/CMakeLists.txt6
-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}"