commit: 876782989c5bc190ecc37faad40b2c2adc544c12
Author: Richard Yao <ryao <AT> gentoo <DOT> org>
AuthorDate: Sat Aug 15 20:09:26 2015 +0000
Commit: Richard Yao <ryao <AT> gentoo <DOT> org>
CommitDate: Tue Aug 25 22:16:52 2015 +0000
URL: https://gitweb.gentoo.org/proj/genkernel.git/commit/?id=87678298
Implement partial mdev support for by-id
This only supports making ata-* and virtio-* symbolic links. Support for
other types of symbolic links is missing.
Signed-off-by: Richard Yao <ryao <AT> gentoo.org>
defaults/busy-config | 6 +++---
gen_initramfs.sh | 4 ++++
mdev/helpers/storage-device | 29 +++++++++++++++++++++++++++++
mdev/mdev.conf | 2 ++
4 files changed, 38 insertions(+), 3 deletions(-)
diff --git a/defaults/busy-config b/defaults/busy-config
index aed797e..0a0e1bc 100644
--- a/defaults/busy-config
+++ b/defaults/busy-config
@@ -562,10 +562,10 @@ CONFIG_LOSETUP=y
CONFIG_LSPCI=y
CONFIG_LSUSB=y
CONFIG_MDEV=y
-# CONFIG_FEATURE_MDEV_CONF is not set
-# CONFIG_FEATURE_MDEV_RENAME is not set
+CONFIG_FEATURE_MDEV_CONF=y
+CONFIG_FEATURE_MDEV_RENAME=y
# CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set
-# CONFIG_FEATURE_MDEV_EXEC is not set
+CONFIG_FEATURE_MDEV_EXEC=y
CONFIG_FEATURE_MDEV_LOAD_FIRMWARE=y
CONFIG_MDSTART=y
# CONFIG_MKSWAP is not set
diff --git a/gen_initramfs.sh b/gen_initramfs.sh
index 99a99c4..01305f4 100755
--- a/gen_initramfs.sh
+++ b/gen_initramfs.sh
@@ -102,6 +102,10 @@ append_base_layout() {
printf "$(hostid | sed 's/\([0-9A-F]\{2\}\)/\\x\1/gI')" >
${TEMP}/initramfs-base-temp/etc/hostid
+ mkdir -p "${TEMP}/initramfs-base-temp/etc/mdev/helpers"
+ install -m 644 -t "${TEMP}/initramfs-base-temp/etc"
/usr/share/genkernel/mdev/mdev.conf
+ install -m 755 -t "${TEMP}/initramfs-base-temp/etc/mdev/helpers"
/usr/share/genkernel/mdev/helpers/storage-device
+
cd "${TEMP}/initramfs-base-temp/"
log_future_cpio_content
find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}" \
diff --git a/mdev/helpers/storage-device b/mdev/helpers/storage-device
new file mode 100644
index 0000000..1ecb472
--- /dev/null
+++ b/mdev/helpers/storage-device
@@ -0,0 +1,29 @@
+#!/bin/sh
+# License: Creative Commons Public Domain Dedication (CC0 1.0)
+# <https://creativecommons.org/publicdomain/zero/1.0/>
+
+[ -z "${MDEV}" ] && exit 22
+
+DEV="$(echo ${MDEV} | sed 's/\(.*[a-z]\)\(.*\)/\1/')"
+PART="$(echo ${MDEV} | sed 's/\(.*[a-z]\)\(.*\)/\2/')"
+
+[ -f "/sys/class/block/${DEV}/device/vpd_pg83" ] || exit 6
+
+cat "/sys/class/block/${DEV}/device/vpd_pg83" 2>&1 >/dev/null || exit 15
+
+case $DEV in
+vd*)
+ TYPE=virtio
+ ;;
+sd*)
+ TYPE=ata
+ ;;
+*)
+ exit 33
+ ;;
+esac
+
+NAME=$(echo "$(cat /sys/class/block/${DEV}/device/vpd_pg83)" | cut -c 36-95 |
sed -e 's/ \+/_/g' -e "s/\(.*\)_/${TYPE}-\1${PART:+-part$PART}/")
+
+mkdir -p /dev/disk/by-id
+ln -sf "../../${MDEV}" "/dev/disk/by-id/${NAME}"
diff --git a/mdev/mdev.conf b/mdev/mdev.conf
new file mode 100644
index 0000000..7bca988
--- /dev/null
+++ b/mdev/mdev.conf
@@ -0,0 +1,2 @@
+sd[a-z].* 0:0 660 @/etc/mdev/helpers/storage-device
+vd[a-z].* 0:0 660 @/etc/mdev/helpers/storage-device