From 716b21a62942fcf191e81d41923fd9e3657f5627 Mon Sep 17 00:00:00 2001 From: th33xitus <> Date: Thu, 20 Aug 2020 16:32:01 +0200 Subject: [PATCH] feature: new experimental moonraker/mainsail install routine --- resources/moonraker.conf | 3 +- scripts/functions.sh | 122 ++++++----- scripts/install_mainsail.sh | 201 +++-------------- scripts/install_moonraker.sh | 405 +++++++++++++++++++++++++++++++++++ 4 files changed, 503 insertions(+), 228 deletions(-) create mode 100755 scripts/install_moonraker.sh diff --git a/resources/moonraker.conf b/resources/moonraker.conf index 3fc16e1..715bd8e 100644 --- a/resources/moonraker.conf +++ b/resources/moonraker.conf @@ -5,5 +5,4 @@ config_path: ~/klipper_config [authorization] enabled: true trusted_clients: - 127.0.0.1 - 192.168.1.0/24 \ No newline at end of file + 127.0.0.1 \ No newline at end of file diff --git a/scripts/functions.sh b/scripts/functions.sh index 7904a14..8faca3c 100755 --- a/scripts/functions.sh +++ b/scripts/functions.sh @@ -312,63 +312,83 @@ create_custom_hostname(){ echo -e "| browsing to: http://my-printer.local |" bottom_border while true; do - echo -e "${cyan}" - read -p "###### Do you want to change the hostname? (Y/n): " yn - echo -e "${default}" + read -p "${cyan}###### Do you want to change the hostname? (y/N):${default} " yn case "$yn" in - Y|y|Yes|yes|"") set_hostname; break;; - N|n|No|no) break;; + Y|y|Yes|yes) + user_input_hostname + break;; + N|n|No|no|"") break;; esac done } -set_hostname(){ - #check for dependencies - dep=(avahi-daemon) - dependency_check - #execute operations - #get current hostname and write to variable - HOSTNAME=$(hostname) - #create host file if missing or create backup of existing one with current date&time - if [ -f /etc/hosts ]; then - status_msg "Creating backup of hosts file ..." - get_date - sudo cp /etc/hosts /etc/hosts."$current_date".bak - ok_msg "Backup done!" - ok_msg "File:'/etc/hosts."$current_date".bak'" - else - sudo touch /etc/hosts - fi - echo - top_border - echo -e "| ${green}Allowed characters: a-z, 0-9 and single '-'${default} |" - echo -e "| ${red}No special characters allowed!${default} |" - echo -e "| ${red}No leading or trailing '-' allowed!${default} |" - bottom_border - while true; do - echo -e "${cyan}" - read -p "###### Please set the new hostname: " NEW_HOSTNAME - echo -e "${default}" - if [[ $NEW_HOSTNAME =~ ^[^\-]+([0-9a-z]\-{0,1})+[^\-]+$ ]]; then - ok_msg "'$NEW_HOSTNAME' is a valid hostname!" - #set hostname in /etc/hostname - status_msg "Setting hostname to '$NEW_HOSTNAME' ..." - status_msg "Please wait ..." - sudo hostnamectl set-hostname $NEW_HOSTNAME - #write new hostname to /etc/hosts - status_msg "Writing new hostname to /etc/hosts ..." - if cat /etc/hosts | grep "###set by kiauh" &>/dev/null; then - sudo sed -i "/###set by kiauh/s/\<$HOSTNAME\>/$NEW_HOSTNAME/" /etc/hosts - else - echo "127.0.0.1 $NEW_HOSTNAME ###set by kiauh" | sudo tee -a /etc/hosts &>/dev/null - fi - ok_msg "New hostname successfully configured!" - ok_msg "Remember to reboot your machine for the changes to take effect!" +user_input_hostname(){ + unset NEW_HOSTNAME + echo + top_border + echo -e "| ${green}Allowed characters: a-z, 0-9 and single '-'${default} |" + echo -e "| ${red}No special characters allowed!${default} |" + echo -e "| ${red}No leading or trailing '-' allowed!${default} |" + bottom_border + while true; do + read -p "${cyan}###### Please set the new hostname:${default} " NEW_HOSTNAME + if [[ $NEW_HOSTNAME =~ ^[^\-\_]+([0-9a-z]\-{0,1})+[^\-\_]+$ ]]; then + ok_msg "'$NEW_HOSTNAME' is a valid hostname!" + HOSTNAME_VALID="true" + while true; do + echo + read -p "${cyan}###### Do you want '$NEW_HOSTNAME' to be the new hostname? (Y/n):${default} " yn + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + HOSTENAME_CONFIRM="true" + break;; + N|n|No|no) + echo -e "###### > No" + echo -e "${red}Skip hostname change ...${default}" + HOSTENAME_CONFIRM="false" + break;; + esac + done break + else + warn_msg "'$NEW_HOSTNAME' is not a valid hostname!" + fi + done +} + +set_hostname(){ + if [ "$HOSTNAME_VALID" = "true" ] && [ "$HOSTENAME_CONFIRM" = "true" ]; then + #check for dependencies + dep=(avahi-daemon) + dependency_check + #execute operations + #get current hostname and write to variable + HOSTNAME=$(hostname) + #create host file if missing or create backup of existing one with current date&time + if [ -f /etc/hosts ]; then + status_msg "Creating backup of hosts file ..." + get_date + sudo cp /etc/hosts /etc/hosts."$current_date".bak + ok_msg "Backup done!" + ok_msg "File:'/etc/hosts."$current_date".bak'" else - warn_msg "'$NEW_HOSTNAME' is not a valid hostname!" + sudo touch /etc/hosts fi - done + #set hostname in /etc/hostname + status_msg "Setting hostname to '$NEW_HOSTNAME' ..." + status_msg "Please wait ..." + sudo hostnamectl set-hostname "$NEW_HOSTNAME" + #write new hostname to /etc/hosts + status_msg "Writing new hostname to /etc/hosts ..." + if cat /etc/hosts | grep "###set by kiauh" &>/dev/null; then + sudo sed -i "/###set by kiauh/s/\<$HOSTNAME\>/$NEW_HOSTNAME/" /etc/hosts + else + echo "127.0.0.1 $NEW_HOSTNAME ###set by kiauh" | sudo tee -a /etc/hosts &>/dev/null + fi + ok_msg "New hostname successfully configured!" + ok_msg "Remember to reboot for the changes to take effect!" + fi } remove_branding(){ @@ -379,9 +399,7 @@ remove_branding(){ echo -e "| this action again, everytime you updated Mainsail. |" bottom_border while true; do - echo -e "${cyan}" - read -p "###### Do you want to continue? (Y/n): " yn - echo -e "${default}" + read -p "${cyan}###### Do you want to continue? (Y/n):${default} " yn case "$yn" in Y|y|Yes|yes|"") cd $MAINSAIL_DIR/css diff --git a/scripts/install_mainsail.sh b/scripts/install_mainsail.sh index ec06a8f..eaff8c6 100755 --- a/scripts/install_mainsail.sh +++ b/scripts/install_mainsail.sh @@ -1,179 +1,24 @@ -mainsail_install_routine(){ - if [ -d $KLIPPER_DIR ]; then +install_mainsail(){ + if [ -d $KLIPPER_DIR ] && [ "$INST_MAINSAIL" = "true" ]; then #disable octoprint service if installed if systemctl is-enabled octoprint.service -q 2>/dev/null; then disable_octoprint_service fi disable_haproxy_lighttpd - remove_haproxy_lighttpd - install_moonraker - check_printer_cfg - restart_moonraker - restart_klipper + #remove_haproxy_lighttpd + #beginning of mainsail installation create_reverse_proxy "mainsail" test_api test_nginx - install_mainsail - create_custom_hostname + mainsail_setup ok_msg "Mainsail installation complete!"; echo else ERROR_MSG=" Please install Klipper first!\n Skipping..." fi } -install_moonraker(){ - dep=(wget curl unzip) - dependency_check - status_msg "Downloading Moonraker ..." - cd ${HOME} && git clone $MOONRAKER_REPO - ok_msg "Download complete!" - backup_printer_cfg - status_msg "Installing Moonraker ..." - $MOONRAKER_DIR/scripts/install-moonraker.sh && ok_msg "Moonraker successfully installed!" - #copy basic moonraker.conf - if [ ! -e ${HOME}/moonraker.conf ]; then - status_msg "Creating moonraker.conf ..." - cp ${HOME}/kiauh/resources/moonraker.conf ${HOME} - ok_msg "moonraker.conf created!" - fi - #create sdcard folder - if [ ! -d ${HOME}/sdcard ]; then - status_msg "Creating sdcard directory ..." - mkdir ${HOME}/sdcard - ok_msg "sdcard directory created!" - fi - #create klipper_config folder - if [ ! -d ${HOME}/klipper_config ]; then - status_msg "Creating klipper_config directory ..." - mkdir ${HOME}/klipper_config - ok_msg "klipper_config directory created!" - fi - #move printer.cfg to new config location - if [ -e ${HOME}/printer.cfg ]; then - status_msg "Moving printer.cfg to its new location ..." - mv ${HOME}/printer.cfg ${HOME}/klipper_config - ok_msg "Done!" - status_msg "Create symlink in home directory ..." - ln -s ${HOME}/klipper_config/printer.cfg ${HOME} - ok_msg "Done!" - else - warn_msg "No printer.cfg was found!" - status_msg "Creating a default printer.cfg ..." - create_default_cfg - create_mainsail_macro_cfg - ln -s ${HOME}/klipper_config/printer.cfg ${HOME} - ok_msg "Default printer.cfg created!" - fi - #create a moonraker.log symlink in home-dir just for convenience - if [ ! -e ${HOME}/moonraker.log ]; then - status_msg "Creating moonraker.log symlink ..." - ln -s /tmp/moonraker.log ${HOME}/moonraker.log && ok_msg "Symlink created!" - fi -} - -check_printer_cfg(){ - if [ -e $PRINTER_CFG ]; then - check_vsdcard_section - fi -} - -check_vsdcard_section(){ - # check if virtual sdcard is present in printer.cfg - status_msg "Checking for virtual_sdcard configuration ..." - if [ $(grep '^\[virtual_sdcard\]$' $PRINTER_CFG) ]; then - ok_msg "Virtual sdcard already configured!" - else - status_msg "No virtual sdcard entry found." - ok_msg "Virtual sdcard entry added to printer.cfg!" -# append the following lines to printer.cfg -cat <> $PRINTER_CFG - -########################## -### CREATED WITH KIAUH ### -########################## -[virtual_sdcard] -path: ~/sdcard - -[pause_resume] -[display_status] -########################## -########################## -VSDCARD - fi -} - -create_default_cfg(){ -#create default config -touch ${HOME}/klipper_config/printer.cfg -cat <> ${HOME}/klipper_config/printer.cfg - -########################## -### CREATED WITH KIAUH ### -########################## -[virtual_sdcard] -path: ~/sdcard - -[pause_resume] -[display_status] -[include ~/klipper_config/mainsail_macros.cfg] - -########################## -########################## -DEFAULT_CFG -} - -create_mainsail_macro_cfg(){ -#create extra mainsail macro config -touch ${HOME}/klipper_config/mainsail_macros.cfg -cat <> ${HOME}/klipper_config/mainsail_macros.cfg -########################## -### CREATED WITH KIAUH ### -########################## -[gcode_macro CANCEL] -default_parameter_X: 230 -default_parameter_Y: 230 -default_parameter_Z: 10 -gcode: - M104 S0 - M140 S0 - M141 S0 - M106 S0 - CLEAR_PAUSE - SDCARD_RESET_FILE - -[gcode_macro CANCEL_PRINT] -gcode: - CANCEL - -[gcode_macro PAUSE] -rename_existing: BASE_PAUSE -default_parameter_X: 230 -default_parameter_Y: 230 -default_parameter_Z: 10 -gcode: - SAVE_GCODE_STATE NAME=PAUSE_state - BASE_PAUSE - G91 - G1 E-1.7 F2100 - G1 Z{Z} - G90 - G1 X{X} Y{Y} F6000 - G91 - -[gcode_macro RESUME] -rename_existing: BASE_RESUME -gcode: - G91 - G1 E1.7 F2100 - G91 - RESTORE_GCODE_STATE NAME=PAUSE_state MOVE=1 - BASE_RESUME -########################## -########################## -MAINSAIL_MACRO_CFG -} - disable_haproxy_lighttpd(){ + disable_service=(haproxy lighttpd) if systemctl is-active haproxy -q; then status_msg "Stopping haproxy service ..." sudo /etc/init.d/haproxy stop && ok_msg "Service stopped!" @@ -182,26 +27,34 @@ disable_haproxy_lighttpd(){ status_msg "Stopping lighttpd service ..." sudo /etc/init.d/lighttpd stop && ok_msg "Service stopped!" fi -} - -remove_haproxy_lighttpd(){ - rem=(haproxy lighttpd) - for remove in "${rem[@]}" + for service in "${disable_service[@]}" do - if [[ $(dpkg-query -f'${Status}' --show $remove 2>/dev/null) = *\ installed ]]; then - delete+=($remove) + if [[ $(dpkg-query -f'${Status}' --show $service 2>/dev/null) = *\ installed ]]; then + status_msg "Disabling $service service ..." + sudo apt-get disable $service + ok_msg "$service service disabled!" fi done - if ! [ ${#delete[@]} -eq 0 ]; then - sudo apt-get remove ${delete[@]} -y - fi } +#remove_haproxy_lighttpd(){ +# rem=(haproxy lighttpd) +# for remove in "${rem[@]}" +# do +# if [[ $(dpkg-query -f'${Status}' --show $remove 2>/dev/null) = *\ installed #]]; then +# delete+=($remove) +# fi +# done +# if ! [ ${#delete[@]} -eq 0 ]; then +# sudo apt-get remove ${delete[@]} -y +# fi +#} + test_api(){ status_msg "Testing API ..." sleep 5 status_msg "API response from http://localhost:7125/printer/info:" - API_RESPONSE="$(curl -sG4 http://localhost:7125/printer/info)" + API_RESPONSE=$(curl -sG4m5 http://localhost:7125/printer/info) echo -e "${cyan}$API_RESPONSE${default}" if [ $(curl -sG4 "http://localhost:7125/printer/info" | grep '^{"result"' -c) -eq 1 ]; then echo; ok_msg "Klipper API is working correctly!"; echo @@ -215,7 +68,7 @@ test_nginx(){ status_msg "Testing Nginx ..." sleep 5 status_msg "API response from http://localhost/printer/info:" - API_RESPONSE="$(curl -sG4 http://localhost/printer/info)" + API_RESPONSE="$(curl -sG4m5 http://localhost/printer/info)" echo -e "${cyan}$API_RESPONSE${default}" if [ $(curl -sG4 "http://localhost/printer/info" | grep '^{"result"' -c) -eq 1 ]; then echo; ok_msg "Nginx is working correctly!"; echo @@ -233,7 +86,7 @@ mainsail_dl_url(){ MAINSAIL_URL=https://github.com/meteyou/mainsail/releases/download/v"$MAINSAIL_VERSION"/mainsail-beta-"$MAINSAIL_VERSION".zip } -install_mainsail(){ +mainsail_setup(){ mainsail_dl_url if [ ! -d $MAINSAIL_DIR ]; then mkdir $MAINSAIL_DIR diff --git a/scripts/install_moonraker.sh b/scripts/install_moonraker.sh new file mode 100755 index 0000000..48c42a7 --- /dev/null +++ b/scripts/install_moonraker.sh @@ -0,0 +1,405 @@ +install_moonraker(){ + system_check_moonraker + #ask user for customization + get_user_selections_moonraker + #moonraker main installation + moonraker_setup + check_for_folder + #setup configs + setup_printer_config + setup_moonraker_conf + #execute customizations + write_custom_trusted_clients + symlink_moonraker_log + install_mainsail + set_hostname + #after install actions + restart_moonraker + restart_klipper +} + +system_check_moonraker(){ + status_msg "Initializing Moonraker installation ..." + #check for existing printer.cfg and for the location + if [ ! -e ${HOME}/printer.cfg ] && [ ! -e ${HOME}/klipper_config/printer.cfg ]; then + PRINTER_CFG_FOUND="false" + else + if [ -f ${HOME}/printer.cfg ]; then + PRINTER_CFG_FOUND="true" + PRINTER_CFG_LOC="${HOME}/printer.cfg" + fi + if [ -f ${HOME}/klipper_config/printer.cfg ]; then + PRINTER_CFG_FOUND="true" + PRINTER_CFG_LOC="${HOME}/klipper_config/printer.cfg" + fi + fi + #check for existing moonraker.log symlink in /klipper_config + if [ ! -e ${HOME}/klipper_config/moonraker.log ]; then + MOONRAKER_SL_FOUND="false" + else + MOONRAKER_SL_FOUND="true" + fi + #check for existing moonraker.conf + if [ ! -f ${HOME}/moonraker.conf ]; then + MOONRAKER_CONF_FOUND="false" + else + MOONRAKER_CONF_FOUND="true" + fi +} + +get_user_selections_moonraker(){ + #ask if moonraker only or moonraker + mainsail + while true; do + echo + top_border + echo -e "| Do you want to install Moonraker and Mainsail? |" + echo -e "| You can choose to install Moonraker only by answering |" + echo -e "| with 'No'. |" + hr + echo -e "| If you select 'Yes' please be aware that an existing |" + echo -e "| Mainsail installation will then be overwritten! |" + bottom_border + read -p "${cyan}###### Install Moonraker + Mainsail? (Y/n):${default} " yn + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + INST_MAINSAIL="true";; + N|n|No|no) + echo -e "###### > No" + INST_MAINSAIL="false";; + esac + break + done + #ask to change hostname if mainsail should be installed as well + if [ "$INST_MAINSAIL" = "true" ]; then + create_custom_hostname + fi + #user selection for printer.cfg + if [ "$PRINTER_CFG_FOUND" = "false" ]; then + while true; do + echo + warn_msg "No printer.cfg found!" + read -p "${cyan}###### Create a default printer.cfg? (Y/n):${default} " yn + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + SEL_DEF_CFG="true";; + N|n|No|no) + echo -e "###### > No" + SEL_DEF_CFG="false";; + esac + break + done + fi + #user selection for moonraker.log symlink + if [ "$MOONRAKER_SL_FOUND" = "false" ]; then + while true; do + echo + read -p "${cyan}###### Create moonraker.log symlink? (Y/n):${default} " yn + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + SEL_MRLOG_SL="true";; + N|n|No|no) + echo -e "###### > No" + SEL_MRLOG_SL="false";; + esac + break + done + fi + #ask user for more trusted clients + while true; do + echo + top_border + echo -e "| Apart from devices of your local network, you can add |" + echo -e "| additional trusted clients to the moonraker.conf file |" + bottom_border + read -p "${cyan}###### Add additional trusted clients? (y/N):${default} " yn + case "$yn" in + Y|y|Yes|yes) + echo -e "###### > Yes" + ADD_TRUSTED_CLIENT="true" + custom_trusted_clients + ;; + N|n|No|no|"") + echo -e "###### > No" + ADD_TRUSTED_CLIENT="false";; + esac + break + done + #ask user for mainsail default macros + while true; do + echo + read -p "${cyan}###### Add the recommended Mainsail macros? (Y/n):${default} " + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + ADD_MAINSAIL_MACROS="true";; + N|n|No|no) + echo -e "###### > No" + ADD_MAINSAIL_MACROS="false";; + esac + break + done +} + +############################################################# +############################################################# + +moonraker_setup(){ + dep=(wget curl unzip) + dependency_check + status_msg "Downloading Moonraker ..." + if [ -d $MOONRAKER_DIR ]; then + mv -f $MOONRAKER_DIR ${HOME}/moonraker_bak + fi + cd ${HOME} && git clone $MOONRAKER_REPO + ok_msg "Download complete!" + status_msg "Installing Moonraker ..." + $MOONRAKER_DIR/scripts/install-moonraker.sh + ok_msg "Moonraker successfully installed!" +} + +check_for_folder(){ + #check for / create sdcard folder + if [ ! -d ${HOME}/sdcard ]; then + status_msg "Creating sdcard directory ..." + mkdir ${HOME}/sdcard + ok_msg "sdcard directory created!" + fi + ##check for / create klipper_config folder + if [ ! -d ${HOME}/klipper_config ]; then + status_msg "Creating klipper_config directory ..." + mkdir ${HOME}/klipper_config + ok_msg "klipper_config directory created!" + fi +} + +############################################################# +############################################################# + +setup_printer_config(){ + if [ "$PRINTER_CFG_FOUND" = "true" ]; then + backup_printer_cfg + if [ "$PRINTER_CFG_LOC" != "${HOME}/klipper_config/printer.cfg" ]; then + status_msg "Moving printer.cfg to ~/klipper_config ..." + mv $PRINTER_CFG_LOC ${HOME}/klipper_config + ok_msg "Done!" + fi + status_msg "Create symlink in home directory ..." + if [ -f ${HOME}/printer.cfg ]; then + mv ${HOME}/printer.cfg ${HOME}/printer_old.cfg + fi + ln -s ${HOME}/klipper_config/printer.cfg ${HOME} + ok_msg "Done!" + #check printer.cfg for necessary entries + read_printer_cfg + write_printer_cfg + fi + if [ "$SEL_DEF_CFG" = "true" ]; then + create_default_printer_cfg + status_msg "Create symlink in home directory ..." + ln -s ${HOME}/klipper_config/printer.cfg ${HOME} + ok_msg "Done!" + fi + #copy mainsail_macro.cfg + if [ "$ADD_MAINSAIL_MACROS" = "true" ]; then + status_msg "Create mainsail_macros.cfg ..." + if [ ! -f ${HOME}/klipper_config/mainsail_macros.cfg ]; then + cp ${HOME}/kiauh/resources/mainsail_macros.cfg ${HOME}/klipper_config + ok_msg "File created!" + else + warn_msg "File does already exist! Skipping ..." + fi + fi +} + +read_printer_cfg(){ + SC="#*# <---------------------- SAVE_CONFIG ---------------------->" + if [ ! $(grep '^\[virtual_sdcard\]$' ${HOME}/klipper_config/printer.cfg) ]; then + VSD="false" + fi + if [ ! $(grep '^\[pause_resume\]$' ${HOME}/klipper_config/printer.cfg) ]; then + PAUSE_RESUME="false" + fi + if [ ! $(grep '^\[display_status\]$' ${HOME}/klipper_config/printer.cfg) ]; then + DISPLAY_STATUS="false" + fi + #check for a SAVE_CONFIG entry + if [[ $(grep "$SC" ${HOME}/klipper_config/printer.cfg) ]]; then + SC_LINE=$(grep -n "$SC" ${HOME}/klipper_config/printer.cfg | cut -d ":" -f1) + PRE_SC_LINE=$(expr $SC_LINE - 1) + SC_ENTRY="true" + fi +} + +write_printer_cfg(){ + unset write_entries + if [ "$ADD_MAINSAIL_MACROS" = "true" ]; then + write_entries+=("[include klipper_config/mainsail_macros.cfg]") + fi + if [ "$PAUSE_RESUME" = "false" ]; then + write_entries+=("[pause_resume]") + fi + if [ "$DISPLAY_STATUS" = "false" ]; then + write_entries+=("[display_status]") + fi + if [ "$VSD" = "false" ]; then + write_entries+=("[virtual_sdcard]\npath: ~/sdcard") + fi + if [ "${#write_entries[@]}" != "0" ]; then + write_entries+=("\\\n############################\n##### CREATED BY KIAUH #####\n############################") + write_entries=("############################\n" "${write_entries[@]}") + fi + #execute writing + if [ "$SC_ENTRY" = "true" ]; then + PRE_SC_LINE="$(expr $SC_LINE - 1)a" + for entry in "${write_entries[@]}" + do + sed -i "$PRE_SC_LINE $entry" ${HOME}/klipper_config/printer.cfg + done + fi + if [ "$SC_ENTRY" = "false" ]; then + LINE_COUNT="$(wc -l < ${HOME}/klipper_config/printer.cfg)a" + for entry in "${write_entries[@]}" + do + sed -i "$LINE_COUNT $entry" ${HOME}/klipper_config/printer.cfg + done + fi +} + +setup_moonraker_conf(){ + if [ "$MOONRAKER_CONF_FOUND" = "false" ]; then + status_msg "Creating moonraker.conf ..." + cp ${HOME}/kiauh/resources/moonraker.conf ${HOME} + ok_msg "moonraker.conf created!" + status_msg "Writing trusted clients to config ..." + write_default_trusted_clients + ok_msg "Trusted clients written!" + fi + #check for at least one trusted client in an already existing moonraker.conf + #in no entry is found, write default trusted client + if [ "$MOONRAKER_CONF_FOUND" = "true" ]; then + if grep "trusted_clients:" ${HOME}/moonraker.conf -q; then + TC_LINE=$(grep -n "trusted_clients:" ${HOME}/moonraker.conf | cut -d ":" -f1) + FIRST_IP_LINE=$(expr $TC_LINE + 1) + FIRST_IP=$(sed -n 2p ${HOME}/moonraker.conf | cut -d" " -f5) + if [[ ! $FIRST_IP =~ ([0-9].[0-9].[0-9].[0-9]) ]]; then + status_msg "Writing trusted clients to config ..." + write_default_trusted_clients + ok_msg "Trusted clients written!" + fi + fi + fi +} + +############################################################# +############################################################# + +create_default_printer_cfg(){ +#create default config +touch ${HOME}/klipper_config/printer.cfg +cat <> ${HOME}/klipper_config/printer.cfg + +########################## +### CREATED WITH KIAUH ### +########################## +[virtual_sdcard] +path: ~/sdcard + +[pause_resume] +[display_status] +[include klipper_config/mainsail_macros.cfg] + +########################## +########################## +DEFAULT_CFG +} + +write_default_trusted_clients(){ + DEFAULT_IP=$(hostname -I) + status_msg "Your devices current IP adress is:\n${cyan}● $DEFAULT_IP ${default}" + #make IP of the device KIAUH is exectuted on as + #default trusted client and expand the IP range from 0 - 255 + DEFAULT_IP_RANGE="$(echo "$DEFAULT_IP" | cut -d"." -f1-3).0/24" + status_msg "Writing the following IP range to moonraker.conf:\n${cyan}● $DEFAULT_IP_RANGE ${default}" + #write the ip range in the first line below "trusted clients" + #example: 192.168.1.0/24 + sed -i "/trusted_clients\:/a \ \ \ \ $DEFAULT_IP_RANGE" ${HOME}/moonraker.conf + ok_msg "IP range of ${cyan}$DEFAULT_IP_RANGE${default} written to moonraker.conf!" +} + +############################################################# +############################################################# + +custom_trusted_clients(){ + if [ "$ADD_TRUSTED_CLIENT" = "true" ]; then + unset trusted_arr + echo + top_border + echo -e "| You can now add additional trusted clients to your |" + echo -e "| moonraker.conf file. Be warned, that there is no |" + echo -e "| spellcheck to check for valid input. |" + echo -e "| Make sure to type the IP correct! |" + echo -e "|-------------------------------------------------------|" + echo -e "| You can add as many IPs as you want. |" + echo -e "| When you are done type '${cyan}done${default}' to exit this dialoge. |" + bottom_border + while true; do + read -p "${cyan}###### Enter IP and press ENTER:${default} " TRUSTED_IP + case "$TRUSTED_IP" in + done) + echo + echo -e "List of IPs to add:" + for ip in ${trusted_arr[@]} + do + echo -e "${cyan}● $ip ${default}" + done + while true; do + echo + echo -e "Select 'Yes' to confirm, 'No' to start again" + echo -e "or 'Q' to abort and skip." + read -p "${cyan}###### Confirm writing (Y/n/q):${default} " yn + case "$yn" in + Y|y|Yes|yes|"") + echo -e "###### > Yes" + TUSTED_CLIENT_CONFIRM="true" + break;; + N|n|No|no) + echo -e "###### > No" + custom_trusted_clients + break;; + Q|q) + unset trusted_arr + echo -e "###### > Abort" + echo -e "${red}Aborting ...${default}" + break;; + esac + done + break;; + *) trusted_arr+=($TRUSTED_IP);; + esac + done + fi +} + +write_custom_trusted_clients(){ + if [ "$TUSTED_CLIENT_CONFIRM" = "true" ]; then + if [ "${#trusted_arr[@]}" != "0" ]; then + for ip in ${trusted_arr[@]} + do + sed -i "/trusted_clients\:/a \ \ \ \ $ip" ${HOME}/moonraker.conf + done + ok_msg "Custom IPs written to moonraker.conf!" + fi + fi +} + +symlink_moonraker_log(){ + #create a moonraker.log symlink in klipper_config-dir just for convenience + if [ "$SEL_MRLOG_SL" = "true" ]; then + status_msg "Creating moonraker.log symlink ..." + ln -s /tmp/moonraker.log ${HOME}/klipper_config/moonraker.log + ok_msg "Symlink created!" + fi +} \ No newline at end of file