chore(utils): New utils tool for listing debian packages from Dockerfiles.
This commit is contained in:
parent
9938cf6243
commit
a3d0cb1820
65
utils/dockerpackages.pl
Executable file
65
utils/dockerpackages.pl
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
$0=~m#(.*)/# or die "Bad call path!";
|
||||
my $ddir = "$1/../docker";
|
||||
chdir($ddir);
|
||||
|
||||
my $dh = undef;
|
||||
opendir($dh, '.') or die "Could not read dir '.', because: $!";
|
||||
|
||||
my %where = ();
|
||||
|
||||
while(my $fn = readdir($dh)) {
|
||||
next if $fn=~m#^\.#;
|
||||
next unless -d $fn;
|
||||
print "=== $fn ===\n";
|
||||
my $df = "$fn/Dockerfile";
|
||||
if(!-e $df) {
|
||||
print "No Dockerfile here.\n\n";
|
||||
next
|
||||
}
|
||||
my $fh = undef;
|
||||
my @dep = ();
|
||||
open($fh, '<', $df) or die "Could not read '$df', because: $!";
|
||||
while(my $line = <$fh>) {
|
||||
if($line=~m#^\s*RUN\s+apt(?:-get|itude|)\s+(.*)#i) {
|
||||
my $what = $1;
|
||||
my @what = grep {!m#^-#} grep {length} split /\s+/, $what;
|
||||
if(@what) {
|
||||
my $inst = shift @what;
|
||||
if('install' eq $inst) {
|
||||
push @dep, @what
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print "Packages found: @dep\n\n";
|
||||
for(@dep) {
|
||||
push @{$where{$_}}, $fn
|
||||
}
|
||||
}
|
||||
|
||||
print "\n\n\n";
|
||||
|
||||
my %byDocker = ();
|
||||
|
||||
for my $pa(sort keys %where) {
|
||||
my $l = $where{$pa};
|
||||
print ":: $pa: @$l\n";
|
||||
my @l = sort @$l;
|
||||
my $nk = "@l";
|
||||
push @{$byDocker{$nk}}, $pa;
|
||||
}
|
||||
|
||||
print "\n\n\n";
|
||||
|
||||
for my $do(sort {length $a <=> length $b || $a cmp $b} keys %byDocker) {
|
||||
my @sp = sort @{$byDocker{$do}};
|
||||
print "!! $do\n@sp\n\n";
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user