From 670a071a66c87db1719e6673f10626948363eb54 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sun, 4 Sep 2011 22:02:43 +0200 Subject: [PATCH] installer.kmdr, installer.sh: code changed to use udisks instead of hal --- installer/installer.kmdr | 684 ++++++++++++++++++++------------------- installer/installer.sh | 57 +--- 2 files changed, 359 insertions(+), 382 deletions(-) diff --git a/installer/installer.kmdr b/installer/installer.kmdr index 0942339..eaf9b5c 100755 --- a/installer/installer.kmdr +++ b/installer/installer.kmdr @@ -334,30 +334,6 @@ Released under the terms of the GNU GPL v3 license This program will install openmamba on this computer. - - - Label18_2 - - - - 10 - 220 - 560 - 60 - - - - If you have problems, suggestions or would like to contribute to the development of openmamba please consult the forums and maling lists available at <a href="http://www.openmamba.org">www.openmamba.org</a>. - - - WordBreak|AlignVCenter - - - - - - - GroupBox4 @@ -399,26 +375,6 @@ Released under the terms of the GNU GPL v3 license - - - integrityCheckLabel - - - - 10 - 20 - 540 - 70 - - - - Please wait some time while the installation medium is checked for data integrity. -Press the skip button only if you have previously checked the medium on this computer. - - - WordBreak|AlignVCenter - - skipButton @@ -445,6 +401,26 @@ killall md5progress.sh + + + integrityCheckLabel + + + + 10 + 20 + 540 + 70 + + + + Please wait some time while the installation medium is checked for data integrity. +Press the skip button only if you have previously checked the medium on this computer. + + + WordBreak|AlignVCenter + + launchMD5script @@ -464,6 +440,30 @@ killall md5progress.sh + + + Label18_2 + + + + 10 + 220 + 560 + 60 + + + + If you have problems, suggestions or would like to contribute to the development of openmamba please consult the forums and maling lists available at <a href="http://www.openmamba.org">www.openmamba.org</a>. + + + WordBreak|AlignVCenter + + + + + + + @@ -1293,6 +1293,52 @@ dcop @dcopid KommanderIf setBusyCursor false WordBreak|AlignTop|AlignHCenter + + + removablebox + + + + 300 + 20 + 270 + 20 + + + + Show removab&le devices + + + + + + + + + + + + swapcheckbox + + + + 10 + 20 + 280 + 21 + + + + I&gnore SWAP partition check + + + + + + + + + installhint @@ -1342,52 +1388,6 @@ dcop @dcopid KommanderIf setBusyCursor false - - - removablebox - - - - 300 - 20 - 270 - 20 - - - - Show removab&le devices - - - - - - - - - - - - swapcheckbox - - - - 10 - 20 - 280 - 21 - - - - I&gnore SWAP partition check - - - - - - - - - @@ -1405,28 +1405,6 @@ dcop @dcopid KommanderIf setBusyCursor false - - - swapsizelabel - - - - 10 - 70 - 410 - 60 - - - - - - - RichText - - - WordBreak|AlignVCenter - - Label21_2_3 @@ -1451,6 +1429,28 @@ dcop @dcopid KommanderIf setBusyCursor false AlignCenter + + + swapsizelabel + + + + 10 + 70 + 410 + 60 + + + + + + + RichText + + + WordBreak|AlignVCenter + + scandisks @@ -1468,7 +1468,11 @@ dcop @dcopid KommanderIf setBusyCursor false @partitionslabel.clear @BackBox.setChecked(true) @execBegin -storages=`hal-find-by-capability --capability storage` +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} + +devices=`udisks --enumerate-device-files | grep -v /dev/disk` partlabel= linuxok= swapok= @@ -1483,59 +1487,58 @@ fi systemrequired=5120 dcop @dcopid KommanderIf setText swapsizelabel "@i18n("In order to install openmamba you need on your fixed disk(s):<br>- a Linux type partition with at least $systemrequired MBytes<br>- a SWAP type partition with at least $swaprequired MBytes")" -for s in $storages; do - diskdevice=`hal-get-property --udi $s --key block.device` - vendor=`hal-get-property --udi $s --key info.vendor` - product=`hal-get-property --udi $s --key info.product` - hotpluggable=`hal-get-property --udi $s --key storage.hotpluggable` || hotpluggable="false" - partscheme=`hal-get-property --udi $s --key storage.partitioning_scheme` - [ "$partscheme" ] || continue - disksize=`hal-get-property --udi $s --key storage.size` - disksize=`expr $disksize / 1024 / 1024 / 1024` +for d in $devices; do + diskdevice=${d/\/dev\/} + native_path=`get_udisks_key $d native-path` + [ ! -e $native_path/partition ] || continue + vendor=`get_udisks_key $d vendor` + product=`get_udisks_key $d model` + is_system_internal=`get_udisks_key $d "system internal"` + [ "$is_system_internal" != "1" -a @removablebox.checked == 0 ] && continue + partscheme=`get_udisks_key $d scheme` + [ "$partscheme" ] || continue + disksize=`get_udisks_key $d size` + disksize=`expr $disksize / 1024 / 1024 / 1024` + volumes=`ls -d $native_path/${diskdevice}* 2>/dev/null | sed "s|.*/||" | sort -n -r` + thisdisk= + + for v in $volumes; do + device=/dev/$v + v_native_path=$native_path/$v + volsize=`get_udisks_key $device size` + volsize=`expr $volsize / 1024 / 1024` + volname=`get_udisks_key $device label` + parttype=`get_udisks_key $device usage` + [ "$parttype" ] || parttype="unknown" + fstype=`get_udisks_key $device type` + [ "$fstype" ] || fstype="unformatted" + add_info="" + [ "$is_system_internal" = "1" ] || add_info=",removable" + [ "$volsize" -gt "0" ] || continue - volumes=`hal-find-by-property --key info.parent --string $s` - thisdisk= - [ "$hotpluggable" = "true" -a @removablebox.checked == 0 ] && continue - for udi in $volumes; do - device=`hal-get-property --udi $udi --key block.device` - blocksize=`hal-get-property --udi $udi --key volume.block_size` - numblocks=`hal-get-property --udi $udi --key volume.num_blocks` - volsize=`expr $blocksize \* $numblocks / 1024 / 1024` - volname=`hal-get-property --udi $udi --key volume.label` - [ "$volname" ] || volname="" - parttype=`hal-get-property --udi $udi --key volume.partition.type` - [ "$parttype" ] || parttype="unknown" - fstype=`hal-get-property --udi $udi --key volume.fstype` - [ "$fstype" ] || fstype="unformatted" - add_info="" - [ "$hotpluggable" = "true" ] && { - add_info=",removable" - } - [ "$volsize" -gt "0" ] || continue - case "$parttype" in - 0x82) fstype="swap" ;; - 0x83) fstype="linux" ;; - esac - thispart="<tr><td width=50>${device:5:5}</td><td width=100>$fstype</td><td width=130>$volname</td><td align=right>$volsize MB</td>" - case "$fstype" in + thispart="<tr><td width=50>${device:5:5}</td><td width=100>$fstype</td><td width=130>$volname</td><td align=right>$volsize MB</td>" + + case "$fstype" in swap) if [ $swaprequired -le $volsize ]; then - swapok=$udi + swapok=1 thispart="$thispart<td><b>@i18n("OK for swap")</b></td>" - fi + fi ;; linux|ext2|ext3|ext4|reiserfs|reiser4) if [ $systemrequired -le $volsize ]; then - linuxok=$udi; + linuxok=1 thispart="$thispart<td><b>@i18n("OK for system")</b></td>" fi ;; *) thispart="$thispart<td></td>" ;; - esac - thisdisk="${thispart}${thisdisk}" - done - partlabel="<b>@i18n(Disk) $vendor $product $disksize GB (${diskdevice:5:5})</b>:<br><br><table cellspacing=0 cellpadding=0><tr>${thisdisk}</tr></table>${partlabel}" + esac + thisdisk="${thispart}${thisdisk}" + + done + partlabel="<b>@i18n("Disk") $vendor $product $disksize GB (${diskdevice})</b>:<br><br><table cellspacing=0 cellpadding=0><tr>${thisdisk}</tr></table>${partlabel}" done + dcop @dcopid KommanderIf setText partitionslabel "$partlabel" if [ @swapcheckbox.checked = 1 ]; then swapok="1" @@ -1552,48 +1555,6 @@ else fi dcop @dcopid KommanderIf setText installhint "$insthint" @execEnd - - - - - - - RunPartTool - - - - 550 - 40 - 32 - 32 - - - - - @exec("dcop kded kded unloadModule medianotifier") -@execBegin -volumes=`hal-find-by-capability --capability volume` -for v in $volumes; do - mountpoint=`hal-get-property --udi $v --key volume.mount_point` - [ "$mountpoint" ] && umount $mountpoint -done -/sbin/swapoff -a -@execEnd -@PartitionBox.setEnabled(false) -@BootloaderBox.setEnabled(false) -@Message.info("<b> -@i18n("Hint: in order to install openmamba you should create:") -</b><br><ul> -<li>@i18n("a Linux partition (type ext2,ext3,ext4 or reiserfs)") -<li>@i18n("a Linux SWAP partition") -</ul> -@i18n("Press OK to launch the disk partitioning tool.") -",@i18n("Hint for partitioning")) -@exec(/usr/sbin/gparted) -@scanDevices.execute() -@exec("dcop kded kded loadModule medianotifier") -@PartitionBox.setEnabled(true) -@BootloaderBox.setEnabled(true) @@ -1619,12 +1580,18 @@ done @scandisks.execute() @rebootneededbox.setChecked(false) @execBegin -storages=`hal-find-by-capability --capability storage` -for s in $storages; do - partscheme=`hal-get-property --udi $s --key storage.partitioning_scheme` - hotpluggable=`hal-get-property --udi $s --key storage.hotpluggable` || hotpluggable="false" - [ "$hotpluggable" = "true" -a @removablebox.checked == 0 ] && continue - [ "$partscheme" = "none" ] && dcop @dcopid KommanderIf setChecked rebootneededbox true +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} + +devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` +for device in $devices; do + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] && continue + partscheme=`get_udisks_key $device scheme` + is_system_internal=`get_udisks_key $device "system internal"` + [ "$is_system_internal" != "1" -a @removablebox.checked == 0 ] && continue + [ "$partscheme" = "none" -o "$partscheme" = "" ] && dcop @dcopid KommanderIf setChecked rebootneededbox true done @execEnd @setGlobal("rebootquest","0") @@ -1638,6 +1605,52 @@ else dcop ksmserver ksmserver logout 0 1 1 fi @endif + + + + + + + RunPartTool + + + + 550 + 40 + 32 + 32 + + + + + @exec("dcop kded kded unloadModule medianotifier") +@execBegin +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} +volumes=`udisks --enumerate-device-files | grep -v /dev/disk` +for v in $volumes; do + native_path=`get_udisks_key $v native-path` + [ ! -e $native_path/partition ] || continue + udisks --unmount $v +done +/sbin/swapoff -a +@execEnd +@PartitionBox.setEnabled(false) +@BootloaderBox.setEnabled(false) +@Message.info("<b> +@i18n("Hint: in order to install openmamba you should create:") +</b><br><ul> +<li>@i18n("a Linux partition (type ext2,ext3,ext4 or reiserfs)") +<li>@i18n("a Linux SWAP partition") +</ul> +@i18n("Press OK to launch the disk partitioning tool.") +",@i18n("Hint for partitioning")) +@exec(/usr/sbin/gparted) +@scanDevices.execute() +@exec("dcop kded kded loadModule medianotifier") +@PartitionBox.setEnabled(true) +@BootloaderBox.setEnabled(true) @@ -2074,62 +2087,6 @@ fi - - - setlabel - - - - 540 - 40 - 32 - 32 - - - - - - - - @execBegin -@if (@devicesbox.currentItem >= 0) - currdev=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) - @showdevice.setText(@devicesbox.item(@devicesbox.currentItem)) - @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true) - @BackBox.setChecked(true) - - parent_udi=`hal-find-by-property --key block.device --string /dev/$currdev` - # detect linux driver - unset linux_driver - while [ ! "$linux_driver" -a "$parent_udi" != "/org/freedesktop/Hal/devices/computer" ]; do - parent_udi=`hal-get-property --udi $parent_udi --key info.parent 2>/dev/null` - [ "`hal-get-property --udi $parent_udi --key info.subsystem 2>/dev/null`" = "pci" ] && linux_driver=`hal-get-property --udi $parent_udi --key info.linux.driver 2>/dev/null` - done - [ "$linux_driver" ] || linux_driver="undetected" - dcop @dcopid KommanderIf setText driverlabel $linux_driver - - # - # set MBR combo box - # - dcop @dcopid KommanderIf "clear(QString)" mbrbox - storages=`hal-find-by-capability --capability storage` - dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "$currdev (@i18n("System partition"))" 0 - for udi in $storages; do - device=`hal-get-property --udi $udi --key block.device` - hotpluggable=`hal-get-property --udi $udi --key storage.hotpluggable` || hotpluggable="false" - partscheme=`hal-get-property --udi $udi --key storage.partitioning_scheme` - if [ "$hotpluggable" == "false" -o "@removablebox.checked" == "1" ]; then - [ "$partscheme" == "mbr" ] && \ - dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "${device:5:5} (master boot record)" 0 - fi - done - dcop @dcopid KommanderIf "setCurrentItem(int)" 0 -@endif -@execEnd -@setBootableCheckbox.execute() - - - scanDevices @@ -2148,39 +2105,43 @@ fi @BackBox.setChecked(true) @NextBox.setChecked(false) @execBegin +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} + rpm -q openmamba-devel && { dcop @dcopid KommanderIf "setEnabled(QString,bool)" stablebox true dcop @dcopid KommanderIf "setEnabled(QString,bool)" stablelabel true } -volumes=`hal-find-by-capability --capability volume` +devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` partlabel= -for udi in $volumes; do - device=`hal-get-property --udi $udi --key block.device` - parent_udi=`hal-get-property --udi $udi --key block.storage_device` - hotpluggable=`hal-get-property --udi $parent_udi --key storage.hotpluggable` || hotpluggable="false" - blocksize=`hal-get-property --udi $udi --key volume.block_size` - numblocks=`hal-get-property --udi $udi --key volume.num_blocks` - volsize=`expr $blocksize \* $numblocks / 1024 / 1024` - volname=`hal-get-property --udi $udi --key volume.label` +for device in $devices; do + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] || continue + is_system_internal=`get_udisks_key $device "system internal"` + volsize=`get_udisks_key $device size` + volsize=`expr $volsize / 1024 / 1024` + volname=`get_udisks_key $device label` [ "$volname" ] || volname="unnamed" - parttype=`hal-get-property --udi $udi --key volume.partition.type` + parttype=`get_udisks_key $device usage` [ "$parttype" ] || parttype="unknown" - partscheme=`hal-get-property --udi $udi --key volume.partition.scheme` + partscheme=`get_udisks_key $device scheme` [ "$partscheme" ] || partscheme="unknown" - fstype=`hal-get-property --udi $udi --key volume.fstype` + fstype=`get_udisks_key $device type` [ "$fstype" ] || fstype="unformatted" add_info="" - [ "$hotpluggable" = "true" ] && { + [ "$is_system_internal" = "1" ] || { add_info=",removable" [ @removablebox.checked == 1 ] || continue } + if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then partlabel="$partlabel<br>${device:5:5} $fstype $volname $volsize MB" - case "$parttype" in - 0x82) ;; - 0x83) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 ;; + case "$fstype" in + ext2|ext3|ext4|reiserfs|reiser4|unformatted) + dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 ;; *) ;; esac elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then @@ -2204,6 +2165,57 @@ done + + + setlabel + + + + 540 + 40 + 32 + 32 + + + + + + + + @execBegin +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} +@if (@devicesbox.currentItem >= 0) + currdev=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) + @showdevice.setText(@devicesbox.item(@devicesbox.currentItem)) + @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true) + @BackBox.setChecked(true) + + # + # set MBR combo box + # + dcop @dcopid KommanderIf "clear(QString)" mbrbox + devices=`udisks --enumerate-device-files | grep -v /dev/disk` + dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "$currdev (@i18n("System partition"))" 0 + + for device in $devices; do + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] && continue + is_system_internal=`get_udisks_key $device "system internal"` + partscheme=`get_udisks_key $device scheme` + if [ "$is_system_internal" == "1" -o "@removablebox.checked" == "1" ]; then + [ "$partscheme" == "mbr" ] && \ + dcop @dcopid KommanderIf "addListItem(QString,QString,int)" mbrbox "${device:5:5} (master boot record)" 0 + fi + done + dcop @dcopid KommanderIf "setCurrentItem(int)" 0 +@endif +@execEnd +@setBootableCheckbox.execute() + + + @@ -2586,6 +2598,30 @@ done + + + Label21_2_4 + + + + 80 + 10 + 470 + 30 + + + + + 15 + + + + Choose user data partition (home) + + + AlignCenter + + setlabel_2 @@ -2618,7 +2654,6 @@ done fi @dcop(@dcopid, KommanderIf, enableWidget(QString,bool), next, true) @BackBox.setChecked(true) - parent_udi=`hal-find-by-property --key block.device --string /dev/$currdev` dcop @dcopid KommanderIf "setCurrentItem(int)" 0 @endif @execEnd @@ -2644,42 +2679,45 @@ done @BackBox.setChecked(true) @NextBox.setChecked(true) @execBegin -volumes=`hal-find-by-capability --capability volume` +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} +devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` partlabel= installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox_2 "@i18n("none (just use a single partition for system and home)")" 0 -for udi in $volumes; do - device=`hal-get-property --udi $udi --key block.device` +for device in $devices; do [ "${device:5:5}" = "$installdevice" ] && continue - parent_udi=`hal-get-property --udi $udi --key block.storage_device` - hotpluggable=`hal-get-property --udi $parent_udi --key storage.hotpluggable` || hotpluggable="false" - blocksize=`hal-get-property --udi $udi --key volume.block_size` - numblocks=`hal-get-property --udi $udi --key volume.num_blocks` - volsize=`expr $blocksize \* $numblocks / 1024 / 1024` - volname=`hal-get-property --udi $udi --key volume.label` + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] || continue + is_system_internal=`get_udisks_key $device "system internal"` + volsize=`get_udisks_key $device size` + volsize=`expr $volsize / 1024 / 1024` + volname=`get_udisks_key $device label` [ "$volname" ] || volname="unnamed" - parttype=`hal-get-property --udi $udi --key volume.partition.type` + parttype=`get_udisks_key $device usage` [ "$parttype" ] || parttype="unknown" - partscheme=`hal-get-property --udi $udi --key volume.partition.scheme` + partscheme=`get_udisks_key $device scheme` [ "$partscheme" ] || partscheme="unknown" - fstype=`hal-get-property --udi $udi --key volume.fstype` + fstype=`get_udisks_key $device type` [ "$fstype" ] || fstype="unformatted" add_info="" - [ "$hotpluggable" = "true" ] && { + [ "$is_system_internal" = "1" ] || { add_info=",removable" [ @removablebox.checked == 1 ] || continue } if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then partlabel="$partlabel<br>${device:5:5} $fstype $volname $volsize MB" - case "$parttype" in - 0x82) ;; - 0x83) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox_2 "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 1 ;; + case "$fstype" in + ext2|ext3|ext4|reiserfs|reiser4|unformatted) + dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox_2 "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 1 ;; *) ;; esac elif [ "$partscheme" == "gpt" -o "$partscheme" == "unknown" -a $volsize -gt 0 ]; then case "$fstype" in swap|iso9660) ;; - ext2|ext3|ext4|reiserfs|reiser4|unformatted) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox_2 "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 1 ;; + ext2|ext3|ext4|reiserfs|reiser4|unformatted) + dcop @dcopid KommanderIf "addListItem(QString,QString,int)" devicesbox_2 "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 1 ;; *) ;; esac fi @@ -2689,30 +2727,6 @@ done - - - Label21_2_4 - - - - 80 - 10 - 470 - 30 - - - - - 15 - - - - Choose user data partition (home) - - - AlignCenter - - @@ -2998,41 +3012,41 @@ fi @chainloadbox.clear @setBootableCheckbox.execute() @execBegin +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" +} conffile=~/.installer.conf [ -e $conffile ] && mv ${conffile} ${conffile}~ - installdevice=@String.section(@devicesbox.item(@devicesbox.currentItem)," ",0) -volumes=`hal-find-by-capability --capability volume` +devices=`udisks --enumerate-device-files | grep -v /dev/disk | sort -n -r` partlabel= -for udi in $volumes; do - device=`hal-get-property --udi $udi --key block.device` +for device in $devices; do [ "${device:5:5}" = "$installdevice" ] && continue - parent_udi=`hal-get-property --udi $udi --key block.storage_device` - hotpluggable=`hal-get-property --udi $parent_udi --key storage.hotpluggable` || hotpluggable="false" - blocksize=`hal-get-property --udi $udi --key volume.block_size` - numblocks=`hal-get-property --udi $udi --key volume.num_blocks` - volsize=`expr $blocksize \* $numblocks / 1024 / 1024` - [ $volsize = 0 ] && continue - volname=`hal-get-property --udi $udi --key volume.label` - mount_point=`hal-get-property --udi $udi --key volume.mount_point` + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] || continue + is_system_internal=`get_udisks_key $device "system internal"` + volsize=`get_udisks_key $device size` + volsize=`expr $volsize / 1024 / 1024` + volname=`get_udisks_key $device label` [ "$volname" ] || volname="unnamed" - parttype=`hal-get-property --udi $udi --key volume.partition.type` + parttype=`get_udisks_key $device usage` [ "$parttype" ] || parttype="unknown" - partscheme=`hal-get-property --udi $udi --key volume.partition.scheme` + partscheme=`get_udisks_key $device scheme` [ "$partscheme" ] || partscheme="unknown" - fstype=`hal-get-property --udi $udi --key volume.fstype` + fstype=`get_udisks_key $device type` [ "$fstype" ] || fstype="unformatted" add_info="" - [ "$hotpluggable" = "true" ] && { + [ "$is_system_internal" = "1" ] || { add_info=",removable" [ @removablebox.checked == 1 ] || continue } + if [ "$partscheme" == "mbr" -o "$partscheme" == "embr" ]; then partlabel="$partlabel<br>${device:5:5} $fstype $volname $volsize MB" - case "$parttype" in - 0x82) ;; - 0x83) ;; + case "$fstype" in + swap|iso9660|unformatted) ;; + ext2|ext3|ext4|reiserfs|reiser4) ;; *) dcop @dcopid KommanderIf "addListItem(QString,QString,int)" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" 0 dcop @dcopid KommanderIf "setSelection" chainloadbox "${device:5:5} ($fstype,$volname,$volsize MB${add_info})" ;; diff --git a/installer/installer.sh b/installer/installer.sh index b3c5a08..af3db58 100755 --- a/installer/installer.sh +++ b/installer/installer.sh @@ -85,29 +85,8 @@ Installation time: $TIME_ELAPSED minutes" done } -# function dev2gdev() -# convert the device name to the string used by grub -# using the file /boot/grub/device.map -# note: in case of error the null string is returned -# args: -# $1: the name of the device -# example: -# /dev/hda3 --> (hd0,2) -# /dev/sdb1 --> (hd1,0) -function dev2gdev() { - local devname=$1 - - local disk=${devname:0:8} \ - part=${devname:8:2} - - [ ${part:-0} -lt 1 ] && echo -n "" - - cat $MOUNTPOINT/boot/grub/device.map | \ - while read tok1 tok2; do - if [ "$tok2" = "$disk" ]; then - echo -n "${tok1/)/},$(($part)))" - fi - done +function get_udisks_key() { + LANG=C udisks --show-info $1 | grep " $2:" | head -n1 | sed "s|[[:space:]]*$2:[[:space:]]*\(.*\)|\1|" } [ "$1" = "-y" ] || { @@ -117,23 +96,6 @@ function dev2gdev() { exit 0 } -function find_driver_for_udi() { - local found_driver parent_udi - - parent_udi=$1 - while [ ! "$found_driver" -a "$parent_udi" != "/org/freedesktop/Hal/devices/computer" ]; do - parent_udi=`hal-get-property --udi $parent_udi --key info.parent 2>/dev/null` - [ "`hal-get-property --udi $parent_udi --key info.subsystem 2>/dev/null`" = "pci" ] && - found_driver=`hal-get-property --udi $parent_udi --key info.linux.driver 2>/dev/null` - done - if [ "$found_driver" ]; then - echo $found_driver - return 0 - else - return 1 - fi -} - DCOPID=$2 echo $"\ @@ -212,15 +174,16 @@ tempfile=`tempfile 2>/dev/null` mapfile=`tempfile 2>/dev/null` # generate current volumes sorted list with driver information - storages=`hal-find-by-capability --capability storage` + devices=`udisks --enumerate-device-files | grep -v /dev/disk` for s in $storages; do - device=`hal-get-property --udi $s --key block.device` - linux_driver=`find_driver_for_udi $s` - hotpluggable=`hal-get-property --udi $s --key storage.hotpluggable` || hotpluggable="false" + native_path=`get_udisks_key $device native-path` + [ -e $native_path/partition ] && continue + is_system_internal=`get_udisks_key $device "system internal"` + #linux_driver=`find_driver_for_udi $s` [ "${device:5:2}" = "sd" -o "${device:5:2}" = "hd" ] && \ - echo "${device:0:8} $linux_driver" >> $tempfile + echo "${device:0:8}" >> $tempfile if [ "$INSTALL_BOOTLOADER_DEVICE" = "$device" ]; then - INSTALL_BOOTLOADER_DEVICE_HOTPLUGGABLE=$hotpluggable + INSTALL_BOOTLOADER_DEVICE_INTERNAL=$is_system_internal fi done # sort @@ -462,7 +425,7 @@ if [ "$INSTALL_BOOTLOADER_DEVICE" ]; then fi done echo "GRUB_INSTALL_DEVICE=$INSTALL_BOOTLOADER_DEVICE_BYID" >> $MOUNTPOINT/etc/sysconfig/grub - if [ "$INSTALL_BOOTLOADER_DEVICE_HOTPLUGGABLE" = "true" ]; then + if [ "$INSTALL_BOOTLOADER_DEVICE_INTERNAL" != "1" ]; then echo $"Installing grub bootloader on removable device $INSTALL_BOOTLOADER_DEVICE" echo "(hd0) $INSTALL_BOOTLOADER_DEVICE" > $MOUNTPOINT/boot/grub/device.map grub-install $INSTALL_BOOTLOADER_DEVICE --root-directory=$MOUNTPOINT --no-floppy --force