refactor: implement constants for klipper

use ubuntu 22.04 install script

Signed-off-by: Dominik Willner <th33xitus@gmail.com>
This commit is contained in:
dw-0
2024-06-30 21:29:54 +02:00
parent c1f600f539
commit 7632c3c980
3 changed files with 44 additions and 25 deletions

View File

@@ -15,9 +15,22 @@ MODULE_PATH = Path(__file__).resolve().parent
# names
KLIPPER_LOG_NAME = "klippy.log"
KLIPPER_CFG_NAME = "printer.cfg"
KLIPPER_SERIAL_NAME = "klippy.serial"
KLIPPER_UDS_NAME = "klippy.sock"
KLIPPER_ENV_FILE_NAME = "klipper.env"
KLIPPER_SERVICE_NAME = "klipper.service"
# directories
KLIPPER_DIR = Path.home().joinpath("klipper")
KLIPPER_ENV_DIR = Path.home().joinpath("klippy-env")
KLIPPER_BACKUP_DIR = BACKUP_ROOT_DIR.joinpath("klipper-backups")
KLIPPER_REQUIREMENTS_TXT = KLIPPER_DIR.joinpath("scripts/klippy-requirements.txt")
# files
KLIPPER_REQ_FILE = KLIPPER_DIR.joinpath("scripts/klippy-requirements.txt")
KLIPPER_INSTALL_SCRIPT = KLIPPER_DIR.joinpath("scripts/install-ubuntu-22.04.sh")
KLIPPER_SERVICE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{KLIPPER_SERVICE_NAME}")
KLIPPER_ENV_FILE_TEMPLATE = MODULE_PATH.joinpath(f"assets/{KLIPPER_ENV_FILE_NAME}")
EXIT_KLIPPER_SETUP = "Exiting Klipper setup ..."

View File

@@ -11,7 +11,17 @@ from pathlib import Path
from subprocess import DEVNULL, CalledProcessError, run
from typing import List
from components.klipper import KLIPPER_DIR, KLIPPER_ENV_DIR, MODULE_PATH
from components.klipper import (
KLIPPER_CFG_NAME,
KLIPPER_DIR,
KLIPPER_ENV_DIR,
KLIPPER_ENV_FILE_NAME,
KLIPPER_ENV_FILE_TEMPLATE,
KLIPPER_LOG_NAME,
KLIPPER_SERIAL_NAME,
KLIPPER_SERVICE_TEMPLATE,
KLIPPER_UDS_NAME,
)
from core.instance_manager.base_instance import BaseInstance
from utils.constants import SYSTEMD
from utils.logger import Logger
@@ -27,10 +37,10 @@ class Klipper(BaseInstance):
super().__init__(instance_type=self, suffix=suffix)
self.klipper_dir: Path = KLIPPER_DIR
self.env_dir: Path = KLIPPER_ENV_DIR
self._cfg_file = self.cfg_dir.joinpath("printer.cfg")
self._log = self.log_dir.joinpath("klippy.log")
self._serial = self.comms_dir.joinpath("klippy.serial")
self._uds = self.comms_dir.joinpath("klippy.sock")
self._cfg_file = self.cfg_dir.joinpath(KLIPPER_CFG_NAME)
self._log = self.log_dir.joinpath(KLIPPER_LOG_NAME)
self._serial = self.comms_dir.joinpath(KLIPPER_SERIAL_NAME)
self._uds = self.comms_dir.joinpath(KLIPPER_UDS_NAME)
@property
def cfg_file(self) -> Path:
@@ -51,21 +61,18 @@ class Klipper(BaseInstance):
def create(self) -> None:
Logger.print_status("Creating new Klipper Instance ...")
service_template_path = MODULE_PATH.joinpath("assets/klipper.service")
service_file_name = self.get_service_file_name(extension=True)
service_file_target = SYSTEMD.joinpath(service_file_name)
env_template_file_path = MODULE_PATH.joinpath("assets/klipper.env")
env_file_target = self.sysd_dir.joinpath("klipper.env")
env_file_target = self.sysd_dir.joinpath(KLIPPER_ENV_FILE_NAME)
try:
self.create_folders()
self._write_service_file(
service_template_path,
KLIPPER_SERVICE_TEMPLATE,
service_file_target,
env_file_target,
)
self._write_env_file(env_template_file_path, env_file_target)
self._write_env_file(KLIPPER_ENV_FILE_TEMPLATE, env_file_target)
except CalledProcessError as e:
Logger.print_error(f"Error creating instance: {e}")
@@ -147,7 +154,8 @@ class Klipper(BaseInstance):
"%KLIPPER_DIR%", str(self.klipper_dir)
)
env_file_content = env_file_content.replace(
"%CFG%", f"{self.cfg_dir}/printer.cfg"
"%CFG%",
f"{self.cfg_dir}/{KLIPPER_CFG_NAME}",
)
env_file_content = env_file_content.replace("%SERIAL%", str(self.serial))
env_file_content = env_file_content.replace("%LOG%", str(self.log))
@@ -157,7 +165,6 @@ class Klipper(BaseInstance):
def _delete_logfiles(self) -> None:
from utils.fs_utils import run_remove_routines
for log in list(self.log_dir.glob("klippy.log*")):
files = self.log_dir.iterdir()
logs = [f for f in files if f.name.startswith(KLIPPER_LOG_NAME)]
for log in logs:

View File

@@ -13,7 +13,8 @@ from components.klipper import (
EXIT_KLIPPER_SETUP,
KLIPPER_DIR,
KLIPPER_ENV_DIR,
KLIPPER_REQUIREMENTS_TXT,
KLIPPER_INSTALL_SCRIPT,
KLIPPER_REQ_FILE,
)
from components.klipper.klipper import Klipper
from components.klipper.klipper_utils import (
@@ -115,21 +116,19 @@ def setup_klipper_prerequesites() -> None:
# install klipper dependencies and create python virtualenv
try:
install_klipper_packages(KLIPPER_DIR)
install_klipper_packages()
create_python_venv(KLIPPER_ENV_DIR)
install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQUIREMENTS_TXT)
install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQ_FILE)
except Exception:
Logger.print_error("Error during installation of Klipper requirements!")
raise
def install_klipper_packages(klipper_dir: Path) -> None:
script = klipper_dir.joinpath("scripts/install-debian.sh")
def install_klipper_packages() -> None:
script = KLIPPER_INSTALL_SCRIPT
packages = parse_packages_from_file(script)
packages = [pkg.replace("python-dev", "python3-dev") for pkg in packages]
packages.append("python3-venv")
# Add dfu-util for octopi-images
packages.append("dfu-util")
packages.append("python3-venv") # todo: remove once switched to virtualenv
# Add dbus requirement for DietPi distro
if Path("/boot/dietpi/.version").exists():
packages.append("dbus")
@@ -160,9 +159,9 @@ def update_klipper() -> None:
git_pull_wrapper(repo=settings.klipper.repo_url, target_dir=KLIPPER_DIR)
# install possible new system packages
install_klipper_packages(KLIPPER_DIR)
install_klipper_packages()
# install possible new python dependencies
install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQUIREMENTS_TXT)
install_python_requirements(KLIPPER_ENV_DIR, KLIPPER_REQ_FILE)
instance_manager.start_all_instance()