Browse Source

This does a great job of prompting the user if they have root privileges for lilo, they may

continue or stop the process.  This uses mtab().
master
freesource 23 years ago
parent
commit
f4d63b90d9
  1. 74
      gbootroot

74
gbootroot

@ -53,6 +53,7 @@
# #
# Genext2fs # Genext2fs
# Xavier Bestel <xavier.bestel@free.fr> # Xavier Bestel <xavier.bestel@free.fr>
# Erik Andersen
# #
# Perl # Perl
# Larry Wall <larry@wall.org> # Larry Wall <larry@wall.org>
@ -2856,20 +2857,17 @@ sub lilo_put_it_together {
if ( $fs_type eq "genext2fs" ) { if ( $fs_type eq "genext2fs" ) {
# info(0,"HERE /usr/lib/bootroot/$main::makefs -b $device_size -d $mnt -D $device_table $entry_advanced[0]");
my $error; my $error;
#
# When creating a fs on floppy, specifying -i causes genext2fs to fail, # When creating a fs on floppy, specifying -i causes genext2fs to fail,
# its better to just let the program figure out the inode size for now. # its better to just let the program figure out the inode size for now.
if ( if (
sys("/usr/lib/bootroot/genext2fs -z -b $device_size -d $mnt -D $device_table $entry_advanced[0]") !~ sys("/usr/lib/bootroot/genext2fs -z -r0 -b $device_size -d $mnt -D $device_table $entry_advanced[0]") !~
/^0$/ ) { /^0$/ ) {
$error = error("Cannot $fs_type filesystem.\n"); $error = error("Cannot $fs_type filesystem.\n");
return "ERROR" if $error && $error eq "ERROR"; return "ERROR" if $error && $error eq "ERROR";
} }
#
} }
@ -2902,7 +2900,7 @@ sub lilo_put_it_together {
# This enforces that lilo is only wil run on a bootable drive, # This enforces that lilo is only wil run on a bootable drive,
# otherwise the user has to do it manually. # otherwise the user has to do it manually.
if ($container[BOOT_DEVICE] eq $entry_advanced[0]) { if ($container[BOOT_DEVICE] eq $entry_advanced[0]) {
#
# root can happily chroot # root can happily chroot
if ( $> == 0 ) { if ( $> == 0 ) {
@ -2918,13 +2916,26 @@ sub lilo_put_it_together {
# root lilo power, before going on. # root lilo power, before going on.
else { else {
if ( err_custom("$main::sudo lilo -v -C $mnt/brlilo.conf -b $entry_advanced[0]", "gBootRoot: ERROR: lilo failed") == 2 ) { # Ask the user if they have su lilo priviliges.
# Hopefully, password free, but that can be incorporated.
mtab(3);
do {
if ( $mtab == 2 ) {
undef $mtab;
chdir($pwd); chdir($pwd);
return if errum(sys("umount $mnt")) == 2;
return; return;
} }
while (Gtk->events_pending) { Gtk->main_iteration; }
} while $mtab;
# It's o.k. if lilo fails.
if ( err_custom("$main::sudo lilo -v -C $mnt/brlilo.conf -b $entry_advanced[0]", "gBootRoot: ERROR: lilo failed") == 2 ) {
chdir($pwd);
} }
#
}
} }
@ -3040,7 +3051,7 @@ sub device2 {
if ( if (
sys("/usr/lib/bootroot/$main::makefs -b $device_size -d $tmp/rootdisk $entry_advanced[3]") !~ sys("/usr/lib/bootroot/genext2fs -z -r0 -b $device_size -d $mnt $entry_advanced[3]") !~
/^0$/ ) { /^0$/ ) {
info( 0, "/usr/lib/bootroot/$main::makefs -b $device_size -d $tmp/rootdisk $entry_advanced[3]\n"); info( 0, "/usr/lib/bootroot/$main::makefs -b $device_size -d $tmp/rootdisk $entry_advanced[3]\n");
$error = error("Cannot $fs_type filesystem.\n"); $error = error("Cannot $fs_type filesystem.\n");
@ -3459,6 +3470,8 @@ sub initrd {
my $fs_type = (split(/\s/,$main::makefs))[0]; my $fs_type = (split(/\s/,$main::makefs))[0];
if ( $fs_type eq "genext2fs" ) { if ( $fs_type eq "genext2fs" ) {
# Assuming busybox is being used, so bzip2 should still be standard
# just another link .. just for testing.
if ( $compress eq "bzip2" ) { if ( $compress eq "bzip2" ) {
$compress = "bunzip2"; $compress = "bunzip2";
} }
@ -3960,7 +3973,8 @@ sub mtab_window {
$mtab->set_position('center'); $mtab->set_position('center');
my $label = Gtk::Label->new($dialog); my $label = Gtk::Label->new($dialog);
$label->set_justify( 'left' ); $label->set_justify( 'left' );
$label->set_pattern("_________") if defined $pattern; $label->set_pattern("_________") if $pattern == 9;
$label->set_pattern("_____") if $pattern == 5;
$mtab->vbox->pack_start( $label, $true, $true, 15 ); $mtab->vbox->pack_start( $label, $true, $true, 15 );
$label->show(); $label->show();
my $button = Gtk::Button->new("OK"); my $button = Gtk::Button->new("OK");
@ -3970,7 +3984,7 @@ sub mtab_window {
$button->grab_default; $button->grab_default;
$button->show; $button->show;
$button = Gtk::Button->new("Cancel"); $button = Gtk::Button->new("Cancel");
$button->signal_connect("clicked", sub { destroy $mtab} ); $button->signal_connect("clicked", sub { destroy $mtab; $mtab = 2; } );
$mtab->action_area->pack_start($button, $false, $false,0); $mtab->action_area->pack_start($button, $false, $false,0);
$button->show; $button->show;
} }
@ -3995,14 +4009,23 @@ sub mtab{
."Press OK when the drive and its storage medium is ready.\n" ."Press OK when the drive and its storage medium is ready.\n"
."The Boot Disk will now be made. All data already on\n" ."The Boot Disk will now be made. All data already on\n"
."the storage medium will be erased."; ."the storage medium will be erased.";
mtab_window($dialog,1,$_[0],1); mtab_window($dialog,1,$_[0],9);
} }
elsif ($_[0] == 1) { elsif ($_[0] == 1) {
my $dialog = "ROOTDISK:\n" my $dialog = "ROOTDISK:\n"
."Press OK when the drive and its storage medium is ready.\n" ."Press OK when the drive and its storage medium is ready.\n"
."The Root Disk will now be made. All data already on\n" ."The Root Disk will now be made. All data already on\n"
."the storage medium will be erased."; ."the storage medium will be erased.";
mtab_window($dialog,1,$_[0],1); mtab_window($dialog,1,$_[0],9);
}
elsif ( $_[0] == 3 ) {
my $dialog = "LILO:\n"
."Lilo will now be executed. In order for the bootloader\n"
."to work properly you need superuser privileges to run lilo.\n"
."See FAQ for ways to accomplish this. Even if you don't have\n"
."privileges, the program will continue to make a boot disk.\n"
."Lilo may be ran as root at a later time on the boot disk.";
mtab_window($dialog,3,$_[0],5);
} }
@ -4019,6 +4042,8 @@ sub mtab_check {
my $fs_type = (split(/\s/,$main::makefs))[0]; my $fs_type = (split(/\s/,$main::makefs))[0];
# Check to see if $device is mounted # Check to see if $device is mounted
if ( $count < 3 ) {
open (MTAB, "/etc/mtab") or die "no mtab!\n"; open (MTAB, "/etc/mtab") or die "no mtab!\n";
while (<MTAB>) { while (<MTAB>) {
@ -4049,6 +4074,8 @@ sub mtab_check {
} }
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
@ -4109,6 +4136,12 @@ sub mtab_check {
} }
# Warned the user about something
if ( $error == 3 ) {
$mtab->destroy;
}
} # end sub mtab_check } # end sub mtab_check
################## ##################
@ -4116,6 +4149,7 @@ sub mtab_check {
################## ##################
# This should be user accessible # This should be user accessible
# This should be called linuxrc.
sub initrd_heredoc { sub initrd_heredoc {
my($broot_image,$root_device) = @_; my($broot_image,$root_device) = @_;
@ -4129,16 +4163,26 @@ export PATH=/bin:/sbin:/usr/bin:
echo Preparing to setup ramdisk. echo Preparing to setup ramdisk.
mount -o remount,rw / 2>/dev/null # Before busybox experimentation this was the state of things:
# mount -o remount,rw / 2>/dev/null
# echo Mounting proc...
# mount -t proc none /proc
echo Mounting proc... echo Mounting proc...
mount -t proc none /proc mount -t proc none /proc
echo Mounting $root_device readable-writable
mount -o remount,rw $root_device /
echo -n 'Please insert the root floppy, and press [Enter]: ' echo -n 'Please insert the root floppy, and press [Enter]: '
read ENTER read ENTER
echo Mounting $root_device readonly ... echo Mounting $root_device readonly ...
mount -o ro -t ext2 $root_device /mnt
# -t causes busybox to fail here, -o doesn't help much either .. needs to
# be repeated twice, which is silly .. the mounting.
#mount -o ro -t ext2 $root_device /mnt
mount $root_device /mnt
echo -n Copying new root to ramdisk .. please wait ... echo -n Copying new root to ramdisk .. please wait ...
$compress -cd /mnt/$broot_image > /dev/ram1 $compress -cd /mnt/$broot_image > /dev/ram1

Loading…
Cancel
Save