From 93f8e5e265f2c493c33c0b4ecd8fd38e328a9002 Mon Sep 17 00:00:00 2001 From: Jordan Date: Fri, 27 Nov 2020 13:44:06 +0000 Subject: [PATCH] Add KlipperScreen to kiauh --- kiauh.sh | 6 +- scripts/backup.sh | 16 ++++- scripts/functions.sh | 17 ++++- scripts/install_klipperscreen.sh | 79 +++++++++++++++++++++++ scripts/remove.sh | 26 ++++++++ scripts/status.sh | 105 +++++++++++++++++++++++-------- scripts/ui/backup_menu.sh | 9 +++ scripts/ui/install_menu.sh | 9 +++ scripts/ui/main_menu.sh | 17 ++--- scripts/ui/remove_menu.sh | 9 +++ scripts/ui/update_menu.sh | 9 +++ scripts/update.sh | 20 ++++++ 12 files changed, 287 insertions(+), 35 deletions(-) create mode 100644 scripts/install_klipperscreen.sh diff --git a/kiauh.sh b/kiauh.sh index 3e210a5..81121c2 100755 --- a/kiauh.sh +++ b/kiauh.sh @@ -43,6 +43,9 @@ OCTOPRINT_DIR=${HOME}/OctoPrint OCTOPRINT_CFG_DIR=${HOME}/.octoprint OCTOPRINT_SERVICE1=/etc/init.d/octoprint OCTOPRINT_SERVICE2=/etc/default/octoprint +#KlipperScreen +KLIPPERSCREEN_DIR=${HOME}/KlipperScreen +KLIPPERSCREEN_ENV_DIR=${HOME}/.KlipperScreen-env #misc INI_FILE=${SRCDIR}/kiauh/kiauh.ini BACKUP_DIR=${HOME}/kiauh-backups @@ -53,6 +56,7 @@ ARKSINE_REPO=https://github.com/Arksine/klipper.git DMBUTYUGIN_REPO=https://github.com/dmbutyugin/klipper.git DWC2FK_REPO=https://github.com/Stephan3/dwc2-for-klipper-socket.git MOONRAKER_REPO=https://github.com/Arksine/moonraker.git +KLIPPERSCREEN_REPO=https://github.com/jordanruthe/KlipperScreen.git #branches BRANCH_SCURVE_SMOOTHING=dmbutyugin/scurve-smoothing BRANCH_SCURVE_SHAPING=dmbutyugin/scurve-shaping @@ -102,4 +106,4 @@ clear_msg(){ check_euid init_ini kiauh_status -main_menu \ No newline at end of file +main_menu diff --git a/scripts/backup.sh b/scripts/backup.sh index 1f8ff16..24fde63 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -122,4 +122,18 @@ backup_octoprint(){ else ERROR_MSG=" Can't backup OctoPrint and/or .octoprint directory!\n Not found!" fi -} \ No newline at end of file +} + +backup_klipperscreen(){ + if [ -d $KLIPPERSCREEN_DIR ] ; then + status_msg "Creating KlipperScreen backup ..." + check_for_backup_dir + get_date + status_msg "Timestamp: $current_date" + mkdir -p $BACKUP_DIR/klipperscreen-backups/"$current_date" + cp -r $KLIPPERSCREEN_DIR $_ + ok_msg "Backup complete!" + else + ERROR_MSG=" Can't backup KlipperScreen directory!\n Not found!" + fi +} diff --git a/scripts/functions.sh b/scripts/functions.sh index 5bf5dde..7633ac1 100755 --- a/scripts/functions.sh +++ b/scripts/functions.sh @@ -138,6 +138,21 @@ read_octoprint_service_status(){ fi } +start_klipperscreen(){ + status_msg "Starting KlipperScreen Service ..." + sudo systemctl start KlipperScreen && ok_msg "KlipperScreen Service started!" +} + +stop_klipperscreen(){ + status_msg "Stopping KlipperScreen Service ..." + sudo systemctl stop KlipperScreen && ok_msg "KlipperScreen Service stopped!" +} + +restart_klipperscreen(){ + status_msg "Restarting KlipperScreen Service ..." + sudo systemctl restart KlipperScreen && ok_msg "KlipperScreen Service restarted!" +} + restart_nginx(){ if [ "$(systemctl list-units --full -all -t service --no-legend | grep -F "nginx.service")" ]; then status_msg "Restarting Nginx Service ..." @@ -359,4 +374,4 @@ init_ini(){ if [ ! $(grep -E "^logupload_accepted=." $INI_FILE) ]; then echo -e "\nlogupload_accepted=false\c" >> $INI_FILE fi -} \ No newline at end of file +} diff --git a/scripts/install_klipperscreen.sh b/scripts/install_klipperscreen.sh new file mode 100644 index 0000000..05ec07b --- /dev/null +++ b/scripts/install_klipperscreen.sh @@ -0,0 +1,79 @@ +install_klipperscreen(){ + python3_check + if [ $py_chk_ok = "true" ]; then + system_check_klipperscreen + #ask user for customization + get_user_selections_klipperscreen + #KlipperScreen main installation + klipperscreen_setup + #execute customizations + symlinks_klipperscreen + #after install actions + restart_klipperscreen + else + ERROR_MSG="Python 3.7 or above required!\n Please upgrade your Python version first." + print_msg && clear_msg + fi +} + +python3_check(){ + status_msg "Your Python 3 version is: $(python3 --version)" + major=$(python3 --version | cut -d" " -f2 | cut -d"." -f1) + minor=$(python3 --version | cut -d"." -f2) + if [ $major -ge 3 ] && [ $minor -ge 7 ]; then + ok_msg "Python version ok!" + py_chk_ok="true" + else + py_chk_ok="false" + fi +} + +system_check_klipperscreen(){ + [ ! -e ${HOME}/klipper_config/KlipperScreen.log ] && KLIPPERSCREEN_SL_FOUND="false" +} + +get_user_selections_klipperscreen(){ + #user selection for KlipperScreen.log symlink + if [ "$KLIPPERSCREEN_SL_FOUND" = "false" ]; then + while true; do + echo + read -p "${cyan}###### Create KlipperScreen.log symlink? (y/N):${default} " yn + case "$yn" in + Y|y|Yes|yes) + echo -e "###### > Yes" + SEL_KSLOG_SL="true" + break;; + N|n|No|no|"") + echo -e "###### > No" + SEL_KSLOG_SL="false" + break;; + *) + print_unkown_cmd + print_msg && clear_msg;; + esac + done + fi +} + +klipperscreen_setup(){ + dep=(wget curl unzip dfu-util) + dependency_check + status_msg "Downloading KlipperScreen ..." + #force remove existing KlipperScreen dir + [ -d $KLIPPERSCREEN_DIR ] && rm -rf $KLIPPERSCREEN_DIR + #clone into fresh KlipperScreen dir + cd ${HOME} && git clone $KLIPPERSCREEN_REPO + ok_msg "Download complete!" + status_msg "Installing KlipperScreen ..." + $KLIPPERSCREEN_DIR/scripts/KlipperScreen-install.sh + echo; ok_msg "KlipperScreen successfully installed!" +} + +symlinks_klipperscreen(){ + #create a KlipperScreen.log symlink in klipper_config-dir just for convenience + if [ "$KLIPPERSCREEN_SL_FOUND" = "true" ] && [ ! -e ${HOME}/klipper_config/KlipperScreen.log ]; then + status_msg "Creating KlipperScreen.log symlink ..." + ln -s /tmp/KlipperScreen.log ${HOME}/klipper_config + ok_msg "Symlink created!" + fi +} diff --git a/scripts/remove.sh b/scripts/remove.sh index 550b753..45ed829 100755 --- a/scripts/remove.sh +++ b/scripts/remove.sh @@ -302,3 +302,29 @@ remove_nginx(){ ERROR_MSG=" Looks like Nginx was already removed!\n Skipping..." fi } + +remove_klipperscreen(){ + data_arr=( + $KLIPPERSCREEN_DIR + $KLIPPERSCREEN_ENV_DIR + /etc/systemd/system/KlipperScreen.service + ) + print_error "KlipperScreen" && data_count=() + if [ "$ERROR_MSG" = "" ]; then + #remove KlipperScreen dir + if [ -d $KLIPPERSCREEN_DIR ]; then + status_msg "Removing KlipperScreen directory ..." + rm -rf $KLIPPERSCREEN_DIR && ok_msg "Directory removed!" + fi + if [ -d $KLIPPERSCREEN_ENV_DIR ]; then + status_msg "Removing KlipperScreen VENV directory ..." + rm -rf $KLIPPERSCREEN_ENV_DIR && ok_msg "Directory removed!" + fi + #remove KlipperScreen systemd file + if [ -e /etc/nginx/sites-available/mainsail ]; then + status_msg "Removing KlipperScreen configuration for Nginx ..." + sudo rm /etc/systemd/system/KlipperScreen.service && ok_msg "File removed!" + fi + CONFIRM_MSG="KlipperScreen successfully removed!" + fi +} diff --git a/scripts/status.sh b/scripts/status.sh index f479a8f..ac871a6 100755 --- a/scripts/status.sh +++ b/scripts/status.sh @@ -27,11 +27,11 @@ klipper_status(){ fi done if [ "$kcount" == "${#klipper_data[*]}" ]; then - KLIPPER_STATUS="${green}Installed!${default} " + KLIPPER_STATUS="${green}Installed!${default} " elif [ "$kcount" == 0 ]; then - KLIPPER_STATUS="${red}Not installed!${default} " + KLIPPER_STATUS="${red}Not installed!${default} " else - KLIPPER_STATUS="${yellow}Incomplete!${default} " + KLIPPER_STATUS="${yellow}Incomplete!${default} " fi } @@ -50,11 +50,11 @@ dwc2_status(){ fi done if [ "$dcount" == "${#dwc2_data[*]}" ]; then - DWC2_STATUS="${green}Installed!${default} " + DWC2_STATUS="${green}Installed!${default} " elif [ "$dcount" == 0 ]; then - DWC2_STATUS="${red}Not installed!${default} " + DWC2_STATUS="${red}Not installed!${default} " else - DWC2_STATUS="${yellow}Incomplete!${default} " + DWC2_STATUS="${yellow}Incomplete!${default} " fi } @@ -77,11 +77,11 @@ moonraker_status(){ fi done if [ "$mrcount" == "${#moonraker_data[*]}" ]; then - MOONRAKER_STATUS="${green}Installed!${default} " + MOONRAKER_STATUS="${green}Installed!${default} " elif [ "$mrcount" == 0 ]; then - MOONRAKER_STATUS="${red}Not installed!${default} " + MOONRAKER_STATUS="${red}Not installed!${default} " else - MOONRAKER_STATUS="${yellow}Incomplete!${default} " + MOONRAKER_STATUS="${yellow}Incomplete!${default} " fi } @@ -100,11 +100,11 @@ mainsail_status(){ fi done if [ "$mcount" == "${#mainsail_data[*]}" ]; then - MAINSAIL_STATUS="${green}Installed!${default} " + MAINSAIL_STATUS="${green}Installed!${default} " elif [ "$mcount" == 0 ]; then - MAINSAIL_STATUS="${red}Not installed!${default} " + MAINSAIL_STATUS="${red}Not installed!${default} " else - MAINSAIL_STATUS="${yellow}Incomplete!${default} " + MAINSAIL_STATUS="${yellow}Incomplete!${default} " fi } @@ -123,11 +123,11 @@ fluidd_status(){ fi done if [ "$fcount" == "${#fluidd_data[*]}" ]; then - FLUIDD_STATUS="${green}Installed!${default} " + FLUIDD_STATUS="${green}Installed!${default} " elif [ "$fcount" == 0 ]; then - FLUIDD_STATUS="${red}Not installed!${default} " + FLUIDD_STATUS="${red}Not installed!${default} " else - FLUIDD_STATUS="${yellow}Incomplete!${default} " + FLUIDD_STATUS="${yellow}Incomplete!${default} " fi } @@ -147,11 +147,36 @@ octoprint_status(){ fi done if [ "$ocount" == "${#octoprint_data[*]}" ]; then - OCTOPRINT_STATUS="${green}Installed!${default} " + OCTOPRINT_STATUS="${green}Installed!${default} " elif [ "$ocount" == 0 ]; then - OCTOPRINT_STATUS="${red}Not installed!${default} " + OCTOPRINT_STATUS="${red}Not installed!${default} " else - OCTOPRINT_STATUS="${yellow}Incomplete!${default} " + OCTOPRINT_STATUS="${yellow}Incomplete!${default} " + fi +} + +klipperscreen_status(){ + mrcount=0 + klipperscreen_data=( + SERVICE + $KLIPPERSCREEN_DIR + $KLIPPERSCREEN_ENV_DIR + ) + #remove the "SERVICE" entry from the klipperscreen_data array if a klipperscreen service is installed + [ "$(systemctl list-units --full -all -t service --no-legend | grep -F "KlipperScreen.service")" ] && unset klipperscreen_data[0] + #count+1 for each found data-item from array + for mrd in "${klipperscreen_data[@]}" + do + if [ -e $mrd ]; then + mrcount=$(expr $mrcount + 1) + fi + done + if [ "$mrcount" == "${#klipperscreen_data[*]}" ]; then + KLIPPERSCREEN_STATUS="${green}Installed!${default} " + elif [ "$mrcount" == 0 ]; then + KLIPPERSCREEN_STATUS="${red}Not installed!${default} " + else + KLIPPERSCREEN_STATUS="${yellow}Incomplete!${default} " fi } @@ -175,19 +200,19 @@ read_branch(){ print_branch(){ read_branch if [ "$GET_BRANCH" == "origin/master" ]; then - PRINT_BRANCH="$GET_BRANCH " + PRINT_BRANCH="$GET_BRANCH " elif [ "$GET_BRANCH" == "origin" ]; then - PRINT_BRANCH="origin/master " + PRINT_BRANCH="origin/master " elif [ "$GET_BRANCH" == "master" ]; then - PRINT_BRANCH="origin/master " + PRINT_BRANCH="origin/master " elif [ "$GET_BRANCH" == "dmbutyugin/scurve-shaping" ]; then - PRINT_BRANCH="scurve-shaping " + PRINT_BRANCH="scurve-shaping " elif [ "$GET_BRANCH" == "dmbutyugin/scurve-smoothing" ]; then - PRINT_BRANCH="scurve-smoothing " + PRINT_BRANCH="scurve-smoothing" elif [ "$GET_BRANCH" == "Arksine/dev-moonraker-testing" ]; then - PRINT_BRANCH="moonraker " + PRINT_BRANCH="moonraker " else - PRINT_BRANCH="${red}----${default} " + PRINT_BRANCH="${red}----${default} " fi } @@ -407,6 +432,35 @@ compare_fluidd_versions(){ fi } +read_klipperscreen_versions(){ + if [ -d $KLIPPERSCREEN_DIR ] && [ -d $KLIPPERSCREEN_DIR/.git ]; then + cd $KLIPPERSCREEN_DIR + git fetch origin master -q + LOCAL_KLIPPERSCREEN_COMMIT=$(git describe HEAD --always --tags | cut -d "-" -f 1,2) + LOCAL_KLIPPERSCREEN_COMMIT=$LOCAL_KLIPPERSCREEN_COMMIT$(printf "%$[12-${#LOCAL_KLIPPERSCREEN_COMMIT}]s") + REMOTE_KLIPPERSCREEN_COMMIT=$(git describe origin/master --always --tags | cut -d "-" -f 1,2) + REMOTE_KLIPPERSCREEN_COMMIT=$REMOTE_KLIPPERSCREEN_COMMIT$(printf "%$[12-${#REMOTE_KLIPPERSCREEN_COMMIT}]s") + else + LOCAL_KLIPPERSCREEN_COMMIT="${red}--------${default}" + REMOTE_KLIPPERSCREEN_COMMIT="${red}--------${default}" + fi +} + +compare_klipperscreen_versions(){ + unset KLIPPERSCREEN_UPDATE_AVAIL + read_klipperscreen_versions + if [ "$LOCAL_KLIPPERSCREEN_COMMIT" != "$REMOTE_KLIPPERSCREEN_COMMIT" ]; then + LOCAL_KLIPPERSCREEN_COMMIT="${yellow}$LOCAL_KLIPPERSCREEN_COMMIT${default}" + REMOTE_KLIPPERSCREEN_COMMIT="${green}$REMOTE_KLIPPERSCREEN_COMMIT${default}" + KLIPPERSCREEN_UPDATE_AVAIL="true" + update_arr+=(update_klipperscreen) + else + LOCAL_KLIPPERSCREEN_COMMIT="${green}$LOCAL_KLIPPERSCREEN_COMMIT${default}" + REMOTE_KLIPPERSCREEN_COMMIT="${green}$REMOTE_KLIPPERSCREEN_COMMIT${default}" + KLIPPERSCREEN_UPDATE_AVAIL="false" + fi +} + ############################################################# ############################################################# @@ -418,4 +472,5 @@ ui_print_versions(){ compare_moonraker_versions compare_mainsail_versions compare_fluidd_versions + compare_klipperscreen_versions } diff --git a/scripts/ui/backup_menu.sh b/scripts/ui/backup_menu.sh index d785fd5..2bb588e 100755 --- a/scripts/ui/backup_menu.sh +++ b/scripts/ui/backup_menu.sh @@ -15,6 +15,9 @@ backup_ui(){ echo -e "| | " echo -e "| 5) [OctoPrint] | " echo -e "| | " + echo -e "| HDMI Screen: | " + echo -e "| 6) [KlipperScreen] | " + echo -e "| | " quit_footer } @@ -55,6 +58,12 @@ backup_menu(){ backup_octoprint print_msg && clear_msg backup_ui;; + 6) + clear + print_header + backup_klipperscreen + print_msg && clear_msg + backup_ui;; Q|q) clear; main_menu; break;; *) diff --git a/scripts/ui/install_menu.sh b/scripts/ui/install_menu.sh index 8fbefc0..c50d936 100755 --- a/scripts/ui/install_menu.sh +++ b/scripts/ui/install_menu.sh @@ -11,6 +11,9 @@ install_ui(){ echo -e "| | 4) [Mainsail] | " echo -e "| Klipper API: | 5) [Fluidd] | " echo -e "| 2) [Moonraker] | 6) [Octoprint] | " + echo -e "| | | " + echo -e "| | HDMI Screen | " + echo -e "| | 7) [KlipperScreen] | " quit_footer } @@ -56,6 +59,12 @@ install_menu(){ install_octoprint print_msg && clear_msg install_ui;; + 7) + clear + print_header + install_klipperscreen + print_msg && clear_msg + install_ui;; Q|q) clear; main_menu; break;; *) diff --git a/scripts/ui/main_menu.sh b/scripts/ui/main_menu.sh index 9a43714..69af738 100755 --- a/scripts/ui/main_menu.sh +++ b/scripts/ui/main_menu.sh @@ -2,15 +2,17 @@ main_ui(){ top_border echo -e "| $(title_msg "~~~~~~~~~~~~~~~ [ Main Menu ] ~~~~~~~~~~~~~~~") |" hr - echo -e "| 0) [Upload Log] | Klipper: $KLIPPER_STATUS|" - echo -e "| | Branch: ${cyan}$PRINT_BRANCH${default}|" + echo -e "| 0) [Upload Log] | Klipper: $KLIPPER_STATUS|" + echo -e "| | Branch: ${cyan}$PRINT_BRANCH${default}|" echo -e "| 1) [Install] | |" - echo -e "| 2) [Update] | Moonraker: $MOONRAKER_STATUS|" + echo -e "| 2) [Update] | Moonraker: $MOONRAKER_STATUS|" echo -e "| 3) [Remove] | |" - echo -e "| | DWC2: $DWC2_STATUS|" - echo -e "| 4) [Advanced] | Fluidd: $FLUIDD_STATUS|" - echo -e "| 5) [Backup] | Mainsail: $MAINSAIL_STATUS|" - echo -e "| | Octoprint: $OCTOPRINT_STATUS|" + echo -e "| | DWC2: $DWC2_STATUS|" + echo -e "| 4) [Advanced] | Fluidd: $FLUIDD_STATUS|" + echo -e "| 5) [Backup] | Mainsail: $MAINSAIL_STATUS|" + echo -e "| | Octoprint: $OCTOPRINT_STATUS|" + echo -e "| | |" + echo -e "| | KlipperScreen: $KLIPPERSCREEN_STATUS|" quit_footer } @@ -27,6 +29,7 @@ main_menu(){ fluidd_status mainsail_status octoprint_status + klipperscreen_status print_branch print_msg && clear_msg main_ui diff --git a/scripts/ui/remove_menu.sh b/scripts/ui/remove_menu.sh index 3ccdbf7..6892e64 100755 --- a/scripts/ui/remove_menu.sh +++ b/scripts/ui/remove_menu.sh @@ -16,6 +16,9 @@ remove_ui(){ echo -e "| | | " echo -e "| | Webserver: | " echo -e "| | 7) [Nginx] | " + echo -e "| | | " + echo -e "| | HDMI Screen: | " + echo -e "| | 8) KlipperScreen | " quit_footer } @@ -67,6 +70,12 @@ remove_menu(){ remove_nginx print_msg && clear_msg remove_ui;; + 8) + clear + print_header + remove_klipperscreen + print_msg && clear_msg + remove_ui;; Q|q) clear; main_menu; break;; *) diff --git a/scripts/ui/update_menu.sh b/scripts/ui/update_menu.sh index 91d41cc..0138eab 100755 --- a/scripts/ui/update_menu.sh +++ b/scripts/ui/update_menu.sh @@ -22,6 +22,9 @@ update_ui(){ echo -e "| 4) [Moonraker] | $LOCAL_MOONRAKER_COMMIT | $REMOTE_MOONRAKER_COMMIT | " echo -e "| 5) [Mainsail] | $MAINSAIL_LOCAL_VER | $MAINSAIL_REMOTE_VER | " echo -e "| 6) [Fluidd] | $FLUIDD_LOCAL_VER | $FLUIDD_REMOTE_VER | " + echo -e "| | | | " + echo -e "| HDMI Screen: |---------------|--------------| " + echo -e "| 7) [KlipperScreen] | $LOCAL_KLIPPERSCREEN_COMMIT | $REMOTE_KLIPPERSCREEN_COMMIT | " quit_footer } @@ -77,6 +80,12 @@ update_menu(){ update_fluidd && ui_print_versions print_msg && clear_msg update_ui;; + 7) + clear + print_header + update_klipperscreen && ui_print_versions + print_msg && clear_msg + update_ui;; a) clear print_header diff --git a/scripts/update.sh b/scripts/update.sh index cd305d2..ec6cdfb 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -34,6 +34,9 @@ update_all(){ if [ "$FLUIDD_UPDATE_AVAIL" = "true" ]; then echo -e "| ${cyan}● Fluidd${default} |" fi + if [ "$KLIPPERSCREEN_UPDATE_AVAIL" = "true" ]; then + echo -e "| ${cyan}● KlipperScreen${default} |" + fi bottom_border if [ "${#update_arr[@]}" != "0" ]; then read -p "${cyan}###### Do you want to proceed? (Y/n):${default} " yn @@ -166,3 +169,20 @@ update_moonraker(){ ok_msg "Update complete!" start_moonraker } + +update_klipperscreen(){ + stop_klipperscreen + cd $KLIPPERSCREEN_DIR + KLIPPERSCREEN_OLDREQ_MD5SUM=$(md5sum $KLIPPERSCREEN_DIR/scripts/KlipperScreen-requirements.txt | cut -d " " -f1) + git pull origin master -q && ok_msg "Fetch successfull!" + git checkout -f origin/master && ok_msg "Checkout successfull" + #KLIPPERSCREEN_NEWREQ_MD5SUM=$(md5sum $KLIPPERSCREEN_DIR/scripts/KlipperScreen-requirements.txt) + if [[ $(md5sum $KLIPPERSCREEN_DIR/scripts/KlipperScreen-requirements.txt | cut -d " " -f1) != $KLIPPERSCREEN_OLDREQ_MD5SUM ]]; then + status_msg "New dependecies detected..." + PYTHONDIR="${HOME}/.KlipperScreen-env" + $PYTHONDIR/bin/pip install -r $KLIPPERSCREEN_DIR/scripts/KlipperScreen-requirements.txt + ok_msg "Dependencies have been installed!" + fi + ok_msg "Update complete!" + start_klipper +}