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

Reply via email to