[packages/idrac-kvm-client] - script for easier connecting to old java iDRAC KVM console

arekm arekm at pld-linux.org
Wed Dec 4 14:59:18 CET 2019


commit 812d8b37f7e4e0a116137f203ca4ff0f1afa0674
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Wed Dec 4 14:58:59 2019 +0100

    - script for easier connecting to old java iDRAC KVM console

 idrac-kvm-client.py   | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++
 idrac-kvm-client.spec |  36 ++++++++++++++++
 2 files changed, 150 insertions(+)
---
diff --git a/idrac-kvm-client.spec b/idrac-kvm-client.spec
new file mode 100644
index 0000000..384cfb3
--- /dev/null
+++ b/idrac-kvm-client.spec
@@ -0,0 +1,36 @@
+Summary:	iDRAC KVM client script that doesn't require web browser
+Name:		idrac-kvm-client
+Version:	0.1
+Release:	1
+License:	BSD
+Group:		Applications/System
+Source0:	%{name}.py
+BuildRequires:	rpmbuild(macros) >= 1.268
+Requires:	jre
+Requires:	jre-base-X11
+Requires:	python3-modules
+BuildArch:	noarch
+BuildRoot:	%{tmpdir}/%{name}-%{version}-root-%(id -u -n)
+
+%description
+iDRAC java KVM client script that doesn't require web browser to initiate
+connection. Tested with iDRAC 6.
+
+%prep
+%setup -q -c -T
+
+%build
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+install -d $RPM_BUILD_ROOT%{_bindir}
+
+cp -p %{SOURCE0} $RPM_BUILD_ROOT%{_bindir}/%{name}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_bindir}/%{name}
diff --git a/idrac-kvm-client.py b/idrac-kvm-client.py
new file mode 100755
index 0000000..68f8e4f
--- /dev/null
+++ b/idrac-kvm-client.py
@@ -0,0 +1,114 @@
+#!/usr/bin/python3
+
+# iDRAC java KVM client script
+
+import argparse
+import getpass
+import os
+import platform
+import ssl
+import subprocess
+import sys
+import tempfile
+import urllib.request
+import zipfile
+import time
+
+java_security = '''
+jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, EC keySize < 224, anon, NULL
+'''
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-s", "--server", type=str, required=True,
+        help="iDRAC server hostname")
+parser.add_argument("-u", "--user", type=str, required=True,
+        help="iDRAC user")
+parser.add_argument("-p", "--password", type=str,
+        help="iDRAC password password")
+parser.add_argument("--port", type=int, default=5900,
+        help="iDRAC port number")
+parser.add_argument("--nossl", action="store_true", default=False,
+        help="don't use SSL/TLS when fetching KVM application")
+parser.add_argument("--ssl-ignore-certificate", action="store_true",
+        help="ignore SSL/TLS certificate on KVM application fetching connection")
+parser.add_argument("--kbdmouse", action="store_true", default=False,
+        help="use extra mouse and keyboard drivers")
+
+args = parser.parse_args()
+
+def fetch_file(url, outdir):
+    udata = urllib.parse.urlparse(url)
+    fname = os.path.basename(udata.path)
+    print("%s: Fetching %s ..." % (sys.argv[0], url))
+    fout = os.path.join(outdir, fname)
+    local_filename, headers = urllib.request.urlretrieve(url=url, filename=fout)
+    return local_filename
+
+args.ssl = not args.nossl
+del args.nossl
+if not args.password:
+    args.password = getpass.getpass("iDRAC password: ")
+
+if args.ssl_ignore_certificate:
+    # ugly
+    ssl._create_default_https_context = ssl._create_unverified_context
+
+url = "%s%s" % ("https://" if args.ssl else "http://", args.server)
+
+tdir = tempfile.TemporaryDirectory(suffix=None, prefix=None, dir=None)
+
+jar_file = "avctKVM.jar"
+fetch_file(url="%s/software/%s" % (url, jar_file), outdir=tdir.name)
+
+if args.kbdmouse:
+    def unpack_drivers(fname):
+        with zipfile.ZipFile(fname, 'r') as zo:
+            inzip_files = zo.namelist()
+            for zip_fname in inzip_files:
+                if zip_fname.endswith(".so"):
+                    print("%s: Extracting additional mouse and keyboard drivers: " % sys.argv[0], end="")
+                    extracted = zo.extract(zip_fname, path=tdir.name)
+                    print("%s " % os.path.basename(extracted), end="")
+            print("")
+
+    files = []
+    if platform.system() == "Linux":
+        if platform.machine() == "x86_64":
+            files = ["avctVMLinux64.jar", "avctKVMIOLinux64.jar", "avctVMAPI_DLLLinux64.jar"]
+        else:
+            files = ["avctVMLinux32.jar", "avctKVMIOLinux32.jar", "avctVMAPI_DLLLinux32.jar"]
+
+    elif platform.system == "MacOS":
+        files = ["avctKVMIOMac64.jar", "avctVMMac64.jar", "avctVMAPI_DLLMac64.jar"]
+
+    if not files:
+        print("%s: --kbdmouse option is unsupported on this platform (%s, %s)" % (sys.argv[0], platform.system(), platform.machine()), file=sys.stderr)
+        sys.exit(1)
+
+    for f in files:
+        try:
+            local_file_name = fetch_file(url="%s/software/%s" % (url, f), outdir=tdir.name)
+            unpack_drivers(local_file_name)
+        except urllib.error.HTTPError as e:
+            print("%s: Fetching %s failed: %s, skipping" % (sys.argv[0], url, e), file=sys.stderr)
+            if e.code != 404:
+                sys.exit(1)
+
+java_security_file = os.path.join(tdir.name, "java.security")
+with open(java_security_file, 'w') as f:
+    f.write(java_security)
+
+cmd = ["/usr/bin/java", "-cp", os.path.join(tdir.name, jar_file),
+        "-Djava.security.properties=%s" % java_security_file,
+        "-Djava.library.path=%s" % tdir.name,
+        "com.avocent.idrac.kvm.Main",
+        "ip=%s" % args.server,
+        "kmport=%s" % args.port, "vport=%s" % args.port,
+        "user=%s" % args.user,
+        "passwd=%s" % args.password,
+        "apcp=1", "reconnect=1", "vm=1", "version=2", "vmprivilege=true",
+        "helpurl=%s/help/contents.html" % url ]
+
+print("%s: Starting java KVM client (server=%s, user=%s, port=%d) ..." % (sys.argv[0], url, args.user, args.port))
+subprocess.run(cmd, stdout=sys.stdout, stderr=sys.stderr)
+print("%s: Ended" % sys.argv[0])
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/idrac-kvm-client.git/commitdiff/812d8b37f7e4e0a116137f203ca4ff0f1afa0674



More information about the pld-cvs-commit mailing list