diff options
author | Maxim Devaev <[email protected]> | 2022-04-10 06:00:10 +0300 |
---|---|---|
committer | Maxim Devaev <[email protected]> | 2022-04-10 06:00:10 +0300 |
commit | 486f1be9867fcb3220a2918ddd5b0371ece17d5d (patch) | |
tree | 22f6297f9a4755631c0aee3397980a8e2dde0d22 /kvmd | |
parent | 122242ea472684434989706253bb38ad48a6cbd6 (diff) |
get rid of the otg-unlock helper
Diffstat (limited to 'kvmd')
-rw-r--r-- | kvmd/apps/otg/__init__.py | 7 | ||||
-rw-r--r-- | kvmd/apps/otgmsd/__init__.py | 25 | ||||
-rw-r--r-- | kvmd/helpers/unlock/__init__.py | 58 | ||||
-rw-r--r-- | kvmd/helpers/unlock/__main__.py | 24 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/__init__.py | 11 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/drive.py | 5 | ||||
-rw-r--r-- | kvmd/plugins/msd/otg/helpers.py | 10 |
7 files changed, 8 insertions, 132 deletions
diff --git a/kvmd/apps/otg/__init__.py b/kvmd/apps/otg/__init__.py index 1d33b98e..e84a7f00 100644 --- a/kvmd/apps/otg/__init__.py +++ b/kvmd/apps/otg/__init__.py @@ -71,7 +71,7 @@ def _rmdir(path: str) -> None: def _unlink(path: str, optional: bool=False) -> None: logger = get_logger() if optional and not os.access(path, os.F_OK): - logger.info("SKIP-RM - %s", path) + logger.info("RM ------ [SKIPPED] %s", path) return logger.info("RM ------ %s", path) os.unlink(path) @@ -185,6 +185,7 @@ class _GadgetConfig: _chown(join(func_path, "lun.0/cdrom"), user) _chown(join(func_path, "lun.0/ro"), user) _chown(join(func_path, "lun.0/file"), user) + _chown(join(func_path, "lun.0/forced_eject"), user) _symlink(func_path, join(self.__profile_path, func)) name = ("Mass Storage Drive" if self.__msd_instance == 0 else f"Extra Drive #{self.__msd_instance}") self.__create_meta(func, name) @@ -269,8 +270,6 @@ def _cmd_start(config: Section) -> None: # pylint: disable=too-many-statements logger.info("Enabling the gadget ...") _write(join(gadget_path, "UDC"), udc) time.sleep(config.otg.init_delay) - - logger.info("Setting up permissions ...") _chown(join(gadget_path, "UDC"), config.otg.user) _chown(profile_path, config.otg.user) @@ -290,7 +289,7 @@ def _cmd_stop(config: Section) -> None: logger.info("Disabling gadget %r ...", config.otg.gadget) _write(join(gadget_path, "UDC"), "\n") - _unlink(join(gadget_path, "os_desc", usb.G_PROFILE_NAME), True) + _unlink(join(gadget_path, "os_desc", usb.G_PROFILE_NAME), optional=True) profile_path = join(gadget_path, usb.G_PROFILE) for func in os.listdir(profile_path): diff --git a/kvmd/apps/otgmsd/__init__.py b/kvmd/apps/otgmsd/__init__.py index 5187a72d..2e109d96 100644 --- a/kvmd/apps/otgmsd/__init__.py +++ b/kvmd/apps/otgmsd/__init__.py @@ -21,15 +21,12 @@ import os -import signal import errno import argparse from typing import List from typing import Optional -import psutil - from ...validators.basic import valid_bool from ...validators.basic import valid_int_f0 from ...validators.os import valid_abs_file @@ -59,21 +56,6 @@ def _set_param(gadget: str, instance: int, param: str, value: str) -> None: raise -def _unlock() -> None: - # https://github.com/torvalds/linux/blob/3039fad/drivers/usb/gadget/function/f_mass_storage.c#L2924 - found = False - for proc in psutil.process_iter(): - attrs = proc.as_dict(attrs=["name", "exe", "pid"]) - if attrs.get("name") == "file-storage" and not attrs.get("exe"): - try: - proc.send_signal(signal.SIGUSR1) - found = True - except Exception as err: - raise SystemExit(f"Can't send SIGUSR1 to MSD kernel thread with pid={attrs['pid']}: {err}") - if not found: - raise SystemExit("Can't find MSD kernel thread") - - # ===== def main(argv: Optional[List[str]]=None) -> None: (parent_parser, argv, config) = init( @@ -88,8 +70,6 @@ def main(argv: Optional[List[str]]=None) -> None: ) parser.add_argument("-i", "--instance", default=0, type=valid_int_f0, metavar="<N>", help="Drive instance (0 for KVMD drive)") - parser.add_argument("--unlock", action="store_true", - help="Send SIGUSR1 to MSD kernel thread") parser.add_argument("--set-cdrom", default=None, type=valid_bool, metavar="<1|0|yes|no>", help="Set CD-ROM flag") parser.add_argument("--set-rw", default=None, type=valid_bool, @@ -107,11 +87,8 @@ def main(argv: Optional[List[str]]=None) -> None: set_param = (lambda param, value: _set_param(config.otg.gadget, options.instance, param, value)) get_param = (lambda param: _get_param(config.otg.gadget, options.instance, param)) - if options.unlock: - _unlock() - if options.eject: - set_param("file", "") + set_param("forced_eject", "") if options.set_cdrom is not None: set_param("cdrom", str(int(options.set_cdrom))) diff --git a/kvmd/helpers/unlock/__init__.py b/kvmd/helpers/unlock/__init__.py deleted file mode 100644 index 140e0e7c..00000000 --- a/kvmd/helpers/unlock/__init__.py +++ /dev/null @@ -1,58 +0,0 @@ -# ========================================================================== # -# # -# KVMD - The main PiKVM daemon. # -# # -# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # -# # -# 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/>. # -# # -# ========================================================================== # - - -import sys -import signal - -import psutil - - -# ===== -_PROCESS_NAME = "file-storage" - - -# ===== -def _log(msg: str) -> None: - print(msg, file=sys.stderr) - - -def _unlock() -> None: - # https://github.com/torvalds/linux/blob/3039fad/drivers/usb/gadget/function/f_mass_storage.c#L2924 - found = False - for proc in psutil.process_iter(): - attrs = proc.as_dict(attrs=["name", "exe", "pid"]) - if attrs.get("name") == _PROCESS_NAME and not attrs.get("exe"): - _log(f"Sending SIGUSR1 to MSD {_PROCESS_NAME!r} kernel thread with pid={attrs['pid']} ...") - try: - proc.send_signal(signal.SIGUSR1) - found = True - except Exception as err: - raise SystemExit(f"Can't send SIGUSR1 to MSD kernel thread with pid={attrs['pid']}: {err}") - if not found: - raise SystemExit(f"Can't find MSD kernel thread {_PROCESS_NAME!r}") - - -# ===== -def main() -> None: - if len(sys.argv) != 2 or sys.argv[1] != "unlock": - raise SystemExit(f"Usage: {sys.argv[0]} [unlock]") - _unlock() diff --git a/kvmd/helpers/unlock/__main__.py b/kvmd/helpers/unlock/__main__.py deleted file mode 100644 index 3849d1b9..00000000 --- a/kvmd/helpers/unlock/__main__.py +++ /dev/null @@ -1,24 +0,0 @@ -# ========================================================================== # -# # -# KVMD - The main PiKVM daemon. # -# # -# Copyright (C) 2018-2022 Maxim Devaev <[email protected]> # -# # -# 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/>. # -# # -# ========================================================================== # - - -from . import main -main() diff --git a/kvmd/plugins/msd/otg/__init__.py b/kvmd/plugins/msd/otg/__init__.py index 38a09d84..dcf70557 100644 --- a/kvmd/plugins/msd/otg/__init__.py +++ b/kvmd/plugins/msd/otg/__init__.py @@ -140,7 +140,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes storage_path: str, remount_cmd: List[str], - unlock_cmd: List[str], initial: Dict, @@ -155,7 +154,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes self.__meta_path = os.path.join(self.__storage_path, "meta") self.__remount_cmd = remount_cmd - self.__unlock_cmd = unlock_cmd self.__initial_image: str = initial["image"] self.__initial_cdrom: bool = initial["cdrom"] @@ -182,7 +180,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes "storage": Option("/var/lib/kvmd/msd", type=valid_abs_dir, unpack_as="storage_path"), "remount_cmd": Option([*sudo, "/usr/bin/kvmd-helper-otgmsd-remount", "{mode}"], type=valid_command), - "unlock_cmd": Option([*sudo, "/usr/bin/kvmd-helper-otgmsd-unlock", "unlock"], type=valid_command), "initial": { "image": Option("", type=valid_printable_filename, if_empty=""), @@ -242,7 +239,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes async def reset(self) -> None: async with self.__state.busy(check_online=False): try: - await self.__unlock_drive() self.__drive.set_image_path("") self.__drive.set_rw_flag(False) self.__drive.set_cdrom_flag(False) @@ -292,15 +288,12 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes if not os.path.exists(self.__state.vd.image.path): raise MsdUnknownImageError() - await self.__unlock_drive() self.__drive.set_cdrom_flag(self.__state.vd.cdrom) self.__drive.set_image_path(self.__state.vd.image.path) else: if not (self.__state.vd.connected or self.__drive.get_image_path()): raise MsdDisconnectedError() - - await self.__unlock_drive() self.__drive.set_image_path("") self.__state.vd.connected = connected @@ -479,7 +472,6 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes if os.path.exists(path): logger.info("Setting up initial image %r ...", self.__initial_image) try: - await self.__unlock_drive() self.__drive.set_cdrom_flag(self.__initial_cdrom) self.__drive.set_image_path(path) except Exception: @@ -547,6 +539,3 @@ class Plugin(BaseMsd): # pylint: disable=too-many-instance-attributes async def __remount_storage(self, rw: bool) -> None: await helpers.remount_storage(self.__remount_cmd, rw) - - async def __unlock_drive(self) -> None: - await helpers.unlock_drive(self.__unlock_cmd) diff --git a/kvmd/plugins/msd/otg/drive.py b/kvmd/plugins/msd/otg/drive.py index ee54e5e9..11af7f81 100644 --- a/kvmd/plugins/msd/otg/drive.py +++ b/kvmd/plugins/msd/otg/drive.py @@ -53,7 +53,10 @@ class Drive: # ===== def set_image_path(self, path: str) -> None: - self.__set_param("file", path) + if path: + self.__set_param("file", path) + else: + self.__set_param("forced_eject", "") def get_image_path(self) -> str: return self.__get_param("file") diff --git a/kvmd/plugins/msd/otg/helpers.py b/kvmd/plugins/msd/otg/helpers.py index 19cb0bbb..2d64bd0c 100644 --- a/kvmd/plugins/msd/otg/helpers.py +++ b/kvmd/plugins/msd/otg/helpers.py @@ -45,16 +45,6 @@ async def remount_storage(base_cmd: List[str], rw: bool) -> None: raise -async def unlock_drive(base_cmd: List[str]) -> None: - logger = get_logger(0) - logger.info("Unlocking the drive ...") - try: - await _run_helper(base_cmd) - except Exception: - logger.error("Can't unlock the drive") - raise - - # ===== async def _run_helper(cmd: List[str]) -> None: logger = get_logger(0) |