summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xdraklive-install19
1 files changed, 17 insertions, 2 deletions
diff --git a/draklive-install b/draklive-install
index 78231d6..9a54891 100755
--- a/draklive-install
+++ b/draklive-install
@@ -3,10 +3,12 @@
use lib qw(/usr/lib/libDrakX);
use standalone;
use interactive;
+use fs;
use fs::any;
use fs::type;
use fs::partitioning;
use fs::partitioning_wizard;
+use partition_table;
use MDK::Common;
use common;
use feature qw(state);
@@ -49,9 +51,10 @@ sub install_live() {
my %settings = getVarsFromSh($system_file);
my $copy_source = $settings{SOURCE} || '/';
+ my $live_media = '/live/media';
display_start_message();
- init_hds($in, $all_hds, $fstab);
+ init_hds($in, $all_hds, $fstab, $live_media);
ask_partitions_loop($in, $all_hds, $fstab, $copy_source);
prepare_root($in, $all_hds);
copy_root($in, $copy_source);
@@ -116,10 +119,22 @@ sub umount_first_pass() {
}
sub init_hds {
- my ($in, $all_hds, $fstab) = @_;
+ my ($in, $all_hds, $fstab, $live_media) = @_;
my $wait = $in->wait_message('', N("Please wait"));
umount_first_pass();
eval { fs::any::get_hds($all_hds, $fstab, [], {}, 'skip_mtab', $in) };
+
+ #- fs::any::get_hds does not return mounts that are not in fstab
+ my @mounted = fs::read_fstab('', '/proc/mounts');
+ my $live_part = find { $_->{mntpoint} eq $live_media } @mounted;
+ my $live_device = $live_part && $live_part->{device};
+ #- remove live device from the detected hds, so that bootloader is not installed on it:
+ #- bootloader installation uses first device from detect_devices::get, which tries to list devices
+ #- by booting order, and our live system is likely to be here in first position
+ @{$all_hds->{hds}} = grep {
+ !member($live_device, map { $_->{device} } partition_table::get_normal_parts_and_holes($_));
+ } @{$all_hds->{hds}} if $live_device;
+
my $err = $@;
umount_all($fstab);
if ($err) {