mirror of
https://github.com/fspc/gbootroot.git
synced 2025-04-04 07:43:22 -04:00
Now handles two different block devices with/without the same size.
This commit is contained in:
parent
7b98ca9122
commit
b9fa3919cb
114
gbootroot
114
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;
|
||||||
my $ok;
|
|
||||||
|
# Helps determine what procedure to follow for the Boot Disk
|
||||||
|
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;
|
||||||
my $kernel_version;
|
|
||||||
#
|
# Value set by kernel_modules
|
||||||
|
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:
|
|
||||||
$dialog = "Please umount the device first.\nPress OK when you are ready.";
|
|
||||||
$error = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(MTAB);
|
|
||||||
|
|
||||||
mtab_window($dialog,$error,$count) if $error == 0;
|
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);
|
||||||
|
|
||||||
|
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…
x
Reference in New Issue
Block a user