SVN: geninitrd/trunk: Makefile geninitrd mod-multipath.sh
glen
glen at pld-linux.org
Sun Nov 16 20:33:30 CET 2008
Author: glen
Date: Sun Nov 16 20:33:30 2008
New Revision: 9995
Added:
geninitrd/trunk/mod-multipath.sh
Modified:
geninitrd/trunk/Makefile
geninitrd/trunk/geninitrd
Log:
- multipath as mod
Modified: geninitrd/trunk/Makefile
==============================================================================
--- geninitrd/trunk/Makefile (original)
+++ geninitrd/trunk/Makefile Sun Nov 16 20:33:30 2008
@@ -1,6 +1,7 @@
# when making release, make sure you do it as RELEASE document describes
VERSION := 9000.17
-FILES := Makefile geninitrd.sysconfig geninitrd functions mod-luks.sh geninitrd.8 geninitrd.8.xml ChangeLog
+MODS := mod-luks.sh mod-multipath.sh
+FILES := Makefile geninitrd.sysconfig geninitrd functions $(MODS) geninitrd.8 geninitrd.8.xml ChangeLog
prefix := /usr
mandir := $(prefix)/share/man
sbindir := /sbin
@@ -14,7 +15,9 @@
install geninitrd $(DESTDIR)$(sbindir)/geninitrd
install -m644 geninitrd.8 $(DESTDIR)$(mandir)/man8/geninitrd.8
install -m644 functions $(DESTDIR)$(sysconfdir)/functions
- install -m644 mod-luks.sh $(DESTDIR)$(sysconfdir)
+ for mod in $(MODS); do \
+ install -m644 $$mod $(DESTDIR)$(sysconfdir); \
+ done
install -m644 geninitrd.sysconfig $(DESTDIR)$(sysconfigdir)/geninitrd
geninitrd.8: geninitrd.8.xml
Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd (original)
+++ geninitrd/trunk/geninitrd Sun Nov 16 20:33:30 2008
@@ -84,10 +84,6 @@
have_md=no
# if we should init dmraid at boot
have_dmraid=no
-# if we should init dm-multipath at boot
-have_multipath=no
-# dm-multipath wwid which is used for rootfs
-MPATH_WWID=
usage() {
uname_r=$(uname -r)
@@ -728,51 +724,6 @@
esac
}
-# find dm-multipath modules for $devpath
-# returns false if $devpath is not dm-multipath
-find_modules_multipath() {
- local devpath="$1"
-
- DM_NAME=
- eval $(dm_export "$devpath")
- if [ -z "$DM_NAME" ]; then
- die "dm_export failed unexpectedly"
- fi
-
- # Partition:
- # DM_NAME=LUN-28p1
- # DM_UUID=part1-mpath-36006016002c11800a0aa05fbfae0db11
- # Disk:
- # DM_NAME=LUN-28
- # DM_UUID=mpath-36006016002c11800a0aa05fbfae0db11
- MPATH_WWID=${DM_UUID##*-}
-
- local info=$(multipath -l $MPATH_WWID)
- if [ -z "$info" ]; then
- return 1
- fi
-
- debug "Finding modules for dm-multipath (WWID=$MPATH_WWID)"
- have_multipath=yes
- local dev phydevs=$(echo "$info" | awk '$2 ~ /^[0-9]+:[0-9]+:[0-9]+:[0-9]+$/{printf("/dev/%s\n", $3)}')
- for dev in $phydevs; do
- find_modules_for_devpath $dev
- lvm_ignore_devices="$lvm_ignore_devices $dev"
- done
-
- local hw hwhandlers=$(echo "$info" | awk '/hwhandler=1/{sub(/.*hwhandler=1 /, ""); sub(/\]$/, ""); print}')
- for hw in $hwhandlers; do
- findmodule "dm-$hw"
- done
-
- local target targets=$(echo "$info" | awk '/prio=/{print $2}' | sort -u)
- for target in $targets; do
- findmodule "dm-$target"
- done
-
- findmodule "dm-mod"
- return 0
-}
# find dmraid modules for $devpath
# returns false if $devpath is not on dmraid
@@ -849,7 +800,7 @@
return
fi
- if is_yes "$USE_MULTIPATH" && [[ "$devpath" == /dev/mapper/* ]]; then
+ if is_multipath "$devpath"; then
if find_modules_multipath "$devpath"; then
return
fi
@@ -1158,51 +1109,6 @@
EOF
}
-initrd_gen_multipath() {
- inst_d /sbin /lib/udev /etc/multipath
- inst_exec /sbin/kpartx /sbin
- inst_exec /sbin/multipath /sbin
- # for udev callouts
- inst_exec /sbin/scsi_id /lib/udev
- inst_exec /sbin/mpath* /sbin
- egrep -v '^([ ]*$|#)' /etc/multipath.conf > $DESTDIR/etc/multipath.conf
-
- if [ -f /etc/multipath/bindings ]; then
- egrep -v '^([ ]*$|#)' /etc/multipath/bindings > $DESTDIR/etc/multipath/bindings
- else
- touch $DESTDIR/etc/multipath/bindings
- fi
-
- mount_dev
- initrd_gen_devices
-
- mount_sys
- echo "export MPATH_WWID=$MPATH_WWID" | add_linuxrc
- add_linuxrc <<-'EOF'
- # parse mpath_wwid= from kernel commandline
- for arg in $CMDLINE; do
- if [ "${arg##mpath_wwid=}" != "${arg}" ]; then
- MPATH_WWID=${arg##mpath_wwid=}
- if [ "$MPATH_WWID" = "*" ]; then
- # '*' would mean activate all WWID-s
- MPATH_WWID=
- echo "multipath: Activating all WWID-s"
- else
- echo "multipath: Activating WWID=$WWID"
- fi
- fi
- done
-
- debugshell
- /sbin/multipath -v 0 $MPATH_WWID
-
- for a in /dev/mapper/*; do
- [ $a = /dev/mapper/control ] && continue
- /sbin/kpartx -a -p p $a
- done
- debugshell
- EOF
-}
initrd_gen_dmraid() {
if [ ! -x /sbin/dmraid-initrd ]; then
@@ -1707,10 +1613,8 @@
# cryptsetup luks addon
. /etc/geninitrd/mod-luks.sh
-
-if [ -x /sbin/multipath ]; then
- USE_MULTIPATH=yes
-fi
+# dm-multipath addon
+. /etc/geninitrd/mod-multipath.sh
if [ -x /sbin/initrd-blkid ]; then
USE_BLKID=yes
Added: geninitrd/trunk/mod-multipath.sh
==============================================================================
--- (empty file)
+++ geninitrd/trunk/mod-multipath.sh Sun Nov 16 20:33:30 2008
@@ -0,0 +1,144 @@
+#!/bin/sh
+#
+# geninitrd mod: dm-multipath
+
+# if we should init dm-multipath at boot
+have_multipath=no
+
+if [ -x /sbin/multipath ]; then
+ USE_MULTIPATH=yes
+else
+ USE_MULTIPATH=no
+fi
+
+# dm-multipath wwid which is used for rootfs
+MPATH_WWID=
+
+# return true if node is multipath controlled
+# @param string $node device node to be examined
+# @access public
+is_multipath() {
+ local devpath="$1"
+
+ # multipath disabled
+ if ! is_yes "$USE_MULTIPATH"; then
+ return 1
+ fi
+
+ # multipath nodes are under device mapper
+ if [[ "$devpath" != /dev/mapper/* ]]; then
+ return 1
+ fi
+
+ DM_NAME=
+ eval $(dm_export "$devpath")
+ if [ -z "$DM_NAME" ]; then
+ die "dm_export failed unexpectedly"
+ fi
+
+ local MPATH_WWID=${DM_UUID##*-}
+ local info=$(multipath -l $MPATH_WWID)
+ if [ -z "$info" ]; then
+ return 1
+ fi
+
+ return 0
+}
+
+# find modules for $devpath
+# @param $devpath device to be examined
+# @access public
+# find dm-multipath modules for $devpath
+# returns false if $devpath is not dm-multipath
+find_modules_multipath() {
+ local devpath="$1"
+
+ DM_NAME=
+ eval $(dm_export "$devpath")
+ if [ -z "$DM_NAME" ]; then
+ die "dm_export failed unexpectedly"
+ fi
+
+ # Partition:
+ # DM_NAME=LUN-28p1
+ # DM_UUID=part1-mpath-36006016002c11800a0aa05fbfae0db11
+ # Disk:
+ # DM_NAME=LUN-28
+ # DM_UUID=mpath-36006016002c11800a0aa05fbfae0db11
+ MPATH_WWID=${DM_UUID##*-}
+
+ local info=$(multipath -l $MPATH_WWID)
+ if [ -z "$info" ]; then
+ return 1
+ fi
+
+ debug "Finding modules for dm-multipath (WWID=$MPATH_WWID)"
+ have_multipath=yes
+ local dev phydevs=$(echo "$info" | awk '$2 ~ /^[0-9]+:[0-9]+:[0-9]+:[0-9]+$/{printf("/dev/%s\n", $3)}')
+ for dev in $phydevs; do
+ find_modules_for_devpath $dev
+ lvm_ignore_devices="$lvm_ignore_devices $dev"
+ done
+
+ local hw hwhandlers=$(echo "$info" | awk '/hwhandler=1/{sub(/.*hwhandler=1 /, ""); sub(/\]$/, ""); print}')
+ for hw in $hwhandlers; do
+ findmodule "dm-$hw"
+ done
+
+ local target targets=$(echo "$info" | awk '/prio=/{print $2}' | sort -u)
+ for target in $targets; do
+ findmodule "dm-$target"
+ done
+
+ findmodule "dm-mod"
+ return 0
+}
+
+# generate initrd fragment
+# @access public
+initrd_gen_multipath() {
+ inst_d /sbin /lib/udev /etc/multipath
+ inst_exec /sbin/kpartx /sbin
+ inst_exec /sbin/multipath /sbin
+
+ # for udev callouts
+ inst_exec /sbin/scsi_id /lib/udev
+ inst_exec /sbin/mpath* /sbin
+ egrep -v '^([ ]*$|#)' /etc/multipath.conf > $DESTDIR/etc/multipath.conf
+
+ if [ -f /etc/multipath/bindings ]; then
+ egrep -v '^([ ]*$|#)' /etc/multipath/bindings > $DESTDIR/etc/multipath/bindings
+ else
+ touch $DESTDIR/etc/multipath/bindings
+ fi
+
+ mount_dev
+ initrd_gen_devices
+
+ mount_sys
+ echo "export MPATH_WWID=$MPATH_WWID" | add_linuxrc
+ add_linuxrc <<-'EOF'
+ # parse mpath_wwid= from kernel commandline
+ for arg in $CMDLINE; do
+ if [ "${arg##mpath_wwid=}" != "${arg}" ]; then
+ MPATH_WWID=${arg##mpath_wwid=}
+ if [ "$MPATH_WWID" = "*" ]; then
+ # '*' would mean activate all WWID-s
+ MPATH_WWID=
+ echo "multipath: Activating all WWID-s"
+ else
+ echo "multipath: Activating WWID=$WWID"
+ fi
+ fi
+ done
+
+ debugshell
+ /sbin/multipath -v 0 $MPATH_WWID
+
+ for a in /dev/mapper/*; do
+ [ $a = /dev/mapper/control ] && continue
+ /sbin/kpartx -a -p p $a
+ done
+ debugshell
+ EOF
+}
More information about the pld-cvs-commit
mailing list