--- ../../base/mkinitrd/mkinitrd	2006-01-03 15:19:15.000000000 +0100
+++ mkinitrd	2006-02-01 00:08:30.000000000 +0100
@@ -49,6 +49,8 @@
 	echo "    --dm                     exclude device mapper modules"
 	echo "    --remove-module=MODULE   exclude MODULE"
 	echo "    --add-module=MODULE      include MODULE"
+	echo "    --lvm-root               / (root) is a logical lvm device"
+	echo "    --root-device=ROOT_DEV   use ROOT_DEV as root instead of fstab entry" 
 	echo "    --root-dir=ROOT_DIR      look for modules in ROOT_DIR/lib/modules"
 	echo "                             instead of /lib/modules"
 	echo "    --quiet                  no status output during initrd generation"
@@ -61,7 +63,7 @@
 # $2 = start index
 # $3 = finish index
 # $4 = device major
-# $5 = device minor of first index
+# $5 = d:evice minor of first index
 mkblkdevs() {
 	minor=$5
 	for i in `seq $2 $3`; do
@@ -184,6 +186,10 @@
 			ROOT_DEVICE="`echo $1 | awk -F= '{print $2;}'`"
 			;;
 
+		lvm-root|--lvm-root)
+		         LVM_ROOT=true
+		         ;;
+
 		--root-dir=*)
 			ROOT_DIR="`echo $1 | awk -F= '{print $2;}'`"
 			;;
@@ -245,6 +251,11 @@
 	ROOT_DEVICE="$(awk '/^[ \t]*[^#]/ { if ($2 == "/") { print $1; }}' /etc/fstab)"
 fi
 
+if [ "$LVM_ROOT" == true ]; then
+   REMOVE_DM="0"
+   KERNEL_INITRD=$KERNEL_INITRD-lvm
+fi
+
 #
 # Module Files
 #
@@ -647,6 +658,12 @@
 ln busybox $MOUNT_IMAGE/bin/sleep
 ln busybox $MOUNT_IMAGE/bin/sh
 ln busybox $MOUNT_IMAGE/bin/test
+# add lvm tools (needed for root)
+if [ "$LVM_ROOT" == true ]; then
+    cp -a /sbin/lvm.static $MOUNT_IMAGE/bin/lvm
+    mkdir -p $MOUNT_IMAGE/etc/lvm
+    cp -a /etc/lvm/lvm.conf.initrd $MOUNT_IMAGE/etc/lvm/lvm.conf
+fi
 # add filesystem check to avoid VFS warnings during boot
 if [ -f /sbin/fsck.static ]; then
 	cp -a /sbin/fsck.static $MOUNT_IMAGE/bin/fsck
@@ -774,9 +791,18 @@
 		echo 'fi' >>$LINUXRC
 	fi
 fi
-#echo "ROOT_DEV=\`cat /proc/cmdline | awk -Froot= '{print \$2}' | awk '{print \$1}'\`" >>$LINUXRC
-echo "ROOT_DEV=/dev/root" >>$LINUXRC
-echo "mkrootdev /dev/root" >>$LINUXRC
+# set up LVM root device
+if [ "$LVM_ROOT" == true ]; then
+    echo "echo Scanning logical volumes" >>$LINUXRC
+    echo "lvm vgscan --ignorelockingfailure" >>$LINUXRC
+    echo "echo Activating logical volumes" >>$LINUXRC
+    echo "lvm vgchange --ignorelockingfailure -ay" >>$LINUXRC
+    echo "ROOT_DEV=$ROOT_DEVICE" >>$LINUXRC
+else
+    #echo "ROOT_DEV=\`cat /proc/cmdline | awk -Froot= '{print \$2}' | awk '{print \$1}'\`" >>$LINUXRC
+    echo "ROOT_DEV=/dev/root" >>$LINUXRC
+    echo "mkrootdev /dev/root" >>$LINUXRC
+fi
 echo "echo 0x0100 > /proc/sys/kernel/real-root-dev" >>$LINUXRC
 if [ "$HAVE_FSCK" = "1" ]; then
 	echo "mount -t \`/bin/fsck -NT \$ROOT_DEV | awk -Ffsck. '{print \$2}' | awk '{print \$1}'\` -n -o ro \$ROOT_DEV /new_root" >>$LINUXRC
@@ -784,13 +810,13 @@
 	echo "mount -t auto -n -o ro \$ROOT_DEV /new_root" >>$LINUXRC
 fi
 echo "pivot_root /new_root /new_root/initrd" >> $LINUXRC
-echo "umount /initrd/sys" >> $LINUXRC
-echo "umount /initrd/proc" >> $LINUXRC
+echo "/sbin/busybox umount /initrd/sys" >> $LINUXRC
+echo "/sbin/busybox umount /initrd/proc" >> $LINUXRC
 # fix libata for using atapi enabled
 sed -i -e 's:\(libata.ko\):\1 atapi_enabled=1:' $LINUXRC
 chmod +x $LINUXRC
 
-echo "echo \"Initial RAMDISK Loading Completed...\"" >> $LINUXRC
+echo "/sbin/busybox echo \"Initial RAMDISK Loading Completed...\"" >> $LINUXRC
 
 # Unmount and Compress initrd
 #
@@ -841,9 +867,9 @@
 	echo ""
 	echo "        image=/boot/vmlinuz26"
 	echo "            label=arch"
-	echo "            root=/dev/hda3"
+	echo "            root=$ROOT_DEVICE" 
 	echo "            read-only"
-	echo "            initrd=/boot/initrd26.img"
+	echo "            initrd=/boot/$KERNEL_INITRD.im"
 	echo ""
 fi
 
