mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-25 08:43:36 +05:00
refactor: more extraction into constant
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
@@ -10,7 +10,21 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from core.backup_manager import BACKUP_ROOT_DIR
|
from core.backup_manager import BACKUP_ROOT_DIR
|
||||||
|
from utils.constants import SYSTEMD
|
||||||
|
|
||||||
CROWSNEST_DIR = Path.home().joinpath("crowsnest")
|
# repo
|
||||||
CROWSNEST_REPO = "https://github.com/mainsail-crew/crowsnest.git"
|
CROWSNEST_REPO = "https://github.com/mainsail-crew/crowsnest.git"
|
||||||
|
|
||||||
|
# names
|
||||||
|
CROWSNEST_SERVICE_NAME = "crowsnest.service"
|
||||||
|
|
||||||
|
# directories
|
||||||
|
CROWSNEST_DIR = Path.home().joinpath("crowsnest")
|
||||||
CROWSNEST_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("crowsnest-backups")
|
CROWSNEST_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("crowsnest-backups")
|
||||||
|
|
||||||
|
# files
|
||||||
|
CROWSNEST_MULTI_CONFIG = CROWSNEST_DIR.joinpath("tools/.config")
|
||||||
|
CROWSNEST_INSTALL_SCRIPT = CROWSNEST_DIR.joinpath("tools/install.sh")
|
||||||
|
CROWSNEST_BIN_FILE = Path("/usr/local/bin/crowsnest")
|
||||||
|
CROWSNEST_LOGROTATE_FILE = Path("/etc/logrotate.d/crowsnest")
|
||||||
|
CROWSNEST_SERVICE_FILE = SYSTEMD.joinpath(CROWSNEST_SERVICE_NAME)
|
||||||
|
|||||||
@@ -14,7 +14,17 @@ from pathlib import Path
|
|||||||
from subprocess import CalledProcessError, run
|
from subprocess import CalledProcessError, run
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from components.crowsnest import CROWSNEST_BACKUP_DIR, CROWSNEST_DIR, CROWSNEST_REPO
|
from components.crowsnest import (
|
||||||
|
CROWSNEST_BACKUP_DIR,
|
||||||
|
CROWSNEST_BIN_FILE,
|
||||||
|
CROWSNEST_DIR,
|
||||||
|
CROWSNEST_INSTALL_SCRIPT,
|
||||||
|
CROWSNEST_LOGROTATE_FILE,
|
||||||
|
CROWSNEST_MULTI_CONFIG,
|
||||||
|
CROWSNEST_REPO,
|
||||||
|
CROWSNEST_SERVICE_FILE,
|
||||||
|
CROWSNEST_SERVICE_NAME,
|
||||||
|
)
|
||||||
from components.klipper.klipper import Klipper
|
from components.klipper.klipper import Klipper
|
||||||
from core.backup_manager.backup_manager import BackupManager
|
from core.backup_manager.backup_manager import BackupManager
|
||||||
from core.instance_manager.instance_manager import InstanceManager
|
from core.instance_manager.instance_manager import InstanceManager
|
||||||
@@ -75,7 +85,6 @@ def install_crowsnest() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def print_multi_instance_warning(instances: List[Klipper]) -> None:
|
def print_multi_instance_warning(instances: List[Klipper]) -> None:
|
||||||
_instances = [f"● {instance.data_dir_name}" for instance in instances]
|
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
DialogType.WARNING,
|
DialogType.WARNING,
|
||||||
[
|
[
|
||||||
@@ -86,13 +95,12 @@ def print_multi_instance_warning(instances: List[Klipper]) -> None:
|
|||||||
"this instance to set up your 'crowsnest.conf' and steering it's service.",
|
"this instance to set up your 'crowsnest.conf' and steering it's service.",
|
||||||
"\n\n",
|
"\n\n",
|
||||||
"The following instances were found:",
|
"The following instances were found:",
|
||||||
*_instances,
|
*[f"● {instance.data_dir_name}" for instance in instances],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def configure_multi_instance() -> None:
|
def configure_multi_instance() -> None:
|
||||||
config = Path(CROWSNEST_DIR).joinpath("tools/.config")
|
|
||||||
try:
|
try:
|
||||||
run(
|
run(
|
||||||
"make config",
|
"make config",
|
||||||
@@ -102,17 +110,17 @@ def configure_multi_instance() -> None:
|
|||||||
)
|
)
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
Logger.print_error(f"Something went wrong! Please try again...\n{e}")
|
Logger.print_error(f"Something went wrong! Please try again...\n{e}")
|
||||||
if config.exists():
|
if CROWSNEST_MULTI_CONFIG.exists():
|
||||||
Path.unlink(config)
|
Path.unlink(CROWSNEST_MULTI_CONFIG)
|
||||||
return
|
return
|
||||||
|
|
||||||
if not config.exists():
|
if not CROWSNEST_MULTI_CONFIG.exists():
|
||||||
Logger.print_error("Generating .config failed, installation aborted")
|
Logger.print_error("Generating .config failed, installation aborted")
|
||||||
|
|
||||||
|
|
||||||
def update_crowsnest() -> None:
|
def update_crowsnest() -> None:
|
||||||
try:
|
try:
|
||||||
cmd_sysctl_service("crowsnest", "stop")
|
cmd_sysctl_service(CROWSNEST_SERVICE_NAME, "stop")
|
||||||
|
|
||||||
if not CROWSNEST_DIR.exists():
|
if not CROWSNEST_DIR.exists():
|
||||||
git_clone_wrapper(CROWSNEST_REPO, CROWSNEST_DIR, "master")
|
git_clone_wrapper(CROWSNEST_REPO, CROWSNEST_DIR, "master")
|
||||||
@@ -123,18 +131,17 @@ def update_crowsnest() -> None:
|
|||||||
if settings.kiauh.backup_before_update:
|
if settings.kiauh.backup_before_update:
|
||||||
bm = BackupManager()
|
bm = BackupManager()
|
||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
"crowsnest",
|
CROWSNEST_DIR.name,
|
||||||
source=CROWSNEST_DIR,
|
source=CROWSNEST_DIR,
|
||||||
target=CROWSNEST_BACKUP_DIR,
|
target=CROWSNEST_BACKUP_DIR,
|
||||||
)
|
)
|
||||||
|
|
||||||
git_pull_wrapper(CROWSNEST_REPO, CROWSNEST_DIR)
|
git_pull_wrapper(CROWSNEST_REPO, CROWSNEST_DIR)
|
||||||
|
|
||||||
script = CROWSNEST_DIR.joinpath("tools/install.sh")
|
deps = parse_packages_from_file(CROWSNEST_INSTALL_SCRIPT)
|
||||||
deps = parse_packages_from_file(script)
|
|
||||||
check_install_dependencies(deps)
|
check_install_dependencies(deps)
|
||||||
|
|
||||||
cmd_sysctl_service("crowsnest", "restart")
|
cmd_sysctl_service(CROWSNEST_SERVICE_NAME, "restart")
|
||||||
|
|
||||||
Logger.print_ok("Crowsnest updated successfully.", end="\n\n")
|
Logger.print_ok("Crowsnest updated successfully.", end="\n\n")
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
@@ -144,9 +151,9 @@ def update_crowsnest() -> None:
|
|||||||
|
|
||||||
def get_crowsnest_status() -> ComponentStatus:
|
def get_crowsnest_status() -> ComponentStatus:
|
||||||
files = [
|
files = [
|
||||||
Path("/usr/local/bin/crowsnest"),
|
CROWSNEST_BIN_FILE,
|
||||||
Path("/etc/logrotate.d/crowsnest"),
|
CROWSNEST_LOGROTATE_FILE,
|
||||||
Path("/etc/systemd/system/crowsnest.service"),
|
CROWSNEST_SERVICE_FILE,
|
||||||
]
|
]
|
||||||
return get_install_status(CROWSNEST_DIR, files=files)
|
return get_install_status(CROWSNEST_DIR, files=files)
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,26 @@
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from core.backup_manager import BACKUP_ROOT_DIR
|
from core.backup_manager import BACKUP_ROOT_DIR
|
||||||
|
from utils.constants import SYSTEMD
|
||||||
|
|
||||||
|
# repo
|
||||||
KLIPPERSCREEN_REPO = "https://github.com/KlipperScreen/KlipperScreen.git"
|
KLIPPERSCREEN_REPO = "https://github.com/KlipperScreen/KlipperScreen.git"
|
||||||
|
|
||||||
|
# names
|
||||||
|
KLIPPERSCREEN_SERVICE_NAME = "KlipperScreen.service"
|
||||||
|
KLIPPERSCREEN_UPDATER_SECTION_NAME = "update_manager KlipperScreen"
|
||||||
|
KLIPPERSCREEN_LOG_NAME = "KlipperScreen.log"
|
||||||
|
|
||||||
|
# directories
|
||||||
KLIPPERSCREEN_DIR = Path.home().joinpath("KlipperScreen")
|
KLIPPERSCREEN_DIR = Path.home().joinpath("KlipperScreen")
|
||||||
KLIPPERSCREEN_ENV = Path.home().joinpath(".KlipperScreen-env")
|
KLIPPERSCREEN_ENV_DIR = Path.home().joinpath(".KlipperScreen-env")
|
||||||
KLIPPERSCREEN_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("klipperscreen-backups")
|
KLIPPERSCREEN_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("klipperscreen-backups")
|
||||||
|
|
||||||
|
# files
|
||||||
|
KLIPPERSCREEN_REQ_FILE = KLIPPERSCREEN_DIR.joinpath(
|
||||||
|
"scripts/KlipperScreen-requirements.txt"
|
||||||
|
)
|
||||||
|
KLIPPERSCREEN_INSTALL_SCRIPT = KLIPPERSCREEN_DIR.joinpath(
|
||||||
|
"scripts/KlipperScreen-install.sh"
|
||||||
|
)
|
||||||
|
KLIPPERSCREEN_SERVICE_FILE = SYSTEMD.joinpath(KLIPPERSCREEN_SERVICE_NAME)
|
||||||
|
|||||||
@@ -15,8 +15,14 @@ from components.klipper.klipper import Klipper
|
|||||||
from components.klipperscreen import (
|
from components.klipperscreen import (
|
||||||
KLIPPERSCREEN_BACKUP_DIR,
|
KLIPPERSCREEN_BACKUP_DIR,
|
||||||
KLIPPERSCREEN_DIR,
|
KLIPPERSCREEN_DIR,
|
||||||
KLIPPERSCREEN_ENV,
|
KLIPPERSCREEN_ENV_DIR,
|
||||||
|
KLIPPERSCREEN_INSTALL_SCRIPT,
|
||||||
|
KLIPPERSCREEN_LOG_NAME,
|
||||||
KLIPPERSCREEN_REPO,
|
KLIPPERSCREEN_REPO,
|
||||||
|
KLIPPERSCREEN_REQ_FILE,
|
||||||
|
KLIPPERSCREEN_SERVICE_FILE,
|
||||||
|
KLIPPERSCREEN_SERVICE_NAME,
|
||||||
|
KLIPPERSCREEN_UPDATER_SECTION_NAME,
|
||||||
)
|
)
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
from core.backup_manager.backup_manager import BackupManager
|
from core.backup_manager.backup_manager import BackupManager
|
||||||
@@ -37,9 +43,9 @@ from utils.input_utils import get_confirm
|
|||||||
from utils.logger import DialogType, Logger
|
from utils.logger import DialogType, Logger
|
||||||
from utils.sys_utils import (
|
from utils.sys_utils import (
|
||||||
check_python_version,
|
check_python_version,
|
||||||
cmd_sysctl_manage,
|
|
||||||
cmd_sysctl_service,
|
cmd_sysctl_service,
|
||||||
install_python_requirements,
|
install_python_requirements,
|
||||||
|
remove_service_file,
|
||||||
)
|
)
|
||||||
from utils.types import ComponentStatus
|
from utils.types import ComponentStatus
|
||||||
|
|
||||||
@@ -78,8 +84,7 @@ def install_klipperscreen() -> None:
|
|||||||
git_clone_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)
|
git_clone_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
script = f"{KLIPPERSCREEN_DIR}/scripts/KlipperScreen-install.sh"
|
run(KLIPPERSCREEN_INSTALL_SCRIPT.as_posix(), shell=True, check=True)
|
||||||
run(script, shell=True, check=True)
|
|
||||||
if mr_instances:
|
if mr_instances:
|
||||||
patch_klipperscreen_update_manager(mr_instances)
|
patch_klipperscreen_update_manager(mr_instances)
|
||||||
mr_im.restart_all_instance()
|
mr_im.restart_all_instance()
|
||||||
@@ -95,34 +100,30 @@ def install_klipperscreen() -> None:
|
|||||||
|
|
||||||
|
|
||||||
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
|
def patch_klipperscreen_update_manager(instances: List[Moonraker]) -> None:
|
||||||
env_py = f"{KLIPPERSCREEN_ENV}/bin/python"
|
|
||||||
add_config_section(
|
add_config_section(
|
||||||
section="update_manager KlipperScreen",
|
section=KLIPPERSCREEN_UPDATER_SECTION_NAME,
|
||||||
instances=instances,
|
instances=instances,
|
||||||
options=[
|
options=[
|
||||||
("type", "git_repo"),
|
("type", "git_repo"),
|
||||||
("path", str(KLIPPERSCREEN_DIR)),
|
("path", KLIPPERSCREEN_DIR.as_posix()),
|
||||||
("orgin", KLIPPERSCREEN_REPO),
|
("orgin", KLIPPERSCREEN_REPO),
|
||||||
("env", env_py),
|
("manages_servcies", "KlipperScreen"),
|
||||||
("requirements", "scripts/KlipperScreen-requirements.txt"),
|
("env", f"{KLIPPERSCREEN_ENV_DIR}/bin/python"),
|
||||||
("install_script", "scripts/KlipperScreen-install.sh"),
|
("requirements", KLIPPERSCREEN_REQ_FILE.as_posix()),
|
||||||
|
("install_script", KLIPPERSCREEN_INSTALL_SCRIPT.as_posix()),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def update_klipperscreen() -> None:
|
def update_klipperscreen() -> None:
|
||||||
|
if not KLIPPERSCREEN_DIR.exists():
|
||||||
|
Logger.print_info("KlipperScreen does not seem to be installed! Skipping ...")
|
||||||
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd_sysctl_service("KlipperScreen", "stop")
|
|
||||||
|
|
||||||
if not KLIPPERSCREEN_DIR.exists():
|
|
||||||
Logger.print_info(
|
|
||||||
"KlipperScreen does not seem to be installed! Skipping ..."
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
Logger.print_status("Updating KlipperScreen ...")
|
Logger.print_status("Updating KlipperScreen ...")
|
||||||
|
|
||||||
cmd_sysctl_service("KlipperScreen", "stop")
|
cmd_sysctl_service(KLIPPERSCREEN_SERVICE_NAME, "stop")
|
||||||
|
|
||||||
settings = KiauhSettings()
|
settings = KiauhSettings()
|
||||||
if settings.kiauh.backup_before_update:
|
if settings.kiauh.backup_before_update:
|
||||||
@@ -130,12 +131,9 @@ def update_klipperscreen() -> None:
|
|||||||
|
|
||||||
git_pull_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)
|
git_pull_wrapper(KLIPPERSCREEN_REPO, KLIPPERSCREEN_DIR)
|
||||||
|
|
||||||
requirements = KLIPPERSCREEN_DIR.joinpath(
|
install_python_requirements(KLIPPERSCREEN_ENV_DIR, KLIPPERSCREEN_REQ_FILE)
|
||||||
"/scripts/KlipperScreen-requirements.txt"
|
|
||||||
)
|
|
||||||
install_python_requirements(KLIPPERSCREEN_ENV, requirements)
|
|
||||||
|
|
||||||
cmd_sysctl_service("KlipperScreen", "start")
|
cmd_sysctl_service(KLIPPERSCREEN_SERVICE_NAME, "start")
|
||||||
|
|
||||||
Logger.print_ok("KlipperScreen updated successfully.", end="\n\n")
|
Logger.print_ok("KlipperScreen updated successfully.", end="\n\n")
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
@@ -146,8 +144,8 @@ def update_klipperscreen() -> None:
|
|||||||
def get_klipperscreen_status() -> ComponentStatus:
|
def get_klipperscreen_status() -> ComponentStatus:
|
||||||
return get_install_status(
|
return get_install_status(
|
||||||
KLIPPERSCREEN_DIR,
|
KLIPPERSCREEN_DIR,
|
||||||
KLIPPERSCREEN_ENV,
|
KLIPPERSCREEN_ENV_DIR,
|
||||||
files=[SYSTEMD.joinpath("KlipperScreen.service")],
|
files=[SYSTEMD.joinpath(KLIPPERSCREEN_SERVICE_NAME)],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -161,24 +159,20 @@ def remove_klipperscreen() -> None:
|
|||||||
else:
|
else:
|
||||||
Logger.print_warn("KlipperScreen directory not found!")
|
Logger.print_warn("KlipperScreen directory not found!")
|
||||||
|
|
||||||
if KLIPPERSCREEN_ENV.exists():
|
if KLIPPERSCREEN_ENV_DIR.exists():
|
||||||
Logger.print_status("Removing KlipperScreen environment ...")
|
Logger.print_status("Removing KlipperScreen environment ...")
|
||||||
shutil.rmtree(KLIPPERSCREEN_ENV)
|
shutil.rmtree(KLIPPERSCREEN_ENV_DIR)
|
||||||
Logger.print_ok("KlipperScreen environment successfully removed!")
|
Logger.print_ok("KlipperScreen environment successfully removed!")
|
||||||
else:
|
else:
|
||||||
Logger.print_warn("KlipperScreen environment not found!")
|
Logger.print_warn("KlipperScreen environment not found!")
|
||||||
|
|
||||||
service = SYSTEMD.joinpath("KlipperScreen.service")
|
if KLIPPERSCREEN_SERVICE_FILE.exists():
|
||||||
if service.exists():
|
remove_service_file(
|
||||||
Logger.print_status("Removing KlipperScreen service ...")
|
KLIPPERSCREEN_SERVICE_NAME,
|
||||||
cmd_sysctl_service(service, "stop")
|
KLIPPERSCREEN_SERVICE_FILE,
|
||||||
cmd_sysctl_service(service, "disable")
|
)
|
||||||
remove_with_sudo(service)
|
|
||||||
cmd_sysctl_manage("daemon-reload")
|
|
||||||
cmd_sysctl_manage("reset-failed")
|
|
||||||
Logger.print_ok("KlipperScreen service successfully removed!")
|
|
||||||
|
|
||||||
logfile = Path("/tmp/KlipperScreen.log")
|
logfile = Path(f"/tmp/{KLIPPERSCREEN_LOG_NAME}")
|
||||||
if logfile.exists():
|
if logfile.exists():
|
||||||
Logger.print_status("Removing KlipperScreen log file ...")
|
Logger.print_status("Removing KlipperScreen log file ...")
|
||||||
remove_with_sudo(logfile)
|
remove_with_sudo(logfile)
|
||||||
@@ -187,7 +181,7 @@ def remove_klipperscreen() -> None:
|
|||||||
kl_im = InstanceManager(Klipper)
|
kl_im = InstanceManager(Klipper)
|
||||||
kl_instances: List[Klipper] = kl_im.instances
|
kl_instances: List[Klipper] = kl_im.instances
|
||||||
for instance in kl_instances:
|
for instance in kl_instances:
|
||||||
logfile = instance.log_dir.joinpath("KlipperScreen.log")
|
logfile = instance.log_dir.joinpath(KLIPPERSCREEN_LOG_NAME)
|
||||||
if logfile.exists():
|
if logfile.exists():
|
||||||
Logger.print_status(f"Removing {logfile} ...")
|
Logger.print_status(f"Removing {logfile} ...")
|
||||||
Path(logfile).unlink()
|
Path(logfile).unlink()
|
||||||
@@ -209,12 +203,12 @@ def remove_klipperscreen() -> None:
|
|||||||
def backup_klipperscreen_dir() -> None:
|
def backup_klipperscreen_dir() -> None:
|
||||||
bm = BackupManager()
|
bm = BackupManager()
|
||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
"KlipperScreen",
|
KLIPPERSCREEN_DIR.name,
|
||||||
source=KLIPPERSCREEN_DIR,
|
source=KLIPPERSCREEN_DIR,
|
||||||
target=KLIPPERSCREEN_BACKUP_DIR,
|
target=KLIPPERSCREEN_BACKUP_DIR,
|
||||||
)
|
)
|
||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
"KlipperScreen-env",
|
KLIPPERSCREEN_ENV_DIR.name,
|
||||||
source=KLIPPERSCREEN_ENV,
|
source=KLIPPERSCREEN_ENV_DIR,
|
||||||
target=KLIPPERSCREEN_BACKUP_DIR,
|
target=KLIPPERSCREEN_BACKUP_DIR,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,17 +11,20 @@ from pathlib import Path
|
|||||||
from core.backup_manager import BACKUP_ROOT_DIR
|
from core.backup_manager import BACKUP_ROOT_DIR
|
||||||
from utils.constants import SYSTEMD
|
from utils.constants import SYSTEMD
|
||||||
|
|
||||||
# names
|
# repo
|
||||||
MOBILERAKER_REPO = "https://github.com/Clon1998/mobileraker_companion.git"
|
MOBILERAKER_REPO = "https://github.com/Clon1998/mobileraker_companion.git"
|
||||||
|
|
||||||
|
# names
|
||||||
|
MOBILERAKER_SERVICE_NAME = "mobileraker.service"
|
||||||
MOBILERAKER_UPDATER_SECTION_NAME = "update_manager mobileraker"
|
MOBILERAKER_UPDATER_SECTION_NAME = "update_manager mobileraker"
|
||||||
MOBILERAKER_LOG_NAME = "mobileraker.log"
|
MOBILERAKER_LOG_NAME = "mobileraker.log"
|
||||||
|
|
||||||
# directories
|
# directories
|
||||||
MOBILERAKER_DIR = Path.home().joinpath("mobileraker_companion")
|
MOBILERAKER_DIR = Path.home().joinpath("mobileraker_companion")
|
||||||
|
MOBILERAKER_ENV_DIR = Path.home().joinpath("mobileraker-env")
|
||||||
MOBILERAKER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("mobileraker-backups")
|
MOBILERAKER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("mobileraker-backups")
|
||||||
|
|
||||||
# files
|
# files
|
||||||
MOBILERAKER_ENV = Path.home().joinpath("mobileraker-env")
|
|
||||||
MOBILERAKER_INSTALL_SCRIPT = MOBILERAKER_DIR.joinpath("scripts/install.sh")
|
MOBILERAKER_INSTALL_SCRIPT = MOBILERAKER_DIR.joinpath("scripts/install.sh")
|
||||||
MOBILERAKER_REQ_FILE = MOBILERAKER_DIR.joinpath("scripts/mobileraker-requirements.txt")
|
MOBILERAKER_REQ_FILE = MOBILERAKER_DIR.joinpath("scripts/mobileraker-requirements.txt")
|
||||||
MOBILERAKER_SERVICE_FILE = SYSTEMD.joinpath("mobileraker.service")
|
MOBILERAKER_SERVICE_FILE = SYSTEMD.joinpath(MOBILERAKER_SERVICE_NAME)
|
||||||
|
|||||||
@@ -15,12 +15,13 @@ from components.klipper.klipper import Klipper
|
|||||||
from components.mobileraker import (
|
from components.mobileraker import (
|
||||||
MOBILERAKER_BACKUP_DIR,
|
MOBILERAKER_BACKUP_DIR,
|
||||||
MOBILERAKER_DIR,
|
MOBILERAKER_DIR,
|
||||||
MOBILERAKER_ENV,
|
MOBILERAKER_ENV_DIR,
|
||||||
MOBILERAKER_INSTALL_SCRIPT,
|
MOBILERAKER_INSTALL_SCRIPT,
|
||||||
MOBILERAKER_LOG_NAME,
|
MOBILERAKER_LOG_NAME,
|
||||||
MOBILERAKER_REPO,
|
MOBILERAKER_REPO,
|
||||||
MOBILERAKER_REQ_FILE,
|
MOBILERAKER_REQ_FILE,
|
||||||
MOBILERAKER_SERVICE_FILE,
|
MOBILERAKER_SERVICE_FILE,
|
||||||
|
MOBILERAKER_SERVICE_NAME,
|
||||||
MOBILERAKER_UPDATER_SECTION_NAME,
|
MOBILERAKER_UPDATER_SECTION_NAME,
|
||||||
)
|
)
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
@@ -29,7 +30,6 @@ from core.instance_manager.instance_manager import InstanceManager
|
|||||||
from core.settings.kiauh_settings import KiauhSettings
|
from core.settings.kiauh_settings import KiauhSettings
|
||||||
from utils.common import check_install_dependencies, get_install_status
|
from utils.common import check_install_dependencies, get_install_status
|
||||||
from utils.config_utils import add_config_section, remove_config_section
|
from utils.config_utils import add_config_section, remove_config_section
|
||||||
from utils.fs_utils import remove_with_sudo
|
|
||||||
from utils.git_utils import (
|
from utils.git_utils import (
|
||||||
git_clone_wrapper,
|
git_clone_wrapper,
|
||||||
git_pull_wrapper,
|
git_pull_wrapper,
|
||||||
@@ -38,9 +38,9 @@ from utils.input_utils import get_confirm
|
|||||||
from utils.logger import DialogType, Logger
|
from utils.logger import DialogType, Logger
|
||||||
from utils.sys_utils import (
|
from utils.sys_utils import (
|
||||||
check_python_version,
|
check_python_version,
|
||||||
cmd_sysctl_manage,
|
|
||||||
cmd_sysctl_service,
|
cmd_sysctl_service,
|
||||||
install_python_requirements,
|
install_python_requirements,
|
||||||
|
remove_service_file,
|
||||||
)
|
)
|
||||||
from utils.types import ComponentStatus
|
from utils.types import ComponentStatus
|
||||||
|
|
||||||
@@ -101,7 +101,7 @@ def patch_mobileraker_update_manager(instances: List[Moonraker]) -> None:
|
|||||||
("origin", MOBILERAKER_REPO),
|
("origin", MOBILERAKER_REPO),
|
||||||
("primary_branch", "main"),
|
("primary_branch", "main"),
|
||||||
("managed_services", "mobileraker"),
|
("managed_services", "mobileraker"),
|
||||||
("env", f"{MOBILERAKER_ENV}/bin/python"),
|
("env", f"{MOBILERAKER_ENV_DIR}/bin/python"),
|
||||||
("requirements", MOBILERAKER_REQ_FILE.as_posix()),
|
("requirements", MOBILERAKER_REQ_FILE.as_posix()),
|
||||||
("install_script", MOBILERAKER_INSTALL_SCRIPT.as_posix()),
|
("install_script", MOBILERAKER_INSTALL_SCRIPT.as_posix()),
|
||||||
],
|
],
|
||||||
@@ -118,7 +118,7 @@ def update_mobileraker() -> None:
|
|||||||
|
|
||||||
Logger.print_status("Updating Mobileraker's companion ...")
|
Logger.print_status("Updating Mobileraker's companion ...")
|
||||||
|
|
||||||
cmd_sysctl_service("mobileraker", "stop")
|
cmd_sysctl_service(MOBILERAKER_SERVICE_NAME, "stop")
|
||||||
|
|
||||||
settings = KiauhSettings()
|
settings = KiauhSettings()
|
||||||
if settings.kiauh.backup_before_update:
|
if settings.kiauh.backup_before_update:
|
||||||
@@ -126,9 +126,9 @@ def update_mobileraker() -> None:
|
|||||||
|
|
||||||
git_pull_wrapper(MOBILERAKER_REPO, MOBILERAKER_DIR)
|
git_pull_wrapper(MOBILERAKER_REPO, MOBILERAKER_DIR)
|
||||||
|
|
||||||
install_python_requirements(MOBILERAKER_ENV, MOBILERAKER_REQ_FILE)
|
install_python_requirements(MOBILERAKER_ENV_DIR, MOBILERAKER_REQ_FILE)
|
||||||
|
|
||||||
cmd_sysctl_service("mobileraker", "start")
|
cmd_sysctl_service(MOBILERAKER_SERVICE_NAME, "start")
|
||||||
|
|
||||||
Logger.print_ok("Mobileraker's companion updated successfully.", end="\n\n")
|
Logger.print_ok("Mobileraker's companion updated successfully.", end="\n\n")
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
@@ -139,7 +139,7 @@ def update_mobileraker() -> None:
|
|||||||
def get_mobileraker_status() -> ComponentStatus:
|
def get_mobileraker_status() -> ComponentStatus:
|
||||||
return get_install_status(
|
return get_install_status(
|
||||||
MOBILERAKER_DIR,
|
MOBILERAKER_DIR,
|
||||||
MOBILERAKER_ENV,
|
MOBILERAKER_ENV_DIR,
|
||||||
files=[MOBILERAKER_SERVICE_FILE],
|
files=[MOBILERAKER_SERVICE_FILE],
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -154,21 +154,18 @@ def remove_mobileraker() -> None:
|
|||||||
else:
|
else:
|
||||||
Logger.print_warn("Mobileraker's companion directory not found!")
|
Logger.print_warn("Mobileraker's companion directory not found!")
|
||||||
|
|
||||||
if MOBILERAKER_ENV.exists():
|
if MOBILERAKER_ENV_DIR.exists():
|
||||||
Logger.print_status("Removing Mobileraker's companion environment ...")
|
Logger.print_status("Removing Mobileraker's companion environment ...")
|
||||||
shutil.rmtree(MOBILERAKER_ENV)
|
shutil.rmtree(MOBILERAKER_ENV_DIR)
|
||||||
Logger.print_ok("Mobileraker's companion environment successfully removed!")
|
Logger.print_ok("Mobileraker's companion environment successfully removed!")
|
||||||
else:
|
else:
|
||||||
Logger.print_warn("Mobileraker's companion environment not found!")
|
Logger.print_warn("Mobileraker's companion environment not found!")
|
||||||
|
|
||||||
if MOBILERAKER_SERVICE_FILE.exists():
|
if MOBILERAKER_SERVICE_FILE.exists():
|
||||||
Logger.print_status("Removing mobileraker service ...")
|
remove_service_file(
|
||||||
cmd_sysctl_service(MOBILERAKER_SERVICE_FILE, "stop")
|
MOBILERAKER_SERVICE_NAME,
|
||||||
cmd_sysctl_service(MOBILERAKER_SERVICE_FILE, "disable")
|
MOBILERAKER_SERVICE_FILE,
|
||||||
remove_with_sudo(MOBILERAKER_SERVICE_FILE)
|
)
|
||||||
cmd_sysctl_manage("daemon-reload")
|
|
||||||
cmd_sysctl_manage("reset-failed")
|
|
||||||
Logger.print_ok("Mobileraker's companion service successfully removed!")
|
|
||||||
|
|
||||||
kl_im = InstanceManager(Klipper)
|
kl_im = InstanceManager(Klipper)
|
||||||
kl_instances: List[Klipper] = kl_im.instances
|
kl_instances: List[Klipper] = kl_im.instances
|
||||||
@@ -204,7 +201,7 @@ def backup_mobileraker_dir() -> None:
|
|||||||
target=MOBILERAKER_BACKUP_DIR,
|
target=MOBILERAKER_BACKUP_DIR,
|
||||||
)
|
)
|
||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
MOBILERAKER_ENV.name,
|
MOBILERAKER_ENV_DIR.name,
|
||||||
source=MOBILERAKER_ENV,
|
source=MOBILERAKER_ENV_DIR,
|
||||||
target=MOBILERAKER_BACKUP_DIR,
|
target=MOBILERAKER_BACKUP_DIR,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -27,14 +27,16 @@ MOONRAKER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("moonraker-backups")
|
|||||||
MOONRAKER_DB_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("moonraker-db-backups")
|
MOONRAKER_DB_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("moonraker-db-backups")
|
||||||
|
|
||||||
# files
|
# files
|
||||||
|
MOONRAKER_INSTALL_SCRIPT = MOONRAKER_DIR.joinpath("scripts/install-moonraker.sh")
|
||||||
MOONRAKER_REQ_FILE = MOONRAKER_DIR.joinpath("scripts/moonraker-requirements.txt")
|
MOONRAKER_REQ_FILE = MOONRAKER_DIR.joinpath("scripts/moonraker-requirements.txt")
|
||||||
|
MOONRAKER_DEPS_JSON_FILE = MOONRAKER_DIR.joinpath("scripts/system-dependencies.json")
|
||||||
# introduced due to
|
# introduced due to
|
||||||
# https://github.com/Arksine/moonraker/issues/349
|
# https://github.com/Arksine/moonraker/issues/349
|
||||||
# https://github.com/Arksine/moonraker/pull/346
|
# https://github.com/Arksine/moonraker/pull/346
|
||||||
POLKIT_LEGACY_FILE = Path("/etc/polkit-1/localauthority/50-local.d/10-moonraker.pkla")
|
POLKIT_LEGACY_FILE = Path("/etc/polkit-1/localauthority/50-local.d/10-moonraker.pkla")
|
||||||
POLKIT_FILE = Path("/etc/polkit-1/rules.d/moonraker.rules")
|
POLKIT_FILE = Path("/etc/polkit-1/rules.d/moonraker.rules")
|
||||||
POLKIT_USR_FILE = Path("/usr/share/polkit-1/rules.d/moonraker.rules")
|
POLKIT_USR_FILE = Path("/usr/share/polkit-1/rules.d/moonraker.rules")
|
||||||
POLKIT_SCRIPT = Path.home().joinpath("moonraker/scripts/set-policykit-rules.sh")
|
POLKIT_SCRIPT = MOONRAKER_DIR.joinpath("scripts/set-policykit-rules.sh")
|
||||||
MOONRAKER_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{MOONRAKER_SERVICE_NAME}")
|
MOONRAKER_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{MOONRAKER_SERVICE_NAME}")
|
||||||
MOONRAKER_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{MOONRAKER_ENV_FILE_NAME}")
|
MOONRAKER_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{MOONRAKER_ENV_FILE_NAME}")
|
||||||
|
|
||||||
|
|||||||
@@ -8,13 +8,14 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
import json
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from components.klipper.klipper import Klipper
|
from components.klipper.klipper import Klipper
|
||||||
from components.moonraker import (
|
from components.moonraker import (
|
||||||
EXIT_MOONRAKER_SETUP,
|
EXIT_MOONRAKER_SETUP,
|
||||||
|
MOONRAKER_DEPS_JSON_FILE,
|
||||||
MOONRAKER_DIR,
|
MOONRAKER_DIR,
|
||||||
MOONRAKER_ENV_DIR,
|
MOONRAKER_ENV_DIR,
|
||||||
|
MOONRAKER_INSTALL_SCRIPT,
|
||||||
MOONRAKER_REQ_FILE,
|
MOONRAKER_REQ_FILE,
|
||||||
POLKIT_FILE,
|
POLKIT_FILE,
|
||||||
POLKIT_LEGACY_FILE,
|
POLKIT_LEGACY_FILE,
|
||||||
@@ -143,21 +144,19 @@ def setup_moonraker_prerequesites() -> None:
|
|||||||
git_clone_wrapper(repo, MOONRAKER_DIR, branch)
|
git_clone_wrapper(repo, MOONRAKER_DIR, branch)
|
||||||
|
|
||||||
# install moonraker dependencies and create python virtualenv
|
# install moonraker dependencies and create python virtualenv
|
||||||
install_moonraker_packages(MOONRAKER_DIR)
|
install_moonraker_packages()
|
||||||
create_python_venv(MOONRAKER_ENV_DIR)
|
create_python_venv(MOONRAKER_ENV_DIR)
|
||||||
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE)
|
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE)
|
||||||
|
|
||||||
|
|
||||||
def install_moonraker_packages(moonraker_dir: Path) -> None:
|
def install_moonraker_packages() -> None:
|
||||||
install_script = moonraker_dir.joinpath("scripts/install-moonraker.sh")
|
|
||||||
deps_json = MOONRAKER_DIR.joinpath("scripts/system-dependencies.json")
|
|
||||||
moonraker_deps = []
|
moonraker_deps = []
|
||||||
|
|
||||||
if deps_json.exists():
|
if MOONRAKER_DEPS_JSON_FILE.exists():
|
||||||
with open(deps_json, "r") as deps:
|
with open(MOONRAKER_DEPS_JSON_FILE, "r") as deps:
|
||||||
moonraker_deps = json.load(deps).get("debian", [])
|
moonraker_deps = json.load(deps).get("debian", [])
|
||||||
elif install_script.exists():
|
elif MOONRAKER_INSTALL_SCRIPT.exists():
|
||||||
moonraker_deps = parse_packages_from_file(install_script)
|
moonraker_deps = parse_packages_from_file(MOONRAKER_INSTALL_SCRIPT)
|
||||||
|
|
||||||
if not moonraker_deps:
|
if not moonraker_deps:
|
||||||
raise ValueError("Error reading Moonraker dependencies!")
|
raise ValueError("Error reading Moonraker dependencies!")
|
||||||
@@ -209,7 +208,7 @@ def update_moonraker() -> None:
|
|||||||
git_pull_wrapper(repo=settings.moonraker.repo_url, target_dir=MOONRAKER_DIR)
|
git_pull_wrapper(repo=settings.moonraker.repo_url, target_dir=MOONRAKER_DIR)
|
||||||
|
|
||||||
# install possible new system packages
|
# install possible new system packages
|
||||||
install_moonraker_packages(MOONRAKER_DIR)
|
install_moonraker_packages()
|
||||||
# install possible new python dependencies
|
# install possible new python dependencies
|
||||||
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE)
|
install_python_requirements(MOONRAKER_ENV_DIR, MOONRAKER_REQ_FILE)
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ OE_REQ_FILE = OE_DIR.joinpath("requirements.txt")
|
|||||||
OE_DEPS_JSON_FILE = OE_DIR.joinpath("moonraker-system-dependencies.json")
|
OE_DEPS_JSON_FILE = OE_DIR.joinpath("moonraker-system-dependencies.json")
|
||||||
OE_INSTALL_SCRIPT = OE_DIR.joinpath("install.sh")
|
OE_INSTALL_SCRIPT = OE_DIR.joinpath("install.sh")
|
||||||
OE_UPDATE_SCRIPT = OE_DIR.joinpath("update.sh")
|
OE_UPDATE_SCRIPT = OE_DIR.joinpath("update.sh")
|
||||||
|
OE_INSTALLER_LOG_FILE = Path.home().joinpath("octoeverywhere-installer.log")
|
||||||
|
|
||||||
# filenames
|
# filenames
|
||||||
OE_CFG_NAME = "octoeverywhere.conf"
|
OE_CFG_NAME = "octoeverywhere.conf"
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from pathlib import Path
|
|||||||
from subprocess import CalledProcessError, run
|
from subprocess import CalledProcessError, run
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
|
from components.moonraker import MOONRAKER_CFG_NAME
|
||||||
from components.octoeverywhere import (
|
from components.octoeverywhere import (
|
||||||
OE_CFG_NAME,
|
OE_CFG_NAME,
|
||||||
OE_DIR,
|
OE_DIR,
|
||||||
@@ -55,7 +56,7 @@ class Octoeverywhere(BaseInstance):
|
|||||||
Logger.print_status("Creating OctoEverywhere for Klipper Instance ...")
|
Logger.print_status("Creating OctoEverywhere for Klipper Instance ...")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cmd = f"{OE_INSTALL_SCRIPT} {self.cfg_dir}/moonraker.conf"
|
cmd = f"{OE_INSTALL_SCRIPT} {self.cfg_dir}/{MOONRAKER_CFG_NAME}"
|
||||||
run(cmd, check=True, shell=True)
|
run(cmd, check=True, shell=True)
|
||||||
|
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
@@ -65,7 +66,7 @@ class Octoeverywhere(BaseInstance):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def update():
|
def update():
|
||||||
try:
|
try:
|
||||||
run(str(OE_UPDATE_SCRIPT), check=True, shell=True, cwd=OE_DIR)
|
run(OE_UPDATE_SCRIPT.as_posix(), check=True, shell=True, cwd=OE_DIR)
|
||||||
|
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
Logger.print_error(f"Error updating OctoEverywhere for Klipper: {e}")
|
Logger.print_error(f"Error updating OctoEverywhere for Klipper: {e}")
|
||||||
@@ -82,6 +83,7 @@ class Octoeverywhere(BaseInstance):
|
|||||||
try:
|
try:
|
||||||
command = ["sudo", "rm", "-f", service_file_path]
|
command = ["sudo", "rm", "-f", service_file_path]
|
||||||
run(command, check=True)
|
run(command, check=True)
|
||||||
|
self.delete_logfiles(OE_LOG_NAME)
|
||||||
Logger.print_ok(f"Service file deleted: {service_file_path}")
|
Logger.print_ok(f"Service file deleted: {service_file_path}")
|
||||||
except CalledProcessError as e:
|
except CalledProcessError as e:
|
||||||
Logger.print_error(f"Error deleting service file: {e}")
|
Logger.print_error(f"Error deleting service file: {e}")
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
from components.moonraker.moonraker import Moonraker
|
from components.moonraker.moonraker import Moonraker
|
||||||
@@ -16,7 +15,7 @@ from components.octoeverywhere import (
|
|||||||
OE_DIR,
|
OE_DIR,
|
||||||
OE_ENV_DIR,
|
OE_ENV_DIR,
|
||||||
OE_INSTALL_SCRIPT,
|
OE_INSTALL_SCRIPT,
|
||||||
OE_LOG_NAME,
|
OE_INSTALLER_LOG_FILE,
|
||||||
OE_REPO,
|
OE_REPO,
|
||||||
OE_REQ_FILE,
|
OE_REQ_FILE,
|
||||||
OE_SYS_CFG_NAME,
|
OE_SYS_CFG_NAME,
|
||||||
@@ -147,7 +146,7 @@ def remove_octoeverywhere() -> None:
|
|||||||
remove_oe_dir()
|
remove_oe_dir()
|
||||||
remove_oe_env()
|
remove_oe_env()
|
||||||
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
|
remove_config_section(f"include {OE_SYS_CFG_NAME}", mr_instances)
|
||||||
delete_oe_logs(ob_instances)
|
run_remove_routines(OE_INSTALLER_LOG_FILE)
|
||||||
Logger.print_dialog(
|
Logger.print_dialog(
|
||||||
DialogType.SUCCESS,
|
DialogType.SUCCESS,
|
||||||
["OctoEverywhere for Klipper successfully removed!"],
|
["OctoEverywhere for Klipper successfully removed!"],
|
||||||
@@ -209,23 +208,3 @@ def remove_oe_env() -> None:
|
|||||||
return
|
return
|
||||||
|
|
||||||
run_remove_routines(OE_ENV_DIR)
|
run_remove_routines(OE_ENV_DIR)
|
||||||
|
|
||||||
|
|
||||||
def delete_oe_logs(instances: List[Octoeverywhere]) -> None:
|
|
||||||
Logger.print_status("Removing OctoEverywhere logs ...")
|
|
||||||
|
|
||||||
all_logfiles = []
|
|
||||||
for instance in instances:
|
|
||||||
all_logfiles = list(instance.log_dir.glob(f"{OE_LOG_NAME}*"))
|
|
||||||
|
|
||||||
install_log = Path.home().joinpath("octoeverywhere-installer.log")
|
|
||||||
if install_log.exists():
|
|
||||||
all_logfiles.append(install_log)
|
|
||||||
|
|
||||||
if not all_logfiles:
|
|
||||||
Logger.print_info("No OctoEverywhere logs found. Skipped ...")
|
|
||||||
return
|
|
||||||
|
|
||||||
for log in all_logfiles:
|
|
||||||
Logger.print_status(f"Remove '{log}'")
|
|
||||||
run_remove_routines(log)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user