mirror of
https://github.com/mofeng-git/One-KVM.git
synced 2025-12-12 01:00:29 +08:00
real ports for extras
This commit is contained in:
parent
8c904cf4a8
commit
05d35d7eb0
@ -4,4 +4,5 @@ icon: share/svg/ipmi.svg
|
||||
path: ipmi
|
||||
keyboard_cap: false
|
||||
daemon: kvmd-ipmi
|
||||
port: ipmi/server/port
|
||||
place: 21
|
||||
|
||||
@ -4,4 +4,5 @@ icon: share/svg/vnc.svg
|
||||
path: vnc
|
||||
keyboard_cap: false
|
||||
daemon: kvmd-vnc
|
||||
port: vnc/server/port
|
||||
place: 20
|
||||
|
||||
@ -60,6 +60,7 @@ def main(argv: Optional[List[str]]=None) -> None:
|
||||
if config.kvmd.msd.type == "otg":
|
||||
msd_kwargs["gadget"] = config.otg.gadget # XXX: Small crutch to pass gadget name to plugin
|
||||
|
||||
global_config = config
|
||||
config = config.kvmd
|
||||
|
||||
KvmdServer(
|
||||
@ -71,7 +72,7 @@ def main(argv: Optional[List[str]]=None) -> None:
|
||||
force_internal_users=config.auth.internal.force_users,
|
||||
enabled=config.auth.enabled,
|
||||
),
|
||||
info_manager=InfoManager(**config.info._unpack()),
|
||||
info_manager=InfoManager(global_config, **config.info._unpack()),
|
||||
log_reader=LogReader(),
|
||||
wol=WakeOnLan(**config.wol._unpack()),
|
||||
|
||||
|
||||
@ -30,6 +30,7 @@ import dbus.exceptions
|
||||
|
||||
from ...logging import get_logger
|
||||
|
||||
from ...yamlconf import Section
|
||||
from ...yamlconf.loader import load_yaml_file
|
||||
|
||||
from ... import aiotools
|
||||
@ -39,10 +40,12 @@ from ... import aiotools
|
||||
class InfoManager:
|
||||
def __init__(
|
||||
self,
|
||||
global_config: Section,
|
||||
meta_path: str,
|
||||
extras_path: str,
|
||||
) -> None:
|
||||
|
||||
self.__global_config = global_config
|
||||
self.__meta_path = meta_path
|
||||
self.__extras_path = extras_path
|
||||
|
||||
@ -57,11 +60,25 @@ class InfoManager:
|
||||
for app in os.listdir(self.__extras_path):
|
||||
if app[0] != "." and os.path.isdir(os.path.join(self.__extras_path, app)):
|
||||
extras[app] = load_yaml_file(os.path.join(self.__extras_path, app, "manifest.yaml"))
|
||||
daemon = extras[app].get("daemon", "")
|
||||
if isinstance(daemon, str) and daemon.strip():
|
||||
extras[app]["enabled"] = self.__is_daemon_enabled(daemon)
|
||||
self.__rewrite_app_daemon(extras[app])
|
||||
self.__rewrite_app_port(extras[app])
|
||||
return extras
|
||||
|
||||
def __rewrite_app_daemon(self, extras: Dict) -> None:
|
||||
daemon = extras.get("daemon", "")
|
||||
if isinstance(daemon, str) and daemon.strip():
|
||||
extras["enabled"] = self.__is_daemon_enabled(daemon)
|
||||
|
||||
def __rewrite_app_port(self, extras: Dict) -> None:
|
||||
port_path = extras.get("port", "")
|
||||
if isinstance(port_path, str) and port_path.strip():
|
||||
extras["port"] = 0
|
||||
config = self.__global_config
|
||||
for item in filter(None, map(str.strip, port_path.split("/"))):
|
||||
config = getattr(config, item, None)
|
||||
if isinstance(config, int):
|
||||
extras["port"] = config
|
||||
|
||||
def __is_daemon_enabled(self, name: str) -> bool:
|
||||
if not name.startswith(".service"):
|
||||
name += ".service"
|
||||
|
||||
@ -52,8 +52,8 @@
|
||||
</a>
|
||||
<hr>
|
||||
<p class="text">
|
||||
This Pi-KVM device has running kvmd-ipmi daemon and provides IPMI 2.0 port (default 623)
|
||||
for some basic BMC operations like on/off/reset for the server.
|
||||
This Pi-KVM device has running <b>kvmd-ipmi</b> daemon and provides IPMI 2.0 interface for some basic
|
||||
BMC operations like on/off/reset the server.
|
||||
</p>
|
||||
<p class="text">
|
||||
<b>WARNING!</b> We strongly don't recommend you to use IPMI in untrusted networks because
|
||||
|
||||
@ -23,36 +23,51 @@
|
||||
"use strict";
|
||||
|
||||
|
||||
import {$} from "../tools.js";
|
||||
import {$, tools} from "../tools.js";
|
||||
|
||||
|
||||
export function main() {
|
||||
let host = window.location.hostname;
|
||||
let site = `${window.location.protocol}//${window.location.host}`;
|
||||
$("ipmi-text").innerHTML = `
|
||||
<span class="code-comment"># Power on the server if it's off:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} power on<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=on<br>
|
||||
<br>
|
||||
<span class="code-comment"># Soft power off the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} power soft<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=off<br>
|
||||
<br>
|
||||
<span class="code-comment"># Hard power off the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} power off<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=off_hard<br>
|
||||
<br>
|
||||
<span class="code-comment"># Hard reset the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} power reset<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=reset_hard<br>
|
||||
<br>
|
||||
<span class="code-comment"># Check the power status:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} power status<br>
|
||||
<span class="code-comment">$</span> curl -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx
|
||||
`;
|
||||
__loadKvmdInfo();
|
||||
}
|
||||
|
||||
function __loadKvmdInfo() {
|
||||
let http = tools.makeRequest("GET", "/api/info", function() {
|
||||
if (http.readyState === 4) {
|
||||
if (http.status === 200) {
|
||||
let port = JSON.parse(http.responseText).result.extras.ipmi.port;
|
||||
let host = window.location.hostname;
|
||||
let site = `${window.location.protocol}//${window.location.host}`;
|
||||
$("ipmi-text").innerHTML = `
|
||||
<span class="code-comment"># Power on the server if it's off:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} -p ${port} power on<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=on<br>
|
||||
<br>
|
||||
<span class="code-comment"># Soft power off the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} -p ${port} power soft<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=off<br>
|
||||
<br>
|
||||
<span class="code-comment"># Hard power off the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} -p ${port} power off<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=off_hard<br>
|
||||
<br>
|
||||
<span class="code-comment"># Hard reset the server if it's on:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} -p ${port} power reset<br>
|
||||
<span class="code-comment">$</span> curl -XPOST -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx/power?action=reset_hard<br>
|
||||
<br>
|
||||
<span class="code-comment"># Check the power status:<br>
|
||||
$</span> ipmitool -I lanplus -U admin -P admin -H ${host} -p ${port} power status<br>
|
||||
<span class="code-comment">$</span> curl -HX-KVMD-User:admin -HX-KVMD-Passwd:admin -k \\<br>
|
||||
${site}/api/atx
|
||||
`;
|
||||
} else if (http.status === 401 || http.status === 403) {
|
||||
document.location.href = "/login";
|
||||
} else {
|
||||
setTimeout(__loadKvmdInfo, 1000);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
50
web/share/js/vnc/main.js
Normal file
50
web/share/js/vnc/main.js
Normal file
@ -0,0 +1,50 @@
|
||||
/*****************************************************************************
|
||||
# #
|
||||
# KVMD - The main Pi-KVM daemon. #
|
||||
# #
|
||||
# Copyright (C) 2018 Maxim Devaev <mdevaev@gmail.com> #
|
||||
# #
|
||||
# This program is free software: you can redistribute it and/or modify #
|
||||
# it under the terms of the GNU General Public License as published by #
|
||||
# the Free Software Foundation, either version 3 of the License, or #
|
||||
# (at your option) any later version. #
|
||||
# #
|
||||
# This program is distributed in the hope that it will be useful, #
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||||
# GNU General Public License for more details. #
|
||||
# #
|
||||
# You should have received a copy of the GNU General Public License #
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>. #
|
||||
# #
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
import {$, tools} from "../tools.js";
|
||||
|
||||
|
||||
export function main() {
|
||||
__loadKvmdInfo();
|
||||
}
|
||||
|
||||
function __loadKvmdInfo() {
|
||||
let http = tools.makeRequest("GET", "/api/info", function() {
|
||||
if (http.readyState === 4) {
|
||||
if (http.status === 200) {
|
||||
let port = JSON.parse(http.responseText).result.extras.vnc.port;
|
||||
let host = window.location.hostname;
|
||||
$("vnc-text").innerHTML = `
|
||||
<span class="code-comment"># How to connect using the Linux terminal:<br>
|
||||
$</span> vncviewer ${host}::${port}
|
||||
`;
|
||||
} else if (http.status === 401 || http.status === 403) {
|
||||
document.location.href = "/login";
|
||||
} else {
|
||||
setTimeout(__loadKvmdInfo, 1000);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -37,6 +37,11 @@
|
||||
<link rel="stylesheet" href="../share/css/vars.css">
|
||||
<link rel="stylesheet" href="../share/css/main.css">
|
||||
<link rel="stylesheet" href="../share/css/start.css">
|
||||
|
||||
<script type="module">
|
||||
import {main} from "/share/js/vnc/main.js";
|
||||
main();
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
@ -47,8 +52,7 @@
|
||||
</a>
|
||||
<hr>
|
||||
<p class="text">
|
||||
This Pi-KVM device has running kvmd-vnc daemon and provides VNC port (default 5900)
|
||||
for alternative access to the server other than the web interface.
|
||||
This Pi-KVM device has running <b>kvmd-vnc</b> daemon and provides VNC access to the server.
|
||||
</p>
|
||||
<p class="text">
|
||||
<b>WARNING!</b> We strongly don't recommend you to use VNC in untrusted networks.
|
||||
@ -58,7 +62,10 @@
|
||||
<p class="text">
|
||||
Your VNC client must support Tight JPEG compression, password authentication and allow
|
||||
connection without encryption. <a href="https://tigervnc.org">TigerVNC</a> is a good choice.
|
||||
On Linux, this client will most likely be available for installation from the repository.
|
||||
It can also be called vncviewer.
|
||||
</p>
|
||||
<div id="vnc-text" class="code" style="max-height:200px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user