From f4d63b90d9b3a59903aff666d39fabcc78c7277c Mon Sep 17 00:00:00 2001 From: freesource Date: Mon, 26 Nov 2001 05:59:05 +0000 Subject: [PATCH] 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(). --- gbootroot | 114 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 79 insertions(+), 35 deletions(-) diff --git a/gbootroot b/gbootroot index 4d8830e..3ef1f49 100755 --- a/gbootroot +++ b/gbootroot @@ -53,6 +53,7 @@ # # Genext2fs # Xavier Bestel +# Erik Andersen # # Perl # Larry Wall @@ -2856,20 +2857,17 @@ sub lilo_put_it_together { 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; -# # 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. 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$/ ) { $error = error("Cannot $fs_type filesystem.\n"); 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, # otherwise the user has to do it manually. if ($container[BOOT_DEVICE] eq $entry_advanced[0]) { -# + # root can happily chroot if ( $> == 0 ) { @@ -2918,13 +2916,26 @@ sub lilo_put_it_together { # root lilo power, before going on. else { + # 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); + return if errum(sys("umount $mnt")) == 2; + 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); - return; } } -# + } @@ -3040,7 +3051,7 @@ sub device2 { 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$/ ) { info( 0, "/usr/lib/bootroot/$main::makefs -b $device_size -d $tmp/rootdisk $entry_advanced[3]\n"); $error = error("Cannot $fs_type filesystem.\n"); @@ -3459,6 +3470,8 @@ sub initrd { my $fs_type = (split(/\s/,$main::makefs))[0]; 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" ) { $compress = "bunzip2"; } @@ -3960,7 +3973,8 @@ sub mtab_window { $mtab->set_position('center'); my $label = Gtk::Label->new($dialog); $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 ); $label->show(); my $button = Gtk::Button->new("OK"); @@ -3970,7 +3984,7 @@ sub mtab_window { $button->grab_default; $button->show; $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); $button->show; } @@ -3995,14 +4009,23 @@ sub mtab{ ."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 storage medium will be erased."; - mtab_window($dialog,1,$_[0],1); + mtab_window($dialog,1,$_[0],9); } elsif ($_[0] == 1) { my $dialog = "ROOTDISK:\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 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,35 +4042,39 @@ sub mtab_check { my $fs_type = (split(/\s/,$main::makefs))[0]; # Check to see if $device is mounted - open (MTAB, "/etc/mtab") or die "no mtab!\n"; - while () { - if ($count == 1) { + if ( $count < 3 ) { + open (MTAB, "/etc/mtab") or die "no mtab!\n"; + while () { - # ROOT_DEVICE - if ( m,$entry_advanced[3], ) { - # Safety Check: - $dialog = - "Please umount the device first.\nPress OK when you are ready."; - $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 ) { + 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; + # 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; @@ -4109,6 +4136,12 @@ sub mtab_check { } + # Warned the user about something + if ( $error == 3 ) { + $mtab->destroy; + } + + } # end sub mtab_check ################## @@ -4116,6 +4149,7 @@ sub mtab_check { ################## # This should be user accessible +# This should be called linuxrc. sub initrd_heredoc { my($broot_image,$root_device) = @_; @@ -4129,16 +4163,26 @@ export PATH=/bin:/sbin:/usr/bin: 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... 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]: ' read ENTER 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 ... $compress -cd /mnt/$broot_image > /dev/ram1