mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-25 16:53:36 +05:00
Compare commits
6 Commits
16d4fdbcfe
...
3e6d3d9015
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e6d3d9015 | ||
|
|
69a0fe2dfb | ||
|
|
13611ccd52 | ||
|
|
ea4409ee54 | ||
|
|
4f39edd06c | ||
|
|
77128ac7f8 |
@@ -10,7 +10,7 @@
|
||||
from pathlib import Path
|
||||
|
||||
from core.backup_manager import BACKUP_ROOT_DIR
|
||||
from utils.constants import SYSTEMD
|
||||
from core.constants import SYSTEMD
|
||||
|
||||
# repo
|
||||
CROWSNEST_REPO = "https://github.com/mainsail-crew/crowsnest.git"
|
||||
|
||||
@@ -27,13 +27,13 @@ from components.crowsnest import (
|
||||
)
|
||||
from components.klipper.klipper import Klipper
|
||||
from core.backup_manager.backup_manager import BackupManager
|
||||
from core.constants import CURRENT_USER
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.settings.kiauh_settings import KiauhSettings
|
||||
from utils.common import (
|
||||
check_install_dependencies,
|
||||
get_install_status,
|
||||
)
|
||||
from utils.constants import CURRENT_USER
|
||||
from utils.git_utils import (
|
||||
git_clone_wrapper,
|
||||
git_pull_wrapper,
|
||||
@@ -52,7 +52,7 @@ def install_crowsnest() -> None:
|
||||
git_clone_wrapper(CROWSNEST_REPO, CROWSNEST_DIR, "master")
|
||||
|
||||
# Step 2: Install dependencies
|
||||
check_install_dependencies(["make"])
|
||||
check_install_dependencies({"make"})
|
||||
|
||||
# Step 3: Check for Multi Instance
|
||||
im = InstanceManager(Klipper)
|
||||
@@ -139,7 +139,7 @@ def update_crowsnest() -> None:
|
||||
git_pull_wrapper(CROWSNEST_REPO, CROWSNEST_DIR)
|
||||
|
||||
deps = parse_packages_from_file(CROWSNEST_INSTALL_SCRIPT)
|
||||
check_install_dependencies(deps)
|
||||
check_install_dependencies({*deps})
|
||||
|
||||
cmd_sysctl_service(CROWSNEST_SERVICE_NAME, "restart")
|
||||
|
||||
|
||||
@@ -11,14 +11,14 @@ import textwrap
|
||||
from enum import Enum, unique
|
||||
from typing import List
|
||||
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.menus.base_menu import print_back_footer
|
||||
from utils.constants import (
|
||||
from core.constants import (
|
||||
COLOR_CYAN,
|
||||
COLOR_GREEN,
|
||||
COLOR_YELLOW,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.menus.base_menu import print_back_footer
|
||||
|
||||
|
||||
@unique
|
||||
|
||||
@@ -169,7 +169,7 @@ def install_klipper_packages() -> None:
|
||||
if Path("/boot/dietpi/.version").exists():
|
||||
packages.append("dbus")
|
||||
|
||||
check_install_dependencies(packages)
|
||||
check_install_dependencies({*packages})
|
||||
|
||||
|
||||
def update_klipper() -> None:
|
||||
|
||||
@@ -30,12 +30,12 @@ from components.webui_client.client_config.client_config_setup import (
|
||||
create_client_config_symlink,
|
||||
)
|
||||
from core.backup_manager.backup_manager import BackupManager
|
||||
from core.constants import CURRENT_USER
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.submodules.simple_config_parser.src.simple_config_parser.simple_config_parser import (
|
||||
SimpleConfigParser,
|
||||
)
|
||||
from utils.common import get_install_status
|
||||
from utils.constants import CURRENT_USER
|
||||
from utils.input_utils import get_confirm, get_number_input, get_string_input
|
||||
from utils.logger import DialogType, Logger
|
||||
from utils.sys_utils import cmd_sysctl_service
|
||||
|
||||
@@ -12,9 +12,9 @@ import textwrap
|
||||
from typing import Type
|
||||
|
||||
from components.klipper import klipper_remove
|
||||
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
from core.menus import FooterType, Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import textwrap
|
||||
from typing import Type
|
||||
from typing import List, Set, Type
|
||||
|
||||
from components.klipper import KLIPPER_DIR
|
||||
from components.klipper_firmware.firmware_utils import (
|
||||
@@ -17,9 +17,9 @@ from components.klipper_firmware.firmware_utils import (
|
||||
run_make_clean,
|
||||
run_make_menuconfig,
|
||||
)
|
||||
from core.constants import COLOR_CYAN, COLOR_GREEN, COLOR_RED, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_GREEN, COLOR_RED, RESET_FORMAT
|
||||
from utils.logger import Logger
|
||||
from utils.sys_utils import (
|
||||
check_package_install,
|
||||
@@ -34,8 +34,8 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
||||
def __init__(self, previous_menu: Type[BaseMenu] | None = None):
|
||||
super().__init__()
|
||||
self.previous_menu: Type[BaseMenu] | None = previous_menu
|
||||
self.deps = ["build-essential", "dpkg-dev", "make"]
|
||||
self.missing_deps = check_package_install(self.deps)
|
||||
self.deps: Set[str] = {"build-essential", "dpkg-dev", "make"}
|
||||
self.missing_deps: List[str] = check_package_install(self.deps)
|
||||
|
||||
def set_previous_menu(self, previous_menu: Type[BaseMenu] | None) -> None:
|
||||
from core.menus.advanced_menu import AdvancedMenu
|
||||
|
||||
@@ -12,9 +12,9 @@ import textwrap
|
||||
from typing import Type
|
||||
|
||||
from components.klipper_firmware.flash_options import FlashMethod, FlashOptions
|
||||
from core.constants import COLOR_RED, RESET_FORMAT
|
||||
from core.menus import FooterType, Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_RED, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -11,8 +11,8 @@ from __future__ import annotations
|
||||
import textwrap
|
||||
from typing import Type
|
||||
|
||||
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection DuplicatedCode
|
||||
|
||||
@@ -35,9 +35,9 @@ from components.klipper_firmware.menus.klipper_flash_help_menu import (
|
||||
KlipperFlashMethodHelpMenu,
|
||||
KlipperMcuConnectionHelpMenu,
|
||||
)
|
||||
from core.constants import COLOR_CYAN, COLOR_RED, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus import FooterType, Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_RED, COLOR_YELLOW, RESET_FORMAT
|
||||
from utils.input_utils import get_number_input
|
||||
from utils.logger import DialogType, Logger
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
from pathlib import Path
|
||||
|
||||
from core.backup_manager import BACKUP_ROOT_DIR
|
||||
from utils.constants import SYSTEMD
|
||||
from core.constants import SYSTEMD
|
||||
|
||||
# repo
|
||||
KLIPPERSCREEN_REPO = "https://github.com/KlipperScreen/KlipperScreen.git"
|
||||
|
||||
@@ -26,6 +26,7 @@ from components.klipperscreen import (
|
||||
)
|
||||
from components.moonraker.moonraker import Moonraker
|
||||
from core.backup_manager.backup_manager import BackupManager
|
||||
from core.constants import SYSTEMD
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.settings.kiauh_settings import KiauhSettings
|
||||
from utils.common import (
|
||||
@@ -33,7 +34,6 @@ from utils.common import (
|
||||
get_install_status,
|
||||
)
|
||||
from utils.config_utils import add_config_section, remove_config_section
|
||||
from utils.constants import SYSTEMD
|
||||
from utils.fs_utils import remove_with_sudo
|
||||
from utils.git_utils import (
|
||||
git_clone_wrapper,
|
||||
@@ -78,8 +78,7 @@ def install_klipperscreen() -> None:
|
||||
):
|
||||
return
|
||||
|
||||
package_list = ["git", "wget", "curl", "unzip", "dfu-util"]
|
||||
check_install_dependencies(package_list)
|
||||
check_install_dependencies()
|
||||
|
||||
git_clone_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)
|
||||
|
||||
|
||||
@@ -12,9 +12,9 @@ import textwrap
|
||||
from typing import Type
|
||||
|
||||
from components.log_uploads.log_upload_utils import get_logfile_list, upload_logfile
|
||||
from core.constants import COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_YELLOW, RESET_FORMAT
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
from pathlib import Path
|
||||
|
||||
from core.backup_manager import BACKUP_ROOT_DIR
|
||||
from utils.constants import SYSTEMD
|
||||
from core.constants import SYSTEMD
|
||||
|
||||
# repo
|
||||
MOBILERAKER_REPO = "https://github.com/Clon1998/mobileraker_companion.git"
|
||||
|
||||
@@ -12,9 +12,9 @@ import textwrap
|
||||
from typing import Type
|
||||
|
||||
from components.moonraker import moonraker_remove
|
||||
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -12,8 +12,8 @@ from typing import List
|
||||
|
||||
from components.klipper.klipper import Klipper
|
||||
from components.moonraker.moonraker import Moonraker
|
||||
from core.constants import COLOR_CYAN, COLOR_GREEN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus.base_menu import print_back_footer
|
||||
from utils.constants import COLOR_CYAN, COLOR_GREEN, COLOR_YELLOW, RESET_FORMAT
|
||||
|
||||
|
||||
def print_moonraker_overview(
|
||||
|
||||
@@ -167,7 +167,7 @@ def install_moonraker_packages() -> None:
|
||||
if not moonraker_deps:
|
||||
raise ValueError("Error reading Moonraker dependencies!")
|
||||
|
||||
check_install_dependencies(moonraker_deps)
|
||||
check_install_dependencies({*moonraker_deps})
|
||||
|
||||
|
||||
def install_moonraker_polkit() -> None:
|
||||
|
||||
@@ -168,7 +168,7 @@ def install_oe_dependencies() -> None:
|
||||
if not oe_deps:
|
||||
raise ValueError("Error reading OctoEverywhere dependencies!")
|
||||
|
||||
check_install_dependencies(oe_deps)
|
||||
check_install_dependencies({*oe_deps})
|
||||
install_python_requirements(OE_ENV_DIR, OE_REQ_FILE)
|
||||
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ def install_client(client: BaseWebClient) -> None:
|
||||
)
|
||||
valid_port = is_valid_port(port, ports_in_use)
|
||||
|
||||
check_install_dependencies(["nginx"])
|
||||
check_install_dependencies({"nginx"})
|
||||
|
||||
try:
|
||||
download_client(client)
|
||||
|
||||
@@ -21,10 +21,10 @@ from components.webui_client.base_data import (
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.backup_manager.backup_manager import BackupManager
|
||||
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.settings.kiauh_settings import KiauhSettings
|
||||
from utils import NGINX_CONFD, NGINX_SITES_AVAILABLE
|
||||
from utils.common import get_install_status
|
||||
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from utils.git_utils import (
|
||||
get_latest_tag,
|
||||
get_latest_unstable_tag,
|
||||
|
||||
@@ -13,9 +13,9 @@ from typing import Type
|
||||
|
||||
from components.webui_client import client_remove
|
||||
from components.webui_client.base_data import BaseWebClient, WebClientType
|
||||
from core.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_CYAN, COLOR_RED, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -15,7 +15,7 @@ from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
from typing import List
|
||||
|
||||
from utils.constants import CURRENT_USER, SYSTEMD
|
||||
from core.constants import CURRENT_USER, SYSTEMD
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
|
||||
@@ -13,8 +13,8 @@ import subprocess
|
||||
from pathlib import Path
|
||||
from typing import List, Type, TypeVar
|
||||
|
||||
from core.constants import SYSTEMD
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from utils.constants import SYSTEMD
|
||||
from utils.logger import Logger
|
||||
from utils.sys_utils import cmd_sysctl_service
|
||||
|
||||
|
||||
@@ -22,9 +22,10 @@ from components.klipper_firmware.menus.klipper_flash_menu import (
|
||||
)
|
||||
from components.moonraker import MOONRAKER_DIR
|
||||
from components.moonraker.moonraker import Moonraker
|
||||
from core.constants import COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_YELLOW, RESET_FORMAT
|
||||
from procedures.system import change_system_hostname
|
||||
from utils.git_utils import rollback_repository
|
||||
|
||||
|
||||
@@ -48,6 +49,7 @@ class AdvancedMenu(BaseMenu):
|
||||
"4": Option(method=self.get_id, menu=False),
|
||||
"5": Option(method=self.klipper_rollback, menu=True),
|
||||
"6": Option(method=self.moonraker_rollback, menu=True),
|
||||
"7": Option(method=self.change_hostname, menu=True),
|
||||
}
|
||||
|
||||
def print_menu(self) -> None:
|
||||
@@ -63,7 +65,8 @@ class AdvancedMenu(BaseMenu):
|
||||
║ 1) [Build] │ 5) [Klipper] ║
|
||||
║ 2) [Flash] │ 6) [Moonraker] ║
|
||||
║ 3) [Build + Flash] │ ║
|
||||
║ 4) [Get MCU ID] │ ║
|
||||
║ 4) [Get MCU ID] │ System: ║
|
||||
║ │ 7) [Change hostname] ║
|
||||
╟───────────────────────────┴───────────────────────────╢
|
||||
"""
|
||||
)[1:]
|
||||
@@ -90,3 +93,6 @@ class AdvancedMenu(BaseMenu):
|
||||
previous_menu=self.__class__,
|
||||
standalone=True,
|
||||
).run()
|
||||
|
||||
def change_hostname(self, **kwargs) -> None:
|
||||
change_system_hostname()
|
||||
|
||||
@@ -23,10 +23,10 @@ from components.webui_client.client_utils import (
|
||||
)
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.common import backup_printer_config_dir
|
||||
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -16,14 +16,14 @@ import traceback
|
||||
from abc import abstractmethod
|
||||
from typing import Dict, Type
|
||||
|
||||
from core.menus import FooterType, Option
|
||||
from utils.constants import (
|
||||
from core.constants import (
|
||||
COLOR_CYAN,
|
||||
COLOR_GREEN,
|
||||
COLOR_RED,
|
||||
COLOR_YELLOW,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from core.menus import FooterType, Option
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ from components.webui_client import client_setup
|
||||
from components.webui_client.client_config import client_config_setup
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.constants import COLOR_GREEN, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_GREEN, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -25,6 +25,14 @@ from components.webui_client.client_utils import (
|
||||
)
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.constants import (
|
||||
COLOR_CYAN,
|
||||
COLOR_GREEN,
|
||||
COLOR_MAGENTA,
|
||||
COLOR_RED,
|
||||
COLOR_YELLOW,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from core.menus import FooterType
|
||||
from core.menus.advanced_menu import AdvancedMenu
|
||||
from core.menus.backup_menu import BackupMenu
|
||||
@@ -34,14 +42,6 @@ from core.menus.remove_menu import RemoveMenu
|
||||
from core.menus.settings_menu import SettingsMenu
|
||||
from core.menus.update_menu import UpdateMenu
|
||||
from extensions.extensions_menu import ExtensionsMenu
|
||||
from utils.constants import (
|
||||
COLOR_CYAN,
|
||||
COLOR_GREEN,
|
||||
COLOR_MAGENTA,
|
||||
COLOR_RED,
|
||||
COLOR_YELLOW,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from utils.logger import Logger
|
||||
from utils.types import ComponentStatus, StatusMap, StatusText
|
||||
|
||||
|
||||
@@ -22,9 +22,9 @@ from components.octoeverywhere.octoeverywhere_setup import remove_octoeverywhere
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from components.webui_client.menus.client_remove_menu import ClientRemoveMenu
|
||||
from core.constants import COLOR_RED, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import COLOR_RED, RESET_FORMAT
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
||||
@@ -17,11 +17,11 @@ from components.klipper import KLIPPER_DIR
|
||||
from components.klipper.klipper import Klipper
|
||||
from components.moonraker import MOONRAKER_DIR
|
||||
from components.moonraker.moonraker import Moonraker
|
||||
from core.constants import COLOR_CYAN, COLOR_GREEN, RESET_FORMAT
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from core.settings.kiauh_settings import KiauhSettings
|
||||
from utils.constants import COLOR_CYAN, COLOR_GREEN, RESET_FORMAT
|
||||
from utils.git_utils import git_clone_wrapper
|
||||
from utils.input_utils import get_confirm, get_string_input
|
||||
from utils.logger import DialogType, Logger
|
||||
|
||||
@@ -40,14 +40,14 @@ from components.webui_client.client_utils import (
|
||||
)
|
||||
from components.webui_client.fluidd_data import FluiddData
|
||||
from components.webui_client.mainsail_data import MainsailData
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.constants import (
|
||||
from core.constants import (
|
||||
COLOR_GREEN,
|
||||
COLOR_RED,
|
||||
COLOR_YELLOW,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from utils.input_utils import get_confirm
|
||||
from utils.logger import DialogType, Logger
|
||||
from utils.spinner import Spinner
|
||||
|
||||
@@ -15,11 +15,11 @@ import textwrap
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Type
|
||||
|
||||
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from extensions import EXTENSION_ROOT
|
||||
from extensions.base_extension import BaseExtension
|
||||
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
|
||||
@@ -19,12 +19,12 @@ from components.klipper.klipper_dialogs import (
|
||||
DisplayType,
|
||||
print_instance_overview,
|
||||
)
|
||||
from core.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from core.menus import Option
|
||||
from core.menus.base_menu import BaseMenu
|
||||
from extensions.base_extension import BaseExtension
|
||||
from utils.constants import COLOR_CYAN, COLOR_YELLOW, RESET_FORMAT
|
||||
from utils.git_utils import git_clone_wrapper
|
||||
from utils.input_utils import get_selection_input
|
||||
from utils.logger import Logger
|
||||
|
||||
@@ -236,7 +236,7 @@ class ObicoExtension(BaseExtension):
|
||||
# install dependencies
|
||||
script = OBICO_DIR.joinpath("install.sh")
|
||||
package_list = parse_packages_from_file(script)
|
||||
check_install_dependencies(package_list)
|
||||
check_install_dependencies({*package_list})
|
||||
|
||||
# create virtualenv
|
||||
create_python_venv(OBICO_ENV_DIR)
|
||||
|
||||
@@ -48,7 +48,7 @@ class PrettyGcodeExtension(BaseExtension):
|
||||
allow_go_back=True,
|
||||
)
|
||||
|
||||
check_install_dependencies(["nginx"])
|
||||
check_install_dependencies({"nginx"})
|
||||
|
||||
try:
|
||||
# remove any existing pgc dir
|
||||
|
||||
@@ -158,7 +158,7 @@ class TelegramBotExtension(BaseExtension):
|
||||
# install dependencies
|
||||
script = TG_BOT_DIR.joinpath("scripts/install.sh")
|
||||
package_list = parse_packages_from_file(script)
|
||||
check_install_dependencies(package_list)
|
||||
check_install_dependencies({*package_list})
|
||||
|
||||
# create virtualenv
|
||||
create_python_venv(TG_BOT_ENV)
|
||||
|
||||
0
kiauh/procedures/__init__.py
Normal file
0
kiauh/procedures/__init__.py
Normal file
107
kiauh/procedures/system.py
Normal file
107
kiauh/procedures/system.py
Normal file
@@ -0,0 +1,107 @@
|
||||
# ======================================================================= #
|
||||
# Copyright (C) 2020 - 2024 Dominik Willner <th33xitus@gmail.com> #
|
||||
# #
|
||||
# This file is part of KIAUH - Klipper Installation And Update Helper #
|
||||
# https://github.com/dw-0/kiauh #
|
||||
# #
|
||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||
# ======================================================================= #
|
||||
|
||||
from pathlib import Path
|
||||
from subprocess import PIPE, CalledProcessError, run
|
||||
|
||||
from utils.common import check_install_dependencies, get_current_date
|
||||
from utils.fs_utils import check_file_exist
|
||||
from utils.input_utils import get_confirm, get_string_input
|
||||
from utils.logger import DialogType, Logger
|
||||
|
||||
|
||||
def change_system_hostname() -> None:
|
||||
"""
|
||||
Procedure to change the system hostname.
|
||||
:return:
|
||||
"""
|
||||
|
||||
Logger.print_dialog(
|
||||
DialogType.CUSTOM,
|
||||
[
|
||||
"Changing the hostname of this system allows you to access an installed "
|
||||
"webinterface by simply typing the hostname like this in the browser:",
|
||||
"\n\n",
|
||||
"http://<hostname>.local",
|
||||
"\n\n",
|
||||
"Example: If you set your hostname to 'my-printer', you can access an "
|
||||
"installed webinterface by tyoing 'http://my-printer.local' in the "
|
||||
"browser.",
|
||||
],
|
||||
custom_title="CHANGE SYSTEM HOSTNAME",
|
||||
padding_top=0,
|
||||
padding_bottom=0,
|
||||
)
|
||||
if not get_confirm("Do you want to change the hostname?", default_choice=False):
|
||||
return
|
||||
|
||||
Logger.print_dialog(
|
||||
DialogType.CUSTOM,
|
||||
[
|
||||
"Allowed characters: a-z, 0-9 and '-'",
|
||||
"The name must not contain the following:",
|
||||
"\n\n",
|
||||
"● Any special characters",
|
||||
"● No leading or trailing '-'",
|
||||
],
|
||||
padding_top=0,
|
||||
padding_bottom=0,
|
||||
)
|
||||
hostname = get_string_input(
|
||||
"Enter the new hostname",
|
||||
regex="^[a-z0-9]+([a-z0-9-]*[a-z0-9])?$",
|
||||
)
|
||||
if not get_confirm(f"Change the hostname to '{hostname}'?", default_choice=False):
|
||||
Logger.print_info("Aborting hostname change ...")
|
||||
return
|
||||
|
||||
try:
|
||||
Logger.print_status("Changing hostname ...")
|
||||
|
||||
Logger.print_status("Checking for dependencies ...")
|
||||
check_install_dependencies({"avahi-daemon"}, include_global=False)
|
||||
|
||||
# create or backup hosts file
|
||||
Logger.print_status("Creating backup of hosts file ...")
|
||||
hosts_file = Path("/etc/hosts")
|
||||
if not check_file_exist(hosts_file, True):
|
||||
cmd = ["sudo", "touch", hosts_file.as_posix()]
|
||||
run(cmd, stderr=PIPE, check=True)
|
||||
else:
|
||||
date_time = get_current_date()
|
||||
name = f"hosts.{date_time.get('date')}-{date_time.get('time')}.bak"
|
||||
hosts_file_backup = Path(f"/etc/{name}")
|
||||
cmd = [
|
||||
"sudo",
|
||||
"cp",
|
||||
hosts_file.as_posix(),
|
||||
hosts_file_backup.as_posix(),
|
||||
]
|
||||
run(cmd, stderr=PIPE, check=True)
|
||||
Logger.print_ok()
|
||||
|
||||
# call hostnamectl set-hostname <hostname>
|
||||
Logger.print_status(f"Setting hostname to '{hostname}' ...")
|
||||
cmd = ["sudo", "hostnamectl", "set-hostname", hostname]
|
||||
run(cmd, stderr=PIPE, check=True)
|
||||
Logger.print_ok()
|
||||
|
||||
# add hostname to hosts file at the end of the file
|
||||
Logger.print_status("Writing new hostname to /etc/hosts ...")
|
||||
stdin = f"127.0.0.1 {hostname}\n"
|
||||
cmd = ["sudo", "tee", "-a", hosts_file.as_posix()]
|
||||
run(cmd, input=stdin.encode(), stderr=PIPE, stdout=PIPE, check=True)
|
||||
Logger.print_ok()
|
||||
|
||||
Logger.print_ok("New hostname successfully configured!")
|
||||
Logger.print_ok("Remember to reboot for the changes to take effect!\n")
|
||||
|
||||
except CalledProcessError as e:
|
||||
Logger.print_error(f"Error during change hostname procedure: {e}")
|
||||
return
|
||||
@@ -11,16 +11,16 @@ from __future__ import annotations
|
||||
import re
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Literal, Optional, Type
|
||||
from typing import Dict, List, Literal, Optional, Set, Type
|
||||
|
||||
from components.klipper.klipper import Klipper
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from utils import GLOBAL_DEPS, PRINTER_CFG_BACKUP_DIR
|
||||
from utils.constants import (
|
||||
from core.constants import (
|
||||
COLOR_CYAN,
|
||||
RESET_FORMAT,
|
||||
)
|
||||
from core.instance_manager.base_instance import BaseInstance
|
||||
from core.instance_manager.instance_manager import InstanceManager
|
||||
from utils import GLOBAL_DEPS, PRINTER_CFG_BACKUP_DIR
|
||||
from utils.git_utils import get_local_commit, get_remote_commit, get_repo_name
|
||||
from utils.logger import DialogType, Logger
|
||||
from utils.sys_utils import (
|
||||
@@ -47,17 +47,23 @@ def get_current_date() -> Dict[Literal["date", "time"], str]:
|
||||
return {"date": date, "time": time}
|
||||
|
||||
|
||||
def check_install_dependencies(deps: List[str] | None = None) -> None:
|
||||
def check_install_dependencies(
|
||||
deps: Set[str] | None = None, include_global: bool = True
|
||||
) -> None:
|
||||
"""
|
||||
Common helper method to check if dependencies are installed
|
||||
and if not, install them automatically |
|
||||
:param include_global: Wether to include the global dependencies or not
|
||||
:param deps: List of strings of package names to check if installed
|
||||
:return: None
|
||||
"""
|
||||
if deps is None:
|
||||
deps = []
|
||||
deps = set()
|
||||
|
||||
requirements = check_package_install({*GLOBAL_DEPS, *deps})
|
||||
if include_global:
|
||||
deps.update(GLOBAL_DEPS)
|
||||
|
||||
requirements = check_package_install(deps)
|
||||
if requirements:
|
||||
Logger.print_status("Installing dependencies ...")
|
||||
Logger.print_info("The following packages need installation:")
|
||||
|
||||
@@ -17,13 +17,13 @@ from typing import List
|
||||
from zipfile import ZipFile
|
||||
|
||||
from components.klipper.klipper import Klipper
|
||||
from core.decorators import deprecated
|
||||
from utils import (
|
||||
MODULE_PATH,
|
||||
NGINX_CONFD,
|
||||
NGINX_SITES_AVAILABLE,
|
||||
NGINX_SITES_ENABLED,
|
||||
)
|
||||
from utils.decorators import deprecated
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ from __future__ import annotations
|
||||
import re
|
||||
from typing import Dict, List
|
||||
|
||||
from core.constants import COLOR_CYAN, RESET_FORMAT
|
||||
from utils import INVALID_CHOICE
|
||||
from utils.constants import COLOR_CYAN, RESET_FORMAT
|
||||
from utils.logger import Logger
|
||||
|
||||
|
||||
@@ -104,8 +104,6 @@ def get_string_input(
|
||||
while True:
|
||||
_input = input(_question)
|
||||
|
||||
print(_input)
|
||||
|
||||
if _input.lower() in _exclude:
|
||||
Logger.print_error("This value is already in use/reserved.")
|
||||
elif default is not None and _input == "":
|
||||
|
||||
@@ -12,7 +12,7 @@ import textwrap
|
||||
from enum import Enum
|
||||
from typing import List
|
||||
|
||||
from utils.constants import (
|
||||
from core.constants import (
|
||||
COLOR_CYAN,
|
||||
COLOR_GREEN,
|
||||
COLOR_MAGENTA,
|
||||
@@ -66,7 +66,7 @@ class Logger:
|
||||
print(f"{COLOR_WHITE}{start}{message}{RESET_FORMAT}", end=end)
|
||||
|
||||
@staticmethod
|
||||
def print_ok(msg, prefix=True, start="", end="\n") -> None:
|
||||
def print_ok(msg: str = "Success!", prefix=True, start="", end="\n") -> None:
|
||||
message = f"[OK] {msg}" if prefix else msg
|
||||
print(f"{COLOR_GREEN}{start}{message}{RESET_FORMAT}", end=end)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from pathlib import Path
|
||||
from subprocess import DEVNULL, PIPE, CalledProcessError, Popen, check_output, run
|
||||
from typing import List, Literal, Set
|
||||
|
||||
from utils.constants import SYSTEMD
|
||||
from core.constants import SYSTEMD
|
||||
from utils.fs_utils import check_file_exist, remove_with_sudo
|
||||
from utils.input_utils import get_confirm
|
||||
from utils.logger import Logger
|
||||
|
||||
Reference in New Issue
Block a user