chore(utils): New utils tool for listing debian packages from Dockerfiles.

This commit is contained in:
Stephan Barth 2024-08-18 23:16:16 +02:00
parent 9938cf6243
commit a3d0cb1820

65
utils/dockerpackages.pl Executable file
View 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";
}