mirror of
https://github.com/dw-0/kiauh.git
synced 2026-01-01 12:13:38 +05:00
Compare commits
3 Commits
v6.0.0-alp
...
84e5359895
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84e5359895 | ||
|
|
e7141f91e8 | ||
|
|
81f409c5ca |
@@ -167,7 +167,7 @@ def start_flash_process(flash_options: FlashOptions) -> None:
|
|||||||
if rc != 0:
|
if rc != 0:
|
||||||
raise Exception(f"Flashing failed with returncode: {rc}")
|
raise Exception(f"Flashing failed with returncode: {rc}")
|
||||||
else:
|
else:
|
||||||
Logger.print_ok("Flashing successful!", start="\n", end="\n\n")
|
Logger.print_ok("Flashing successfull!", start="\n", end="\n\n")
|
||||||
|
|
||||||
except (Exception, CalledProcessError):
|
except (Exception, CalledProcessError):
|
||||||
Logger.print_error("Flashing failed!", start="\n")
|
Logger.print_error("Flashing failed!", start="\n")
|
||||||
|
|||||||
@@ -147,22 +147,16 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def set_options(self) -> None:
|
def set_options(self) -> None:
|
||||||
self.input_label_txt = "Press ENTER to install dependencies"
|
|
||||||
self.default_option = Option(method=self.install_missing_deps)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
# immediately start the build process if all dependencies are met
|
|
||||||
if len(self.missing_deps) == 0:
|
if len(self.missing_deps) == 0:
|
||||||
self.start_build_process()
|
self.input_label_txt = "Press ENTER to continue"
|
||||||
|
self.default_option = Option(method=self.start_build_process)
|
||||||
else:
|
else:
|
||||||
super().run()
|
self.input_label_txt = "Press ENTER to install dependencies"
|
||||||
|
self.default_option = Option(method=self.install_missing_deps)
|
||||||
|
|
||||||
def print_menu(self) -> None:
|
def print_menu(self) -> None:
|
||||||
txt = Color.apply("Dependencies are missing!", Color.RED)
|
|
||||||
menu = textwrap.dedent(
|
menu = textwrap.dedent(
|
||||||
f"""
|
"""
|
||||||
╟───────────────────────────────────────────────────────╢
|
|
||||||
║ {txt:^62} ║
|
|
||||||
╟───────────────────────────────────────────────────────╢
|
╟───────────────────────────────────────────────────────╢
|
||||||
║ The following dependencies are required: ║
|
║ The following dependencies are required: ║
|
||||||
║ ║
|
║ ║
|
||||||
@@ -176,8 +170,16 @@ class KlipperBuildFirmwareMenu(BaseMenu):
|
|||||||
padding = 40 - len(d) + len(status) + (len(status_ok) - len(status))
|
padding = 40 - len(d) + len(status) + (len(status_ok) - len(status))
|
||||||
d = Color.apply(f"● {d}", Color.CYAN)
|
d = Color.apply(f"● {d}", Color.CYAN)
|
||||||
menu += f"║ {d}{status:>{padding}} ║\n"
|
menu += f"║ {d}{status:>{padding}} ║\n"
|
||||||
|
|
||||||
menu += "║ ║\n"
|
menu += "║ ║\n"
|
||||||
|
|
||||||
|
color = Color.GREEN if len(self.missing_deps) == 0 else Color.RED
|
||||||
|
txt = (
|
||||||
|
"All dependencies are met!"
|
||||||
|
if len(self.missing_deps) == 0
|
||||||
|
else "Dependencies are missing!"
|
||||||
|
)
|
||||||
|
|
||||||
|
menu += f"║ {Color.apply(txt, color):<62} ║\n"
|
||||||
menu += "╟───────────────────────────────────────────────────────╢\n"
|
menu += "╟───────────────────────────────────────────────────────╢\n"
|
||||||
|
|
||||||
print(menu, end="")
|
print(menu, end="")
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
# ======================================================================= #
|
# ======================================================================= #
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
@@ -30,7 +31,6 @@ from components.moonraker.moonraker_dialogs import print_moonraker_overview
|
|||||||
from components.moonraker.moonraker_utils import (
|
from components.moonraker.moonraker_utils import (
|
||||||
backup_moonraker_dir,
|
backup_moonraker_dir,
|
||||||
create_example_moonraker_conf,
|
create_example_moonraker_conf,
|
||||||
parse_sysdeps_file,
|
|
||||||
)
|
)
|
||||||
from components.webui_client.client_utils import (
|
from components.webui_client.client_utils import (
|
||||||
enable_mainsail_remotemode,
|
enable_mainsail_remotemode,
|
||||||
@@ -53,7 +53,6 @@ from utils.sys_utils import (
|
|||||||
cmd_sysctl_manage,
|
cmd_sysctl_manage,
|
||||||
cmd_sysctl_service,
|
cmd_sysctl_service,
|
||||||
create_python_venv,
|
create_python_venv,
|
||||||
get_distro_info,
|
|
||||||
install_python_requirements,
|
install_python_requirements,
|
||||||
parse_packages_from_file,
|
parse_packages_from_file,
|
||||||
)
|
)
|
||||||
@@ -158,37 +157,9 @@ def install_moonraker_packages() -> None:
|
|||||||
moonraker_deps = []
|
moonraker_deps = []
|
||||||
|
|
||||||
if MOONRAKER_DEPS_JSON_FILE.exists():
|
if MOONRAKER_DEPS_JSON_FILE.exists():
|
||||||
Logger.print_status(
|
with open(MOONRAKER_DEPS_JSON_FILE, "r") as deps:
|
||||||
f"Parsing system dependencies from {MOONRAKER_DEPS_JSON_FILE.name} ..."
|
moonraker_deps = json.load(deps).get("debian", [])
|
||||||
)
|
|
||||||
parsed_sysdeps = parse_sysdeps_file(MOONRAKER_DEPS_JSON_FILE)
|
|
||||||
distro_name, distro_version = get_distro_info()
|
|
||||||
|
|
||||||
Logger.print_info(f"Distro name: {distro_name}")
|
|
||||||
Logger.print_info(f"Distro version: {distro_version}")
|
|
||||||
|
|
||||||
for dep in parsed_sysdeps.get(distro_name, []):
|
|
||||||
pkg = dep[0].strip()
|
|
||||||
comparator = dep[1].strip()
|
|
||||||
req_version = dep[2].strip()
|
|
||||||
|
|
||||||
comparisons = {
|
|
||||||
"": lambda x, y: True,
|
|
||||||
"<": lambda x, y: x < y,
|
|
||||||
">": lambda x, y: x > y,
|
|
||||||
"<=": lambda x, y: x <= y,
|
|
||||||
">=": lambda x, y: x >= y,
|
|
||||||
"==": lambda x, y: x == y,
|
|
||||||
"!=": lambda x, y: x != y,
|
|
||||||
}
|
|
||||||
|
|
||||||
if comparisons[comparator](float(distro_version), float(req_version or 0)):
|
|
||||||
moonraker_deps.append(pkg)
|
|
||||||
|
|
||||||
elif MOONRAKER_INSTALL_SCRIPT.exists():
|
elif MOONRAKER_INSTALL_SCRIPT.exists():
|
||||||
Logger.print_status(
|
|
||||||
f"Parsing system dependencies from {MOONRAKER_INSTALL_SCRIPT.name} ..."
|
|
||||||
)
|
|
||||||
moonraker_deps = parse_packages_from_file(MOONRAKER_INSTALL_SCRIPT)
|
moonraker_deps = parse_packages_from_file(MOONRAKER_INSTALL_SCRIPT)
|
||||||
|
|
||||||
if not moonraker_deps:
|
if not moonraker_deps:
|
||||||
|
|||||||
@@ -6,11 +6,9 @@
|
|||||||
# #
|
# #
|
||||||
# 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 re
|
|
||||||
import shutil
|
import shutil
|
||||||
from pathlib import Path
|
from typing import Dict, List, Optional
|
||||||
from typing import Dict, List, Optional, Tuple
|
|
||||||
|
|
||||||
from components.moonraker import (
|
from components.moonraker import (
|
||||||
MODULE_PATH,
|
MODULE_PATH,
|
||||||
@@ -140,34 +138,3 @@ def backup_moonraker_db_dir() -> None:
|
|||||||
bm.backup_directory(
|
bm.backup_directory(
|
||||||
name, source=instance.db_dir, target=MOONRAKER_DB_BACKUP_DIR
|
name, source=instance.db_dir, target=MOONRAKER_DB_BACKUP_DIR
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
# This function is from sync_dependencies.py script from the Moonraker project on GitHub:
|
|
||||||
# https://github.com/Arksine/moonraker/blob/master/scripts/sync_dependencies.py
|
|
||||||
# Thanks to Arksine for his work on this project!
|
|
||||||
def parse_sysdeps_file(sysdeps_file: Path) -> Dict[str, List[Tuple[str, str, str]]]:
|
|
||||||
"""
|
|
||||||
Parses the system dependencies file and returns a dictionary with the parsed dependencies.
|
|
||||||
:param sysdeps_file: The path to the system dependencies file.
|
|
||||||
:return: A dictionary with the parsed dependencies in the format {distro: [(package, comparator, version)]}.
|
|
||||||
"""
|
|
||||||
base_deps: Dict[str, List[str]] = json.loads(sysdeps_file.read_bytes())
|
|
||||||
parsed_deps: Dict[str, List[Tuple[str, str, str]]] = {}
|
|
||||||
|
|
||||||
for distro, pkgs in base_deps.items():
|
|
||||||
parsed_deps[distro] = []
|
|
||||||
for dep in pkgs:
|
|
||||||
parts = dep.split(";", maxsplit=1)
|
|
||||||
if len(parts) == 1:
|
|
||||||
parsed_deps[distro].append((dep.strip(), "", ""))
|
|
||||||
else:
|
|
||||||
pkg_name = parts[0].strip()
|
|
||||||
dep_parts = re.split(r"(==|!=|<=|>=|<|>)", parts[1].strip())
|
|
||||||
comp_var = dep_parts[0].strip().lower()
|
|
||||||
if len(dep_parts) != 3 or comp_var != "distro_version":
|
|
||||||
continue
|
|
||||||
operator = dep_parts[1].strip()
|
|
||||||
req_version = dep_parts[2].strip()
|
|
||||||
parsed_deps[distro].append((pkg_name, operator, req_version))
|
|
||||||
|
|
||||||
return parsed_deps
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ def change_system_hostname() -> None:
|
|||||||
"http://<hostname>.local",
|
"http://<hostname>.local",
|
||||||
"\n\n",
|
"\n\n",
|
||||||
"Example: If you set your hostname to 'my-printer', you can access an "
|
"Example: If you set your hostname to 'my-printer', you can access an "
|
||||||
"installed webinterface by typing 'http://my-printer.local' in the "
|
"installed webinterface by tyoing 'http://my-printer.local' in the "
|
||||||
"browser.",
|
"browser.",
|
||||||
],
|
],
|
||||||
custom_title="CHANGE SYSTEM HOSTNAME",
|
custom_title="CHANGE SYSTEM HOSTNAME",
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import urllib.error
|
|||||||
import urllib.request
|
import urllib.request
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import DEVNULL, PIPE, CalledProcessError, Popen, check_output, run
|
from subprocess import DEVNULL, PIPE, CalledProcessError, Popen, check_output, run
|
||||||
from typing import List, Literal, Set, Tuple
|
from typing import List, Literal, Set
|
||||||
|
|
||||||
from core.constants import SYSTEMD
|
from core.constants import SYSTEMD
|
||||||
from core.logger import Logger
|
from core.logger import Logger
|
||||||
@@ -539,32 +539,3 @@ def get_service_file_path(instance_type: type, suffix: str) -> Path:
|
|||||||
file_path: Path = SYSTEMD.joinpath(f"{name}.service")
|
file_path: Path = SYSTEMD.joinpath(f"{name}.service")
|
||||||
|
|
||||||
return file_path
|
return file_path
|
||||||
|
|
||||||
|
|
||||||
def get_distro_info() -> Tuple[str, str]:
|
|
||||||
distro_info: str = check_output(["cat", "/etc/os-release"]).decode().strip()
|
|
||||||
|
|
||||||
if not distro_info:
|
|
||||||
raise ValueError("Error reading distro info!")
|
|
||||||
|
|
||||||
distro_id: str = ""
|
|
||||||
distro_id_like: str = ""
|
|
||||||
distro_version: str = ""
|
|
||||||
|
|
||||||
for line in distro_info.split("\n"):
|
|
||||||
if line.startswith("ID="):
|
|
||||||
distro_id = line.split("=")[1].strip('"').strip()
|
|
||||||
if line.startswith("ID_LIKE="):
|
|
||||||
distro_id_like = line.split("=")[1].strip('"').strip()
|
|
||||||
if line.startswith("VERSION_ID="):
|
|
||||||
distro_version = line.split("=")[1].strip('"').strip()
|
|
||||||
|
|
||||||
if distro_id == "raspbian":
|
|
||||||
distro_id = distro_id_like
|
|
||||||
|
|
||||||
if not distro_id:
|
|
||||||
raise ValueError("Error reading distro id!")
|
|
||||||
if not distro_version:
|
|
||||||
raise ValueError("Error reading distro version!")
|
|
||||||
|
|
||||||
return distro_id.lower(), distro_version
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ trusted_clients:
|
|||||||
cors_domains:
|
cors_domains:
|
||||||
*.lan
|
*.lan
|
||||||
*.local
|
*.local
|
||||||
*.internal
|
|
||||||
*://localhost
|
*://localhost
|
||||||
*://localhost:*
|
*://localhost:*
|
||||||
*://my.mainsail.xyz
|
*://my.mainsail.xyz
|
||||||
|
|||||||
Reference in New Issue
Block a user