diff --git a/kiauh/components/klipper/klipper_setup.py b/kiauh/components/klipper/klipper_setup.py index eb280e4..1745d25 100644 --- a/kiauh/components/klipper/klipper_setup.py +++ b/kiauh/components/klipper/klipper_setup.py @@ -74,6 +74,7 @@ def install_klipper() -> None: try: if not kl_im.instances: + check_install_dependencies(["git"]) setup_klipper_prerequesites() count = 0 diff --git a/kiauh/components/klipper/klipper_utils.py b/kiauh/components/klipper/klipper_utils.py index 6054c23..10d7d95 100644 --- a/kiauh/components/klipper/klipper_utils.py +++ b/kiauh/components/klipper/klipper_utils.py @@ -260,10 +260,11 @@ def handle_disruptive_system_packages() -> None: try: cmd_sysctl_service(service, "mask") except subprocess.CalledProcessError: + # todo: replace with Logger.print_dialog warn_msg = textwrap.dedent( f""" - KIAUH was unable to mask the {service} system service. - Please fix the problem manually. Otherwise, this may have + 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:] diff --git a/kiauh/components/klipperscreen/klipperscreen.py b/kiauh/components/klipperscreen/klipperscreen.py index 0979cf7..87dcc03 100644 --- a/kiauh/components/klipperscreen/klipperscreen.py +++ b/kiauh/components/klipperscreen/klipperscreen.py @@ -52,14 +52,17 @@ def install_klipperscreen() -> None: mr_im = InstanceManager(Moonraker) mr_instances = mr_im.instances if not mr_instances: - warn_msg = [ - "Moonraker not found! KlipperScreen will not properly work " - "without a working Moonraker installation.", - "\n\n", - "KlipperScreens update manager configuration for Moonraker " - "will not be added to any moonraker.conf.", - ] - Logger.print_dialog(DialogType.WARNING, warn_msg) + Logger.print_dialog( + DialogType.WARNING, + [ + "Moonraker not found! KlipperScreen will not properly work " + "without a working Moonraker installation.", + "\n\n", + "KlipperScreens update manager configuration for Moonraker " + "will not be added to any moonraker.conf.", + ], + end="", + ) if not get_confirm( "Continue KlipperScreen installation?", default_choice=False, @@ -67,7 +70,7 @@ def install_klipperscreen() -> None: ): return - package_list = ["wget", "curl", "unzip", "dfu-util"] + package_list = ["git", "wget", "curl", "unzip", "dfu-util"] check_install_dependencies(package_list) git_clone_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR) @@ -80,7 +83,8 @@ def install_klipperscreen() -> None: mr_im.restart_all_instance() else: Logger.print_info( - "Moonraker is not installed! Cannot add KlipperScreen to update manager!" + "Moonraker is not installed! Cannot add " + "KlipperScreen to update manager!" ) Logger.print_ok("KlipperScreen successfully installed!") except CalledProcessError as e: diff --git a/kiauh/components/mobileraker/mobileraker.py b/kiauh/components/mobileraker/mobileraker.py index d9cb2b5..a432653 100644 --- a/kiauh/components/mobileraker/mobileraker.py +++ b/kiauh/components/mobileraker/mobileraker.py @@ -52,13 +52,16 @@ def install_mobileraker() -> None: mr_im = InstanceManager(Moonraker) mr_instances = mr_im.instances if not mr_instances: - warn_msg = [ - "Moonraker not found! Mobileraker's companion will not properly work " - "without a working Moonraker installation.", - "Mobileraker's companion's update manager configuration for Moonraker " - "will not be added to any moonraker.conf.", - ] - Logger.print_dialog(DialogType.WARNING, warn_msg) + Logger.print_dialog( + DialogType.WARNING, + [ + "Moonraker not found! Mobileraker's companion will not properly work " + "without a working Moonraker installation.", + "Mobileraker's companion's update manager configuration for Moonraker " + "will not be added to any moonraker.conf.", + ], + end="", + ) if not get_confirm( "Continue Mobileraker's companion installation?", default_choice=False, @@ -66,7 +69,7 @@ def install_mobileraker() -> None: ): return - package_list = ["wget", "curl", "unzip", "dfu-util"] + package_list = ["git", "wget", "curl", "unzip", "dfu-util"] check_install_dependencies(package_list) git_clone_wrapper(MOBILERAKER_REPO, MOBILERAKER_DIR) @@ -79,7 +82,8 @@ def install_mobileraker() -> None: mr_im.restart_all_instance() else: Logger.print_info( - "Moonraker is not installed! Cannot add Mobileraker's companion to update manager!" + "Moonraker is not installed! Cannot add Mobileraker's " + "companion to update manager!" ) Logger.print_ok("Mobileraker's companion successfully installed!") except CalledProcessError as e: diff --git a/kiauh/components/moonraker/moonraker_setup.py b/kiauh/components/moonraker/moonraker_setup.py index 1bc0092..8885b34 100644 --- a/kiauh/components/moonraker/moonraker_setup.py +++ b/kiauh/components/moonraker/moonraker_setup.py @@ -6,7 +6,7 @@ # # # This file may be distributed under the terms of the GNU GPLv3 license # # ======================================================================= # - +import json import subprocess from pathlib import Path @@ -86,32 +86,40 @@ def install_moonraker() -> None: instance_names.append(klipper_instances[index].suffix) create_example_cfg = get_confirm("Create example moonraker.conf?") - setup_moonraker_prerequesites() - install_moonraker_polkit() - used_ports_map = { - instance.suffix: instance.port for instance in moonraker_instances - } - for name in instance_names: - current_instance = Moonraker(suffix=name) + try: + check_install_dependencies(["git"]) + setup_moonraker_prerequesites() + install_moonraker_polkit() - mr_im.current_instance = current_instance - mr_im.create_instance() - mr_im.enable_instance() + used_ports_map = { + instance.suffix: instance.port for instance in moonraker_instances + } + for name in instance_names: + current_instance = Moonraker(suffix=name) - if create_example_cfg: - # if a webclient and/or it's config is installed, patch its update section to the config - clients = get_existing_clients() - create_example_moonraker_conf(current_instance, used_ports_map, clients) + mr_im.current_instance = current_instance + mr_im.create_instance() + mr_im.enable_instance() - mr_im.start_instance() + if create_example_cfg: + # if a webclient and/or it's config is installed, patch + # its update section to the config + clients = get_existing_clients() + create_example_moonraker_conf(current_instance, used_ports_map, clients) - mr_im.reload_daemon() + mr_im.start_instance() - # if mainsail is installed, and we installed - # multiple moonraker instances, we enable mainsails remote mode - if MainsailData().client_dir.exists() and len(mr_im.instances) > 1: - enable_mainsail_remotemode() + mr_im.reload_daemon() + + # if mainsail is installed, and we installed + # multiple moonraker instances, we enable mainsails remote mode + if MainsailData().client_dir.exists() and len(mr_im.instances) > 1: + enable_mainsail_remotemode() + + except Exception as e: + Logger.print_error(f"Error while installing Moonraker: {e}") + return def check_moonraker_install_requirements() -> bool: @@ -140,9 +148,19 @@ def setup_moonraker_prerequesites() -> None: def install_moonraker_packages(moonraker_dir: Path) -> None: - script = moonraker_dir.joinpath("scripts/install-moonraker.sh") - packages = parse_packages_from_file(script) - check_install_dependencies(packages) + install_script = moonraker_dir.joinpath("scripts/install-moonraker.sh") + deps_json = MOONRAKER_DIR.joinpath("scripts/system-dependencies.json") + moonraker_deps = [] + + if deps_json.exists(): + moonraker_deps = json.load(deps_json).get("debian", []) + elif install_script.exists(): + moonraker_deps = parse_packages_from_file(install_script) + + if not moonraker_deps: + raise ValueError("Error reading Moonraker dependencies!") + + check_install_dependencies(moonraker_deps) def install_moonraker_polkit() -> None: diff --git a/kiauh/components/webui_client/client_setup.py b/kiauh/components/webui_client/client_setup.py index ef5ed99..f4e1066 100644 --- a/kiauh/components/webui_client/client_setup.py +++ b/kiauh/components/webui_client/client_setup.py @@ -119,7 +119,7 @@ def install_client(client: BaseWebClient) -> None: ) valid_port = is_valid_port(port, ports_in_use) - check_install_dependencies(["nginx"]) + check_install_dependencies(["nginx", "unzip"]) try: download_client(client)