fix(klipper): handle disruptive system packages/services

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2023-10-28 23:52:51 +02:00
parent bfff3019cb
commit 84a530be7d
2 changed files with 39 additions and 3 deletions

View File

@@ -9,10 +9,11 @@
# This file may be distributed under the terms of the GNU GPLv3 license #
# ======================================================================= #
import grp
import os
import re
import grp
import subprocess
import textwrap
from pathlib import Path
from typing import Optional, List, Union
@@ -26,7 +27,7 @@ from kiauh.utils.logger import Logger
from kiauh.utils.system_utils import parse_packages_from_file, \
clone_repo, create_python_venv, \
install_python_requirements, update_system_package_lists, \
install_system_packages
install_system_packages, mask_system_service
def run_klipper_setup(install: bool) -> None:
@@ -98,6 +99,7 @@ def install_klipper(instance_manager: InstanceManager) -> None:
instance_manager.reload_daemon()
# step 4: check/handle conflicting packages/services
handle_disruptive_system_packages()
# step 5: check for required group membership
check_user_groups()
@@ -237,6 +239,7 @@ def remove_multi_instance(instance_manager: InstanceManager) -> None:
instance_manager.reload_daemon()
def check_user_groups():
current_groups = [grp.getgrgid(gid).gr_name for gid in os.getgroups()]
@@ -265,3 +268,27 @@ def check_user_groups():
raise
Logger.print_warn("Remember to relog/restart this machine for the group(s) to be applied!")
def handle_disruptive_system_packages() -> None:
services = []
brltty_status = subprocess.run(["systemctl", "is-enabled", "brltty"], capture_output=True, text=True)
modem_manager_status = subprocess.run(["systemctl", "is-enabled", "ModemManager"], capture_output=True, text=True)
if "enabled" in brltty_status.stdout:
services.append("brltty")
if "enabled" in modem_manager_status.stdout:
services.append("ModemManager")
for service in services if services else []:
try:
Logger.print_info(f"{service} service detected! Masking {service} service ...")
mask_system_service(service)
Logger.print_ok(f"{service} service masked!")
except subprocess.CalledProcessError:
warn_msg = textwrap.dedent(f"""
KIAUH was unable to mask the {service} system service.
Please fix the problem manually. Otherwise, this may have
undesirable effects on the operation of Klipper.
""")[1:]
Logger.print_warn(warn_msg)

View File

@@ -18,8 +18,8 @@ from pathlib import Path
from typing import List
from kiauh.utils.constants import COLOR_RED, RESET_FORMAT
from kiauh.utils.logger import Logger
from kiauh.utils.input_utils import get_user_confirm
from kiauh.utils.logger import Logger
def kill(opt_err_msg=None) -> None:
@@ -201,3 +201,12 @@ def create_directory(_dir: Path) -> None:
except OSError as e:
Logger.print_error(f"Error creating folder: {e}")
raise
def mask_system_service(service_name: str) -> None:
try:
command = ["sudo", "systemctl", "mask", service_name]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
Logger.print_error(f"Unable to mask system service {service_name}: {e.stderr.decode()}")
raise