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