From 84b85b3552da9a79df2c35f218d5f0f4b0b19a97 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 1 Jun 2024 14:03:16 +0200 Subject: [PATCH 01/17] feat: add spoolman to install menu --- scripts/ui/install_menu.sh | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/scripts/ui/install_menu.sh b/scripts/ui/install_menu.sh index 8ed0410..0a28cb9 100755 --- a/scripts/ui/install_menu.sh +++ b/scripts/ui/install_menu.sh @@ -20,18 +20,18 @@ function install_ui() { echo -e "| functions on a completely fresh system. |" hr echo -e "| Firmware & API: | 3rd Party Webinterface: |" - echo -e "| 1) [Klipper] | 6) [OctoPrint] |" + echo -e "| 1) [Klipper] | 7) [OctoPrint] |" echo -e "| 2) [Moonraker] | |" echo -e "| | Other: |" - echo -e "| Klipper Webinterface: | 7) [PrettyGCode] |" - echo -e "| 3) [Mainsail] | 8) [Telegram Bot] |" - echo -e "| 4) [Fluidd] | 9) $(obico_install_title) |" - echo -e "| | 10) [OctoEverywhere] |" - echo -e "| | 11) [Mobileraker] |" - echo -e "| Touchscreen GUI: | 12) [OctoApp for Klipper] |" - echo -e "| 5) [KlipperScreen] | |" - echo -e "| | Webcam Streamer: |" - echo -e "| | 13) [Crowsnest] |" + echo -e "| Klipper Webinterface: | 8) [PrettyGCode] |" + echo -e "| 3) [Mainsail] | 9) [Telegram Bot] |" + echo -e "| 4) [Fluidd] | 10) $(obico_install_title) |" + echo -e "| | 11) [OctoEverywhere] |" + echo -e "| Touchscreen GUI: | 12) [Mobileraker] |" + echo -e "| 5) [KlipperScreen] | 13) [OctoApp for Klipper] |" + echo -e "| | |" + echo -e "| Spool Manager: | Webcam Streamer: |" + echo -e "| 6) [Spoolman] | 14) [Crowsnest] |" back_footer } @@ -61,20 +61,22 @@ function install_menu() { 5) do_action "install_klipperscreen" "install_ui";; 6) - do_action "octoprint_setup_dialog" "install_ui";; + do_action "install_spoolman" "install_ui";; 7) - do_action "install_pgc_for_klipper" "install_ui";; + do_action "octoprint_setup_dialog" "install_ui";; 8) - do_action "telegram_bot_setup_dialog" "install_ui";; + do_action "install_pgc_for_klipper" "install_ui";; 9) - do_action "moonraker_obico_setup_dialog" "install_ui";; + do_action "telegram_bot_setup_dialog" "install_ui";; 10) - do_action "octoeverywhere_setup_dialog" "install_ui";; + do_action "moonraker_obico_setup_dialog" "install_ui";; 11) - do_action "install_mobileraker" "install_ui";; + do_action "octoeverywhere_setup_dialog" "install_ui";; 12) - do_action "octoapp_setup_dialog" "install_ui";; + do_action "install_mobileraker" "install_ui";; 13) + do_action "octoapp_setup_dialog" "install_ui";; + 14) do_action "install_crowsnest" "install_ui";; B|b) clear; main_menu; break;; From dac1db05720f66c0ba86a5d5326a7b749f833e24 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 11:01:41 +0200 Subject: [PATCH 02/17] feat(globals): add spoolman related globals --- scripts/globals.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/globals.sh b/scripts/globals.sh index 9504911..c499b89 100644 --- a/scripts/globals.sh +++ b/scripts/globals.sh @@ -87,4 +87,8 @@ function set_globals() { OCTOAPP_ENV="${HOME}/octoapp-env" OCTOAPP_DIR="${HOME}/octoapp" OCTOAPP_REPO="https://github.com/crysxd/OctoApp-Plugin.git" + + #=============== Spoolman ================# + SPOOLMAN_DIR="${HOME}/spoolman" + SPOOLMAN_REPO="https://api.github.com/repos/Donkie/Spoolman/releases/latest" } From 333cc5e9bfd7bae000af2af624fcb4e735ecfba8 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 11:03:19 +0200 Subject: [PATCH 03/17] feat(spoolman): add installation script --- scripts/spoolman.sh | 185 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 scripts/spoolman.sh diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh new file mode 100644 index 0000000..1bf17d4 --- /dev/null +++ b/scripts/spoolman.sh @@ -0,0 +1,185 @@ +#!/usr/bin/env bash + +#=======================================================================# +# Copyright (C) 2020 - 2024 Dominik Willner # +# # +# 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 # +#=======================================================================# + +# Error Handling +set -e + +function install_spoolman() { + + pushd "${HOME}" &> /dev/null || exit 1 + + dependency_check curl jq + + if [[ ! -d "${SPOOLMAN_DIR}" && -z "$(ls -A "${SPOOLMAN_DIR}" 2> /dev/null)" ]]; then + status_msg "Downloading spoolman..." + setup_spoolman_folder + status_msg "Downloading complete" + start_install_script + advanced_config_prompt + else + ### In case spoolman is "incomplete" rerun install script + if get_spoolman_status | grep -q "Incomplete!"; then + start_install_script + exit 1 + fi + + ok_msg "Spoolman already installed" + exit 1 + fi + + enable_moonraker_integration_prompt + patch_spoolman_update_manager +} +function update_moonraker_configs() { + local patched moonraker_configs regex env_port + regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf" + moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort) + + patched="false" + for conf in ${moonraker_configs}; do + if ! grep -Eq "^\[update_manager KlipperScreen\]\s*$" "${conf}"; then + ### add new line to conf if it doesn't end with one + [[ $(tail -c1 "${conf}" | wc -l) -eq 0 ]] && echo "" >> "${conf}" + /bin/sh -c "cat >> ${conf}" << MOONRAKER_CONF +${1} +MOONRAKER_CONF + fi + + patched="true" + done + + if [[ ${patched} == "true" ]]; then + do_action_service "restart" "moonraker" + fi +} + +function enable_moonraker_integration() { + local integration_str env_port + # get spoolman port from .env + env_port=$(grep "^SPOOLMAN_PORT=" "${SPOOLMAN_DIR}/.env" | cut -d"=" -f2) + + integration_str=" +[spoolman] +server: http://$(hostname -I | cut -d" " -f1):${env_port} +" + + status_msg "Adding Spoolman integration..." + update_moonraker_configs "${integration_str}" +} + +function patch_spoolman_update_manager() { + local updater_str + updater_str=" +[update_manager Spoolman] +type: zip +channel: stable +repo: Donkie/Spoolman +path: ${SPOOLMAN_DIR} +virtualenv: .venv +requirements: requirements.txt +persistent_files: + .venv + .env +managed_services: Spoolman +" + + update_moonraker_configs "${updater_str}" +} + +function advanced_config_prompt() { + local reply + while true; do + read -erp "${cyan}###### Continue with default configuration? (Y/n):${white} " reply + case "${reply}" in + Y|y|Yes|yes|"") + select_msg "Yes" + break;; + N|n|No|no) + select_msg "No" + advanced_config + break;; + *) + error_msg "Invalid Input!\n";; + esac + done + return 0 +} + +function enable_moonraker_integration_prompt() { + local reply + while true; do + read -erp "${cyan}###### Enable Moonraker integration? (Y/n):${white} " reply + case "${reply}" in + Y|y|Yes|yes|"") + select_msg "Yes" + enable_moonraker_integration + break;; + N|n|No|no) + select_msg "No" + break;; + *) + error_msg "Invalid Input!\n";; + esac + done + return 0 +} + +function advanced_config() { + status_msg "###### Advanced configuration" + + local reply + while true; do + read -erp "${cyan}###### Select spoolman port (7912):${white} " reply + ### set default + if [[ -z "${reply}" ]]; then + reply="7912" + fi + + select_msg "${reply}" + ### check if port is valid + if ! [[ "${reply}" =~ ^[0-9]+$ && "${reply}" -ge 1024 && "${reply}" -le 65535 ]]; then + error_msg "Invalid port number!\n" + continue + fi + + ### update .env + sed -i "s/^SPOOLMAN_PORT=.*$/SPOOLMAN_PORT=${reply}/" "${SPOOLMAN_DIR}/.env" + do_action_service "restart" "Spoolman" + break + done + return 0 +} + +function setup_spoolman_folder() { + local source_url + ### get latest spoolman release url + source_url="$(curl -s "${SPOOLMAN_REPO}" | jq -r '.assets[] | select(.name == "spoolman.zip").browser_download_url')" + + mkdir -p "${SPOOLMAN_DIR}" + curl -sSL "${source_url}" -o /tmp/temp.zip + unzip /tmp/temp.zip -d "${SPOOLMAN_DIR}" &> /dev/null + rm /tmp/temp.zip + + chmod +x "${SPOOLMAN_DIR}"/scripts/install.sh +} + +function start_install_script() { + + pushd "${SPOOLMAN_DIR}" &> /dev/null || exit 1 + + if bash ./scripts/install.sh; then + ok_msg "Spoolman successfully installed!" + else + print_error "Spoolman installation failed!" + exit 1 + fi +} + From 1a74fef31450af6f9896044866fa368a31d1e71d Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 11:03:53 +0200 Subject: [PATCH 04/17] feat(spoolman): add installation status --- scripts/spoolman.sh | 22 ++++++++++++++++++++++ scripts/ui/main_menu.sh | 1 + 2 files changed, 23 insertions(+) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 1bf17d4..e60411d 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -183,3 +183,25 @@ function start_install_script() { fi } +function get_spoolman_status() { + local -a files + files=( + "${SPOOLMAN_DIR}" + "${SYSTEMD}/Spoolman.service" + ) + + local count + count=0 + + for file in "${files[@]}"; do + [[ -e "${file}" ]] && count=$(( count +1 )) + done + + if [[ "${count}" -eq "${#files[*]}" ]]; then + echo "Installed" + elif [[ "${count}" -gt 0 ]]; then + echo "Incomplete!" + else + echo "Not installed!" + fi +} diff --git a/scripts/ui/main_menu.sh b/scripts/ui/main_menu.sh index f950f27..011a9ae 100755 --- a/scripts/ui/main_menu.sh +++ b/scripts/ui/main_menu.sh @@ -29,6 +29,7 @@ function main_ui() { echo -e "| | OctoEverywhere: $(print_status "octoeverywhere")|" echo -e "| | Mobileraker: $(print_status "mobileraker")|" echo -e "| | OctoApp: $(print_status "octoapp")|" + echo -e "| | Spoolman: $(print_status "spoolman")|" echo -e "| | |" echo -e "| | Octoprint: $(print_status "octoprint")|" hr From 6a4433d66ba948d0c90c43773dfc74a2765b6b2e Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 11:05:18 +0200 Subject: [PATCH 05/17] feat(spoolman): add update menu entry and update script --- scripts/spoolman.sh | 46 +++++++++++++++++++++++++++++++++++++++ scripts/ui/update_menu.sh | 44 ++++++++++++++++++++++--------------- 2 files changed, 72 insertions(+), 18 deletions(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index e60411d..8792735 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -38,6 +38,22 @@ function install_spoolman() { enable_moonraker_integration_prompt patch_spoolman_update_manager } + +function update_spoolman() { + ### stop and disable old spoolman service + do_action_service "stop" "Spoolman" + do_action_service "disable" "Spoolman" + + mv "${SPOOLMAN_DIR}" "${SPOOLMAN_DIR}_old" + + setup_spoolman_folder + cp "${SPOOLMAN_DIR}_old/.env" "${SPOOLMAN_DIR}/.env" + + start_install_script + + rm -rf "${SPOOLMAN_DIR}_old" +} + function update_moonraker_configs() { local patched moonraker_configs regex env_port regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf" @@ -205,3 +221,33 @@ function get_spoolman_status() { echo "Not installed!" fi } + +function get_local_spoolman_version() { + local version + version=$(jq -r '.version' "${SPOOLMAN_DIR}"/release_info.json) + echo "${version}" +} + +function get_remote_spoolman_version() { + local version + version=$(curl -s "${SPOOLMAN_REPO}" | jq -r '.tag_name') + echo "${version}" +} + +function compare_spoolman_versions() { + local local_ver remote_ver + local_ver="$(get_local_spoolman_version)" + remote_ver="$(get_remote_spoolman_version)" + + if [[ ${local_ver} != "${remote_ver}" ]]; then + versions="${yellow}$(printf " %-14s" "${local_ver}")${white}" + versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}" + # add spoolman to application_updates_available in kiauh.ini + add_to_application_updates "spoolman" + else + versions="${green}$(printf " %-14s" "${local_ver}")${white}" + versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}" + fi + + echo "${versions}" +} diff --git a/scripts/ui/update_menu.sh b/scripts/ui/update_menu.sh index 26a3f11..a7cdb44 100755 --- a/scripts/ui/update_menu.sh +++ b/scripts/ui/update_menu.sh @@ -28,23 +28,26 @@ function update_ui() { echo -e "| Touchscreen GUI: |---------------|--------------|" echo -e "| 5) [KlipperScreen] |$(compare_klipperscreen_versions)|" echo -e "| | | |" + echo -e "| Spool Manager: |---------------|--------------|" + echo -e "| 6) [Spoolman] |$(compare_spoolman_versions)|" + echo -e "| | | |" echo -e "| Other: |---------------|--------------|" - echo -e "| 6) [PrettyGCode] |$(compare_prettygcode_versions)|" - echo -e "| 7) [Telegram Bot] |$(compare_telegram_bot_versions)|" - echo -e "| 8) [Obico for Klipper]|$(compare_moonraker_obico_versions)|" - echo -e "| 9) [OctoEverywhere] |$(compare_octoeverywhere_versions)|" - echo -e "| 10) [Mobileraker] |$(compare_mobileraker_versions)|" - echo -e "| 11) [Crowsnest] |$(compare_crowsnest_versions)|" - echo -e "| 12) [OctoApp] |$(compare_octoapp_versions)|" + echo -e "| 7) [PrettyGCode] |$(compare_prettygcode_versions)|" + echo -e "| 8) [Telegram Bot] |$(compare_telegram_bot_versions)|" + echo -e "| 9) [Obico for Klipper]|$(compare_moonraker_obico_versions)|" + echo -e "| 10) [OctoEverywhere] |$(compare_octoeverywhere_versions)|" + echo -e "| 11) [Mobileraker] |$(compare_mobileraker_versions)|" + echo -e "| 12) [Crowsnest] |$(compare_crowsnest_versions)|" + echo -e "| 13) [OctoApp] |$(compare_octoapp_versions)|" echo -e "| |------------------------------|" - echo -e "| 13) [System] | $(check_system_updates) |" + echo -e "| 14) [System] | $(check_system_updates) |" back_footer } function update_menu() { clear -x && sudo true && clear -x # (re)cache sudo credentials so password prompt doesn't bork ui do_action "" "update_ui" - + local action while true; do read -p "${cyan}####### Perform action:${white} " action @@ -62,20 +65,22 @@ function update_menu() { 5) do_action "update_klipperscreen" "update_ui";; 6) - do_action "update_pgc_for_klipper" "update_ui";; + do_action "update_spoolman" "update_ui";; 7) - do_action "update_telegram_bot" "update_ui";; + do_action "update_pgc_for_klipper" "update_ui";; 8) - do_action "update_moonraker_obico" "update_ui";; + do_action "update_telegram_bot" "update_ui";; 9) - do_action "update_octoeverywhere" "update_ui";; + do_action "update_moonraker_obico" "update_ui";; 10) - do_action "update_mobileraker" "update_ui";; + do_action "update_octoeverywhere" "update_ui";; 11) - do_action "update_crowsnest" "update_ui";; + do_action "update_mobileraker" "update_ui";; 12) - do_action "update_octoapp" "update_ui";; + do_action "update_crowsnest" "update_ui";; 13) + do_action "update_octoapp" "update_ui";; + 14) do_action "upgrade_system_packages" "update_ui";; a) do_action "update_all" "update_ui";; @@ -101,7 +106,7 @@ function update_all() { print_confirm "Everything is already up-to-date!" echo; break fi - + echo top_border echo -e "| The following installations will be updated: |" @@ -121,6 +126,9 @@ function update_all() { [[ "${update_arr[*]}" =~ "klipperscreen" ]] && \ echo -e "| ${cyan}● KlipperScreen${white} |" + [[ "${update_arr[*]}" =~ "spoolman" ]] && \ + echo -e "| ${cyan}● SpoolMan${white} |" + [[ "${update_arr[*]}" =~ "pgc_for_klipper" ]] && \ echo -e "| ${cyan}● PrettyGCode for Klipper${white} |" @@ -140,7 +148,7 @@ function update_all() { echo -e "| ${cyan}● System${white} |" bottom_border - + local yn read -p "${cyan}###### Do you want to proceed? (Y/n):${white} " yn case "${yn}" in From f37e55b82a770935398a5e5b00e6d740970e076f Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 11:05:44 +0200 Subject: [PATCH 06/17] feat(spoolman): add remove menu entry and remove script --- scripts/spoolman.sh | 16 ++++++++++++++++ scripts/ui/remove_menu.sh | 40 ++++++++++++++++++++------------------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 8792735..fb41afe 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -54,6 +54,22 @@ function update_spoolman() { rm -rf "${SPOOLMAN_DIR}_old" } +function remove_spoolman(){ + if [[ -d "${SPOOLMAN_DIR}" ]]; then + status_msg "Removing spoolman service..." + do_action_service "stop" "Spoolman" + do_action_service "disable" "Spoolman" + sudo rm -f "${SYSTEMD}/Spoolman.service" + ok_msg "Spoolman service removed!" + + status_msg "Removing spoolman directory..." + rm -rf "${SPOOLMAN_DIR}" + ok_msg "Spoolman directory removed!" + fi + + print_confirm "Spoolman successfully removed!" +} + function update_moonraker_configs() { local patched moonraker_configs regex env_port regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf" diff --git a/scripts/ui/remove_menu.sh b/scripts/ui/remove_menu.sh index f9824b1..0b219d5 100755 --- a/scripts/ui/remove_menu.sh +++ b/scripts/ui/remove_menu.sh @@ -18,20 +18,20 @@ function remove_ui() { echo -e "| ${yellow}INFO: Configurations and/or any backups will be kept!${white} |" hr echo -e "| Firmware & API: | 3rd Party Webinterface: |" - echo -e "| 1) [Klipper] | 8) [OctoPrint] |" + echo -e "| 1) [Klipper] | 9) [OctoPrint] |" echo -e "| 2) [Moonraker] | |" echo -e "| | Webcam Streamer: |" - echo -e "| Klipper Webinterface: | 9) [Crowsnest] |" - echo -e "| 3) [Mainsail] | 10) [MJPG-Streamer] |" + echo -e "| Klipper Webinterface: | 10) [Crowsnest] |" + echo -e "| 3) [Mainsail] | 11) [MJPG-Streamer] |" echo -e "| 4) [Mainsail-Config] | |" echo -e "| 5) [Fluidd] | Other: |" - echo -e "| 6) [Fluidd-Config] | 11) [PrettyGCode] |" - echo -e "| | 12) [Telegram Bot] |" - echo -e "| Touchscreen GUI: | 13) [Obico for Klipper] |" - echo -e "| 7) [KlipperScreen] | 14) [OctoEverywhere] |" - echo -e "| | 15) [Mobileraker] |" - echo -e "| | 16) [NGINX] |" - echo -e "| | 17) [OctoApp] |" + echo -e "| 6) [Fluidd-Config] | 12) [PrettyGCode] |" + echo -e "| | 13) [Telegram Bot] |" + echo -e "| Touchscreen GUI: | 14) [Obico for Klipper] |" + echo -e "| 7) [KlipperScreen] | 15) [OctoEverywhere] |" + echo -e "| | 16) [Mobileraker] |" + echo -e "| Spool Manager: | 17) [NGINX] |" + echo -e "| 8) [Spoolman] | 18) [OctoApp] |" back_footer } @@ -57,24 +57,26 @@ function remove_menu() { 7) do_action "remove_klipperscreen" "remove_ui";; 8) - do_action "remove_octoprint" "remove_ui";; + do_action "remove_spoolman" "remove_ui";; 9) - do_action "remove_crowsnest" "remove_ui";; + do_action "remove_octoprint" "remove_ui";; 10) - do_action "remove_mjpg-streamer" "remove_ui";; + do_action "remove_crowsnest" "remove_ui";; 11) - do_action "remove_prettygcode" "remove_ui";; + do_action "remove_mjpg-streamer" "remove_ui";; 12) - do_action "remove_telegram_bot" "remove_ui";; + do_action "remove_prettygcode" "remove_ui";; 13) - do_action "remove_moonraker_obico" "remove_ui";; + do_action "remove_telegram_bot" "remove_ui";; 14) - do_action "remove_octoeverywhere" "remove_ui";; + do_action "remove_moonraker_obico" "remove_ui";; 15) - do_action "remove_mobileraker" "remove_ui";; + do_action "remove_octoeverywhere" "remove_ui";; 16) - do_action "remove_nginx" "remove_ui";; + do_action "remove_mobileraker" "remove_ui";; 17) + do_action "remove_nginx" "remove_ui";; + 18) do_action "remove_octoapp" "remove_ui";; B|b) clear; main_menu; break;; From e26566b99bec1238d8375707a80f8be19ace62b9 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:14:05 +0200 Subject: [PATCH 07/17] refact(spoolman): remove unused variable --- scripts/spoolman.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index fb41afe..270179d 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -71,7 +71,7 @@ function remove_spoolman(){ } function update_moonraker_configs() { - local patched moonraker_configs regex env_port + local moonraker_configs regex regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf" moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort) From e07d7c19aef762790d6749bf875178a52995b8c6 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:16:56 +0200 Subject: [PATCH 08/17] refact(spoolman): move moonraker service restart to install script --- scripts/spoolman.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 270179d..0955219 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -37,6 +37,8 @@ function install_spoolman() { enable_moonraker_integration_prompt patch_spoolman_update_manager + + do_action_service "restart" "moonraker" } function update_spoolman() { @@ -75,7 +77,6 @@ function update_moonraker_configs() { regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf" moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort) - patched="false" for conf in ${moonraker_configs}; do if ! grep -Eq "^\[update_manager KlipperScreen\]\s*$" "${conf}"; then ### add new line to conf if it doesn't end with one @@ -84,13 +85,7 @@ function update_moonraker_configs() { ${1} MOONRAKER_CONF fi - - patched="true" done - - if [[ ${patched} == "true" ]]; then - do_action_service "restart" "moonraker" - fi } function enable_moonraker_integration() { From 229bab5d9ae893b99beec4bdfed2941630371aa0 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:17:55 +0200 Subject: [PATCH 09/17] fix(spoolman): add db dir to remove script --- scripts/spoolman.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 0955219..7b1cc5c 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -69,6 +69,12 @@ function remove_spoolman(){ ok_msg "Spoolman directory removed!" fi + if [[ -d "${HOME}/.local/share/spoolman" ]]; then + status_msg "Removing spoolman db..." + rm -rf "${HOME}/.local/share/spoolman" + ok_msg "Spoolman db removed!" + fi + print_confirm "Spoolman successfully removed!" } From fd33e997560330962f9ceaeb2c0fc4615797beff Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:18:35 +0200 Subject: [PATCH 10/17] fix(spoolman): add db dir check to status script --- scripts/spoolman.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 7b1cc5c..0b3b36e 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -221,6 +221,7 @@ function get_spoolman_status() { files=( "${SPOOLMAN_DIR}" "${SYSTEMD}/Spoolman.service" + "${HOME}/.local/share/spoolman" ) local count From c82eb554a6e43705008dd1c7968a87e89b8e3ec7 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:19:48 +0200 Subject: [PATCH 11/17] fix(spoolman): add spoolman service to moonraker.asvc file --- scripts/spoolman.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 0b3b36e..1fabfc6 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -125,6 +125,16 @@ managed_services: Spoolman " update_moonraker_configs "${updater_str}" + + # add spoolman service to moonraker.asvc + local moonraker_asvc regex + regex="${HOME//\//\\/}\/([A-Za-z0-9_]+)\/moonraker\.asvc" + moonraker_asvc=$(find "${HOME}" -maxdepth 2 -type f -regextype posix-extended -regex "${regex}" | sort) + + if [[ -n ${moonraker_asvc} ]]; then + status_msg "Adding Spoolman service to moonraker.asvc..." + /bin/sh -c "echo 'Spoolman' >> ${moonraker_asvc}" + fi } function advanced_config_prompt() { From 2dd2fa17e49288ed35507e1494dde0f1d014a03f Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:30:35 +0200 Subject: [PATCH 12/17] refact(spoolman): add global for db dir --- scripts/globals.sh | 1 + scripts/spoolman.sh | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/globals.sh b/scripts/globals.sh index c499b89..991cec7 100644 --- a/scripts/globals.sh +++ b/scripts/globals.sh @@ -90,5 +90,6 @@ function set_globals() { #=============== Spoolman ================# SPOOLMAN_DIR="${HOME}/spoolman" + SPOOLMAN_DB_DIR="${HOME}/.local/share/spoolman" SPOOLMAN_REPO="https://api.github.com/repos/Donkie/Spoolman/releases/latest" } diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 1fabfc6..e6ac8d4 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -69,9 +69,9 @@ function remove_spoolman(){ ok_msg "Spoolman directory removed!" fi - if [[ -d "${HOME}/.local/share/spoolman" ]]; then + if [[ -d "${SPOOLMAN_DB_DIR}" ]]; then status_msg "Removing spoolman db..." - rm -rf "${HOME}/.local/share/spoolman" + rm -rf "${SPOOLMAN_DB_DIR}" ok_msg "Spoolman db removed!" fi @@ -231,7 +231,7 @@ function get_spoolman_status() { files=( "${SPOOLMAN_DIR}" "${SYSTEMD}/Spoolman.service" - "${HOME}/.local/share/spoolman" + "${SPOOLMAN_DB_DIR}" ) local count From 24b106c31890bac1e79d9ede47ffad44fd387768 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sat, 8 Jun 2024 13:46:39 +0200 Subject: [PATCH 13/17] feat(backup): add spoolman script --- scripts/backup.sh | 20 ++++++++++++++++++-- scripts/ui/backup_menu.sh | 19 ++++++++++++------- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 091d99f..1716963 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -45,13 +45,13 @@ function backup_config_dir() { for folder in ${config_pathes}; do if [[ -d ${folder} ]]; then status_msg "Create backup of ${folder} ..." - + folder_name=$(echo "${folder}" | rev | cut -d"/" -f2 | rev) target_dir="${BACKUP_DIR}/configs/${current_date}/${folder_name}" mkdir -p "${target_dir}" cp -r "${folder}" "${target_dir}" i=$(( i + 1 )) - + ok_msg "Backup created in:\n${target_dir}" fi done @@ -213,3 +213,19 @@ function backup_octoeverywhere() { print_error "Can't back up OctoEverywhere directory!\n Not found!" fi } + +function backup_spoolman() { + local current_date + + if [[ -d ${SPOOLMAN_DIR} ]] ; then + status_msg "Creating Spoolman backup ..." + check_for_backup_dir + current_date=$(get_date) + status_msg "Timestamp: ${current_date}" + mkdir -p "${BACKUP_DIR}/Spoolman-backups/${current_date}" + cp -r "${SPOOLMAN_DIR}" "${_}" && cp -r "${SPOOLMAN_DB_DIR}/spoolman.db" "${_}" + print_confirm "Spoolman backup complete!" + else + print_error "Can't back up Spoolman directory!\n Not found!" + fi +} diff --git a/scripts/ui/backup_menu.sh b/scripts/ui/backup_menu.sh index c56ed02..e1bbacf 100755 --- a/scripts/ui/backup_menu.sh +++ b/scripts/ui/backup_menu.sh @@ -17,15 +17,18 @@ function backup_ui() { hr echo -e "| ${yellow}INFO: Backups are located in '~/kiauh-backups'${white} |" hr - echo -e "| Klipper & API: | Touchscreen GUI: |" - echo -e "| 1) [Klipper] | 7) [KlipperScreen] |" + echo -e "| Klipper & API: | Spool Manager: |" + echo -e "| 1) [Klipper] | 8) [Spoolman] |" echo -e "| 2) [Moonraker] | |" echo -e "| 3) [Config Folder] | 3rd Party Webinterface: |" - echo -e "| 4) [Moonraker Database] | 8) [OctoPrint] |" + echo -e "| 4) [Moonraker Database] | 9) [OctoPrint] |" echo -e "| | |" echo -e "| Klipper Webinterface: | Other: |" - echo -e "| 5) [Mainsail] | 9) [Telegram Bot] |" - echo -e "| 6) [Fluidd] | 10) [OctoEverywhere] |" + echo -e "| 5) [Mainsail] | 10) [Telegram Bot] |" + echo -e "| 6) [Fluidd] | 11) [OctoEverywhere] |" + echo -e "| | |" + echo -e "| Touchscreen GUI: | |" + echo -e "| 7) [KlipperScreen] | |" back_footer } @@ -51,10 +54,12 @@ function backup_menu() { 7) do_action "backup_klipperscreen" "backup_ui";; 8) - do_action "backup_octoprint" "backup_ui";; + do_action "backup_spoolman" "backup_ui";; 9) - do_action "backup_telegram_bot" "backup_ui";; + do_action "backup_octoprint" "backup_ui";; 10) + do_action "backup_telegram_bot" "backup_ui";; + 11) do_action "backup_octoeverywhere" "backup_ui";; B|b) clear; main_menu; break;; From 0350d77ec03f9ab82356009c63842c9255b1c46d Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sun, 23 Jun 2024 17:53:44 +0200 Subject: [PATCH 14/17] fix(spoolman): typo --- scripts/spoolman.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index e6ac8d4..70a45b4 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -84,7 +84,7 @@ function update_moonraker_configs() { moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort) for conf in ${moonraker_configs}; do - if ! grep -Eq "^\[update_manager KlipperScreen\]\s*$" "${conf}"; then + if ! grep -Eq "^\[update_manager Spoolman\]\s*$" "${conf}"; then ### add new line to conf if it doesn't end with one [[ $(tail -c1 "${conf}" | wc -l) -eq 0 ]] && echo "" >> "${conf}" /bin/sh -c "cat >> ${conf}" << MOONRAKER_CONF From 1cee4ef13ba0b033c1083c9d57351d9a1dfbb569 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sun, 23 Jun 2024 17:55:52 +0200 Subject: [PATCH 15/17] fix(spoolman): keep spoolman db on remove --- scripts/spoolman.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 70a45b4..62ebca3 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -69,12 +69,6 @@ function remove_spoolman(){ ok_msg "Spoolman directory removed!" fi - if [[ -d "${SPOOLMAN_DB_DIR}" ]]; then - status_msg "Removing spoolman db..." - rm -rf "${SPOOLMAN_DB_DIR}" - ok_msg "Spoolman db removed!" - fi - print_confirm "Spoolman successfully removed!" } From 336f557048ac1f53207935b72913e4160155dfe2 Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sun, 23 Jun 2024 17:59:50 +0200 Subject: [PATCH 16/17] fix(spoolman): systemd reload and reset failed units --- scripts/spoolman.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/spoolman.sh b/scripts/spoolman.sh index 62ebca3..dabae09 100644 --- a/scripts/spoolman.sh +++ b/scripts/spoolman.sh @@ -62,6 +62,8 @@ function remove_spoolman(){ do_action_service "stop" "Spoolman" do_action_service "disable" "Spoolman" sudo rm -f "${SYSTEMD}/Spoolman.service" + sudo systemctl daemon-reload + sudo systemctl reset-failed ok_msg "Spoolman service removed!" status_msg "Removing spoolman directory..." From 8204c1bc05e7c9aac443e67f716e42ef220c018f Mon Sep 17 00:00:00 2001 From: Alessandro Maggi Date: Sun, 23 Jun 2024 18:22:52 +0200 Subject: [PATCH 17/17] refact(menu): moved spoolman option under "other" --- scripts/ui/backup_menu.sh | 22 ++++++++-------- scripts/ui/install_menu.sh | 42 +++++++++++++++--------------- scripts/ui/remove_menu.sh | 52 +++++++++++++++++++------------------- scripts/ui/update_menu.sh | 34 ++++++++++++------------- 4 files changed, 73 insertions(+), 77 deletions(-) diff --git a/scripts/ui/backup_menu.sh b/scripts/ui/backup_menu.sh index e1bbacf..783476c 100755 --- a/scripts/ui/backup_menu.sh +++ b/scripts/ui/backup_menu.sh @@ -17,18 +17,16 @@ function backup_ui() { hr echo -e "| ${yellow}INFO: Backups are located in '~/kiauh-backups'${white} |" hr - echo -e "| Klipper & API: | Spool Manager: |" - echo -e "| 1) [Klipper] | 8) [Spoolman] |" + echo -e "| Klipper & API: | Touchscreen GUI: |" + echo -e "| 1) [Klipper] | 7) [KlipperScreen] |" echo -e "| 2) [Moonraker] | |" echo -e "| 3) [Config Folder] | 3rd Party Webinterface: |" - echo -e "| 4) [Moonraker Database] | 9) [OctoPrint] |" + echo -e "| 4) [Moonraker Database] | 8) [OctoPrint] |" echo -e "| | |" echo -e "| Klipper Webinterface: | Other: |" - echo -e "| 5) [Mainsail] | 10) [Telegram Bot] |" - echo -e "| 6) [Fluidd] | 11) [OctoEverywhere] |" - echo -e "| | |" - echo -e "| Touchscreen GUI: | |" - echo -e "| 7) [KlipperScreen] | |" + echo -e "| 5) [Mainsail] | 9) [Telegram Bot] |" + echo -e "| 6) [Fluidd] | 10) [OctoEverywhere] |" + echo -e "| | 11) [Spoolman] |" back_footer } @@ -54,13 +52,13 @@ function backup_menu() { 7) do_action "backup_klipperscreen" "backup_ui";; 8) - do_action "backup_spoolman" "backup_ui";; - 9) do_action "backup_octoprint" "backup_ui";; - 10) + 9) do_action "backup_telegram_bot" "backup_ui";; - 11) + 10) do_action "backup_octoeverywhere" "backup_ui";; + 11) + do_action "backup_spoolman" "backup_ui";; B|b) clear; main_menu; break;; *) diff --git a/scripts/ui/install_menu.sh b/scripts/ui/install_menu.sh index 0a28cb9..3501e0a 100755 --- a/scripts/ui/install_menu.sh +++ b/scripts/ui/install_menu.sh @@ -19,19 +19,19 @@ function install_ui() { echo -e "| all necessary dependencies for the various |" echo -e "| functions on a completely fresh system. |" hr - echo -e "| Firmware & API: | 3rd Party Webinterface: |" - echo -e "| 1) [Klipper] | 7) [OctoPrint] |" - echo -e "| 2) [Moonraker] | |" - echo -e "| | Other: |" - echo -e "| Klipper Webinterface: | 8) [PrettyGCode] |" - echo -e "| 3) [Mainsail] | 9) [Telegram Bot] |" - echo -e "| 4) [Fluidd] | 10) $(obico_install_title) |" - echo -e "| | 11) [OctoEverywhere] |" - echo -e "| Touchscreen GUI: | 12) [Mobileraker] |" - echo -e "| 5) [KlipperScreen] | 13) [OctoApp for Klipper] |" - echo -e "| | |" - echo -e "| Spool Manager: | Webcam Streamer: |" - echo -e "| 6) [Spoolman] | 14) [Crowsnest] |" + echo -e "| Firmware & API: | Other: |" + echo -e "| 1) [Klipper] | 7) [PrettyGCode] |" + echo -e "| 2) [Moonraker] | 8) [Telegram Bot] |" + echo -e "| | 9) $(obico_install_title) |" + echo -e "| Klipper Webinterface: | 10) [OctoEverywhere] |" + echo -e "| 3) [Mainsail] | 11) [Mobileraker] |" + echo -e "| 4) [Fluidd] | 12) [OctoApp for Klipper] |" + echo -e "| | 13) [Spoolman] |" + echo -e "| Touchscreen GUI: | |" + echo -e "| 5) [KlipperScreen] | Webcam Streamer: |" + echo -e "| | 14) [Crowsnest] |" + echo -e "| 3rd Party Webinterface: | |" + echo -e "| 6) [OctoPrint] | |" back_footer } @@ -61,21 +61,21 @@ function install_menu() { 5) do_action "install_klipperscreen" "install_ui";; 6) - do_action "install_spoolman" "install_ui";; - 7) do_action "octoprint_setup_dialog" "install_ui";; - 8) + 7) do_action "install_pgc_for_klipper" "install_ui";; - 9) + 8) do_action "telegram_bot_setup_dialog" "install_ui";; - 10) + 9) do_action "moonraker_obico_setup_dialog" "install_ui";; - 11) + 10) do_action "octoeverywhere_setup_dialog" "install_ui";; - 12) + 11) do_action "install_mobileraker" "install_ui";; - 13) + 12) do_action "octoapp_setup_dialog" "install_ui";; + 13) + do_action "install_spoolman" "install_ui";; 14) do_action "install_crowsnest" "install_ui";; B|b) diff --git a/scripts/ui/remove_menu.sh b/scripts/ui/remove_menu.sh index 0b219d5..9f4d755 100755 --- a/scripts/ui/remove_menu.sh +++ b/scripts/ui/remove_menu.sh @@ -17,21 +17,21 @@ function remove_ui() { hr echo -e "| ${yellow}INFO: Configurations and/or any backups will be kept!${white} |" hr - echo -e "| Firmware & API: | 3rd Party Webinterface: |" - echo -e "| 1) [Klipper] | 9) [OctoPrint] |" - echo -e "| 2) [Moonraker] | |" - echo -e "| | Webcam Streamer: |" - echo -e "| Klipper Webinterface: | 10) [Crowsnest] |" - echo -e "| 3) [Mainsail] | 11) [MJPG-Streamer] |" - echo -e "| 4) [Mainsail-Config] | |" - echo -e "| 5) [Fluidd] | Other: |" - echo -e "| 6) [Fluidd-Config] | 12) [PrettyGCode] |" - echo -e "| | 13) [Telegram Bot] |" - echo -e "| Touchscreen GUI: | 14) [Obico for Klipper] |" - echo -e "| 7) [KlipperScreen] | 15) [OctoEverywhere] |" - echo -e "| | 16) [Mobileraker] |" - echo -e "| Spool Manager: | 17) [NGINX] |" - echo -e "| 8) [Spoolman] | 18) [OctoApp] |" + echo -e "| Firmware & API: | Webcam Streamer: |" + echo -e "| 1) [Klipper] | 9) [Crowsnest] |" + echo -e "| 2) [Moonraker] | 10) [MJPG-Streamer] |" + echo -e "| | |" + echo -e "| Klipper Webinterface: | Other: |" + echo -e "| 3) [Mainsail] | 11) [PrettyGCode] |" + echo -e "| 4) [Mainsail-Config] | 12) [Telegram Bot] |" + echo -e "| 5) [Fluidd] | 13) [Obico for Klipper] |" + echo -e "| 6) [Fluidd-Config] | 14) [OctoEverywhere] |" + echo -e "| | 15) [Mobileraker] |" + echo -e "| Touchscreen GUI: | 16) [NGINX] |" + echo -e "| 7) [KlipperScreen] | 17) [OctoApp] |" + echo -e "| | 18) [Spoolman] |" + echo -e "| 3rd Party Webinterface: | |" + echo -e "| 8) [OctoPrint] | |" back_footer } @@ -57,27 +57,27 @@ function remove_menu() { 7) do_action "remove_klipperscreen" "remove_ui";; 8) - do_action "remove_spoolman" "remove_ui";; - 9) do_action "remove_octoprint" "remove_ui";; - 10) + 9) do_action "remove_crowsnest" "remove_ui";; - 11) + 10) do_action "remove_mjpg-streamer" "remove_ui";; - 12) + 11) do_action "remove_prettygcode" "remove_ui";; - 13) + 12) do_action "remove_telegram_bot" "remove_ui";; - 14) + 13) do_action "remove_moonraker_obico" "remove_ui";; - 15) + 14) do_action "remove_octoeverywhere" "remove_ui";; - 16) + 15) do_action "remove_mobileraker" "remove_ui";; - 17) + 16) do_action "remove_nginx" "remove_ui";; - 18) + 17) do_action "remove_octoapp" "remove_ui";; + 18) + do_action "remove_spoolman" "remove_ui";; B|b) clear; main_menu; break;; *) diff --git a/scripts/ui/update_menu.sh b/scripts/ui/update_menu.sh index a7cdb44..8e85599 100755 --- a/scripts/ui/update_menu.sh +++ b/scripts/ui/update_menu.sh @@ -28,17 +28,15 @@ function update_ui() { echo -e "| Touchscreen GUI: |---------------|--------------|" echo -e "| 5) [KlipperScreen] |$(compare_klipperscreen_versions)|" echo -e "| | | |" - echo -e "| Spool Manager: |---------------|--------------|" - echo -e "| 6) [Spoolman] |$(compare_spoolman_versions)|" - echo -e "| | | |" echo -e "| Other: |---------------|--------------|" - echo -e "| 7) [PrettyGCode] |$(compare_prettygcode_versions)|" - echo -e "| 8) [Telegram Bot] |$(compare_telegram_bot_versions)|" - echo -e "| 9) [Obico for Klipper]|$(compare_moonraker_obico_versions)|" - echo -e "| 10) [OctoEverywhere] |$(compare_octoeverywhere_versions)|" - echo -e "| 11) [Mobileraker] |$(compare_mobileraker_versions)|" - echo -e "| 12) [Crowsnest] |$(compare_crowsnest_versions)|" - echo -e "| 13) [OctoApp] |$(compare_octoapp_versions)|" + echo -e "| 6) [PrettyGCode] |$(compare_prettygcode_versions)|" + echo -e "| 7) [Telegram Bot] |$(compare_telegram_bot_versions)|" + echo -e "| 8) [Obico for Klipper]|$(compare_moonraker_obico_versions)|" + echo -e "| 9) [OctoEverywhere] |$(compare_octoeverywhere_versions)|" + echo -e "| 10) [Mobileraker] |$(compare_mobileraker_versions)|" + echo -e "| 11) [Crowsnest] |$(compare_crowsnest_versions)|" + echo -e "| 12) [OctoApp] |$(compare_octoapp_versions)|" + echo -e "| 13) [Spoolman] |$(compare_spoolman_versions)|" echo -e "| |------------------------------|" echo -e "| 14) [System] | $(check_system_updates) |" back_footer @@ -65,21 +63,21 @@ function update_menu() { 5) do_action "update_klipperscreen" "update_ui";; 6) - do_action "update_spoolman" "update_ui";; - 7) do_action "update_pgc_for_klipper" "update_ui";; - 8) + 7) do_action "update_telegram_bot" "update_ui";; - 9) + 8) do_action "update_moonraker_obico" "update_ui";; - 10) + 9) do_action "update_octoeverywhere" "update_ui";; - 11) + 10) do_action "update_mobileraker" "update_ui";; - 12) + 11) do_action "update_crowsnest" "update_ui";; - 13) + 12) do_action "update_octoapp" "update_ui";; + 13) + do_action "update_spoolman" "update_ui";; 14) do_action "upgrade_system_packages" "update_ui";; a)