diff --git a/utils/dockerpackages.pl b/utils/dockerpackages.pl new file mode 100755 index 000000000..933b2ec99 --- /dev/null +++ b/utils/dockerpackages.pl @@ -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"; +} + + +