#!/usr/bin/perl # vim:sw=4:ts=4:noet: use strict; $#ARGV == 0 || die "1 argument (talkback report directory) expected"; my $tbrep = $ARGV[0]; sub print_hash($$) { my ($title, $hash) = @_; print("$title:\n"); foreach my $key (sort(keys(%{$hash}))) { print " ${$hash}{$key} $key\n"; } print("\n"); } my %kernels; open REPORT, "lynx -source http://talkback-public.mozilla.org/reports/$tbrep/smart-analysis.lin|"; my $reading = 0; while () { if ($reading) { if (m/^\s*(\d*)\s*\[Linux (.*)\]/) { $kernels{$2} += int($1); } else { $reading = 0; } } else { if (m/^ Count Platform List $/) { $reading = 1; } } } print_hash("Kernels (by uname -r)", \%kernels); my %major_versions; foreach my $kernel (keys(%kernels)) { $major_versions{substr($kernel,0,3)} += $kernels{$kernel}; } print_hash("Major versions", \%major_versions); my %distros; my %unknown_kernels; my $exact_distro_map = { "2.4.2-2" => "Red Hat 7.1", "2.4.2-2smp" => "Red Hat 7.1", "2.4.3-12" => "Red Hat 7.1", "2.4.3-12smp" => "Red Hat 7.1", "2.4.9-6" => "Red Hat 7.1", "2.4.9-6smp" => "Red Hat 7.1", "2.4.7-10" => "Red Hat 7.2", "2.4.7-10smp" => "Red Hat 7.2", "2.4.9-7" => "Red Hat 7.2", "2.4.9-7smp" => "Red Hat 7.2", "2.4.9-12" => "Red Hat 7.1", "2.4.9-12smp" => "Red Hat 7.1", "2.4.9-13" => "Red Hat 7.2", "2.4.9-13smp" => "Red Hat 7.2", "2.4.9-21" => "Red Hat 7.1 or 7.2", "2.4.9-21smp" => "Red Hat 7.1 or 7.2", "2.4.9-31" => "Red Hat 7.1 or 7.2", "2.4.9-31smp" => "Red Hat 7.1 or 7.2", "2.4.9-34" => "Red Hat 7.1 or 7.2", "2.4.9-34smp" => "Red Hat 7.1 or 7.2", "2.4.9-37" => "Red Hat 7.2", "2.4.9-37smp" => "Red Hat 7.2", "2.4.9-38" => "Red Hat 7.1 or 7.2", "2.4.9-38smp" => "Red Hat 7.1 or 7.2", "2.4.18-3" => "Red Hat 7.3", "2.4.18-3smp" => "Red Hat 7.3", "2.4.18-4" => "Red Hat 7.3", "2.4.18-4smp" => "Red Hat 7.3", "2.4.18-5" => "Red Hat 7.3", "2.4.18-5smp" => "Red Hat 7.3", "2.4.18-10" => "Red Hat 7.3", "2.4.18-10smp" => "Red Hat 7.3", "2.4.18-17.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-17.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-18.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-18.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-19.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-19.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-24.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-24.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-26.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-26.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-27.7.x" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-27.7.xsmp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-13.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-13.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-18.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-18.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-19.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-19.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-20.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-20.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-24.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-24.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-27.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-27.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-28.7" => "Red Hat 7.1, 7.2, or 7.3", "2.4.20-28.7smp" => "Red Hat 7.1, 7.2, or 7.3", "2.4.18-14" => "Red Hat 8", "2.4.18-14smp" => "Red Hat 8", "2.4.18-17.8.0" => "Red Hat 8", "2.4.18-17.8.0smp" => "Red Hat 8", "2.4.18-18.8.0" => "Red Hat 8", "2.4.18-18.8.0smp" => "Red Hat 8", "2.4.18-19.8.0" => "Red Hat 8", "2.4.18-19.8.0smp" => "Red Hat 8", "2.4.18-24.8.0" => "Red Hat 8", "2.4.18-24.8.0smp" => "Red Hat 8", "2.4.18-26.8.0" => "Red Hat 8", "2.4.18-26.8.0smp" => "Red Hat 8", "2.4.18-27.8.0" => "Red Hat 8", "2.4.18-27.8.0smp" => "Red Hat 8", "2.4.20-13.8" => "Red Hat 8", "2.4.20-13.8smp" => "Red Hat 8", "2.4.20-18.8" => "Red Hat 8", "2.4.20-18.8smp" => "Red Hat 8", "2.4.20-19.8" => "Red Hat 8", "2.4.20-19.8smp" => "Red Hat 8", "2.4.20-20.8" => "Red Hat 8", "2.4.20-20.8smp" => "Red Hat 8", "2.4.20-24.8" => "Red Hat 8", "2.4.20-24.8smp" => "Red Hat 8", "2.4.20-27.8" => "Red Hat 8", "2.4.20-27.8smp" => "Red Hat 8", "2.4.20-28.8" => "Red Hat 8", "2.4.20-28.8smp" => "Red Hat 8", "2.4.20-8" => "Red Hat 9", "2.4.20-8smp" => "Red Hat 9", "2.4.20-9" => "Red Hat 9", "2.4.20-9smp" => "Red Hat 9", "2.4.20-13.9" => "Red Hat 9", "2.4.20-13.9smp" => "Red Hat 9", "2.4.20-18.9" => "Red Hat 9", "2.4.20-18.9smp" => "Red Hat 9", "2.4.20-19.9" => "Red Hat 9", "2.4.20-19.9smp" => "Red Hat 9", "2.4.20-20.9" => "Red Hat 9", "2.4.20-20.9smp" => "Red Hat 9", "2.4.20-24.9" => "Red Hat 9", "2.4.20-24.9smp" => "Red Hat 9", "2.4.20-27.9" => "Red Hat 9", "2.4.20-27.9smp" => "Red Hat 9", "2.4.20-28.9" => "Red Hat 9", "2.4.20-28.9smp" => "Red Hat 9", "2.4.20-30.9" => "Red Hat 9", "2.4.20-30.9smp" => "Red Hat 9", "2.4.20-31.9" => "Red Hat 9", "2.4.20-31.9smp" => "Red Hat 9", "2.4.22-1.2115.nptl" => "Fedora Core 1", "2.4.22-1.2115.nptlsmp" => "Fedora Core 1", "2.4.22-1.2140.nptl" => "Fedora Core 1", "2.4.22-1.2140.nptlsmp" => "Fedora Core 1", "2.4.22-1.2174.nptl" => "Fedora Core 1", "2.4.22-1.2174.nptlsmp" => "Fedora Core 1", "2.4.22-1.2179.nptl" => "Fedora Core 1", "2.4.22-1.2179.nptlsmp" => "Fedora Core 1", "2.4.22-1.2188.nptl" => "Fedora Core 1", "2.4.22-1.2188.nptlsmp" => "Fedora Core 1", "2.6.5-1.305" => "Fedora Core 2 test 2", # apparently... "2.6.5-1.305smp" => "Fedora Core 2 test 2", # apparently... "2.6.5-1.358" => "Fedora Core 2", "2.6.5-1.358smp" => "Fedora Core 2", "2.6.5-1.358.8kstacks" => "Fedora Core 2", "2.6.5-1.358.8kstackssmp" => "Fedora Core 2", "2.6.6-1.427" => "Fedora Core 2", "2.6.6-1.427smp" => "Fedora Core 2", "2.6.6-1.427.8kstacks" => "Fedora Core 2", "2.6.6-1.427.8kstackssmp" => "Fedora Core 2", "2.6.6-1.435" => "Fedora Core 2", "2.6.6-1.435smp" => "Fedora Core 2", "2.6.6-1.435.8kstacks" => "Fedora Core 2", "2.6.6-1.435.8kstackssmp" => "Fedora Core 2", "2.6.5-1.358custom" => "Fedora Core 2", "2.4.9-e.3enterprise" => "Red Hat EL AS2.1", "2.4.9-e.5enterprise" => "Red Hat EL AS2.1", "2.4.9-e.8enterprise" => "Red Hat EL AS2.1", "2.4.9-e.9enterprise" => "Red Hat EL AS2.1", "2.4.9-e.10enterprise" => "Red Hat EL AS2.1", "2.4.9-e.12enterprise" => "Red Hat EL AS2.1", "2.4.9-e.16enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.23enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.24enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.25enterprise" => "Red Hat EL WS2.1 or ES2.1", "2.4.9-e.27enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.30enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.34enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.35enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.37enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.38enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.9-e.40enterprise" => "Red Hat EL AS2.1 or WS2.1 or ES2.1", "2.4.18-e.25enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.18-e.31enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.18-e.37enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.18-e.40enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.18-e.41enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.18-e.43enterprise" => "Red Hat EL AS2.1 or AW2.1", "2.4.21-4.EL" => "Red Hat EL 3", "2.4.21-4.ELsmp" => "Red Hat EL 3", "2.4.21-4.0.1.EL" => "Red Hat EL 3", "2.4.21-4.0.1.ELsmp" => "Red Hat EL 3", "2.4.21-4.0.2.EL" => "Red Hat EL 3", "2.4.21-4.0.2.ELsmp" => "Red Hat EL 3", "2.4.21-9.EL" => "Red Hat EL 3", "2.4.21-9.ELsmp" => "Red Hat EL 3", "2.4.21-9.0.1.EL" => "Red Hat EL 3", "2.4.21-9.0.1.ELsmp" => "Red Hat EL 3", "2.4.21-9.0.3.EL" => "Red Hat EL 3", "2.4.21-9.0.3.ELsmp" => "Red Hat EL 3", "2.4.21-15.EL" => "Red Hat EL 3", "2.4.21-15.ELsmp" => "Red Hat EL 3", # ftp://ftp.suse.com/pub/suse/i386/ # ftp://ftp.suse.com/pub/suse/i386/update/ # http://lists.suse.com/archive/suse-security-announce/ # look for k_deflt (etc.) for <= 9.0, kernel-* for 9.1 # SuSE 8.0: 2.4.18-154 ... 2.4.18-281 2.4.18-282 2.4.18-289 2.4.18-290 2.4.18-293 2.4.18-299 # SuSE 8.1: 2.4.19-{110,105,107} ... 2.4.21-151 2.4.21-168 2.4.21-189 2.4.21-{201,203} 2.4.21-215 2.4.21-226 # SuSE 8.2: 2.4.20-62 ... 2.4.20-101 2.4.20-102 2.4.20-105 2.4.20-109 2.4.20-111 2.4.20-113 "2.4.20-4GB" => "SuSE 8.2 Pro?", "2.4.20-4GB-SMP" => "SuSE 8.2 Pro?", "2.4.20-4GB-athlon" => "SuSE 8.2 Pro?", "2.4.20-64GB" => "SuSE 8.2 Pro?", "2.4.20-64GB-SMP" => "SuSE 8.2 Pro?", "2.4.20-64GB-athlon" => "SuSE 8.2 Pro?", # SuSE 9.0: 2.4.21-144 2.4.21-166 2.4.21-192 2.4.21-199 2.4.21-202 2.4.21-215 2.4.21-226 "2.4.21-144-athlon" => "SuSE Linux 9.0", "2.4.21-144-default" => "SuSE Linux 9.0", "2.4.21-144-smp" => "SuSE Linux 9.0", "2.4.21-144-smp4G" => "SuSE Linux 9.0", "2.4.21-166-athlon" => "SuSE Linux 9.0", "2.4.21-166-default" => "SuSE Linux 9.0", "2.4.21-166-smp" => "SuSE Linux 9.0", "2.4.21-166-smp4G" => "SuSE Linux 9.0", "2.4.21-192-athlon" => "SuSE Linux 9.0", "2.4.21-192-default" => "SuSE Linux 9.0", "2.4.21-192-smp" => "SuSE Linux 9.0", "2.4.21-192-smp4G" => "SuSE Linux 9.0", "2.4.21-199-athlon" => "SuSE Linux 9.0", "2.4.21-199-default" => "SuSE Linux 9.0", "2.4.21-199-smp" => "SuSE Linux 9.0", "2.4.21-199-smp4G" => "SuSE Linux 9.0", "2.4.21-202-athlon" => "SuSE Linux 9.0", "2.4.21-202-default" => "SuSE Linux 9.0", "2.4.21-202-smp" => "SuSE Linux 9.0", "2.4.21-202-smp4G" => "SuSE Linux 9.0", "2.4.21-215-athlon" => "SuSE Linux 9.0 or 8.1", "2.4.21-215-default" => "SuSE Linux 9.0 or 8.1", "2.4.21-215-smp" => "SuSE Linux 9.0 or 8.1", "2.4.21-215-smp4G" => "SuSE Linux 9.0 or 8.1", "2.4.21-226-athlon" => "SuSE Linux 9.0 or 8.1", "2.4.21-226-default" => "SuSE Linux 9.0 or 8.1", "2.4.21-226-smp" => "SuSE Linux 9.0 or 8.1", "2.4.21-226-smp4G" => "SuSE Linux 9.0 or 8.1", # SuSE 9.1: 2.6.4-52 2.6.4-54.3 2.6.4-54.5 2.6.5-7.75 "2.6.4-52-default" => "SuSE Linux 9.1", "2.6.4-52-enterprise" => "SuSE Linux 9.1", "2.6.4-52-smp" => "SuSE Linux 9.1", "2.6.4-54.3-default" => "SuSE Linux 9.1", "2.6.4-54.3-enterprise" => "SuSE Linux 9.1", "2.6.4-54.3-smp" => "SuSE Linux 9.1", "2.6.4-54.5-default" => "SuSE Linux 9.1", "2.6.4-54.5-enterprise" => "SuSE Linux 9.1", "2.6.4-54.5-smp" => "SuSE Linux 9.1", "2.6.5-7.75-default" => "SuSE Linux 9.1", "2.6.5-7.75-enterprise" => "SuSE Linux 9.1", "2.6.5-7.75-smp" => "SuSE Linux 9.1", # Slackware 8.1: 2.4.18 # Slackware 9.0: 2.4.20 # Slackware 9.1: 2.4.22 }; foreach my $kernel (keys(%kernels)) { if (defined($exact_distro_map->{$kernel})) { $distros{$exact_distro_map->{$kernel}} += $kernels{$kernel}; } elsif ($kernel =~ /mdk/) { $distros{"Mandrake (various)"} += $kernels{$kernel}; } elsif ($kernel =~ /gentoo/) { $distros{"Gentoo (various)"} += $kernels{$kernel}; } elsif ($kernel =~ /rhfc1/ || $kernel =~ /nptl/) { $distros{"Fedora Core 1 - variant"} += $kernels{$kernel}; } else { $distros{"--UNKNOWN (see above)--"} += $kernels{$kernel}; $unknown_kernels{$kernel} = $kernels{$kernel}; } } print_hash("Unknown kernels (by uname -r)", \%unknown_kernels); print_hash("Distros", \%distros);