summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorroot <root@ka-ata-killa.panaceas.james.local>2021-09-01 00:11:37 +0100
committerroot <root@ka-ata-killa.panaceas.james.local>2021-09-01 00:13:58 +0100
commit21a57211e96a5ce5989ca006af8f26ffe391e0c9 (patch)
tree2251c5885b071721bc90a38ac5952ae40bf26f7b
parentb6ff4cb4dcc61cb069740b0f0e5098394b4a700d (diff)
downloadinf-21a57211e96a5ce5989ca006af8f26ffe391e0c9.tar.gz
inf-21a57211e96a5ce5989ca006af8f26ffe391e0c9.tar.bz2
inf-21a57211e96a5ce5989ca006af8f26ffe391e0c9.zip
add asrock support
-rw-r--r--INF.pm3
-rw-r--r--INF/ASRock.pm303
-rw-r--r--Makefile16
-rw-r--r--asrock/JViewer-AVIStream.jarbin0 -> 19674 bytes
-rw-r--r--asrock/JViewer-FolderRedir.jarbin0 -> 60684 bytes
-rw-r--r--asrock/JViewer-OEM.jarbin0 -> 55312 bytes
-rw-r--r--asrock/JViewer-SOC.jarbin0 -> 53319 bytes
-rw-r--r--asrock/JViewer.jarbin0 -> 690125 bytes
-rw-r--r--asrock/Linux_x86_64.jarbin0 -> 45246 bytes
-rw-r--r--asrock/Win64.jarbin0 -> 118117 bytes
-rw-r--r--asrock/libjavacdromwrapper.sobin0 -> 42299 bytes
-rw-r--r--asrock/libjavaclientconfwrapper.sobin0 -> 9601 bytes
-rw-r--r--asrock/libjavaharddiskwrapper.sobin0 -> 60182 bytes
-rw-r--r--asrock/mypolicy8
-rw-r--r--asrock/myvtdpolicy10
15 files changed, 340 insertions, 0 deletions
diff --git a/INF.pm b/INF.pm
index 58a5964..9b03767 100644
--- a/INF.pm
+++ b/INF.pm
@@ -5,6 +5,7 @@ use INF::ILO2;
use INF::ILO; #ilo 4 confusingly
use INF::ILO5;
use INF::SuperMicro;
+use INF::ASRock;
use INF::Cyclades;
@@ -36,6 +37,8 @@ sub new ($;$) {
return INF::APC->new($inf);
} elsif ( $inf->{inf_type} eq 'supermicro' ) {
return INF::SuperMicro->new($inf);
+ } elsif ( $inf->{inf_type} eq 'asrock' ) {
+ return INF::ASRock->new($inf);
} elsif ( $inf->{inf_type} eq 'ilo2' ) {
return INF::ILO2->new($inf);
} elsif ( $inf->{inf_type} eq 'ilo' ) {
diff --git a/INF/ASRock.pm b/INF/ASRock.pm
new file mode 100644
index 0000000..d4449c0
--- /dev/null
+++ b/INF/ASRock.pm
@@ -0,0 +1,303 @@
+#!/usr/bin/env perl
+
+IO::Socket::SSL::set_ctx_defaults( SSL_verify_mode => SSL_VERIFY_NONE );
+
+package INF::ASRock;
+
+use HTTP::Status;
+use HTTP::Cookies;
+
+use IO::Socket::SSL qw();
+use HTML::TreeBuilder;
+use HTTP::Request::Common;
+use LWP::UserAgent;
+use URI::Escape;
+use File::Temp qw/ tempfile tempdir /;
+use XML::Simple;
+use Data::Dumper;
+use JSON::PP;
+
+sub login($) {
+ my $self = shift;
+
+ my $post = POST( $self->{bmc_url} . '/api/session' );
+ my $form_content =
+ 'username=' . $self->{user} . '&' . 'password=' . $self->{password};
+
+ $post->header( 'Content-Type' => 'application/x-www-form-urlencoded' );
+ $post->header( 'Content-Length' => length($form_content) );
+ $post->content($form_content);
+
+ my $res = $self->{ua}->request($post);
+
+ unless ( $res->is_success ) {
+ print STDERR "Login failed - did not get 200\n";
+
+ print Dumper($res);
+
+ $self->{logged_in} = undef;
+ return -1;
+ }
+
+
+ $self->{logged_in} = 1;
+
+ my $json = decode_json( $res->content );
+
+ $self->{csrftoken} = $json->{CSRFToken};
+
+ print "csrftoken ".$self->{csrftoken}."\n";
+
+ return 0;
+}
+
+sub view($) {
+ my $self = shift;
+
+ $self->login() unless defined $self->{logged_in};
+
+ my $get = GET( $self->{bmc_url}
+ . '/api/remote_control/get/kvm/launch' );
+
+ $get->header('X-CSRFTOKEN' => $self->{csrftoken});
+ $get->header('Cookie' => 'lang=en-us');
+
+ my $res = $self->{ua}->request($get);
+
+ unless ( $res->is_success ) {
+ print STDERR "JWSK frequest failed - did not get 200\n";
+
+ print Dumper ($res);
+ return -1;
+ }
+
+
+ my $xml = new XML::Simple;
+
+ my $c = $res->content;
+
+ $c =~ s/^[\s\n\r]+//s;
+ my $data = $xml->XMLin($c);
+
+ return undef unless defined $data->{'application-desc'};
+
+ my $args = $data->{'application-desc'}->{'argument'};
+
+ return undef unless defined $args;
+
+ mkdir $ENV{HOME} . "/.supermicro_kvm";
+ chdir $ENV{HOME} . "/.supermicro_kvm";
+
+ my $prefix = "/usr/local/share/inf/asrock/";
+
+ if ( defined $self->{proxy_host} ) {
+ my $tmp = File::Temp->new( UNLINK => 0, SUFFIX => '.cnf' );
+
+ select( ( select($tmp), $| = 1 )[0] );
+
+ print $tmp "server = 127.0.0.1\n";
+ print $tmp "server_port = " . $self->{proxy_port} . "\n";
+ print $tmp "local = 127.0.0.0/255.0.0.0\n";
+
+ $ENV{'LD_PRELOAD'} = 'libtsocks.so';
+ $ENV{'TSOCKS_CONF_FILE'} = $tmp->filename;
+
+ print "Filename is $tmp->filename\n";
+ }
+
+ my $jars = [ ];
+
+ push @$jars, $prefix.'JViewer.jar';
+ push @$jars, $prefix.'JViewer-SOC.jar';
+ push @$jars, $prefix.'JViewer-OEM.jar';
+ push @$jars, $prefix.'JViewer-AVIStream.jar';
+ push @$jars, $prefix.'Linux_x86_64.jar';
+ push @$jars, $prefix.'JViewer-FolderRedir.jar';
+
+ my $cp = join( ':', @$jars );
+
+ push @$java_args, "-cp";
+ push @$java_args, $cp;
+ push @$java_args, "-Djava.library.path=" . $prefix;
+# push @$java_args, "-Djava.security.manager";
+# push @$java_args, "-Djava.security.policy=/usr/local/share/inf/asrock/mypolicy";
+# push @$java_args, "-Dcom.sun.net.ssl.checkRevocation=false";
+ push @$java_args,"-Xms100m";
+ push @$java_args,"-Xmx256m";
+
+ push @$java_args, "com.ami.kvm.jviewer.JViewer";
+
+ system( "echo", "java", @$java_args, @$args );
+ system( "java", @$java_args, @$args );
+
+}
+
+sub get_host_power($) {
+ my ($self) = @_;
+
+ $self->login() unless defined $self->{logged_in};
+
+ my $post = POST( $self->{bmc_url} . '/cgi/ipmi.cgi' );
+ my $form_content = 'op=POWER_INFO.XML&r=(0%2C0)';
+
+ $post->header( 'Content-Type' => 'application/x-www-form-urlencoded' );
+ $post->header( 'Content-Length' => length($form_content) );
+ $post->content($form_content);
+
+ my $res = $self->{ua}->request($post);
+
+ unless ( $res->is_success ) {
+ print STDERR " get host power - did not get 200\n";
+ return undef;
+ }
+
+ my $xml = new XML::Simple;
+
+ my $c = $res->content;
+
+ $c =~ s/^[\s\n\r]+//s;
+
+ my $data = $xml->XMLin($c);
+
+ return undef unless defined $data->{'POWER_INFO'};
+ return undef unless defined $data->{'POWER_INFO'}->{'POWER'};
+ return undef unless defined $data->{'POWER_INFO'}->{'POWER'}->{'STATUS'};
+
+ return $data->{'POWER_INFO'}->{'POWER'}->{'STATUS'};
+}
+
+sub set_host_power($$) {
+ my ( $self, $what ) = @_;
+
+ $self->login() unless defined $self->{logged_in};
+
+ my $post = POST( $self->{bmc_url} . '/cgi/ipmi.cgi' );
+ my $form_content = 'op=POWER_INFO.XML&r=(1%2C' . $what . ')';
+
+ $post->header( 'Content-Type' => 'application/x-www-form-urlencoded' );
+ $post->header( 'Content-Length' => length($form_content) );
+ $post->content($form_content);
+
+ my $res = $self->{ua}->request($post);
+
+ unless ( $res->is_success ) {
+ print STDERR " get host power - did not get 200\n";
+ return 0;
+ }
+
+ my $xml = new XML::Simple;
+
+ my $c = $res->content;
+
+ $c =~ s/^[\s\n\r]+//s;
+
+ my $data = $xml->XMLin($c);
+
+ return 0 unless defined $data->{'POWER_INFO'};
+ return 0 unless defined $data->{'POWER_INFO'}->{'POWER'};
+ return 0 unless defined $data->{'POWER_INFO'}->{'POWER'}->{'STATUS'};
+
+ return 1;
+}
+
+sub reset($) {
+ my $self = shift;
+ return $self->set_host_power('0');
+}
+
+sub port_off($) {
+ my $self = shift;
+ return $self->set_host_power('1');
+}
+
+sub orderly_shutdown($) {
+ my $self = shift;
+ return $self->set_host_power('2');
+}
+
+sub port_on($) {
+ my $self = shift;
+ return $self->set_host_power('3');
+}
+
+sub port_cycle($) {
+ my $self = shift;
+ return $self->set_host_power('5');
+}
+
+sub port_state_get($$) {
+ my $self = shift;
+ return $self->get_host_power();
+}
+
+sub port_name_get($$) {
+ my $self = shift;
+ return $self->{name};
+}
+
+sub name_get($) {
+ my $self = shift;
+ return $self->{name};
+}
+
+sub pdu_load_get($) {
+ return "N/A";
+}
+
+sub psu_status($) {
+ return "N/A";
+}
+
+sub port_count($) {
+ return 1;
+}
+
+sub port_id_get_by_number($$) {
+ return "K0";
+}
+
+sub logout($) {
+ my $self = shift;
+}
+
+sub new ($;$) {
+ my ( $class, $parm ) = @_;
+ my $self;
+
+ $self->{ua} = my $ua = LWP::UserAgent->new;
+ $self->{cookie_jar} = HTTP::Cookies->new();
+ $self->{ua}->cookie_jar( $self->{cookie_jar} );
+
+ $self->{host} = $parm->{host} || "127.0.0.1";
+
+ $self->{user} = $parm->{user} || "ADMIN";
+ $self->{password} = $parm->{password} || "ADMIN";
+
+ $self->{name} = $parm->{name} || $self->{host};
+
+ $self->{bmc_url} = $parm->{bmc_url}
+ || 'https://' . $self->{host};
+
+ $self->{ua}->ssl_opts(
+ SSL_version => 'TLSv1_2',
+ SSL_verify_mode => Net::SSLeay::VERIFY_NONE(),
+ verify_hostname => 0,
+ );
+
+
+ if ( defined $parm->{proxy_host} ) {
+ $self->{ua}->proxy( [qw(http https)] => "socks://"
+ . $parm->{proxy_host} . ":"
+ . $parm->{proxy_port} );
+ $self->{proxy_host} = $parm->{proxy_host};
+ $self->{proxy_port} = $parm->{proxy_port};
+ }
+
+ $self->{logged_in} = undef;
+
+ return bless $self, $class;
+
+}
+
+1;
+
diff --git a/Makefile b/Makefile
index d2c2715..b5b6696 100644
--- a/Makefile
+++ b/Makefile
@@ -2,9 +2,11 @@ install:
mkdir -p /usr/local/share/inf/mibs/compiled
mkdir -p /usr/local/share/inf/INF
mkdir -p /usr/local/share/inf/HTTP/Server
+ mkdir -p /usr/local/share/inf/asrock
mkdir -p /usr/local/share/inf/avocent
mkdir -p /usr/local/share/inf/ilo
mkdir -p /usr/local/share/inf/ilo5
+ mkdir -p /usr/local/share/inf/asrock
mkdir -p /usr/local/share/inf/supermicro/1.69.21.0x0
mkdir -p /usr/local/share/inf/supermicro/1.69.25.0x0
mkdir -p /usr/local/share/inf/supermicro/1.69.37.0x0
@@ -19,11 +21,24 @@ install:
install -m 644 INF/ILO5.pm /usr/local/share/inf/INF
install -m 644 INF/Cyclades.pm /usr/local/share/inf/INF
install -m 644 INF/SuperMicro.pm /usr/local/share/inf/INF
+ install -m 644 INF/ASRock.pm /usr/local/share/inf/INF
install -m 644 mibs/PowerNet-MIB.mib /usr/local/share/inf/mibs/
install -m 644 mibs/RFC1155-SMI.mib /usr/local/share/inf/mibs/
install -m 644 mibs/RFC-1212.mib /usr/local/share/inf/mibs/
install -m 644 mibs/RFC1213-MIB.mib /usr/local/share/inf/mibs/
install -m 644 mibs/RFC-1215.mib /usr/local/share/inf/mibs/
+ install -m 644 asrock/JViewer-AVIStream.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/JViewer-FolderRedir.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/JViewer.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/JViewer-OEM.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/JViewer-SOC.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/Linux_x86_64.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/Win64.jar /usr/local/share/inf/asrock/
+ install -m 644 asrock/mypolicy /usr/local/share/inf/asrock/
+ install -m 644 asrock/myvtdpolicy /usr/local/share/inf/asrock/
+ install -m 644 asrock/libjavacdromwrapper.so /usr/local/share/inf/asrock/
+ install -m 644 asrock/libjavaclientconfwrapper.so /usr/local/share/inf/asrock/
+ install -m 644 asrock/libjavaharddiskwrapper.so /usr/local/share/inf/asrock/
install -m 644 avocent/avctLinuxLib.jar /usr/local/share/inf/avocent/
install -m 644 avocent/avctMacOSXLib.jar /usr/local/share/inf/avocent/
install -m 644 avocent/avctSolarisLib.jar /usr/local/share/inf/avocent/
@@ -82,3 +97,4 @@ install:
install -m 644 supermicro/1.69.37.0x0/libSharedLibrary64.so /usr/local/share/inf/supermicro/1.69.37.0x0/
install -m 644 supermicro/1.69.37.0x0/SharedLibrary32.dll /usr/local/share/inf/supermicro/1.69.37.0x0/
install -m 644 supermicro/1.69.37.0x0/SharedLibrary64.dll /usr/local/share/inf/supermicro/1.69.37.0x0/
+
diff --git a/asrock/JViewer-AVIStream.jar b/asrock/JViewer-AVIStream.jar
new file mode 100644
index 0000000..0c43a43
--- /dev/null
+++ b/asrock/JViewer-AVIStream.jar
Binary files differ
diff --git a/asrock/JViewer-FolderRedir.jar b/asrock/JViewer-FolderRedir.jar
new file mode 100644
index 0000000..4daae36
--- /dev/null
+++ b/asrock/JViewer-FolderRedir.jar
Binary files differ
diff --git a/asrock/JViewer-OEM.jar b/asrock/JViewer-OEM.jar
new file mode 100644
index 0000000..a99b9c2
--- /dev/null
+++ b/asrock/JViewer-OEM.jar
Binary files differ
diff --git a/asrock/JViewer-SOC.jar b/asrock/JViewer-SOC.jar
new file mode 100644
index 0000000..f068b11
--- /dev/null
+++ b/asrock/JViewer-SOC.jar
Binary files differ
diff --git a/asrock/JViewer.jar b/asrock/JViewer.jar
new file mode 100644
index 0000000..0b4641e
--- /dev/null
+++ b/asrock/JViewer.jar
Binary files differ
diff --git a/asrock/Linux_x86_64.jar b/asrock/Linux_x86_64.jar
new file mode 100644
index 0000000..8ef0cb0
--- /dev/null
+++ b/asrock/Linux_x86_64.jar
Binary files differ
diff --git a/asrock/Win64.jar b/asrock/Win64.jar
new file mode 100644
index 0000000..aaf9b06
--- /dev/null
+++ b/asrock/Win64.jar
Binary files differ
diff --git a/asrock/libjavacdromwrapper.so b/asrock/libjavacdromwrapper.so
new file mode 100644
index 0000000..517d06c
--- /dev/null
+++ b/asrock/libjavacdromwrapper.so
Binary files differ
diff --git a/asrock/libjavaclientconfwrapper.so b/asrock/libjavaclientconfwrapper.so
new file mode 100644
index 0000000..e668997
--- /dev/null
+++ b/asrock/libjavaclientconfwrapper.so
Binary files differ
diff --git a/asrock/libjavaharddiskwrapper.so b/asrock/libjavaharddiskwrapper.so
new file mode 100644
index 0000000..5b56b1c
--- /dev/null
+++ b/asrock/libjavaharddiskwrapper.so
Binary files differ
diff --git a/asrock/mypolicy b/asrock/mypolicy
new file mode 100644
index 0000000..658c4fc
--- /dev/null
+++ b/asrock/mypolicy
@@ -0,0 +1,8 @@
+grant {
+ permission java.security.AllPermission;
+ permission java.net.SocketPermission "*", "connect, accept ,resolve, listen";
+ permission java.util.PropertyPermission "java.io.tmpdir","read";
+ permission java.io.FilePermission "/tmp/-", "read, write";
+ permission java.io.FilePermission "/tmp", "read, write";
+ permission java.lang.RuntimePermission "loadLibrary.*";
+};
diff --git a/asrock/myvtdpolicy b/asrock/myvtdpolicy
new file mode 100644
index 0000000..ee0dcd9
--- /dev/null
+++ b/asrock/myvtdpolicy
@@ -0,0 +1,10 @@
+grant {
+ permission java.net.SocketPermission "*", "connect, accept ,resolve, listen";
+ permission java.util.PropertyPermission "java.io.tmpdir","read";
+ permission java.io.FilePermission "/tmp/-", "read, write";
+ permission java.io.FilePermission "/tmp", "read, write";
+ permission java.io.FilePermission "/", "read, write";
+ permission java.io.FilePermission "/-", "read, write";
+ permission java.util.PropertyPermission "*", "read,write";
+ permission java.lang.RuntimePermission "loadLibrary.*";
+};