====== ChromeOS System Report ====== ChromeOS does not have a simple way to record a system's configuration. The following will get the information similar to Belarc Advisor (https://www.belarc.com/products/belarc-advisor). The resulting mhtml file is fairly useless, but can be parsed using the included script. Additionally, we can save it as a pdf, meaning it is viewable on most systems. - Open Chrome web browser - Enter URL as %%chrome://system%% - Click "Expand All" - Right click in page (use two fingers if no mouse) - Select "Save As" - Choose Webpage, Single File (default) - name the file your_nameChrome.mhtml, so in my case, it would be RodChrome.mhtml - Save in your downloads folder - Right click again - Choose Print (it will hang for a minute or two) - Choose Save as PDF - Save as your_nameChrome.pdf (ie, RodChrome.pdf) You now have two large files in your downloads folder, and mhtml file and a PDF. The following Perl script parses the mhtml file, using ====CATEGORY==== as headers, with the contents afterwards. I have written it to NOT include the logs. Note: The mhtml output uses Windows line endings, so if you're running this on a Unix machine, you'll want to run it through tr to get convert it to Unix line endings. Use the command: tr -d '\r' < filename | perl processChrome.pl > filename.txt #! /usr/bin/env perl use strict; use warnings; # tr -d '\r' < filename | ./processChrome.pl # anything matching these keys will be include, and all else # will be excluded. If empty, will include everything not # matching $ignoreKeys. In this case, we've commented out # everything, so it will output everything not ignored my %lookFor = ( # 'div-bios-info-value' => 'bios_info', # 'div-blkid-value' => 'blkid', # 'div-cpuinfo-value' => 'cpuinfo', # 'div-disk-usage-value' => 'disk_usage', # 'div-ifconfig-value' => 'ifconfig', # 'div-lsblk-value' => 'lsblk', # 'div-meminfo-value' => 'meminfo', # 'div-network-devices-value' => 'network_devices', # 'div-os-release-NAME-value' => 'os-release NAME', # 'div-os-release-VERSION-value' => 'os-release VERSION', # 'div-uname-value' => 'uname', # 'div-vpd-2-0-value' => 'vpd_2.0' ); # anything matching this regex will be ignored # this matches anything with log, profile or ui-heirarchy in # the key. NOTE: match is case insensitive my $ignoreRegex = qr'.*(log)|(profile)|(ui-hierarchy).*'i; # get a single line. This is more difficult since the output # takes very long lines and separates them into 80 column blocks # the indicator for this continuation is an equals sign (=) # at the end of the line. Thus, we continue to read lines from # STDIN so long as the current line ends with an equal sign # and we concatinate all of the lines together sub getLine { my @lines; while ( my $thisLine = <> ) { chomp $thisLine; if ( substr( $thisLine, -1 ) eq '=' ) { #die "$thisLine\n"; chop $thisLine; # remove the equals sign push @lines, $thisLine; } else { push @lines, $thisLine; #print "returning\n$thisLine\n"; return join( '', @lines ) . "\n"; } } } # makes a category name from the div name sub makeCategory { my $initValue = shift; $initValue =~ m/div-(.*)-value/; $initValue = $1; $initValue =~ s/-/ /g; return $initValue; } my %found; my $line; my $count = 100; my $category = ''; while ( $line = &getLine() ) { #print "$line\n"; #die unless $count--; $line =~ s/=3D/=/gi; # Ok, if we have a category already, and have found a , clear the category $category = '' if $category && $line =~ m""; # check for a line like
and begin processing if found # $matches[0] has the key name (ie, something), and $matches[1] has any subsequent # information, generally the beginning of the actual block if ( my @matches = ($line =~ m/^.*(.*)$/ ) ) { # print "Found div $matches[0]\n"; # skip if $ignoreRegex defined has matches. Note, this is case insensitive # die "Checking $matches[0]\nagainst\n$ignoreRegex\n"; next if $ignoreRegex && $matches[0] =~ m/.*($ignoreRegex).*/; # if %lookFor empty, or not empty and has matching key, inlcude it if ( ! %lookFor || $lookFor{$matches[0]} ) { # Create the category $category = defined( $lookFor{$matches[0]} ) ? $lookFor{$matches[0]} : &makeCategory( $matches[0] ) ; # include any information beginning the div $found{$category} = $matches[1] . "\n"; } } elsif ( $category ) { # we're in the middle of a div, so just add the line. $found{$category} .= $line; } } foreach my $key ( sort keys %found ) { print "\n====$key====\n" . $found{$key} . "\n"; } 1;