From 338370c319b6314246f67a25b3fb090259528897 Mon Sep 17 00:00:00 2001 From: freesource Date: Tue, 6 Nov 2001 20:05:59 +0000 Subject: [PATCH] This does it! Now non-root users can create complete boot/root sets ..the only catch is lilo, but working that one out. --- gbootroot | 124 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 93 insertions(+), 31 deletions(-) diff --git a/gbootroot b/gbootroot index 8474187..8b8a0ae 100755 --- a/gbootroot +++ b/gbootroot @@ -2915,43 +2915,105 @@ else { sub device2 { - my $device_size = (split(/\s+/,`df $mnt`))[8]; - my $root_image_size = (stat($container[ROOT_FS]))[12]/2; - my $remain_root = $device_size - $root_image_size; + my $fs_type = (split(/\s/,$main::makefs))[0]; - if ($remain_root =~ /^-+\d+$/) { - error_window("gBootRoot: ERROR: Not enough room: root stuff = $root_image_size k, device = $device_size k"); - } - else { - $entry5->set_text("$remain_root k"); - } + # Time to do a little calculations + my $device_size; + if ( $fs_type ne "genext2fs" ) { + $device_size = (split(/\s+/,`df $mnt`))[8]; + } + else { + if ( !$root_device_size ) { + $device_size = $container[SIZE]; + } + else { + $device_size = $root_device_size; + } + } + + my $root_image_size = (stat($container[ROOT_FS]))[12]/2; + my $remain_root = $device_size - $root_image_size; - info(0, "Copy over the compressed filesystem\n"); - return if errrm(sys("rmdir $mnt/lost+found")) == 2; - my $broot_image = basename($container[ROOT_FS]); + if ($remain_root =~ /^-+\d+$/) { + error_window("gBootRoot: ERROR: Not enough room: root stuff = $root_image_size k, device = $device_size k"); + } + else { + $entry5->set_text("$remain_root k"); + } + + info(0, "Copy over the compressed filesystem\n"); + if ( $fs_type ne "genext2fs" ) { + return if errrm(sys("rmdir $mnt/lost+found")) == 2; + } + my $broot_image = basename($container[ROOT_FS]); - my $FS = "filesystem"; - my $line_count = `wc -l < $container[ROOT_FS]`; chomp $line_count; - my $half_line_count = $line_count/2; - my $count = 1; - open(CF, ">$mnt/$broot_image") or error_window( - "gBootRoot: ERROR: Could not copy over the root filesystem") and return; + # Status output, use FH, or genext2fs to create disk. + #---------------------------------------------------- + my $FS = "filesystem"; + my $line_count = `wc -l < $container[ROOT_FS]`; chomp $line_count; + my $half_line_count = $line_count/2; + my $count = 1; - open(CR, "$container[ROOT_FS]") or error_window( - "gBootRoot: ERROR: Could not copy over the root filesystem") and return; + if ( $fs_type ne "genext2fs" ) { + open(CF, ">$mnt/$broot_image") or error_window( + "gBootRoot: ERROR: Could not copy over the root filesystem") and return; + + open(CR, "$container[ROOT_FS]") or error_window( + "gBootRoot: ERROR: Could not copy over the root filesystem") and return; - while () { - print CF $_; - pb($FS,$count,$line_count) if $count < $half_line_count; - $count++; - } - close(CF); close(CR); + while () { + print CF $_; + pb($FS,$count,$line_count) if $count < $half_line_count; + $count++; + } + close(CF); + close(CR); + } + + # genext2fs + else { + + my $error; + + # If genext2fs is being used clean $tmp/rootdisk if any garbage is + # found. + if ( $fs_type eq "genext2fs" ) { + if (-d "$tmp/rootdisk") { + sys("rm -rf $tmp/rootdisk"); + } + if (!-d "$tmp/rootdisk") { + return if errmk(sys("mkdir $tmp/rootdisk")) == 2; + } + } + + return if errcp( sys("cp -a $container[ROOT_FS] $tmp/rootdisk") ) == 2; + + for ( $count .. $half_line_count ) { + pb($FS,$count,$line_count) if $count < $half_line_count; + $count++; + } + + + if ( + sys("/usr/lib/bootroot/$main::makefs -b $device_size -d $tmp/rootdisk $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"); + return "ERROR" if $error && $error eq "ERROR"; + } + + + } + #------------------------------------------------------ + + if ( $fs_type ne "genext2fs" ) { + return if + err_custom("umount $mnt", + "gBootRoot: ERROR: Root disk did not properly umount") == 2; + } - return if - err_custom("umount $mnt", - "gBootRoot: ERROR: Root disk did not properly umount") == 2; - pb($FS,$count,$line_count); - info(0, "Finished!\n"); + pb($FS,$count,$line_count); + info(0, "Finished!\n"); } # end sub device 2