use Mojo::UserAgent; use Data::Printer; use File::Slurp; use JSON; my $ua = Mojo::UserAgent->new; $ua->max_redirects(1); my $openwrtversion = '24.10.0-rc2'; my @routers = ( { ip => '192.168.2.1', name => 'HWR', router => 'wr3000' }, { ip => '192.168.2.142', name => 'DACH', router => 'x5000r' } ); my $sources = { x5000r => [ "https://downloads.openwrt.org/releases/$openwrtversion/targets/ramips/mt7621/packages/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/mipsel_24kc/base/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/mipsel_24kc/luci/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/mipsel_24kc/packages/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/mipsel_24kc/routing/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/mipsel_24kc/telephony/Packages.manifest" ], wr3000 => [ "https://downloads.openwrt.org/releases/$openwrtversion/targets/mediatek/filogic/packages/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/aarch64_cortex-a53/base/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/aarch64_cortex-a53/luci/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/aarch64_cortex-a53/packages/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/aarch64_cortex-a53/routing/Packages.manifest", "https://downloads.openwrt.org/releases/$openwrtversion/packages/aarch64_cortex-a53/telephony/Packages.manifest" ], }; my $json = {}; for my $router ( keys %{$sources} ) { $json->{$router} = {}; for my $t ( @{$sources->{$router}} ) { my $tx = $ua->get($t)->result->body; my @packages = $tx =~ /Package: (.*)/g; my @size = $tx =~ /Size: (.*)/g; my @version = $tx =~ /Version: (.*)/g; my $cnt = 0; for my $tr ( @packages ) { $json->{$router}->{$tr} = { version => $version[$cnt], size => $size[$cnt], }; $cnt ++; } } } for my $r ( @routers ) { my $name = $r->{name}; my $namerouter = $r->{router}; my $ip = $r->{ip}; my $newpack = "$namerouter\_new_packages_$name.txt"; my $missingpack = "$namerouter\_missing_packages_$name.txt"; my $l = `ssh root\@$ip "opkg list-installed"`; my @routerdata = split(/\n/, $l); my $maxsize = 0; write_file($newpack, '-uboot-envtools'); write_file($missingpack, ''); my $newpackage = {}; for my $pac ( @routerdata ) { chomp $pac; my ( $paket ) = split( ' - ', $pac ); if ( $newpackage->{$paket} ) { print "$paket: already in source\n"; } else { if ( $json->{$namerouter}->{$paket} ) { $newpackage->{$paket} = 1; $maxsize = $maxsize + $json->{$namerouter}->{$paket}->{size}; append_file($newpack, " $paket\n"); } else { append_file($missingpack, " $paket\n"); } } } }