Compare commits

...

5 Commits

Author SHA1 Message Date
dw-0
3d5e83d5ab refactor(Mainsail): remove specific methods and replace by generic ones
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2023-12-22 22:54:29 +01:00
dw-0
edd5f5c6fd refactor(KIAUH): refactor RemoveMenu
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2023-12-22 22:43:29 +01:00
dw-0
8ff0b9d81d refactor(Mainsail): refactor methods for removing and checking files
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2023-12-22 22:39:43 +01:00
dw-0
22e8e314db fix(Mainsail): implement missing mainsail cfg symlinking
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2023-12-22 21:41:15 +01:00
dw-0
12bd8eb799 feat(KIAUH): move filesystem related methods to own module
Signed-off-by: Dominik Willner <th33xitus@gmail.com>
2023-12-22 21:25:20 +01:00
7 changed files with 203 additions and 202 deletions

View File

@@ -14,7 +14,7 @@ from pathlib import Path
from typing import List, Union, Optional, Type, TypeVar from typing import List, Union, Optional, Type, TypeVar
from kiauh.utils.constants import SYSTEMD, CURRENT_USER from kiauh.utils.constants import SYSTEMD, CURRENT_USER
from kiauh.utils.system_utils import create_directory from kiauh.utils.filesystem_utils import create_directory
B = TypeVar(name="B", bound="BaseInstance", covariant=True) B = TypeVar(name="B", bound="BaseInstance", covariant=True)

View File

@@ -29,18 +29,16 @@ class RemoveMenu(BaseMenu):
1: self.remove_klipper, 1: self.remove_klipper,
2: self.remove_moonraker, 2: self.remove_moonraker,
3: MainsailRemoveMenu, 3: MainsailRemoveMenu,
4: self.remove_mainsail_config,
5: self.remove_fluidd, 5: self.remove_fluidd,
6: self.remove_fluidd_config, 6: self.remove_klipperscreen,
7: self.remove_klipperscreen, 7: self.remove_crowsnest,
8: self.remove_crowsnest, 8: self.remove_mjpgstreamer,
9: self.remove_mjpgstreamer, 9: self.remove_pretty_gcode,
10: self.remove_pretty_gcode, 10: self.remove_telegram_bot,
11: self.remove_telegram_bot, 11: self.remove_obico,
12: self.remove_obico, 12: self.remove_octoeverywhere,
13: self.remove_octoeverywhere, 13: self.remove_mobileraker,
14: self.remove_mobileraker, 14: self.remove_nginx,
15: self.remove_nginx,
}, },
footer_type=BACK_FOOTER, footer_type=BACK_FOOTER,
) )
@@ -57,17 +55,17 @@ class RemoveMenu(BaseMenu):
| INFO: Configurations and/or any backups will be kept! | | INFO: Configurations and/or any backups will be kept! |
|-------------------------------------------------------| |-------------------------------------------------------|
| Firmware & API: | Webcam Streamer: | | Firmware & API: | Webcam Streamer: |
| 1) [Klipper] | 8) [Crowsnest] | | 1) [Klipper] | 6) [Crowsnest] |
| 2) [Moonraker] | 9) [MJPG-Streamer] | | 2) [Moonraker] | 7) [MJPG-Streamer] |
| | | | | |
| Klipper Webinterface: | Other: | | Klipper Webinterface: | Other: |
| 3) [Mainsail] | 10) [PrettyGCode] | | 3) [Mainsail] | 8) [PrettyGCode] |
| 4) [Mainsail-Config] | 11) [Telegram Bot] | | 4) [Fluidd] | 9) [Telegram Bot] |
| 5) [Fluidd] | 12) [Obico for Klipper] | | | 10) [Obico for Klipper] |
| 6) [Fluidd-Config] | 13) [OctoEverywhere] | | Touchscreen GUI: | 11) [OctoEverywhere] |
| | 14) [Mobileraker] | | 5) [KlipperScreen] | 12) [Mobileraker] |
| Touchscreen GUI: | 15) [NGINX] | | | 13) [NGINX] |
| 7) [KlipperScreen] | | | | |
""" """
)[1:] )[1:]
print(menu, end="") print(menu, end="")
@@ -78,12 +76,6 @@ class RemoveMenu(BaseMenu):
def remove_moonraker(self): def remove_moonraker(self):
moonraker_setup.run_moonraker_setup(install=False) moonraker_setup.run_moonraker_setup(install=False)
def remove_mainsail(self):
mainsail_setup.run_mainsail_removal()
def remove_mainsail_config(self):
print("remove_mainsail_config")
def remove_fluidd(self): def remove_fluidd(self):
print("remove_fluidd") print("remove_fluidd")

View File

@@ -41,7 +41,8 @@ def run_mainsail_removal(
if remove_mr_updater_section: if remove_mr_updater_section:
remove_updater_section("update_manager mainsail") remove_updater_section("update_manager mainsail")
if remove_ms_config: if remove_ms_config:
remove_ms_config_dir() remove_mainsail_cfg_dir()
remove_mainsail_cfg_symlink()
if remove_mr_updater_section: if remove_mr_updater_section:
remove_updater_section("update_manager mainsail-config") remove_updater_section("update_manager mainsail-config")
if remove_msc_printer_cfg_include: if remove_msc_printer_cfg_include:
@@ -63,8 +64,8 @@ def remove_mainsail_dir() -> None:
def remove_nginx_config() -> None: def remove_nginx_config() -> None:
Logger.print_status("Removing Mainsails NGINX config ...") Logger.print_status("Removing Mainsails NGINX config ...")
try: try:
remove_file(Path(NGINX_SITES_AVAILABLE).joinpath("mainsail"), True) remove_file(Path(NGINX_SITES_AVAILABLE, "mainsail"), True)
remove_file(Path(NGINX_SITES_ENABLED).joinpath("mainsail"), True) remove_file(Path(NGINX_SITES_ENABLED, "mainsail"), True)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
log = f"Unable to remove Mainsail NGINX config:\n{e.stderr.decode()}" log = f"Unable to remove Mainsail NGINX config:\n{e.stderr.decode()}"
@@ -82,8 +83,8 @@ def remove_nginx_logs() -> None:
return return
for instance in im.instances: for instance in im.instances:
remove_file(Path(instance.log_dir).joinpath("mainsail-access.log")) remove_file(Path(instance.log_dir, "mainsail-access.log"))
remove_file(Path(instance.log_dir).joinpath("mainsail-error.log")) remove_file(Path(instance.log_dir, "mainsail-error.log"))
except (OSError, subprocess.CalledProcessError) as e: except (OSError, subprocess.CalledProcessError) as e:
Logger.print_error(f"Unable to NGINX logs:\n{e}") Logger.print_error(f"Unable to NGINX logs:\n{e}")
@@ -114,7 +115,7 @@ def remove_updater_section(name: str) -> None:
cm.write_config() cm.write_config()
def remove_ms_config_dir() -> None: def remove_mainsail_cfg_dir() -> None:
Logger.print_status("Removing mainsail-config ...") Logger.print_status("Removing mainsail-config ...")
if not Path(MAINSAIL_CONFIG_DIR).exists(): if not Path(MAINSAIL_CONFIG_DIR).exists():
Logger.print_info(f"'{MAINSAIL_CONFIG_DIR}' does not exist. Skipping ...") Logger.print_info(f"'{MAINSAIL_CONFIG_DIR}' does not exist. Skipping ...")
@@ -126,6 +127,17 @@ def remove_ms_config_dir() -> None:
Logger.print_error(f"Unable to delete '{MAINSAIL_CONFIG_DIR}':\n{e}") Logger.print_error(f"Unable to delete '{MAINSAIL_CONFIG_DIR}':\n{e}")
def remove_mainsail_cfg_symlink() -> None:
Logger.print_status("Removing mainsail.cfg symlinks ...")
im = InstanceManager(Moonraker)
for instance in im.instances:
Logger.print_status(f"Removing symlink from '{instance.cfg_dir}' ...")
try:
remove_file(Path(instance.cfg_dir, "mainsail.cfg"))
except subprocess.CalledProcessError:
Logger.print_error("Failed to remove symlink!")
def remove_printer_cfg_include() -> None: def remove_printer_cfg_include() -> None:
Logger.print_status("Remove mainsail-config include from printer.cfg ...") Logger.print_status("Remove mainsail-config include from printer.cfg ...")
im = InstanceManager(Klipper) im = InstanceManager(Klipper)

View File

@@ -10,6 +10,7 @@
# ======================================================================= # # ======================================================================= #
import os.path import os.path
import subprocess
from pathlib import Path from pathlib import Path
from typing import List from typing import List
@@ -38,20 +39,23 @@ from kiauh.modules.mainsail.mainsail_utils import (
symlink_webui_nginx_log, symlink_webui_nginx_log,
) )
from kiauh.modules.moonraker.moonraker import Moonraker from kiauh.modules.moonraker.moonraker import Moonraker
from kiauh.utils import NGINX_SITES_AVAILABLE, NGINX_SITES_ENABLED
from kiauh.utils.common import check_install_dependencies from kiauh.utils.common import check_install_dependencies
from kiauh.utils.filesystem_utils import (
unzip,
copy_upstream_nginx_cfg,
copy_common_vars_nginx_cfg,
create_nginx_cfg,
create_symlink,
remove_file,
)
from kiauh.utils.input_utils import get_confirm, get_number_input from kiauh.utils.input_utils import get_confirm, get_number_input
from kiauh.utils.logger import Logger from kiauh.utils.logger import Logger
from kiauh.utils.system_utils import ( from kiauh.utils.system_utils import (
download_file, download_file,
unzip,
create_upstream_nginx_cfg,
create_nginx_cfg,
delete_default_nginx_cfg,
enable_nginx_cfg,
set_nginx_permissions, set_nginx_permissions,
get_ipv4_addr, get_ipv4_addr,
control_systemd_service, control_systemd_service,
create_common_vars_nginx_cfg,
) )
@@ -114,8 +118,9 @@ def run_mainsail_installation() -> None:
"mainsail-updater.conf", "mainsail-updater.conf",
) )
im_mr.restart_all_instance() im_mr.restart_all_instance()
if is_klipper_installed and install_ms_config: if install_ms_config and is_klipper_installed:
download_mainsail_config() download_mainsail_cfg()
create_mainsail_cfg_symlink(im_kl.instances)
patch_moonraker_conf( patch_moonraker_conf(
im_mr.instances, im_mr.instances,
"mainsail-config", "mainsail-config",
@@ -125,8 +130,8 @@ def run_mainsail_installation() -> None:
patch_printer_config(im_kl.instances) patch_printer_config(im_kl.instances)
im_kl.restart_all_instance() im_kl.restart_all_instance()
create_upstream_nginx_cfg() copy_upstream_nginx_cfg()
create_common_vars_nginx_cfg() copy_common_vars_nginx_cfg()
create_mainsail_nginx_cfg(mainsail_port) create_mainsail_nginx_cfg(mainsail_port)
if is_klipper_installed: if is_klipper_installed:
symlink_webui_nginx_log(im_kl.instances) symlink_webui_nginx_log(im_kl.instances)
@@ -156,7 +161,7 @@ def download_mainsail() -> None:
raise raise
def download_mainsail_config() -> None: def download_mainsail_cfg() -> None:
try: try:
Logger.print_status("Downloading mainsail-config ...") Logger.print_status("Downloading mainsail-config ...")
rm = RepoManager(MAINSAIL_CONFIG_REPO_URL, target_dir=MAINSAIL_CONFIG_DIR) rm = RepoManager(MAINSAIL_CONFIG_REPO_URL, target_dir=MAINSAIL_CONFIG_DIR)
@@ -166,13 +171,27 @@ def download_mainsail_config() -> None:
raise raise
def create_mainsail_cfg_symlink(klipper_instances: List[Klipper]) -> None:
Logger.print_status("Create symlink of mainsail.cfg ...")
source = Path(MAINSAIL_CONFIG_DIR, "mainsail.cfg")
for instance in klipper_instances:
target = instance.cfg_dir
Logger.print_status(f"Linking {source} to {target}")
try:
create_symlink(source, target)
except subprocess.CalledProcessError:
Logger.print_error("Creating symlink failed!")
def create_mainsail_nginx_cfg(port: int) -> None: def create_mainsail_nginx_cfg(port: int) -> None:
root_dir = MAINSAIL_DIR
source = Path(NGINX_SITES_AVAILABLE, "mainsail")
target = Path(NGINX_SITES_ENABLED, "mainsail")
try: try:
Logger.print_status("Creating NGINX config for Mainsail ...") Logger.print_status("Creating NGINX config for Mainsail ...")
root_dir = MAINSAIL_DIR remove_file(Path("/etc/nginx/sites-enabled/default"), True)
delete_default_nginx_cfg()
create_nginx_cfg("mainsail", port, root_dir) create_nginx_cfg("mainsail", port, root_dir)
enable_nginx_cfg("mainsail") create_symlink(source, target, True)
set_nginx_permissions() set_nginx_permissions()
Logger.print_ok("NGINX config for Mainsail successfully created.") Logger.print_ok("NGINX config for Mainsail successfully created.")
except Exception: except Exception:

View File

@@ -38,6 +38,7 @@ from kiauh.modules.moonraker import (
from kiauh.modules.moonraker.moonraker import Moonraker from kiauh.modules.moonraker.moonraker import Moonraker
from kiauh.modules.moonraker.moonraker_dialogs import print_moonraker_overview from kiauh.modules.moonraker.moonraker_dialogs import print_moonraker_overview
from kiauh.modules.moonraker.moonraker_utils import create_example_moonraker_conf from kiauh.modules.moonraker.moonraker_utils import create_example_moonraker_conf
from kiauh.utils.filesystem_utils import check_file_exist
from kiauh.utils.input_utils import ( from kiauh.utils.input_utils import (
get_confirm, get_confirm,
get_selection_input, get_selection_input,
@@ -49,7 +50,6 @@ from kiauh.utils.system_utils import (
install_python_requirements, install_python_requirements,
update_system_package_lists, update_system_package_lists,
install_system_packages, install_system_packages,
check_file_exists,
) )
@@ -181,9 +181,9 @@ def install_moonraker_packages(moonraker_dir: Path) -> None:
def install_moonraker_polkit() -> None: def install_moonraker_polkit() -> None:
Logger.print_status("Installing Moonraker policykit rules ...") Logger.print_status("Installing Moonraker policykit rules ...")
legacy_file_exists = check_file_exists(Path(POLKIT_LEGACY_FILE)) legacy_file_exists = check_file_exist(Path(POLKIT_LEGACY_FILE), True)
polkit_file_exists = check_file_exists(Path(POLKIT_FILE)) polkit_file_exists = check_file_exist(Path(POLKIT_FILE), True)
usr_file_exists = check_file_exists(Path(POLKIT_USR_FILE)) usr_file_exists = check_file_exist(Path(POLKIT_USR_FILE), True)
if legacy_file_exists or (polkit_file_exists and usr_file_exists): if legacy_file_exists or (polkit_file_exists and usr_file_exists):
Logger.print_info("Moonraker policykit rules are already installed.") Logger.print_info("Moonraker policykit rules are already installed.")

View File

@@ -1,5 +1,4 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# ======================================================================= # # ======================================================================= #
# Copyright (C) 2020 - 2023 Dominik Willner <th33xitus@gmail.com> # # Copyright (C) 2020 - 2023 Dominik Willner <th33xitus@gmail.com> #
# # # #
@@ -9,18 +8,144 @@
# 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 os
import shutil
import subprocess import subprocess
from pathlib import Path from pathlib import Path
from zipfile import ZipFile
from kiauh.utils import (
NGINX_SITES_AVAILABLE,
MODULE_PATH,
NGINX_CONFD,
)
from kiauh.utils.logger import Logger from kiauh.utils.logger import Logger
def check_file_exist(file_path: Path, sudo=False) -> bool:
"""
Helper function for checking the existence of a file |
:param file_path: the absolute path of the file to check
:param sudo: use sudo if required
:return: True, if file exists, otherwise False
"""
if sudo:
try:
command = ["sudo", "find", file_path]
subprocess.check_output(command, stderr=subprocess.DEVNULL)
return True
except subprocess.CalledProcessError:
return False
else:
if Path(file_path).exists():
return True
else:
return False
def create_directory(_dir: Path) -> None:
"""
Helper function for creating a directory or skipping if it already exists |
:param _dir: the directory to create
:return: None
"""
try:
if not os.path.isdir(_dir):
os.makedirs(_dir, exist_ok=True)
Logger.print_ok(f"Created directory: {_dir}")
except OSError as e:
Logger.print_error(f"Error creating folder: {e}")
raise
def create_symlink(source: Path, target: Path, sudo=False) -> None:
try:
cmd = ["ln", "-sf", source, target]
if sudo:
cmd.insert(0, "sudo")
subprocess.run(cmd, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
Logger.print_error(f"Failed to create symlink: {e}")
raise
def remove_file(file_path: Path, sudo=False) -> None: def remove_file(file_path: Path, sudo=False) -> None:
try: try:
command = f"{'sudo ' if sudo else ''}rm -f {file_path}" cmd = f"{'sudo ' if sudo else ''}rm -f {file_path}"
subprocess.run(command, stderr=subprocess.PIPE, check=True, shell=True) subprocess.run(cmd, stderr=subprocess.PIPE, check=True, shell=True)
except subprocess.CalledProcessError as e: except subprocess.CalledProcessError as e:
log = f"Cannot remove file {file_path}: {e.stderr.decode()}" log = f"Cannot remove file {file_path}: {e.stderr.decode()}"
Logger.print_error(log) Logger.print_error(log)
raise raise
def unzip(file: str, target_dir: str) -> None:
"""
Helper function to unzip a zip-archive into a target directory |
:param file: the zip-file to unzip
:param target_dir: the target directory to extract the files into
:return: None
"""
with ZipFile(file, "r") as _zip:
_zip.extractall(target_dir)
def copy_upstream_nginx_cfg() -> None:
"""
Creates an upstream.conf in /etc/nginx/conf.d
:return: None
"""
source = os.path.join(MODULE_PATH, "res", "upstreams.conf")
target = os.path.join(NGINX_CONFD, "upstreams.conf")
try:
command = ["sudo", "cp", source, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create upstreams.conf: {e.stderr.decode()}"
Logger.print_error(log)
raise
def copy_common_vars_nginx_cfg() -> None:
"""
Creates a common_vars.conf in /etc/nginx/conf.d
:return: None
"""
source = os.path.join(MODULE_PATH, "res", "common_vars.conf")
target = os.path.join(NGINX_CONFD, "common_vars.conf")
try:
command = ["sudo", "cp", source, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create upstreams.conf: {e.stderr.decode()}"
Logger.print_error(log)
raise
def create_nginx_cfg(name: str, port: int, root_dir: str) -> None:
"""
Creates an NGINX config from a template file and replaces all placeholders
:param name: name of the config to create
:param port: listen port
:param root_dir: directory of the static files
:return: None
"""
tmp = f"{Path.home()}/{name}.tmp"
shutil.copy(os.path.join(MODULE_PATH, "res", "nginx_cfg"), tmp)
with open(tmp, "r+") as f:
content = f.read()
content = content.replace("%NAME%", name)
content = content.replace("%PORT%", str(port))
content = content.replace("%ROOT_DIR%", root_dir)
f.seek(0)
f.write(content)
f.truncate()
target = os.path.join(NGINX_SITES_AVAILABLE, name)
try:
command = ["sudo", "mv", tmp, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create '{target}': {e.stderr.decode()}"
Logger.print_error(log)
raise

View File

@@ -19,14 +19,7 @@ import urllib.error
import urllib.request import urllib.request
from pathlib import Path from pathlib import Path
from typing import List, Literal from typing import List, Literal
from zipfile import ZipFile
from kiauh.utils import (
NGINX_CONFD,
MODULE_PATH,
NGINX_SITES_AVAILABLE,
NGINX_SITES_ENABLED,
)
from kiauh.utils.input_utils import get_confirm from kiauh.utils.input_utils import get_confirm
from kiauh.utils.logger import Logger from kiauh.utils.logger import Logger
@@ -215,21 +208,6 @@ def install_system_packages(packages: List[str]) -> None:
kill(f"Error installing packages:\n{e.stderr.decode()}") kill(f"Error installing packages:\n{e.stderr.decode()}")
def create_directory(_dir: Path) -> None:
"""
Helper function for creating a directory or skipping if it already exists |
:param _dir: the directory to create
:return: None
"""
try:
if not os.path.isdir(_dir):
os.makedirs(_dir, exist_ok=True)
Logger.print_ok(f"Created directory: {_dir}")
except OSError as e:
Logger.print_error(f"Error creating folder: {e}")
raise
def mask_system_service(service_name: str) -> None: def mask_system_service(service_name: str) -> None:
""" """
Mask a system service to prevent it from starting | Mask a system service to prevent it from starting |
@@ -245,21 +223,6 @@ def mask_system_service(service_name: str) -> None:
raise raise
def check_file_exists(file_path: Path) -> bool:
"""
Helper function for checking the existence of a file where
elevated permissions are required |
:param file_path: the absolute path of the file to check
:return: True if file exists, otherwise False
"""
try:
command = ["sudo", "find", file_path]
subprocess.check_output(command, stderr=subprocess.DEVNULL)
return True
except subprocess.CalledProcessError:
return False
# this feels hacky and not quite right, but for now it works # this feels hacky and not quite right, but for now it works
# see: https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib # see: https://stackoverflow.com/questions/166506/finding-local-ip-addresses-using-pythons-stdlib
def get_ipv4_addr() -> str: def get_ipv4_addr() -> str:
@@ -327,116 +290,6 @@ def download_progress(block_num, block_size, total_size) -> None:
sys.stdout.flush() sys.stdout.flush()
def unzip(file: str, target_dir: str) -> None:
"""
Helper function to unzip a zip-archive into a target directory |
:param file: the zip-file to unzip
:param target_dir: the target directory to extract the files into
:return: None
"""
with ZipFile(file, "r") as _zip:
_zip.extractall(target_dir)
def create_upstream_nginx_cfg() -> None:
"""
Creates an upstream.conf in /etc/nginx/conf.d
:return: None
"""
source = os.path.join(MODULE_PATH, "res", "upstreams.conf")
target = os.path.join(NGINX_CONFD, "upstreams.conf")
try:
command = ["sudo", "cp", source, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create upstreams.conf: {e.stderr.decode()}"
Logger.print_error(log)
raise
def create_common_vars_nginx_cfg() -> None:
"""
Creates a common_vars.conf in /etc/nginx/conf.d
:return: None
"""
source = os.path.join(MODULE_PATH, "res", "common_vars.conf")
target = os.path.join(NGINX_CONFD, "common_vars.conf")
try:
command = ["sudo", "cp", source, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create upstreams.conf: {e.stderr.decode()}"
Logger.print_error(log)
raise
def create_nginx_cfg(name: str, port: int, root_dir: str) -> None:
"""
Creates an NGINX config from a template file and replaces all placeholders
:param name: name of the config to create
:param port: listen port
:param root_dir: directory of the static files
:return: None
"""
tmp = f"{Path.home()}/{name}.tmp"
shutil.copy(os.path.join(MODULE_PATH, "res", "nginx_cfg"), tmp)
with open(tmp, "r+") as f:
content = f.read()
content = content.replace("%NAME%", name)
content = content.replace("%PORT%", str(port))
content = content.replace("%ROOT_DIR%", root_dir)
f.seek(0)
f.write(content)
f.truncate()
target = os.path.join(NGINX_SITES_AVAILABLE, name)
try:
command = ["sudo", "mv", tmp, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create '{target}': {e.stderr.decode()}"
Logger.print_error(log)
raise
def delete_default_nginx_cfg() -> None:
"""
Deletes a default NGINX config
:return: None
"""
default_cfg = Path("/etc/nginx/sites-enabled/default")
if not check_file_exists(default_cfg):
return
try:
command = ["sudo", "rm", default_cfg]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to delete '{default_cfg}': {e.stderr.decode()}"
Logger.print_error(log)
raise
def enable_nginx_cfg(name: str) -> None:
"""
Helper method to enable an NGINX config |
:param name: name of the config to enable
:return: None
"""
source = os.path.join(NGINX_SITES_AVAILABLE, name)
target = os.path.join(NGINX_SITES_ENABLED, name)
if check_file_exists(Path(target)):
return
try:
command = ["sudo", "ln", "-s", source, target]
subprocess.run(command, stderr=subprocess.PIPE, check=True)
except subprocess.CalledProcessError as e:
log = f"Unable to create symlink: {e.stderr.decode()}"
Logger.print_error(log)
raise
def set_nginx_permissions() -> None: def set_nginx_permissions() -> None:
""" """
Check if permissions of the users home directory Check if permissions of the users home directory