]> git.pld-linux.org Git - projects/geninitrd.git/commitdiff
- multipath as mod
authorElan Ruusamäe <glen@pld-linux.org>
Sun, 16 Nov 2008 19:33:30 +0000 (19:33 +0000)
committerElan Ruusamäe <glen@pld-linux.org>
Sun, 16 Nov 2008 19:33:30 +0000 (19:33 +0000)
svn-id: @9995

Makefile
geninitrd
mod-multipath.sh [new file with mode: 0644]

index 87912469d90705eabd0d060e0edc6c7a4529e503..b7e329362b669eb735401c468bd08bd327f42ed5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -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:
        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
index e6fc45832f1865d3b4d93d724d54fc2a99c3a257..56ae9a13f2ca947f25e94ef53c9af1029408596f 100755 (executable)
--- a/geninitrd
+++ b/geninitrd
@@ -84,10 +84,6 @@ have_lvm=no
 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 @@ dm_export() {
        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 @@ find_modules_for_devpath() {
                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 @@ initrd_gen_stop_udevd() {
        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 @@ fi
 
 # 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
diff --git a/mod-multipath.sh b/mod-multipath.sh
new file mode 100644 (file)
index 0000000..f506e28
--- /dev/null
@@ -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
+}
This page took 0.131156 seconds and 4 git commands to generate.