From b9fa3919cb27866504c5719512ac14848a473bd7 Mon Sep 17 00:00:00 2001 From: freesource Date: Sat, 6 Oct 2001 05:40:58 +0000 Subject: [PATCH] Now handles two different block devices with/without the same size. --- gbootroot | 112 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 81 insertions(+), 31 deletions(-) diff --git a/gbootroot b/gbootroot index 44a2152..345d9ce 100755 --- a/gbootroot +++ b/gbootroot @@ -106,7 +106,7 @@ my $lilo_conf = "/etc/lilo.conf"; my $home = "$ENV{HOME}/.gbootroot"; my $uml_xterm = "xterm -e"; $main::editor = "emacs --font 6x13"; -$main::makefs = "mke2fs -F -m0 -i8192"; +$main::makefs = "mke2fs -F -m0 -i8192"; # Root Disk # CHANGES # @@ -116,6 +116,8 @@ $main::makefs = "mke2fs -F -m0 -i8192"; # kernel modules, and made important changes to the 2 disk # compression code. # * Advanced Section is now Advanced Boot Section (ABS). +# * Properly handles two different block devices with two +# different sizes. Tested on /dev/fd?. # * Advanced Root Section (ARS) added. Includes root device and # size, root filesystem name with Save or Save As, filesystem # size, gzip/bzip2/none compression, user-mode-linux kernel @@ -225,7 +227,10 @@ my $initrd; my $compress; my $false = 0; my $true = 1; -my $ok; + +# Helps determine what procedure to follow for the Boot Disk +my $ok; + my $box2; my $label; my $label_advanced; @@ -269,7 +274,6 @@ my ($hbox_advanced); my $separator_advanced; my @entry_advanced; -my $entry_advanced; my ($ea1,$ea2,$ea3,$ea4,$ea5,$ea6); # entry advanced boot my ($ear1,$ear2,$ear3,$ear4); # entry advanced root my ($eab1,$eab2,$eab3); # entry advanced uml @@ -287,8 +291,10 @@ my ($bz2_toggle_root,$gz_toggle_root,$compression_off); #my ($main::combo); made this totally global my ($adj2,$adj3); my @strings; -my $kernel_version; -# + +# Value set by kernel_modules +my $kernel_version; + # $entry_advanced[3] is the Root Device # $filesystem_size and root_device_size are important globals for ARS, # there weren't put into entry_advanced because they are spin buttons. @@ -2435,12 +2441,12 @@ sub lilo { sys("umount $tmp/initrd_mnt"); my $kernel = $container[KERNEL]; - my $root_image = $container[ROOT_FS]; + my $root_fs = $container[ROOT_FS]; my $device = $container[BOOT_DEVICE]; my $size = $container[SIZE]; if ($ok == 1 || $ok == 2) { - my $value = initrd($kernel,$root_image,$device,$size); + my $value = initrd($kernel,$root_fs,$device,$size); mtab(0) if defined $value; } elsif ($ok == 0) { @@ -2475,7 +2481,7 @@ sub lilo_put_it_together { info(0, "Copying over kernel\n"); return if - err_custom("rm -rf $mnt/lost+found; cp $container[KERNEL]} $mnt/kernel", + err_custom("rm -rf $mnt/lost+found; cp $container[KERNEL] $mnt/kernel", "gBootRoot: ERROR: Could not copy over the kernel") == 2; pb($B,3); @@ -2530,7 +2536,8 @@ sub lilo_put_it_together { pb($B,7); chdir("$mnt"); #"boot_root: ERROR: Could not change directories\n"; - # This enforces SAMENESS + # 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) { @@ -2555,7 +2562,7 @@ sub lilo_put_it_together { # Here's where we copy over that compressed filesystem # We could separate $container[BOOT_DEVICE] = boot,root allowing two -# different devices to be used. -- not there is $entry_advanced[3] which +# different devices to be used. -- now there is $entry_advanced[3] which # is the ROOT_DEVICE if ($um == 0 ) { mtab(1); @@ -3267,33 +3274,76 @@ sub mtab_check { my $error = 1; # Check to see if $device is mounted -open (MTAB, "/etc/mtab") or die "no mtab!\n"; -while () { - if (m,$entry_advanced[0],) { - # Safety Check: - $dialog = "Please umount the device first.\nPress OK when you are ready."; - $error = 0; + open (MTAB, "/etc/mtab") or die "no mtab!\n"; + while () { + + if ($count == 1) { + + # ROOT_DEVICE + if (m,$entry_advanced[3],) { + # Safety Check: + $dialog = + "Please umount the device first.\nPress OK when you are ready."; + $error = 0; + } + + } + + elsif ($count == 0) { + + # BOOT_DEVICE + if (m,$entry_advanced[0],) { + # Safety Check: + $dialog = + "Please umount the device first.\nPress OK when you are ready."; + $error = 0; + } + + } + } -} -close(MTAB); + close(MTAB); -mtab_window($dialog,$error,$count) if $error == 0; + mtab_window($dialog,$error,$count) if $error == 0; # Make sure the drive and storage medium are accessible # Keep asking until they are. if ($error == 1) { - destroy $mtab; - # $size has to be determined by boot disk or root disk - sys("mke2fs -F -m0 -i8192 $entry_advanced[0] $container[SIZE]"); - if ($? != 0) { - $dialog = "gBootRoot: ERROR: You need to insert a disk\n"; - mtab_window($dialog,$error,$count); - return; - } - return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2; - lilo_put_it_together() if $count == 0; - device2() if $count == 1; - } + destroy $mtab; + + # $size has to be determined by boot disk or root disk + + # ROOT_DEVICE - test with a loop device + if ($count == 1) { + sys("mke2fs -F -m0 -i8192 $entry_advanced[3] $root_device_size"); + } + + # BOOT_DEVICE + elsif ($count == 0) { + sys("mke2fs -F -m0 -i8192 $entry_advanced[0] $container[SIZE]"); + } + + if ($? != 0) { + $dialog = "gBootRoot: ERROR: You need to insert a disk\n"; + mtab_window($dialog,$error,$count); + return; + } + + # ROOT_DEVICE + if ($count == 1) { + return if errm(sys("mount -t ext2 $entry_advanced[3] $mnt")) == 2; + } + + # BOOT_DEVICE + elsif ($count == 0) { + return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2; + } + + + lilo_put_it_together() if $count == 0; # mtab(1) runs from here + device2() if $count == 1; + + } # if $error == 1 } # end sub mtab_check