97 lines
3.3 KiB
Perl
97 lines
3.3 KiB
Perl
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");
|
|
}
|
|
}
|
|
}
|
|
}
|