SVN: geninitrd/trunk: geninitrd mod-dmraid.sh mod-luks.sh mod-lvm.sh mod-md.sh

glen glen at pld-linux.org
Thu Apr 2 23:19:58 CEST 2009


Author: glen
Date: Thu Apr  2 23:19:58 2009
New Revision: 10274

Modified:
   geninitrd/trunk/geninitrd
   geninitrd/trunk/mod-dmraid.sh
   geninitrd/trunk/mod-luks.sh
   geninitrd/trunk/mod-lvm.sh
   geninitrd/trunk/mod-md.sh
Log:
- handle initrd programs under %{_libdir}/initrd

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd	(original)
+++ geninitrd/trunk/geninitrd	Thu Apr  2 23:19:58 2009
@@ -104,6 +104,20 @@
 	exit $rc
 }
 
+# find program from specified paths
+find_tool() {
+	local x
+	for x in "$@"; do
+		if [ -x "$x" ]; then
+			echo $x
+			debug "find_tool: found $x"
+			return 0
+		fi
+	done
+	debug "find_tool: did not found any of: $@"
+	return 1
+}
+
 # append text to /linuxrc
 # takes STDIN as input
 add_linuxrc() {
@@ -217,12 +231,12 @@
 	local err=0
 
 	if [ -z "$busybox_functions" ]; then
-		local tmp=$(/bin/initrd-busybox 2>&1)
+		local tmp=$($busybox 2>&1)
 
 		# BusyBox v1.1.3 says applet not found if it's not called 'busybox'.
 		if [[ "$tmp" = *applet\ not\ found* ]]; then
 			local t=$(mktemp -d)
-			ln -s /bin/initrd-busybox $t/busybox
+			ln -s $busybox $t/busybox
 			local tmp=$($t/busybox 2>&1)
 			rm -rf $t
 		fi
@@ -734,14 +748,16 @@
 }
 
 initrd_gen_udev() {
+	local udevd udevadm
+
 	debug "Setting up udev..."
-	inst_d /sbin /etc/udev
 
-	if [ ! -x /sbin/initrd-udevd ]; then
-		die "/sbin/initrd-udevd not present"
-	fi
+	udevd=$(find_tool $initrd_dir/udevd /sbin/initrd-udevd) || die "Couldn't find udevd suitable for initrd"
+	udevadm=$(find_tool $initrd_dir/initrd-udevadm /sbin/initrd-udevadm) || die "Couldn't find udevadm suitable for initrd"
 
-	inst_exec /sbin/initrd-udevd /sbin/udevd
+	inst_d /sbin /etc/udev
+	inst_exec $udevd /sbin/udevd
+	inst_exec $udevadm /sbin/udevadm
 	inst /etc/udev/udev.conf /etc/udev/udev.conf
 
 	mount_dev
@@ -749,10 +765,6 @@
 	add_linuxrc <<-'EOF'
 		: 'Starting udev'
 		/sbin/udevd --daemon
-	EOF
-
-	inst_exec /sbin/initrd-udevadm /sbin/udevadm
-	add_linuxrc <<-'EOF'
 		/sbin/udevadm trigger
 		/sbin/udevadm settle
 	EOF
@@ -766,8 +778,6 @@
 	EOF
 }
 
-
-
 initrd_gen_bootsplash() {
 	local target="$1"
 
@@ -953,7 +963,11 @@
 initrd_gen_blkid()
 {
 	debug "Adding BLKID support to initrd"
-	inst_exec /sbin/initrd-blkid /bin/blkid
+
+	local blkid
+	blkid=$(find_tool $initrd_dir/blkid /sbin/initrd-blkid) || die "Couldn't find blkid suitable for initrd"
+
+	inst_exec $blkid /bin/blkid
 	initrd_gen_devices
 	add_linuxrc <<-'EOF'
 		# if built with blkid change ROOT=LABEL=something into ROOT=/dev/somethingelse -
@@ -1087,10 +1101,6 @@
 	. /etc/sysconfig/geninitrd
 fi
 
-if [ ! -x /bin/initrd-busybox ]; then
-	die "/bin/initrd-busybox is missing!"
-fi
-
 # backwards compatible
 if [ "$USE_SUSPEND2" ]; then
 	USE_TUXONICE=$USE_SUSPEND2
@@ -1352,8 +1362,11 @@
 else
 	_lib=lib
 fi
+
+initrd_dir=/usr/$_lib/initrd
 debug "# $RCSID"
-debug "Using libdir: $_lib"
+debug "Using _lib: $_lib"
+debug "Using initrd_dir: $initrd_dir"
 
 cache_modprobe_conf
 
@@ -1419,9 +1432,11 @@
 mknod "$DESTDIR/dev/null" c 1 3
 mknod "$DESTDIR/dev/zero" c 1 5
 
-inst_exec /bin/initrd-busybox /bin/initrd-busybox
+busybox=$(find_tool $initrd_dir/initrd-busybox /bin/initrd-busybox) || die "Couldn't find busybox suitable for initrd"
+inst_exec $busybox /bin/initrd-busybox
 ln -s initrd-busybox $DESTDIR/bin/sh
-ln -s initrd-busybox $DESTDIR/bin/busybox # for older busyboxes who had /bin/busybox as EXEPATH
+# for older busyboxes who had /bin/busybox as EXEPATH
+ln -s initrd-busybox $DESTDIR/bin/busybox
 
 add_linuxrc <<EOF
 #!/bin/sh

Modified: geninitrd/trunk/mod-dmraid.sh
==============================================================================
--- geninitrd/trunk/mod-dmraid.sh	(original)
+++ geninitrd/trunk/mod-dmraid.sh	Thu Apr  2 23:19:58 2009
@@ -5,7 +5,8 @@
 # if we should init dmraid at boot
 have_dmraid=no
 
-if [ -x /sbin/dmraid-initrd ]; then
+dmraid=$(find_tool $initrd_dir/dmraid /sbin/dmraid-initrd)
+if [ -x /sbin/dmraid -a -x "$dmraid" ]; then
 	USE_DMRAID=yes
 else
 	USE_DMRAID=no
@@ -59,12 +60,8 @@
 # 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
+	inst_exec $dmraid /sbin/dmraid
 
 	mount_dev
 	mount_sys

Modified: geninitrd/trunk/mod-luks.sh
==============================================================================
--- geninitrd/trunk/mod-luks.sh	(original)
+++ geninitrd/trunk/mod-luks.sh	Thu Apr  2 23:19:58 2009
@@ -6,7 +6,8 @@
 # and we should init cryptsetup luks at boot
 have_luks=no
 
-if [ -x /sbin/cryptsetup ]; then
+cryptsetup=$(find_tool $initrd_dir/cryptsetup /sbin/cryptsetup-initrd)
+if [ -x /sbin/cryptsetup -a -x "$cryptsetup" ]; then
 	USE_LUKS=yes
 else
 	USE_LUKS=no
@@ -78,12 +79,8 @@
 # generate initrd fragment for cryptsetup luks init
 # @access	public
 initrd_gen_luks() {
-	if [ ! -x /sbin/cryptsetup-initrd ]; then
-		die "/sbin/cryptsetup-initrd is missing!"
-	fi
-
 	inst_d /bin
-	inst_exec /sbin/cryptsetup-initrd /bin/cryptsetup
+	inst_exec $cryptsetup /bin/cryptsetup
 
 	mount_dev
 	mount_sys

Modified: geninitrd/trunk/mod-lvm.sh
==============================================================================
--- geninitrd/trunk/mod-lvm.sh	(original)
+++ geninitrd/trunk/mod-lvm.sh	Thu Apr  2 23:19:58 2009
@@ -19,7 +19,8 @@
 # Values: 1|2
 LVMTOOLSVERSION=
 
-if [ -x /sbin/lvm ]; then
+lvm=$(find_tool $initrd_dir/lvm /sbin/initrd-lvm)
+if [ -x /sbin/lvm -a -x $lvm ]; then
 	USE_LVM=yes
 else
 	USE_LVM=no
@@ -72,12 +73,12 @@
 
 	debug "LVM: $devpath is LVM node"
 
-	if [ ! -f /sbin/initrd-lvm -o ! -x /sbin/lvdisplay -o ! -x /sbin/pvdisplay ]; then
-		die "root on LVM but /sbin/initrd-lvm, /sbin/lvdisplay and /sbin/pvdisplay not found. Please install lvm(2) and lvm(2)-initrd package and rerun $PROGRAM."
+	if [ ! -x $lvm -o ! -x /sbin/lvdisplay -o ! -x /sbin/pvdisplay ]; then
+		die "root on LVM but /sbin/lvdisplay or /sbin/pvdisplay not found. Please install lvm(2) and lvm(2)-initrd package and rerun $PROGRAM."
 	fi
 
 	if [ -z "$LVMTOOLSVERSION" ]; then
-		LVMTOOLSVERSION=$(LC_ALL=C /sbin/initrd-lvm vgchange --version 2>/dev/null | awk '/LVM version:/{if ($3 >= 2) print "2"}')
+		LVMTOOLSVERSION=$(LC_ALL=C $lvm vgchange --version 2>/dev/null | awk '/LVM version:/{if ($3 >= 2) print "2"}')
 		if [ -z "$LVMTOOLSVERSION" ]; then
 			die "Can't determine LVM tools version. Please set LVMTOOLSVERSION and rerun $PROGRAM."
 		fi
@@ -118,7 +119,7 @@
 initrd_gen_lvm() {
 	debug "Adding LVM support to initrd"
 	inst_d /tmp /newroot
-	inst_exec /sbin/initrd-lvm /bin/lvm.static
+	inst_exec $lvm /bin/lvm.static
 
 	# always make /dev on tmpfs for LVM2
 	if [ "$LVMTOOLSVERSION" = "2" ]; then

Modified: geninitrd/trunk/mod-md.sh
==============================================================================
--- geninitrd/trunk/mod-md.sh	(original)
+++ geninitrd/trunk/mod-md.sh	Thu Apr  2 23:19:58 2009
@@ -5,8 +5,8 @@
 # if we should init md (softraid) at boot
 have_md=no
 
-# disable if tools not installed
-if [ -x /sbin/mdadm ]; then
+mdassemble=$(find_tool $initrd_dir/mdassemble /sbin/initrd-mdassemble)
+if [ -x /sbin/mdadm -a -x $mdassemble ]; then
 	USE_MD=yes
 else
 	USE_MD=no
@@ -116,13 +116,10 @@
 initrd_gen_md() {
 	debug "Setting up mdadm..."
 
-	if [ ! -x /sbin/mdadm -o ! -x /sbin/initrd-mdassemble ]; then
-		die "/sbin/mdadm or /sbin/initrd-mdassemble is missing!"
-	fi
-
-	inst_exec /sbin/initrd-mdassemble /bin/mdassemble
+	inst_exec $mdassemble /bin/mdassemble
 
 	# LVM on RAID case
+	local dev_list_extra ex_dev
 	dev_list_extra=$(awk '/^DEVICE / { for (i=2; i<=NF; i++) { printf "%s ", $i; }; } ' /etc/mdadm.conf | xargs)
 	if [ "$dev_list_extra" = "partitions" ]; then
 		# FIXME: handle this case (see man mdadm.conf)
@@ -133,7 +130,8 @@
 			echo "DEVICE $ex_dev" >> "$DESTDIR/etc/mdadm.conf"
 		done
 	fi
-	do_md0=1
+
+	local cr_rootdev cr_dev_list do_md0=1 nr cr_dev_list_md f cr_md_conf
 	for nr in `seq 1 $rootdev_nr`; do
 		eval cr_rootdev="\$rootdev${nr}"
 		eval cr_dev_list="\$dev_list${nr}"


More information about the pld-cvs-commit mailing list