[arch-commits] Commit in hwdetect/trunk (PKGBUILD hwdetect)

Tobias Powalowski tpowa at archlinux.org
Wed Jul 15 13:44:56 UTC 2009


    Date: Wednesday, July 15, 2009 @ 09:44:56
  Author: tpowa
Revision: 46311

upgpkg: hwdetect 2009.07-1

Modified:
  hwdetect/trunk/PKGBUILD
  hwdetect/trunk/hwdetect

----------+
 PKGBUILD |   10 +++-
 hwdetect |  129 ++++++++++++++++++++++++++++++++++++++++++++++++++-----------
 2 files changed, 113 insertions(+), 26 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2009-07-15 13:04:57 UTC (rev 46310)
+++ PKGBUILD	2009-07-15 13:44:56 UTC (rev 46311)
@@ -1,15 +1,19 @@
 # $Id$
 # Maintainer: Tobias Powalowski <tpowa at archlinux.org>
 pkgname=hwdetect
-pkgver=2009.06
-pkgrel=2
+pkgver=2009.07
+pkgrel=1
 pkgdesc="Hardware detection script with loading modules and mkinitcpio.conf / rc.conf support"
 arch=(i686 x86_64)
 license=('GPL')
 depends=('sh' 'awk' 'grep' 'coreutils' 'sed' 'e2fsprogs')
+optdepends=('cryptsetup: for encrypt mkinitcpio config support'
+            'dmraid:     for dmraid mkinitcpio config support'
+            'lvm2:       for lvm2 mkinitcpio config support'
+            'mdadm:      for raid mkinitcpio config support')
 source=(hwdetect)
 
 build() {
   install -D -m 755 $startdir/src/hwdetect $startdir/pkg/sbin/hwdetect
 }
-md5sums=('de44e1215acffe31507e8a6f645c26bb')
+md5sums=('ec67ed9eb60499959d38297e00e3d8fa')

Modified: hwdetect
===================================================================
--- hwdetect	2009-07-15 13:04:57 UTC (rev 46310)
+++ hwdetect	2009-07-15 13:44:56 UTC (rev 46311)
@@ -36,12 +36,10 @@
 	echo "    --hostcontroller       show MODULES= for all hostcontrollers"
 	echo "    --vmware               add BusLogic to MODULES for vmware"
         echo "" 
+	echo "    --rootdevice=          autodetected advanced features of rootdevice"
+	echo "    --hooks-dir=           use this directory for HOOKS check"
 	echo "    --hooks                show HOOKS="
-	echo "    --hooks-dir            use this directory for HOOKS check"
-	echo "    --mdadm                add mdadm to HOOKS="
 	echo "    --dmraid               add dmraid to HOOKS="
-	echo "    --encrypt              add encrypt to HOOKS="
-	echo "    --lvm2                 add lvm2 to HOOKS="
 	echo "    --keymap               add keymap to HOOKS="
 	echo "    --usb                  add usb to HOOKS="
 	echo "    --usbinput             add usbinput to HOOKS="
@@ -67,6 +65,9 @@
 	--kernel_version=*)
 	KERNEL_VERSION="$(echo $1 | awk -F= '{print $2;}')"
 	;;
+	--rootdevice=*)
+	ROOTDEVICE="$(echo $1 | awk -F= '{print $2;}')"
+	;;
 esac
 
 if [ "$KERNEL_VERSION" = "" ]; then
@@ -76,18 +77,9 @@
 # IDE/PATA switch
 [ "$(echo $* | grep '\-ide-legacy')" ] && IDE_LEGACY=1
 
-# mdadm switch
-[ "$(echo $* | grep '\-mdadm')" ] && MDADM=1
-
 # dmraid switch
 [ "$(echo $* | grep '\-dmraid')" ] && DMRAID=1
 
-# encrypt switch
-[ "$(echo $* | grep '\-encrypt')" ] && ENCRYPT=1
-
-# lvm2 switch
-[ "$(echo $* | grep '\-lvm2')" ] && LVM2=1
-
 # keymap switch
 [ "$(echo $* | grep '\-keymap')" ] && KEYMAP=1
 
@@ -109,6 +101,106 @@
 # vmware switch
 [ "$(echo $* | grep '\-vmware')" ] && VMWARE=1
 
+ADVANCED=""
+# root device check
+if ! [ "$ROOTDEVICE" = "" ]; then
+        # check device mapper devices
+	if [ "$(echo "$ROOTDEVICE" | grep "/dev/mapper")" ]; then
+		# check if encryption is used
+		if [ "$(cryptsetup status $ROOTDEVICE 2>/dev/null)" ]; then
+			ADVANCED="encrypt"
+			# check on lvm
+			realdevice="$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')"
+			if [ "$(lvs $realdevice 2>/dev/null)" ]; then
+				ADVANCED="lvm2 encrypt"
+				vg="$(echo $(lvs -o vg_name --noheading $realdevice))"
+				# check on raid
+				[ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ] && ADVANCED="mdadm lvm2 encrypt"
+			fi
+			# check on raid
+			if [ "$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/md" | sed -e 's#.*\ ##g')" ]; then
+				ADVANCED="mdadm encrypt"
+				realdevice="$(cryptsetup status $ROOTDEVICE 2>/dev/null | grep "device:.*/dev/md" | sed -e 's#.*\ ##g')"
+				# check on lvm
+				[ "$(mdadm --detail $realdevice | grep "/dev/block/254")" ] && ADVANCED="lvm2 mdadm encrypt"
+			fi
+		fi
+		# check if lvm is used
+		if [ "$(lvs $ROOTDEVICE 2>/dev/null)" ]; then
+			ADVANCED="lvm2"
+			vg="$(echo $(lvs -o vg_name --noheading $ROOTDEVICE))"
+			# check on encrypt
+			if [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/block/254")" ]; then 
+				ADVANCED="encrypt lvm2"
+				# check on raid
+				[ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ] && ADVANCED="mdadm encrypt lvm2"
+				for i in "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/block/254")"; do
+					realdevice="$(echo $i | cut -d ' ' -f1)"
+					getsymlink="$(readlink $realdevice)"
+					correctdevice="$(echo $getsymlink | sed -e 's#\.\.#/dev#g')"
+					[ "$(cryptsetup status $correctdevice 2>/dev/null | grep "device:.*/dev/md")" ] && ADVANCED="mdadm encrypt lvm2"
+				done
+			fi
+			# check on raid
+			if [ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")" ]; then
+				ADVANCED="mdadm lvm2"
+				#check on encrypt
+				[ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/block/254")" ] && ADVANCED="encrypt mdadm lvm2"
+				for i in "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/md")"; do
+					realdevice="$(echo $i | cut -d ' ' -f1)"
+					[ "$(mdadm --detail $realdevice | grep "/dev/block/254")" ] && ADVANCED="encrypt mdadm lvm2"
+				done
+			fi
+		fi
+	fi
+	# check md device
+	if [ "$(echo "$ROOTDEVICE" | grep "/dev/md")" ]; then
+		ADVANCED="mdadm"
+		# raid partitions or raid?
+		if [ "$(echo "$ROOTDEVICE" | grep "/dev/md_d")" ]; then
+			realdevice="$(echo $ROOTDEVICE | sed -e 's#p.*##g' -e 's#/dev/##g')"
+			if ! [ "$(find /sys/block/$realdevice/ -name 'dm*' 2>/dev/null)" = "" ]; then
+				SET_LVM=""
+				SET_ENCRYPT=""
+				for k in $(find /sys/block/$realdevice/ -name 'dm*' 2>/dev/null); do
+					[ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && SET_LVM="1"
+					[ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && SET_ENCRYPT="1"
+					# check on lvm
+					[ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="lvm2 mdadm"
+					# check on encrypt
+					[ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="encrypt mdadm"
+					# check encrypted volume device
+					realdevice="$(cryptsetup status $(cat $k/dm/name) 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')"
+					[ "$(lvs $realdevice 2>/dev/null)" ] && ADVANCED="lvm2 encrypt mdadm"
+					vg="$(echo $(lvs -o vg_name --noheading /dev/mapper/$(cat $k/dm/name) 2>/dev/null))"
+					[ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/block/254")" ] && ADVANCED="encrypt lvm2 mdadm"
+				done
+				[ "$SET_LVM" = "1" -a "$SET_ENCRYPT" = "1" ] && ADVANCED="lvm2 encrypt mdadm"
+			fi
+		else
+			realdevice="$(echo $ROOTDEVICE | sed -e 's#/dev/##g')"
+			if ! [ "$(find /sys/block/$realdevice/ -name 'dm*' 2>/dev/null)" = "" ]; then
+				SET_LVM=""
+				SET_ENCRYPT=""
+				for k in $(find /sys/block/$realdevice/ -name 'dm*' 2>/dev/null); do
+					[ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && SET_LVM="1"
+					[ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && SET_ENCRYPT="1"
+					# check on lvm
+					[ "$(lvs /dev/mapper/$(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="lvm2 mdadm"
+					# check on encrypt
+					[ "$(cryptsetup status $(cat $k/dm/name) 2>/dev/null)" ] && ADVANCED="encrypt mdadm"
+					# check encrypted volume device
+					realdevice="$(cryptsetup status $(cat $k/dm/name) 2>/dev/null | grep "device:.*/dev/mapper/" | sed -e 's#.*\ ##g')"
+					[ "$(lvs $realdevice 2>/dev/null)" ] && ADVANCED="lvm2 encrypt mdadm"
+					vg="$(echo $(lvs -o vg_name --noheading /dev/mapper/$(cat $k/dm/name) 2>/dev/null))"
+					[ "$(pvs -o pv_name,vg_name --noheading | grep "$vg$" | grep "/dev/block/254")" ] && ADVANCED="encrypt lvm2 mdadm"
+				done
+				[ "$SET_LVM" = "1" -a "$SET_ENCRYPT" = "1" ] && ADVANCED="lvm2 encrypt mdadm"
+			fi
+		fi
+	fi
+fi
+
 # checking /sys
 if ! [ -d /sys/ ]; then
 	echo "/sys/ is not present -- mount /sys first" >&2
@@ -385,7 +477,7 @@
 			if [ "$HOOKS_DIR" = "" ]; then
 				HOOKS_DIR="/lib/initcpio/install"
 			fi
-			START_HOOKS="base udev autodetect ide pata scsi sata usb fw pcmcia net dmraid mdadm usbinput keymap lvm2 encrypt filesystems"
+			START_HOOKS="base udev autodetect ide pata scsi sata usb fw pcmcia net dmraid usbinput keymap $ADVANCED filesystems"
 			# remove the ones that don't exist on the system
 			for i in ${START_HOOKS}; do
 				if ! [ -e "${HOOKS_DIR}/$i" ]; then 
@@ -404,18 +496,9 @@
 			if ! [ "$KEYMAP" = "1" ]; then 
 				START_HOOKS=$(echo $START_HOOKS | sed -e "s/keymap//g")
 			fi
-			if ! [ "$MDADM" = "1" ]; then 
-				START_HOOKS=$(echo $START_HOOKS | sed -e "s/mdadm//g")
-			fi
 			if ! [ "$DMRAID" = "1" ]; then 
 				START_HOOKS=$(echo $START_HOOKS | sed -e "s/dmraid//g")
 			fi
-			if ! [ "$ENCRYPT" = "1" ]; then
-				START_HOOKS=$(echo $START_HOOKS | sed -e "s/encrypt//g")
-			fi
-			if ! [ "$LVM2" = "1" ]; then
-				START_HOOKS=$(echo $START_HOOKS | sed -e "s/lvm2//g")
-			fi
 			if ! [ "$USB" = "1" ]; then
 				START_HOOKS=$(echo $START_HOOKS | sed -e "s/usb\ //g")
 			fi




More information about the arch-commits mailing list