[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