mirror of
https://github.com/fspc/gbootroot.git
synced 2025-02-23 00:53:23 -05:00
Program now strips, closes bug 112073.
This commit is contained in:
parent
5b00aa2c6a
commit
05205ff245
120
gBootRoot
120
gBootRoot
@ -324,7 +324,6 @@ my $vbox_advanced = new Gtk::VBox($false,0);
|
||||
$box1->add($vbox_advanced);
|
||||
$vbox_advanced->show();
|
||||
|
||||
|
||||
# The Advanced Section button
|
||||
hbox_advanced();
|
||||
my $button_advanced = new Gtk::Button("Advanced Section");
|
||||
@ -419,37 +418,41 @@ sub advanced_section {
|
||||
|
||||
if ($button_count == 0) {
|
||||
#$vbox_advanced->set_usize(321,300);
|
||||
|
||||
my $boolean;
|
||||
# Will use a table once things start to take shape.
|
||||
|
||||
# The strip section
|
||||
hbox_advanced(); $ha1 = $hbox_advanced;
|
||||
label_advanced("Stripping:");
|
||||
!defined $lib_strip_check ? ($boolean = 1)
|
||||
: ($boolean = $lib_strip_check->get_active());
|
||||
$lib_strip_check = new Gtk::CheckButton("Libraries");
|
||||
$lib_strip_check->set_active($true);
|
||||
$lib_strip_check->set_active($boolean);
|
||||
$tooltips->set_tip( $lib_strip_check,
|
||||
"This is generally a good idea. [--strip-debug]", "" );
|
||||
$hbox_advanced->pack_start( $lib_strip_check, $false, $false, 0);
|
||||
show $lib_strip_check;
|
||||
!defined $bin_strip_check ? ($boolean = 1)
|
||||
: ($boolean = $bin_strip_check->get_active());
|
||||
$bin_strip_check = new Gtk::CheckButton("Binaries");
|
||||
$bin_strip_check->set_active($true);
|
||||
$bin_strip_check->set_active($boolean);
|
||||
$tooltips->set_tip( $bin_strip_check,
|
||||
"This is generally a good idea. [--strip-all]", "" );
|
||||
$hbox_advanced->pack_start( $bin_strip_check, $true, $true, 0);
|
||||
show $bin_strip_check;
|
||||
|
||||
# Verbosity section
|
||||
separator_advanced();
|
||||
hbox_advanced(); $ha2 = $hbox_advanced;
|
||||
label_advanced("Verbosity Level: \"Coming Soon!\"");
|
||||
#separator_advanced();
|
||||
#hbox_advanced(); $ha2 = $hbox_advanced;
|
||||
#label_advanced("Verbosity Level: \"Coming Soon!\"");
|
||||
|
||||
$button_count++;
|
||||
}
|
||||
else {
|
||||
#$vbox_advanced->set_usize(321,0);
|
||||
destroy $ha1;
|
||||
destroy $separator_advanced;
|
||||
destroy $ha2;
|
||||
#destroy $separator_advanced;
|
||||
#destroy $ha2;
|
||||
$button_count--;
|
||||
}
|
||||
|
||||
@ -807,6 +810,15 @@ elsif (defined $container[0] && defined $container[1] &&
|
||||
if (defined $kernel && defined $root_image &&
|
||||
defined $device && defined $size) {
|
||||
$container[5] = $compress;
|
||||
|
||||
# 1 .. 4 - its a hash .. not too simple
|
||||
!defined $lib_strip_check ? ($container[6] = 1)
|
||||
: ($container[6] = $lib_strip_check->get_active());
|
||||
!$container[6] ? ($container[6] = 2) : ($container[6] = 1);
|
||||
!defined $bin_strip_check ? ($container[7] = 3)
|
||||
: ($container[7] = $bin_strip_check->get_active());
|
||||
!$container[7] ? ($container[7] = 4) : ($container[7] = 3);
|
||||
|
||||
if (@original_container) { # defined array deprecate Perl 5.6 - zas@metaconcept.com
|
||||
# a hash check isn't perfect for two values which are the same
|
||||
# no need to check all the values
|
||||
@ -829,7 +841,8 @@ elsif (defined $container[0] && defined $container[1] &&
|
||||
$initrd = "initrd_image";
|
||||
}
|
||||
# reset
|
||||
@original_container = ($container[0],$root_image,$device,$size,$compress);
|
||||
@original_container = ($container[0],$root_image,$device,$size,
|
||||
$compress,$container[6],$container[7]);
|
||||
|
||||
lilo();
|
||||
}
|
||||
@ -1117,10 +1130,41 @@ sub device2 {
|
||||
|
||||
} # end sub device 2
|
||||
|
||||
# Checks if lib or bin is stripped, if not proceeds to strip. Returns
|
||||
# full file path and strip result. Right now this is specific to initrd.
|
||||
sub stripper {
|
||||
|
||||
# stripper (program,bin|lib);
|
||||
if ((!defined $lib_strip_check && !defined $bin_strip_check) or
|
||||
($lib_strip_check->active || $bin_strip_check->active)) {
|
||||
my $not_stripped = `file $_[0]`;
|
||||
my $filename = basename($_[0]);
|
||||
|
||||
if ($not_stripped =~ m,not stripped,) {
|
||||
if (($_[1] eq "lib" && !defined $lib_strip_check) or
|
||||
($_[1] eq "lib" && $lib_strip_check->active)) {
|
||||
system "objcopy --strip-debug $_[0] $tmp/$filename";
|
||||
return ( "$tmp/$filename", 1 );
|
||||
}
|
||||
elsif (($_[1] eq "bin" && !defined $bin_strip_check) or
|
||||
($_[1] eq "bin" && $bin_strip_check->active)) {
|
||||
system "objcopy --strip-all $_[0] $tmp/$filename";
|
||||
return ( "$tmp/$filename", 1 );
|
||||
}
|
||||
}
|
||||
else {
|
||||
return ( $_[0], 0 );
|
||||
}
|
||||
}
|
||||
return ( $_[0], 0);
|
||||
|
||||
}
|
||||
|
||||
sub initrd_size {
|
||||
|
||||
my ($linuxrc_size) = @_;
|
||||
my ($what,$lib);
|
||||
my ($path,$value);
|
||||
#V#print "Checking size needed for initrd\n";
|
||||
|
||||
# the size of the loop device should be at least 1.63% larger than what
|
||||
@ -1138,11 +1182,16 @@ sub initrd_size {
|
||||
# add other executables here
|
||||
my @initrd_stuff = qw(ash gzip mount umount);
|
||||
foreach (@initrd_stuff) {
|
||||
$initrd_size = $initrd_size + ((stat("/bin/$_"))[12]/2);
|
||||
($path,$value) = stripper("/bin/$_","bin");
|
||||
$initrd_size = $initrd_size + ((stat($path))[12]/2);
|
||||
unlink($path) if $value == 1;
|
||||
}
|
||||
|
||||
# path for bzip2 assumes too much
|
||||
if ($compress eq "bzip2" && -e "/usr/bin/$compress") {
|
||||
$initrd_size = $initrd_size + ((stat("/usr/bin/$compress"))[12]/2);
|
||||
($path,$value) = stripper("/usr/bin/$compress","bin");
|
||||
$initrd_size = $initrd_size + ((stat($path))[12]/2);
|
||||
unlink($path) if $value == 1;
|
||||
}
|
||||
|
||||
# lib sizes
|
||||
@ -1159,18 +1208,15 @@ sub initrd_size {
|
||||
if (-l "/lib/$lib") {
|
||||
$what = (split(/\s+/,$_))[10];
|
||||
$initrd_size = $initrd_size + 1;
|
||||
$initrd_size = $initrd_size + ((stat("/lib/$what"))[12]/2);
|
||||
($path,$value) = stripper("/lib/$lib","lib");
|
||||
$initrd_size = $initrd_size + ((stat($path))[12]/2);
|
||||
unlink($path) if $value == 1;
|
||||
}
|
||||
# no symbolic link
|
||||
else {
|
||||
# This is a test right now
|
||||
#if ($strip == 1) {
|
||||
# system "objcopy /lib/$lib /tmp/$lib";
|
||||
# $initrd_size = $initrd_size + ((stat("/tmp/$lib"))[12]/2);
|
||||
#}
|
||||
#else {
|
||||
$initrd_size = $initrd_size + ((stat("/lib/$lib"))[12]/2);
|
||||
#}
|
||||
($path,$value) = stripper("/lib/$lib","lib");
|
||||
$initrd_size = $initrd_size + ((stat($path))[12]/2);
|
||||
unlink($path) if $value == 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1208,7 +1254,7 @@ sub pb {
|
||||
sub initrd {
|
||||
|
||||
my($kernel,$root_image,$device,$size) = @_;
|
||||
my($lib,$what);
|
||||
my($lib,$what,$path,$value,$tool);
|
||||
my $I = "initrd";
|
||||
|
||||
my $broot_image = basename($root_image);
|
||||
@ -1247,11 +1293,18 @@ return if errmk(system "mkdir $tmp/initrd_mnt >> $verbosefn 2>&1; mount -o loop
|
||||
pb($I,7);
|
||||
|
||||
#V#print ".. the bins\n";
|
||||
return if errcp(system "cp -a /bin/{ash,gzip,mount,umount} $tmp/initrd_mnt/bin >> $verbosefn 2>&1") == 2;
|
||||
if ($compress eq "bzip2") {
|
||||
if (-e "/usr/bin/$compress") {
|
||||
return if errcp(system "cp -a /usr/bin/$compress $tmp/initrd_mnt/bin >> $verbosefn 2>&1") == 2;
|
||||
}
|
||||
my @initrd_stuff = qw(ash gzip mount umount);
|
||||
foreach (@initrd_stuff) {
|
||||
($path,$value) = stripper("/bin/$_","bin");
|
||||
$value == 0 ? ($tool = "cp -a") : ($tool = "mv");
|
||||
return if errcp(system "$tool $path $tmp/initrd_mnt/bin >> $verbosefn 2>&1") == 2;
|
||||
}
|
||||
|
||||
# path for bzip2 assumes too much
|
||||
if ($compress eq "bzip2" && -e "/usr/bin/$compress") {
|
||||
($path,$value) = stripper("/usr/bin/$compress","bin");
|
||||
$value == 0 ? ($tool = "cp -a") : ($tool = "mv");
|
||||
return if errcp(system "$tool $path $tmp/initrd_mnt/bin >> $verbosefn 2>&1") == 2;
|
||||
}
|
||||
|
||||
# Testing init is sufficient for grabbing the correct libraries for the
|
||||
@ -1269,17 +1322,22 @@ return if errmk(system "mkdir $tmp/initrd_mnt >> $verbosefn 2>&1; mount -o loop
|
||||
# symbolic link
|
||||
if (-l "/lib/$lib") {
|
||||
$what = (split(/\s+/,$_))[10];
|
||||
return if errcp(system "cp -a /lib/$lib $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
return if errcp(system "cp -a /lib/$what $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
($path,$value) = stripper("/lib/$lib","lib");
|
||||
$value == 0 ? ($tool = "cp -a") : ($tool = "mv");
|
||||
return if errcp(system "$tool $path $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
($path,$value) = stripper("/lib/$what","lib");
|
||||
$value == 0 ? ($tool = "cp -a") : ($tool = "mv");
|
||||
return if errcp(system "$tool $path $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
}
|
||||
# no symbolic link
|
||||
else {
|
||||
return if errcp(system "cp -a /lib/$lib $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
($path,$value) = stripper("/lib/$lib","lib");
|
||||
return if errcp(system "cp -a $path $tmp/initrd_mnt/lib >> $verbosefn 2>&1") == 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#V#print "Determine run-time link bindings\n";
|
||||
# Has a return code of 0 regardless
|
||||
system "ldconfig -r $tmp/initrd_mnt";
|
||||
|
Loading…
x
Reference in New Issue
Block a user