From b26efaef3b9e135d53fec5b57aca8296e8686c09 Mon Sep 17 00:00:00 2001 From: freesource Date: Tue, 6 Nov 2001 08:30:02 +0000 Subject: [PATCH] This is better because it checks to see if the real device is mounted, ofcourse this is only necessary when lilo is used. --- gbootroot | 95 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 42 deletions(-) diff --git a/gbootroot b/gbootroot index e3e5f7f..29a5516 100755 --- a/gbootroot +++ b/gbootroot @@ -2689,6 +2689,21 @@ sub lilo_put_it_together { $entry5->set_text("$remain_boot k"); } + + # If genext2fs is being used clean $tmp/bootdisk if any garbage is found, + # and temporarily rename $mnt to that directory. + my $old_mount; + if ( $fs_type eq "genext2fs" ) { + if (-d "$tmp/bootdisk") { + sys("rm -rf $tmp/bootdisk"); + } + if (!-d "$tmp/bootdisk") { + return if errmk(sys("mkdir $tmp/bootdisk")) == 2; + } + $old_mount = $mnt; + $mnt = "$tmp/bootdisk/"; + } + # Here everything is copied over either to the device or the the $mnt # directory if genext2fs is used. info(0, "Copy over initrd ramdisk\n"); @@ -2703,7 +2718,6 @@ sub lilo_put_it_together { err_custom("rm -rf $mnt/lost+found; cp $container[KERNEL] $mnt/kernel", "gBootRoot: ERROR: Could not copy over the kernel") == 2; } else { - sys("rm -rf $mnt/*"); return if err_custom("cp $container[KERNEL] $mnt/kernel", "gBootRoot: ERROR: Could not copy over the kernel") == 2; } @@ -2811,31 +2825,41 @@ sub lilo_put_it_together { } pb($B,6); - # Real device - if ( $fs_type ne "genext2fs" ) { - if ( $> == 0 ) { - return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2; - } - else { - return if errm(sys("mount $mnt")) == 2; - } - } - else { - my $error; + if ( $fs_type eq "genext2fs" ) { -# + my $error; +=pod if ( sys("/usr/lib/bootroot/$main::makefs -b $device_size -d $mnt -D $device_table $entry_advanced[0]") !~ /^0$/ ) { $error = error("Cannot $fs_type filesystem.\n"); return "ERROR" if $error && $error eq "ERROR"; } +=cut + } -# + if ( $fs_type eq "genext2fs" ) { + $mnt = $old_mount; } + # Real device + if ( $> == 0 ) { + return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2; + } + else { + my $errm_value = errm(sys("mount $mnt")); + if ( $errm_value == 2 && $fs_type eq "genext2fs" ) { + info(0, "Ask your administrator to add this line to the" . + " fstab file:\n"); + info(0, "\n$entry_advanced[0]\t$mnt\tauto\tdefaults,noauto," . + "user\t0\t0\n\n"); + } + else { + return if $errm_value == 2; + } + } info(0, "Configuring lilo\n"); pb($B,7); @@ -2844,22 +2868,14 @@ sub lilo_put_it_together { # This enforces that lilo is only ran on a bootable drive, # otherwise the user has to do it manually. if ($container[BOOT_DEVICE] eq $entry_advanced[0]) { - -# - if ( err_custom("lilo -v -C brlilo.conf -r $mnt", - "gBootRoot: ERROR: lilo failed") == 2 ) { - chdir($pwd); - - if ( $fs_type eq "genext2fs" && $> != 0 ) { - info(0, "Ask your administrator to add this line to the" . - " fstab file:\n"); - info(0, "\n/dev/fd0\t$mnt\tauto\tdefaults,noauto,user\t0\t0\n\n"); - } - else { - return; - } - } -# + +=pod + if ( err_custom("lilo -v -C brlilo.conf -r $mnt", + "gBootRoot: ERROR: lilo failed") == 2 ) { + chdir($pwd); + return; + } +=cut } @@ -2870,15 +2886,9 @@ sub lilo_put_it_together { chdir($pwd); # or die "boot_root: ERROR: Could not change directories\n"; - my $um; - if ( $fs_type ne "genext2fs" ) { - info(0, "Umounting $mnt\n"); - $um = errum(sys("umount $mnt")); - pb($B,10); - } - else { - $um = 0; - } + info(0, "Umounting $mnt\n"); + my $um = errum(sys("umount $mnt")); + pb($B,10); if ($ok == 1 || $ok == 2) { if ( $fs_type ne "genext2fs" ) { @@ -3852,7 +3862,7 @@ sub mtab_check { if ($count == 1) { # ROOT_DEVICE - if ( m,$entry_advanced[3], && $fs_type ne "genext2fs" ) { + if ( m,$entry_advanced[3], ) { # Safety Check: $dialog = "Please umount the device first.\nPress OK when you are ready."; @@ -3861,7 +3871,7 @@ sub mtab_check { } - elsif ( $count == 0 && $fs_type ne "genext2fs" ) { + elsif ( $count == 0 ) { # BOOT_DEVICE if (m,$entry_advanced[0],) { @@ -3928,8 +3938,9 @@ sub mtab_check { } # if $error == 1 - if ( $fs_type eq "genext2fs" ) { + if ( $fs_type eq "genext2fs" && $error == 1 ) { + destroy $mtab; lilo_put_it_together() if $count == 0; # mtab(1) runs from here device2() if $count == 1;