Skip to content

/project/admin/tools/ldd_bee.pl #2

Merged
merged 6 commits into from
Jun 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
28 changes: 28 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,31 @@ Tool von Donald.
### thomas_libusage

Tool von mir.

### ldd_bee

Dump all `bee` packages, which contain `.so` libs used by executable.

#### usage
```
/project/admin/tools/ldd_bee.pl executable [executable ... ]
```

#### output

```
# /lib/libXXX.so.N
# /lib/libYYY.so.M
# /usr/lib/libZZZ.so.U
PKGALLPKG[0]=beepkg-1.0.6-3.x86_64
BEEFILE[0]=/usr/share/bee/beepkg-1.0.6-3.x86_64/beepkg--1.0.6-3.bee
BEETIME[0]=1394791086 # 2 yrs 3 mon (Fri Mar 14 10:58:06 2014)
BEELIB[0]=/usr/lib/libXXX.so.1.0

PKGALLPKG[1]=beedep-0.98.5-0.x86_64
BEEFILE[1]=/usr/share/bee/beedep-0.98.5-0.x86_64/beedep-0.98.5-0.bee
BEETIME[1]=1417173467 # 1 yrs 6 mon (Fri Nov 28 12:17:47 2014)
BEELIB[1]=/usr/lib/libYYY.so.6

```

103 changes: 103 additions & 0 deletions ldd_bee/ldd_bee.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#!/usr/bin/perl -w
use strict;
use Data::Dumper;$Data::Dumper::Sortkeys=1;

my %ldd;
for (@ARGV) {
@_=`ldd $ARGV[0]`;
chomp @_;
map {/=>\s(\S+)/ && $ldd{$1}++} @_;
}

my @libs = sort keys %ldd;

my $k;

my %BEEQUERY;

for my $bee (</usr/share/bee/*>) {
next unless -e "$bee/CONTENT";
$bee=~/.*\/(.*)/;
my $b = $1;
open I,'<',"$bee/CONTENT" or die;
while (<I>) {
if (m{:file=(.*)}) {
$_=$1;
s{//.*}{}; #unsymlink
push @{$BEEQUERY{$_}},$b;
}
}
}

my %bee;
for my $l (@libs) {
print "# $l\n";
if ( exists( $BEEQUERY{$l}) ) {
map { $bee{$_}{$l}++ } @{$BEEQUERY{$l}};
}
else {
die "## $l not found in any bee file\n";
}
}
my $b = 0;
my $lc = 0;
for my $bee ( sort keys %bee ) {
print "\n";
my ($beefile) = </usr/share/bee/$bee/*.bee>;
my $mt = (stat($beefile))[9];
print "PKGALLPKG[$b]=$bee\n";
print " BEEFILE[$b]=$beefile\n";
printf " BEETIME[$b]=%d # %s (%s)\n",$mt,years(time-$mt,2),scalar(localtime($mt));
for my $lib ( sort keys %{$bee{$bee}} ) {
print " BEELIB[$lc]=$lib\n";
$lc++;
}
$b++;
}

sub years {
my $s = shift;
my $n = shift;

if ($s == 0) {
return '0 secs';
}
my @T=();
my $t = int($s/(365*60*60*24));

push @T, ($t > 0) ? $t : 0; # months
$s -= $t*int(365*60*60*24);

$t = int($s/(30.42*60*60*24));
push @T, ($t > 0) ? $t : 0; # months
$s -= $t*int(30.42*60*60*24);

$t = int($s/(60*60*24));
push @T, ($t > 0) ? $t : 0; # days
$s -= $t*(60*60*24);

$t = int($s/(60*60));
push @T, ($t > 0) ? $t : 0; # hrs
$s -= $t*(60*60);

$t = int($s/(60));
push @T, ($t > 0) ? $t : 0; # min
$s -= $t*60;

$t = int($s);
push @T, ($t > 0) ? $t : 0; # sec

my @L;
for my $x ('yrs','mon','days','hrs','min','secs') {
my $y = shift @T;
if ($y != 0) {
if (defined($n)) {
$n--;
last if ($n < 0);
}
push @L,"$y $x";
}
}
return join(' ',@L);
}