diff options
-rw-r--r-- | Makefile | 6 | ||||
-rw-r--r-- | configs/os/services/kvmd-ipmi.service | 2 | ||||
-rw-r--r-- | configs/os/services/kvmd-vnc.service | 2 | ||||
-rw-r--r-- | configs/os/services/kvmd.service | 4 | ||||
-rw-r--r-- | kvmd/apps/__init__.py | 12 | ||||
-rw-r--r-- | kvmd/apps/cleanup/__init__.py | 1 | ||||
-rw-r--r-- | kvmd/apps/ipmi/__init__.py | 1 | ||||
-rw-r--r-- | kvmd/apps/kvmd/__init__.py | 1 | ||||
-rw-r--r-- | kvmd/apps/vnc/__init__.py | 1 | ||||
-rw-r--r-- | testenv/tests/apps/cleanup/test_main.py | 1 |
10 files changed, 24 insertions, 7 deletions
@@ -106,7 +106,7 @@ run: testenv $(TESTENV_GPIO) && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ && nginx -c /etc/kvmd/nginx/nginx.conf -g 'user http; error_log stderr;' \ && ln -s $(TESTENV_VIDEO) /dev/kvmd-video \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.kvmd) \ + && $(if $(CMD),$(CMD),python -m kvmd.apps.kvmd --run) \ " @@ -141,7 +141,7 @@ run-ipmi: testenv && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ && cp /usr/share/kvmd/configs.default/kvmd/main/$(if $(P),$(P),$(DEFAULT_PLATFORM)).yaml /etc/kvmd/main.yaml \ && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.ipmi) \ + && $(if $(CMD),$(CMD),python -m kvmd.apps.ipmi --run) \ " @@ -159,7 +159,7 @@ run-vnc: testenv && cp /usr/share/kvmd/configs.default/kvmd/*passwd /etc/kvmd \ && cp /usr/share/kvmd/configs.default/kvmd/main/$(if $(P),$(P),$(DEFAULT_PLATFORM)).yaml /etc/kvmd/main.yaml \ && cp /testenv/$(if $(P),$(P),$(DEFAULT_PLATFORM)).override.yaml /etc/kvmd/override.yaml \ - && $(if $(CMD),$(CMD),python -m kvmd.apps.vnc) \ + && $(if $(CMD),$(CMD),python -m kvmd.apps.vnc --run) \ " diff --git a/configs/os/services/kvmd-ipmi.service b/configs/os/services/kvmd-ipmi.service index df63df19..a6268c07 100644 --- a/configs/os/services/kvmd-ipmi.service +++ b/configs/os/services/kvmd-ipmi.service @@ -10,7 +10,7 @@ Restart=always RestartSec=3 AmbientCapabilities=CAP_NET_BIND_SERVICE -ExecStart=/usr/bin/kvmd-ipmi +ExecStart=/usr/bin/kvmd-ipmi --run TimeoutStopSec=3 [Install] diff --git a/configs/os/services/kvmd-vnc.service b/configs/os/services/kvmd-vnc.service index f72fc44e..b484625d 100644 --- a/configs/os/services/kvmd-vnc.service +++ b/configs/os/services/kvmd-vnc.service @@ -9,7 +9,7 @@ Type=simple Restart=always RestartSec=3 -ExecStart=/usr/bin/kvmd-vnc +ExecStart=/usr/bin/kvmd-vnc --run TimeoutStopSec=3 [Install] diff --git a/configs/os/services/kvmd.service b/configs/os/services/kvmd.service index b8adff7b..c15a02c3 100644 --- a/configs/os/services/kvmd.service +++ b/configs/os/services/kvmd.service @@ -10,8 +10,8 @@ Restart=always RestartSec=3 AmbientCapabilities=CAP_NET_RAW -ExecStart=/usr/bin/kvmd -ExecStopPost=/usr/bin/kvmd-cleanup +ExecStart=/usr/bin/kvmd --run +ExecStopPost=/usr/bin/kvmd-cleanup --run TimeoutStopSec=10 [Install] diff --git a/kvmd/apps/__init__.py b/kvmd/apps/__init__.py index 7cdaa53b..0318ac09 100644 --- a/kvmd/apps/__init__.py +++ b/kvmd/apps/__init__.py @@ -104,6 +104,7 @@ def init( prog: Optional[str]=None, description: Optional[str]=None, add_help: bool=True, + check_run: bool=False, argv: Optional[List[str]]=None, **load: bool, ) -> Tuple[argparse.ArgumentParser, List[str], Section]: @@ -118,6 +119,9 @@ def init( help="Override config options list (like sec/sub/opt=value)") args_parser.add_argument("-m", "--dump-config", dest="dump_config", action="store_true", help="View current configuration (include all overrides)") + if check_run: + args_parser.add_argument("--run", dest="run", action="store_true", + help="Run the service") (options, remaining) = args_parser.parse_known_args(argv) if options.dump_config: @@ -135,6 +139,14 @@ def init( logging.captureWarnings(True) logging.config.dictConfig(config.logging) + + if check_run and not options.run: + raise SystemExit( + "To prevent accidental startup, you must specify the --run option to start.\n" + "Try the --help option to find out what this service does.\n" + "Make sure you understand exactly what you are doing!" + ) + return (args_parser, remaining, config) diff --git a/kvmd/apps/cleanup/__init__.py b/kvmd/apps/cleanup/__init__.py index ec6a43c6..0d0ddb71 100644 --- a/kvmd/apps/cleanup/__init__.py +++ b/kvmd/apps/cleanup/__init__.py @@ -78,6 +78,7 @@ def main(argv: Optional[List[str]]=None) -> None: config = init( prog="kvmd-cleanup", description="Kill KVMD and clear resources", + check_run=True, argv=argv, )[2].kvmd diff --git a/kvmd/apps/ipmi/__init__.py b/kvmd/apps/ipmi/__init__.py index 749f9750..0d1189c8 100644 --- a/kvmd/apps/ipmi/__init__.py +++ b/kvmd/apps/ipmi/__init__.py @@ -38,6 +38,7 @@ def main(argv: Optional[List[str]]=None) -> None: config = init( prog="kvmd-ipmi", description="IPMI to KVMD proxy", + check_run=True, argv=argv, )[2].ipmi diff --git a/kvmd/apps/kvmd/__init__.py b/kvmd/apps/kvmd/__init__.py index 5e99919d..d11512b1 100644 --- a/kvmd/apps/kvmd/__init__.py +++ b/kvmd/apps/kvmd/__init__.py @@ -47,6 +47,7 @@ def main(argv: Optional[List[str]]=None) -> None: prog="kvmd", description="The main Pi-KVM daemon", argv=argv, + check_run=True, load_auth=True, load_hid=True, load_atx=True, diff --git a/kvmd/apps/vnc/__init__.py b/kvmd/apps/vnc/__init__.py index 534768a3..f252e404 100644 --- a/kvmd/apps/vnc/__init__.py +++ b/kvmd/apps/vnc/__init__.py @@ -39,6 +39,7 @@ def main(argv: Optional[List[str]]=None) -> None: config = init( prog="kvmd-vnc", description="VNC to KVMD proxy", + check_run=True, argv=argv, )[2].vnc diff --git a/testenv/tests/apps/cleanup/test_main.py b/testenv/tests/apps/cleanup/test_main.py index f9b74a06..0af4949c 100644 --- a/testenv/tests/apps/cleanup/test_main.py +++ b/testenv/tests/apps/cleanup/test_main.py @@ -55,6 +55,7 @@ def test_ok(tmpdir) -> None: # type: ignore "--set-options", f"kvmd/server/unix={kvmd_sock_path}", f"kvmd/streamer/unix={ustreamer_sock_path}", + "--run", ]) assert not os.path.exists(ustreamer_sock_path) |