mirror of
https://github.com/fspc/gbootroot.git
synced 2025-03-04 20:03:22 -05:00
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().
This commit is contained in:
parent
a9c5a6d0b8
commit
f4d63b90d9
120
gbootroot
120
gbootroot
@ -53,6 +53,7 @@
|
||||
#
|
||||
# Genext2fs
|
||||
# Xavier Bestel <xavier.bestel@free.fr>
|
||||
# Erik Andersen
|
||||
#
|
||||
# Perl
|
||||
# Larry Wall <larry@wall.org>
|
||||
@ -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 (<MTAB>) {
|
||||
|
||||
if ($count == 1) {
|
||||
if ( $count < 3 ) {
|
||||
open (MTAB, "/etc/mtab") or die "no mtab!\n";
|
||||
while (<MTAB>) {
|
||||
|
||||
# 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 ) {
|
||||
|
||||
# BOOT_DEVICE
|
||||
if (m,$entry_advanced[0],) {
|
||||
# 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;
|
||||
|
||||
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user