Browse Source

Now handles two different block devices with/without the same size.

master
freesource 23 years ago
parent
commit
b9fa3919cb
  1. 108
      gbootroot

108
gbootroot

@ -106,7 +106,7 @@ my $lilo_conf = "/etc/lilo.conf";
my $home = "$ENV{HOME}/.gbootroot"; my $home = "$ENV{HOME}/.gbootroot";
my $uml_xterm = "xterm -e"; my $uml_xterm = "xterm -e";
$main::editor = "emacs --font 6x13"; $main::editor = "emacs --font 6x13";
$main::makefs = "mke2fs -F -m0 -i8192"; $main::makefs = "mke2fs -F -m0 -i8192"; # Root Disk
# CHANGES # CHANGES
# #
@ -116,6 +116,8 @@ $main::makefs = "mke2fs -F -m0 -i8192";
# kernel modules, and made important changes to the 2 disk # kernel modules, and made important changes to the 2 disk
# compression code. # compression code.
# * Advanced Section is now Advanced Boot Section (ABS). # * 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 # * Advanced Root Section (ARS) added. Includes root device and
# size, root filesystem name with Save or Save As, filesystem # size, root filesystem name with Save or Save As, filesystem
# size, gzip/bzip2/none compression, user-mode-linux kernel # size, gzip/bzip2/none compression, user-mode-linux kernel
@ -225,7 +227,10 @@ my $initrd;
my $compress; my $compress;
my $false = 0; my $false = 0;
my $true = 1; my $true = 1;
# Helps determine what procedure to follow for the Boot Disk
my $ok; my $ok;
my $box2; my $box2;
my $label; my $label;
my $label_advanced; my $label_advanced;
@ -269,7 +274,6 @@ my ($hbox_advanced);
my $separator_advanced; my $separator_advanced;
my @entry_advanced; my @entry_advanced;
my $entry_advanced;
my ($ea1,$ea2,$ea3,$ea4,$ea5,$ea6); # entry advanced boot my ($ea1,$ea2,$ea3,$ea4,$ea5,$ea6); # entry advanced boot
my ($ear1,$ear2,$ear3,$ear4); # entry advanced root my ($ear1,$ear2,$ear3,$ear4); # entry advanced root
my ($eab1,$eab2,$eab3); # entry advanced uml 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 ($main::combo); made this totally global
my ($adj2,$adj3); my ($adj2,$adj3);
my @strings; my @strings;
# Value set by kernel_modules
my $kernel_version; my $kernel_version;
#
# $entry_advanced[3] is the Root Device # $entry_advanced[3] is the Root Device
# $filesystem_size and root_device_size are important globals for ARS, # $filesystem_size and root_device_size are important globals for ARS,
# there weren't put into entry_advanced because they are spin buttons. # there weren't put into entry_advanced because they are spin buttons.
@ -2435,12 +2441,12 @@ sub lilo {
sys("umount $tmp/initrd_mnt"); sys("umount $tmp/initrd_mnt");
my $kernel = $container[KERNEL]; my $kernel = $container[KERNEL];
my $root_image = $container[ROOT_FS]; my $root_fs = $container[ROOT_FS];
my $device = $container[BOOT_DEVICE]; my $device = $container[BOOT_DEVICE];
my $size = $container[SIZE]; my $size = $container[SIZE];
if ($ok == 1 || $ok == 2) { 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; mtab(0) if defined $value;
} }
elsif ($ok == 0) { elsif ($ok == 0) {
@ -2475,7 +2481,7 @@ sub lilo_put_it_together {
info(0, "Copying over kernel\n"); info(0, "Copying over kernel\n");
return if 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; "gBootRoot: ERROR: Could not copy over the kernel") == 2;
pb($B,3); pb($B,3);
@ -2530,7 +2536,8 @@ sub lilo_put_it_together {
pb($B,7); pb($B,7);
chdir("$mnt"); #"boot_root: ERROR: Could not change directories\n"; 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 ($container[BOOT_DEVICE] eq $entry_advanced[0]) {
if (err_custom("lilo -v -C brlilo.conf -r $mnt", if (err_custom("lilo -v -C brlilo.conf -r $mnt",
"gBootRoot: ERROR: lilo failed") == 2) { "gBootRoot: ERROR: lilo failed") == 2) {
@ -2555,7 +2562,7 @@ sub lilo_put_it_together {
# Here's where we copy over that compressed filesystem # Here's where we copy over that compressed filesystem
# We could separate $container[BOOT_DEVICE] = boot,root allowing two # 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 # is the ROOT_DEVICE
if ($um == 0 ) { if ($um == 0 ) {
mtab(1); mtab(1);
@ -3267,33 +3274,76 @@ sub mtab_check {
my $error = 1; my $error = 1;
# Check to see if $device is mounted # Check to see if $device is mounted
open (MTAB, "/etc/mtab") or die "no mtab!\n"; open (MTAB, "/etc/mtab") or die "no mtab!\n";
while (<MTAB>) { while (<MTAB>) {
if (m,$entry_advanced[0],) {
# Safety Check: if ($count == 1) {
$dialog = "Please umount the device first.\nPress OK when you are ready.";
$error = 0; # 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 # Make sure the drive and storage medium are accessible
# Keep asking until they are. # Keep asking until they are.
if ($error == 1) { if ($error == 1) {
destroy $mtab; destroy $mtab;
# $size has to be determined by boot disk or root disk
sys("mke2fs -F -m0 -i8192 $entry_advanced[0] $container[SIZE]"); # $size has to be determined by boot disk or root disk
if ($? != 0) {
$dialog = "gBootRoot: ERROR: You need to insert a disk\n"; # ROOT_DEVICE - test with a loop device
mtab_window($dialog,$error,$count); if ($count == 1) {
return; sys("mke2fs -F -m0 -i8192 $entry_advanced[3] $root_device_size");
} }
return if errm(sys("mount -t ext2 $entry_advanced[0] $mnt")) == 2;
lilo_put_it_together() if $count == 0; # BOOT_DEVICE
device2() if $count == 1; 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 } # end sub mtab_check

Loading…
Cancel
Save