66 lines
1.2 KiB
Perl
Executable File
66 lines
1.2 KiB
Perl
Executable File
#!/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";
|
|
}
|
|
|
|
|
|
|