diff --git a/gbootroot b/gbootroot index e7fc59c..b85aa4f 100755 --- a/gbootroot +++ b/gbootroot @@ -76,7 +76,7 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - +use lib "/usr/share/perl5"; use Gtk; use strict; use BootRoot::Yard; @@ -109,6 +109,8 @@ $main::makefs = "mke2fs -F -m0 -i8192"; # # 1.2.13 - 09/28/2001 # * Renamed "lilo" Boot method to "2 disk compression." +# * Add three new entry fields to manage kernel modules, and +# made important changes to the 2 disk compression code. # * Advanced Section is now Advanced Boot Section (ABS). # * Advanced Root Section (ARS) added. Includes root device and # size, root filesystem name with Save or Save As, filesystem @@ -2700,22 +2702,37 @@ sub initrd_size { $initrd_size = $initrd_size + ((stat($path))[12]/2); unlink($path) if $value == 1; } + + # The modules directory has to be removed here. + return if + errrm(sys("rmdir $tmp/initrd_mnt/lib/modules/$kernel_version")) == 2; + return if + errrm(sys("rmdir $tmp/initrd_mnt/lib/modules")) == 2; + return if + errrm(sys("rmdir $tmp/initrd_mnt/lib/")) == 2; + } # This and libs should be user accessible # add other executables here - my @initrd_stuff = qw(ash gzip mount umount modprobe); + my @initrd_stuff = qw(ash gzip mount umount); if (@modules) { - @initrd_stuff = qw(ash gzip mount umount modprobe); + @initrd_stuff = qw(ash gzip mount umount modprobe insmod); } else { @initrd_stuff = qw(ash gzip mount umount); } foreach (@initrd_stuff) { - ($path,$value) = stripper(find_file_in_path($_),"bin"); - $initrd_size = $initrd_size + ((stat($path))[12]/2); - unlink($path) if $value == 1; + if ( !readlink($_) ) { + ($path,$value) = stripper(find_file_in_path($_),"bin"); + $initrd_size = $initrd_size + ((stat($path))[12]/2); + unlink($path) if $value == 1; + } + else { + $initrd_size = $initrd_size + + length(readlink(find_file_in_path($_))); + } } if ($compress eq "bzip2" && -e find_file_in_path($compress)) { @@ -2817,7 +2834,7 @@ sub initrd { pb($I,2); # no need to enter y every time .. could use -F my $error; - open(T,"|mke2fs -m0 -i8192 $tmp/$initrd >/dev/null 2>&1") or + open(T,"|mke2fs -F -m0 -i8192 $tmp/$initrd >/dev/null 2>&1") or ($error = error("Can not make ext2 filesystem on initrd.\n")); return "ERROR" if $error && $error eq "ERROR"; print T "y\n"; close(T); @@ -2862,7 +2879,7 @@ sub initrd { mkpath("$tmp/initrd_mnt/lib/modules/$kernel_version"); foreach my $stuff (@modules) { - ($path,$value) = stripper($stuff,"bin"); + ($path,$value) = stripper($stuff,"mod"); $value == 0 ? ($tool = "cp -a") : ($tool = "mv"); if (!$path) { info(1,"gBootRoot Error: Couldn't find $stuff\n"); @@ -2881,25 +2898,27 @@ sub initrd { info(0, ".. the bins\n"); my @initrd_stuff; if (@modules) { - @initrd_stuff = qw(ash gzip mount umount modprobe); + @initrd_stuff = qw(ash gzip mount umount modprobe insmod); } else { @initrd_stuff = qw(ash gzip mount umount); } + # Will put the stuff in sbin because the is where the kernel looks for + # modprobe. foreach (@initrd_stuff) { ($path,$value) = stripper(find_file_in_path($_),"bin"); $value == 0 ? ($tool = "cp -a") : ($tool = "mv"); if (!$path) { info(1,"gBootRoot Error: Couldn't find $_\n"); } - return if errcp(sys("$tool $path $tmp/initrd_mnt/bin")) == 2; + return if errcp(sys("$tool $path $tmp/initrd_mnt/sbin")) == 2; } if ($compress eq "bzip2" && -e find_file_in_path($compress)) { ($path,$value) = stripper(find_file_in_path($compress),"bin"); $value == 0 ? ($tool = "cp -a") : ($tool = "mv"); - return if errcp(sys("$tool $path $tmp/initrd_mnt/bin")) == 2; + return if errcp(sys("$tool $path $tmp/initrd_mnt/sbin")) == 2; } # Testing if init is sufficient for grabbing the correct libraries for the @@ -3187,7 +3206,8 @@ mtab_window($dialog,$error,$count) if $error == 0; # Keep asking until they are. if ($error == 1) { destroy $mtab; - sys("mke2fs -m0 -i8192 $entry_advanced[0] $size"); + # $size has to be determined by boot disk or root disk + sys("mke2fs -F -m0 -i8192 $entry_advanced[0] $size"); if ($? != 0) { $dialog = "gBootRoot: ERROR: You need to insert a disk\n"; mtab_window($dialog,$error,$count); @@ -3212,7 +3232,7 @@ sub initrd_heredoc { # Here's where the initrd is put together using a loop device # HEREDOC my $initrd_exec = << "INITRD"; -#!/bin/ash +#!/sbin/ash export PATH=/bin:/sbin:/usr/bin: