SVN: geninitrd/trunk: Makefile geninitrd mod-dmraid.sh

glen glen at pld-linux.org
Mon Nov 24 01:17:49 CET 2008


Author: glen
Date: Mon Nov 24 01:17:49 2008
New Revision: 10003

Added:
   geninitrd/trunk/mod-dmraid.sh
Modified:
   geninitrd/trunk/Makefile
   geninitrd/trunk/geninitrd
Log:
- modularize dmraid

Modified: geninitrd/trunk/Makefile
==============================================================================
--- geninitrd/trunk/Makefile	(original)
+++ geninitrd/trunk/Makefile	Mon Nov 24 01:17:49 2008
@@ -1,6 +1,6 @@
 # when making release, make sure you do it as RELEASE document describes
 VERSION		:= 10000
-MODS		:= mod-luks.sh mod-multipath.sh
+MODS		:= mod-luks.sh mod-multipath.sh mod-dmraid.sh
 FILES		:= Makefile geninitrd.sysconfig geninitrd functions $(MODS) geninitrd.8 geninitrd.8.xml ChangeLog
 prefix		:= /usr
 mandir		:= $(prefix)/share/man

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd	(original)
+++ geninitrd/trunk/geninitrd	Mon Nov 24 01:17:49 2008
@@ -82,8 +82,6 @@
 have_lvm=no
 # if we should init md (softraid) at boot
 have_md=no
-# if we should init dmraid at boot
-have_dmraid=no
 
 usage() {
 	uname_r=$(uname -r)
@@ -103,7 +101,7 @@
 	echo ""
 	echo "example:"
 	echo "  $PROGRAM -f --initrdfs=rom /boot/initrd-$uname_r.gz $uname_r"
-	exit 1
+	exit 0
 }
 
 msg() {
@@ -724,34 +722,6 @@
 	esac
 }
 
-
-# find dmraid modules for $devpath
-# returns false if $devpath is not on dmraid
-find_modules_dmraid() {
-	local devpath="$1"
-
-	# get blockdev itself (without partition)
-	# /dev/mapper/sil_ahbgadcbchfc3 -> /dev/mapper/sil_ahbgadcbchfc
-	local blockdev=${devpath%%[0-9]*}
-	local raidname=${blockdev#/dev/mapper/}
-	local found=0
-
-	local dev phydevs=$(dmraid -r -cdevpath,raidname | awk -F, -vv="$raidname" '{if ($2 == v) print $1}')
-	for dev in $phydevs; do
-		find_modules_for_devpath $dev
-		lvm_ignore_devices="$lvm_ignore_devices $dev"
-		found=1
-	done
-
-	if [ $found = 0 ]; then
-		return 1
-	fi
-
-	findmodule "dm-mirror"
-	have_dmraid=yes
-	return 0
-}
-
 # find modules for $devpath
 find_modules_for_devpath() {
 	local devpath="$1"
@@ -807,7 +777,7 @@
 		# fallback
 	fi
 
-	if is_yes "$USE_DMRAID" && is_yes "$(echo "$devpath" | awk '/^\/dev\/mapper\/(sil|hpt37x|hpt45x|isw|lsi|nvidia|pdc|sil|via|dos)_/ { print "yes"; }')"; then
+	if is_dmraid "$devpath"; then
 		if find_modules_dmraid "$devpath"; then
 			return
 		fi
@@ -1110,26 +1080,6 @@
 }
 
 
-initrd_gen_dmraid() {
-	if [ ! -x /sbin/dmraid-initrd ]; then
-		die "/sbin/dmraid-initrd is missing!"
-	fi
-
-	inst_d /sbin
-	inst_exec /sbin/dmraid-initrd /sbin/dmraid
-
-	mount_dev
-	mount_sys
-	initrd_gen_devices
-	add_linuxrc <<-EOF
-		# 2 secs was enough for my system to initialize. but really this is udev issue?
-		usleep 2000000
-		: 'Activating Device-Mapper RAID(s)'
-		/sbin/dmraid -ay -i
-
-		debugshell
-	EOF
-}
 
 initrd_gen_bootsplash() {
 	local target="$1"
@@ -1607,14 +1557,12 @@
 	. /etc/udev/udev.conf
 fi
 
-if [ -x /sbin/dmraid-initrd ]; then
-	USE_DMRAID=yes
-fi
-
 # cryptsetup luks addon
 . /etc/geninitrd/mod-luks.sh
 # dm-multipath addon
 . /etc/geninitrd/mod-multipath.sh
+# dmraid addon
+. /etc/geninitrd/mod-dmraid.sh
 
 if [ -x /sbin/initrd-blkid ]; then
 	USE_BLKID=yes
@@ -1776,7 +1724,8 @@
 		elif [ -z "$kernel" ]; then
 			kernel="$1"
 		else
-			usage
+			usage >&2
+			exit 1
 		fi
 		;;
 	esac
@@ -1785,7 +1734,8 @@
 done
 
 if [ -z "$target" -o -z "$kernel" ]; then
-	usage
+	usage >&2
+	exit 1
 fi
 
 if [ ! -f /boot/vmlinuz-"$kernel" ]; then

Added: geninitrd/trunk/mod-dmraid.sh
==============================================================================
--- (empty file)
+++ geninitrd/trunk/mod-dmraid.sh	Mon Nov 24 01:17:49 2008
@@ -0,0 +1,81 @@
+#!/bin/sh
+#
+# geninitrd mod: dmraid
+
+# if we should init dmraid at boot
+have_dmraid=no
+
+if [ -x /sbin/dmraid-initrd ]; then
+	USE_DMRAID=yes
+else
+	USE_DMRAID=no
+fi
+
+# return true if dmraid is set on $devpath
+# @param	string $devpath device node to be examined
+# @access	public
+is_dmraid() {
+	local devpath="$1"
+
+	# dmraid disabled
+	if ! is_yes "$USE_DMRAID"; then
+		return 1
+	fi
+
+	if ! is_yes "$(echo "$devpath" | awk '/^\/dev\/mapper\/(sil|hpt37x|hpt45x|isw|lsi|nvidia|pdc|sil|via|dos)_/ { print "yes"; }')"; then
+		return
+	fi
+}
+
+# find dmraid modules for $devpath
+# @param	$devpath	device to be examined
+# @return	false if $devpath is not on dmraid
+# @access	public
+find_modules_dmraid() {
+	local devpath="$1"
+
+	# get blockdev itself (without partition)
+	# /dev/mapper/sil_ahbgadcbchfc3 -> /dev/mapper/sil_ahbgadcbchfc
+	local blockdev=${devpath%%[0-9]*}
+	local raidname=${blockdev#/dev/mapper/}
+	local found=0
+
+	local dev phydevs=$(dmraid -r -cdevpath,raidname | awk -F, -vv="$raidname" '{if ($2 == v) print $1}')
+	for dev in $phydevs; do
+		find_modules_for_devpath $dev
+		lvm_ignore_devices="$lvm_ignore_devices $dev"
+		found=1
+	done
+
+	if [ $found = 0 ]; then
+		return 1
+	fi
+
+	findmodule "dm-mirror"
+	have_dmraid=yes
+	return 0
+}
+
+# generate initrd fragment for dmraid
+# @access	public
+initrd_gen_dmraid() {
+	if [ ! -x /sbin/dmraid-initrd ]; then
+		die "/sbin/dmraid-initrd is missing!"
+	fi
+
+	inst_d /sbin
+	inst_exec /sbin/dmraid-initrd /sbin/dmraid
+
+	mount_dev
+	mount_sys
+	initrd_gen_devices
+	add_linuxrc <<-EOF
+		# 2 secs was enough for my system to initialize.
+	   	# XXX: shouldn't just call 'udevadm settle' ?
+		usleep 2000000
+		: 'Activating Device-Mapper RAID(s)'
+		/sbin/dmraid -ay -i
+
+		debugshell
+	EOF
+}


More information about the pld-cvs-commit mailing list