Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
This script posts an OpenBSD dmesg to the NYC*BUG archive at http://www.nycbug.org/index.cgi?action=dmesgd
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use feature 'signatures';
no warnings 'experimental::signatures';
use Sys::Hostname;
use HTTP::Tiny;
# This script posts your OpenBSD dmesg to the NYC*BUG dmesg archive.
sub sysctl (@s) {
open my $de, '-|', qw( sysctl -n ), @s or die $!;
my $s = join ' ', split /\s+/s,
do { local $/ = undef; readline $de };
close $de or die $!;
return $s;
}
my $nickname = "$ENV{USER}";
my $email = "$ENV{USER}\@" . hostname();
my @sysctls = (
[qw( hw.vendor hw.product hw.version )],
[qw( hw.model )],
);
my $description = "@ARGV";
unless ($description) {
while ( @sysctls and not $description ) {
$description = sysctl @{ shift @sysctls };
}
if (my $version = sysctl qw( kern.version )) {
my $machine = sysctl qw( hw.machine );
$version =~ s/\)\K.*/ $machine/;
$description = "$version on $description";
}
}
print "'$description'\nAbout to post as $email ($nickname), OK? ";
readline STDIN;
open my $dm, '<', '/var/run/dmesg.boot' or die $!;
my $dmesg = do { local $/ = undef; readline $dm };
close $dm;
# Remove leftover cruft from previous boots
$dmesg =~ s/^.*\n(OpenBSD )/$1/s;
my $res = HTTP::Tiny->new->post_form(
'http://dmesgd.nycbug.org/index.cgi',
{ action => 'dmesgd',
do => 'addd',
nickname => $nickname,
email => $email,
description => $description,
dmesg => $dmesg,
}
);
say $res->{success}
? 'Sent dmesg'
: "Unable to send dmesg: $res->{status} $res->{reason}";
say $res->{content};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment