diff --git a/kiauh.sh b/kiauh.sh index 946311d..2b04a44 100755 --- a/kiauh.sh +++ b/kiauh.sh @@ -16,16 +16,23 @@ KLIPPER_DIR=${HOME}/klipper KLIPPY_ENV_DIR=${HOME}/klippy-env KLIPPER_SERVICE1=/etc/init.d/klipper KLIPPER_SERVICE2=/etc/default/klipper -#dwc2 -DWC2FK_DIR=${HOME}/dwc2-for-klipper-socket -DWC_ENV_DIR=${HOME}/dwc-env -DWC2_DIR=${HOME}/sdcard/web -#mainsail/moonraker -MAINSAIL_DIR=${HOME}/mainsail +#nginx +NGINX_SA=/etc/nginx/sites_available +NGINX_SE=/etc/nginx/sites_enabled +NGINX_CONFD=/etc/nginx/conf.d +#moonraker MOONRAKER_DIR=${HOME}/moonraker MOONRAKER_ENV_DIR=${HOME}/moonraker-env MOONRAKER_SERVICE1=/etc/init.d/moonraker MOONRAKER_SERVICE2=/etc/default/moonraker +#mainsail +MAINSAIL_DIR=${HOME}/mainsail +#fluidd +FLUIDD_DIR=${HOME}/fluidd +#dwc2 +DWC2FK_DIR=${HOME}/dwc2-for-klipper-socket +DWC_ENV_DIR=${HOME}/dwc-env +DWC2_DIR=${HOME}/sdcard/web #octoprint OCTOPRINT_DIR=${HOME}/OctoPrint OCTOPRINT_CFG_DIR=${HOME}/.octoprint diff --git a/resources/common_vars_nginx.cfg b/resources/common_vars_nginx.cfg new file mode 100644 index 0000000..9c3f85e --- /dev/null +++ b/resources/common_vars_nginx.cfg @@ -0,0 +1,6 @@ +# /etc/nginx/conf.d/common_vars.conf + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} \ No newline at end of file diff --git a/resources/fluidd_nginx.cfg b/resources/fluidd_nginx.cfg new file mode 100644 index 0000000..ee0cfa2 --- /dev/null +++ b/resources/fluidd_nginx.cfg @@ -0,0 +1,77 @@ +# /etc/nginx/sites-available/fluidd + +server { + listen 80; + listen [::]:80; + + access_log /var/log/nginx/fluidd-access.log; + error_log /var/log/nginx/fluidd-error.log; + + #web_path from fluidd static files + root /home/pi/fluidd; + + index index.html; + server_name _; + + #max upload size for gcodes + client_max_body_size 200M; + + location / { + try_files $uri $uri/ /index.html; + } + + location /printer { + proxy_pass http://apiserver/printer; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + } + + location /api { + proxy_pass http://apiserver/api; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + } + + location /access { + proxy_pass http://apiserver/access; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + } + + location /websocket { + proxy_pass http://apiserver/websocket; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 86400; + } + + location /machine { + proxy_pass http://apiserver/machine; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + } + + location /server { + proxy_pass http://apiserver/server; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Scheme $scheme; + } + + location /webcam/ { + proxy_pass http://mjpgstreamer/; + } +} \ No newline at end of file diff --git a/resources/mainsail_nginx.cfg b/resources/mainsail_nginx.cfg index 8d54ca3..4a3e93f 100644 --- a/resources/mainsail_nginx.cfg +++ b/resources/mainsail_nginx.cfg @@ -1,19 +1,4 @@ -map $http_upgrade $connection_upgrade { - default upgrade; - '' close; -} - -upstream apiserver { - #edit your api port here - ip_hash; - server 127.0.0.1:7125; -} - -upstream mjpgstreamer { - #edit your webcam port here - ip_hash; - server 127.0.0.1:8081; -} +# /etc/nginx/sites-available/mainsail server { listen 80; @@ -22,6 +7,16 @@ server { access_log /var/log/nginx/mainsail-access.log; error_log /var/log/nginx/mainsail-error.log; + #disable this section on smaller hardware like a pi zero + gzip on; + gzip_vary on; + gzip_proxied any; + gzip_proxied expired no-cache no-store private auth; + gzip_comp_level 4; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/json application/xml; + #web_path from mainsail static files root /home/pi/mainsail; diff --git a/resources/moonraker_nginx.cfg b/resources/moonraker_nginx.cfg new file mode 100644 index 0000000..c868181 --- /dev/null +++ b/resources/moonraker_nginx.cfg @@ -0,0 +1,13 @@ +# /etc/nginx/conf.d/upstreams.conf + +upstream apiserver { + #edit your api port here + ip_hash; + server 127.0.0.1:7125; +} + +upstream mjpgstreamer { + #edit your webcam port here + ip_hash; + server 127.0.0.1:8081; +} \ No newline at end of file diff --git a/scripts/install_dwc2.sh b/scripts/install_dwc2.sh index 789a4d4..84f09e2 100755 --- a/scripts/install_dwc2.sh +++ b/scripts/install_dwc2.sh @@ -1,6 +1,9 @@ install_dwc2(){ if [ -d $KLIPPER_DIR ]; then system_check_dwc2 + #check for other enabled web interfaces + unset SET_LISTEN_PORT + detect_enabled_sites #ask user for customization get_user_selections_dwc2 #dwc2 main installation @@ -10,7 +13,7 @@ install_dwc2(){ write_printer_cfg_dwc2 #execute customizations disable_octoprint - create_reverse_proxy "dwc2" + set_nginx_cfg "dwc2" set_hostname #after install actions restart_klipper @@ -31,7 +34,6 @@ system_check_dwc2(){ fi #check if octoprint is installed if systemctl is-enabled octoprint.service -q 2>/dev/null; then - unset OCTOPRINT_ENABLED OCTOPRINT_ENABLED="true" fi } @@ -104,9 +106,7 @@ get_user_selections_dwc2(){ #ask user to install reverse proxy dwc2_reverse_proxy_dialog #ask to change hostname - if [ "$SET_REVERSE_PROXY" = "true" ]; then - create_custom_hostname - fi + [ "$SET_NGINX_CFG" = "true" ] && create_custom_hostname #ask user to disable octoprint when such installed service was found if [ "$OCTOPRINT_ENABLED" = "true" ]; then unset DISABLE_OPRINT @@ -191,7 +191,7 @@ download_dwc2_webui(){ GET_DWC2_URL=`curl -s https://api.github.com/repositories/28820678/releases/latest | grep browser_download_url | cut -d'"' -f4` cd $DWC2_DIR status_msg "Downloading DWC2 Web UI ..." - wget $GET_DWC2_URL + wget -O $GET_DWC2_URL ok_msg "Download complete!" status_msg "Unzipping archive ..." unzip -q -o *.zip @@ -295,7 +295,6 @@ DEFAULT_DWC2_CFG ############################################################# dwc2_reverse_proxy_dialog(){ - unset SET_REVERSE_PROXY echo top_border echo -e "| If you want to have a nicer URL or simply need/want | " @@ -306,14 +305,53 @@ dwc2_reverse_proxy_dialog(){ read -p "${cyan}###### Do you want to set up a reverse proxy now? (y/N):${default} " yn case "$yn" in Y|y|Yes|yes) - SET_REVERSE_PROXY="true" + dwc2_port_check break;; N|n|No|no|"") - SET_REVERSE_PROXY="false" break;; *) print_unkown_cmd print_msg && clear_msg;; esac done +} + +dwc2_port_check(){ + if [ "$DWC2_ENABLED" = "false" ]; then + if [ "$SITE_ENABLED" = "true" ]; then + echo "Detected other enabled Interfaces:" + [ "$OCTOPRINT_ENABLED" = "true" ] && echo "${cyan}● OctoPrint - Port:$OCTOPRINT_PORT${default}" + [ "$MAINSAIL_ENABLED" = "true" ] && echo "${cyan}● Mainsail - Port:$MAINSAIL_PORT${default}" + [ "$FLUIDD_ENABLED" = "true" ] && echo "${cyan}● Fluidd - Port:$FLUIDD_PORT${default}" + if [ "$MAINSAIL_PORT" = "80" ] || [ "$OCTOPRINT_PORT" = "80" ] || [ "$FLUIDD_PORT" = "80" ]; then + PORT_80_BLOCKED="true" + fi + if [ "$PORT_80_BLOCKED" = "true" ]; then + [ "$OCTOPRINT_PORT" = "80" ] && echo "${cyan}OctoPrint${default} already listens on Port 80!" + [ "$MAINSAIL_PORT" = "80" ] && echo "${cyan}Mainsail${default} already listens on Port 80!" + [ "$FLUIDD_PORT" = "80" ] && echo "${cyan}Fluidd${default} already listens on Port 80!" + echo "You need to choose a different Port for DWC2 than the above!" + select_dwc2_port + fi + else + DEFAULT_PORT=$(grep listen ${SRCDIR}/kiauh/resources/dwc2_nginx.cfg | head -1 | sed 's/^\s*//' | cut -d" " -f2 | cut -d";" -f1) + SET_LISTEN_PORT=$DEFAULT_PORT + fi + SET_NGINX_CFG="true" + else + SET_NGINX_CFG="false" + fi +} + +select_dwc2_port(){ + while true; do + read -p "${cyan}Please enter a new Port:${default} " NEW_PORT + if [ "$NEW_PORT" != "$MAINSAIL_PORT" ] && [ "$NEW_PORT" != "$OCTOPRINT_PORT" ] && [ "$NEW_PORT" != "$FLUIDD_PORT" ]; then + echo "Setting port $NEW_PORT for DWC2!" + SET_LISTEN_PORT=$NEW_PORT + break + else + echo "That port is already taken! Select a different one!" + fi + done } \ No newline at end of file diff --git a/scripts/install_fluidd.sh b/scripts/install_fluidd.sh new file mode 100755 index 0000000..a7cd0c4 --- /dev/null +++ b/scripts/install_fluidd.sh @@ -0,0 +1,75 @@ +install_fluidd(){ + if [ "$INST_FLUIDD" = "true" ]; then + unset SET_LISTEN_PORT + #check for other enabled web interfaces + detect_enabled_sites + #check if another site already listens to port 80 + fluidd_port_check + #creating the fluidd nginx cfg + set_nginx_cfg "fluidd" + fluidd_setup && ok_msg "Fluidd installation complete!"; echo + fi +} + +fluidd_port_check(){ + if [ "$FLUIDD_ENABLED" = "false" ]; then + if [ "$SITE_ENABLED" = "true" ]; then + echo "Detected other enabled Interfaces:" + [ "$MAINSAIL_ENABLED" = "true" ] && echo "${cyan}● Mainsail - Port:$MAINSAIL_PORT${default}" + [ "$DWC2_ENABLED" = "true" ] && echo "${cyan}● DWC2 - Port:$DWC2_PORT${default}" + [ "$OCTOPRINT_ENABLED" = "true" ] && echo "${cyan}● OctoPrint - Port:$OCTOPRINT_PORT${default}" + if [ "$MAINSAIL_PORT" = "80" ] || [ "$DWC2_PORT" = "80" ] || [ "$OCTOPRINT_PORT" = "80" ]; then + PORT_80_BLOCKED="true" + fi + if [ "$PORT_80_BLOCKED" = "true" ]; then + [ "$MAINSAIL_PORT" = "80" ] && echo "${cyan}Mainsail${default} already listens on Port 80!" + [ "$DWC2_PORT" = "80" ] && echo "${cyan}DWC2${default} already listens on Port 80!" + [ "$OCTOPRINT_PORT" = "80" ] && echo "${cyan}OctoPrint${default} already listens on Port 80!" + echo "You need to choose a different Port for Fluidd than the above!" + select_fluidd_port + fi + else + DEFAULT_PORT=$(grep listen ${SRCDIR}/kiauh/resources/fluidd_nginx.cfg | head -1 | sed 's/^\s*//' | cut -d" " -f2 | cut -d";" -f1) + SET_LISTEN_PORT=$DEFAULT_PORT + fi + SET_NGINX_CFG="true" + else + SET_NGINX_CFG="false" + fi +} + +select_fluidd_port(){ + while true; do + read -p "${cyan}Please enter a new Port:${default} " NEW_PORT + if [ "$NEW_PORT" != "$MAINSAIL_PORT" ] && [ "$NEW_PORT" != "$DWC2_PORT" ] && [ "$NEW_PORT" != "$OCTOPRINT_PORT" ]; then + echo "Setting port $NEW_PORT for Mainsail!" + SET_LISTEN_PORT=$NEW_PORT + break + else + echo "That port is already taken! Select a different one!" + fi + done +} + +get_fluidd_ver(){ + FLUIDD_VERSION=$(curl -s https://api.github.com/repositories/295836951/tags | grep name | cut -d'"' -f4 | cut -d"v" -f2 | head -1) +} + +fluidd_dl_url(){ + get_fluidd_ver + FLUIDD_URL=https://github.com/cadriel/fluidd/releases/download/v$FLUIDD_VERSION/fluidd_v$FLUIDD_VERSION.zip +} + +fluidd_setup(){ + fluidd_dl_url + #clean up an existing fluidd folder + [ -d $FLUIDD_DIR ] && rm -rf $FLUIDD_DIR + #create fresh fluidd folder and download fluidd + mkdir $FLUIDD_DIR + cd $FLUIDD_DIR + status_msg "Downloading Fluidd $FLUIDD_VERSION ..." + wget -O fluidd.zip $FLUIDD_URL && status_msg "Extracting archive ..." && unzip -o fluidd.zip && rm fluidd.zip + ### write fluidd version to file for update check reasons + echo "$FLUIDD_VERSION" > $FLUIDD_DIR/version + echo +} \ No newline at end of file diff --git a/scripts/install_mainsail.sh b/scripts/install_mainsail.sh index 537995f..ae0a01a 100755 --- a/scripts/install_mainsail.sh +++ b/scripts/install_mainsail.sh @@ -1,47 +1,73 @@ install_mainsail(){ if [ "$INST_MAINSAIL" = "true" ]; then - unset SET_REVERSE_PROXY && SET_REVERSE_PROXY="true" #quick and dirty hack to make mainsail reverse proxy install, needs polish - create_reverse_proxy "mainsail" - mainsail_setup - test_nginx - ok_msg "Mainsail installation complete!"; echo + unset SET_LISTEN_PORT + #check for other enabled web interfaces + detect_enabled_sites + #check if another site already listens to port 80 + mainsail_port_check + #creating the mainsail nginx cfg + set_nginx_cfg "mainsail" + mainsail_setup && ok_msg "Mainsail installation complete!"; echo fi } -test_nginx(){ - HOST_IP=$(hostname -I | cut -d" " -f1) - status_msg "Testing Nginx ..." - sleep 5 - status_msg "API response from http://$HOST_IP/printer/info :" - API_RESPONSE="$(curl -sG4m5 http://$HOST_IP/printer/info)" - echo -e "${cyan}$API_RESPONSE${default}" - if [ $(curl -sG4 "http://$HOST_IP/printer/info" | grep '^{"result"' -c) -eq 1 ]; then - echo; ok_msg "Nginx is working correctly!"; echo +mainsail_port_check(){ + if [ "$MAINSAIL_ENABLED" = "false" ]; then + if [ "$SITE_ENABLED" = "true" ]; then + echo "Detected other enabled Interfaces:" + [ "$FLUIDD_ENABLED" = "true" ] && echo "${cyan}● Fluidd - Port:$FLUIDD_PORT${default}" + [ "$DWC2_ENABLED" = "true" ] && echo "${cyan}● DWC2 - Port:$DWC2_PORT${default}" + [ "$OCTOPRINT_ENABLED" = "true" ] && echo "${cyan}● OctoPrint - Port:$OCTOPRINT_PORT${default}" + if [ "$FLUIDD_PORT" = "80" ] || [ "$DWC2_PORT" = "80" ] || [ "$OCTOPRINT_PORT" = "80" ]; then + PORT_80_BLOCKED="true" + fi + if [ "$PORT_80_BLOCKED" = "true" ]; then + [ "$FLUIDD_PORT" = "80" ] && echo "${cyan}Fluidd${default} already listens on Port 80!" + [ "$DWC2_PORT" = "80" ] && echo "${cyan}DWC2${default} already listens on Port 80!" + [ "$OCTOPRINT_PORT" = "80" ] && echo "${cyan}OctoPrint${default} already listens on Port 80!" + echo "You need to choose a different Port for Mainsail than the above!" + select_mainsail_port + fi + else + DEFAULT_PORT=$(grep listen ${SRCDIR}/kiauh/resources/mainsail_nginx.cfg | head -1 | sed 's/^\s*//' | cut -d" " -f2 | cut -d";" -f1) + SET_LISTEN_PORT=$DEFAULT_PORT + fi + SET_NGINX_CFG="true" else - echo; warn_msg "Nginx is not working correctly!"; echo + SET_NGINX_CFG="false" fi } +select_mainsail_port(){ + while true; do + read -p "${cyan}Please enter a new Port:${default} " NEW_PORT + if [ "$NEW_PORT" != "$FLUIDD_PORT" ] && [ "$NEW_PORT" != "$DWC2_PORT" ] && [ "$NEW_PORT" != "$OCTOPRINT_PORT" ]; then + echo "Setting port $NEW_PORT for Mainsail!" + SET_LISTEN_PORT=$NEW_PORT + break + else + echo "That port is already taken! Select a different one!" + fi + done +} + get_mainsail_ver(){ MAINSAIL_VERSION=$(curl -s https://api.github.com/repositories/240875926/tags | grep name | cut -d'"' -f4 | cut -d"v" -f2 | head -1) } mainsail_dl_url(){ get_mainsail_ver - MAINSAIL_URL=https://github.com/meteyou/mainsail/releases/download/v"$MAINSAIL_VERSION"/mainsail-beta-"$MAINSAIL_VERSION".zip + MAINSAIL_URL=https://github.com/meteyou/mainsail/releases/download/v$MAINSAIL_VERSION/mainsail-beta-$MAINSAIL_VERSION.zip } mainsail_setup(){ mainsail_dl_url #clean up an existing mainsail folder - if [ -d $MAINSAIL_DIR ]; then - rm -rf $MAINSAIL_DIR - fi + [ -d $MAINSAIL_DIR ] && rm -rf $MAINSAIL_DIR #create fresh mainsail folder and download mainsail - mkdir $MAINSAIL_DIR - cd $MAINSAIL_DIR + mkdir $MAINSAIL_DIR && cd $MAINSAIL_DIR status_msg "Downloading Mainsail v$MAINSAIL_VERSION ..." - wget -q -O mainsail.zip $MAINSAIL_URL && status_msg "Extracting archive ..." && unzip -o mainsail.zip && rm mainsail.zip + wget -O mainsail.zip $MAINSAIL_URL && status_msg "Extracting archive ..." && unzip -o mainsail.zip && rm mainsail.zip ### write mainsail version to file for update check reasons echo "$MAINSAIL_VERSION" > $MAINSAIL_DIR/version echo diff --git a/scripts/install_moonraker.sh b/scripts/install_moonraker.sh index bc54555..c5fcf3f 100755 --- a/scripts/install_moonraker.sh +++ b/scripts/install_moonraker.sh @@ -19,7 +19,9 @@ install_moonraker(){ restart_moonraker restart_klipper test_api - install_mainsail + #test_nginx + #install_mainsail + #install_fluidd } system_check_moonraker(){ @@ -67,35 +69,42 @@ system_check_moonraker(){ 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" - break;; - N|n|No|no) - echo -e "###### > No" - INST_MAINSAIL="false" - break;; - *) - print_unkown_cmd - print_msg && clear_msg;; - esac - done - #ask to change hostname if mainsail should be installed as well - if [ "$INST_MAINSAIL" = "true" ]; then - create_custom_hostname - fi + #while true; do + # echo + # top_border + # echo -e "| Install the Moonraker API only? |" + # blank_line + # echo -e "| You can choose to install Moonraker and one of the |" + # echo -e "| following web interfaces: |" + # echo -e "| 1) Mainsail |" + # echo -e "| 2) Fluidd |" + # hr + # echo -e "| If you want to install a web interface later, just |" + # echo -e "| press 'ENTER' to continue the Moonraker installation. |" + # bottom_border + # read -p "${cyan}Please choose:${default} " selection + # case "$selection" in + # "") + # echo -e "###### > Moonraker only" + # INST_NOUI="true" + # break;; + # 1) + # echo -e "###### > Moonraker + Mainsail" + # INST_MAINSAIL="true" + # break;; + # 2) + # echo -e "###### > Moonraker + Fluidd" + # INST_FLUIDD="true" + # break;; + # *) + # print_unkown_cmd + # print_msg && clear_msg;; + # esac + #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 unset SEL_DEF_CFG @@ -252,7 +261,7 @@ get_user_selections_moonraker(){ echo -e "| |" echo -e "| 1) Remove packages (recommend) |" echo -e "| 2) Disable only (may cause issues) |" - echo -e "| ${red}3) Skip this step (not recommend)${default} |" + echo -e "| ${red}3) Skip this step (not recommended)${default} |" bottom_border read -p "${cyan}###### Please choose:${default} " action unset REMOVE_HAPROXY @@ -312,6 +321,8 @@ moonraker_setup(){ ok_msg "Download complete!" status_msg "Installing Moonraker ..." $MOONRAKER_DIR/scripts/install-moonraker.sh + #copy moonraker configuration for nginx to /etc/nginx/conf.d + setup_moonraker_nginx_cfg #backup a possible existing printer.cfg at the old location #and before patching in the new location backup_printer_cfg @@ -480,6 +491,15 @@ setup_moonraker_conf(){ fi } +setup_moonraker_nginx_cfg(){ + if [ ! -f $NGINX_CONFD/upstreams.conf ]; then + sudo cp ${SRCDIR}/kiauh/resources/moonraker_nginx.cfg $NGINX_CONFD/upstreams.conf + fi + if [ ! -f $NGINX_CONFD/common_vars.conf ]; then + sudo cp ${SRCDIR}/kiauh/resources/common_vars_nginx.cfg $NGINX_CONFD/common_vars.conf + fi +} + ############################################################# ############################################################# @@ -661,3 +681,17 @@ test_api(){ echo; warn_msg "Klipper API not working correctly!"; echo fi } + +#test_nginx(){ +# HOST_IP=$(hostname -I | cut -d" " -f1) +# status_msg "Testing Nginx ..." +# sleep 5 +# status_msg "API response from http://$HOST_IP/printer/info :" +# API_RESPONSE="$(curl -sG4m5 http://$HOST_IP/printer/info)" +# echo -e "${cyan}$API_RESPONSE${default}" +# if [ $(curl -sG4 "http://$HOST_IP/printer/info" | grep '^{"result"' -c) -eq 1 #]; then +# echo; ok_msg "Nginx is working correctly!"; echo +# else +# echo; warn_msg "Nginx is not working correctly!"; echo +# fi +#} \ No newline at end of file diff --git a/scripts/install_octoprint.sh b/scripts/install_octoprint.sh index 0df8495..90e956d 100755 --- a/scripts/install_octoprint.sh +++ b/scripts/install_octoprint.sh @@ -1,4 +1,7 @@ install_octoprint(){ + #check for other enabled web interfaces + unset SET_LISTEN_PORT + detect_enabled_sites #ask user for customization get_user_selections_octoprint #octoprint main installation @@ -9,7 +12,7 @@ install_octoprint(){ add_reboot_permission create_config_yaml #execute customizations - create_reverse_proxy "octoprint" + set_nginx_cfg "octoprint" set_hostname #after install actions load_octoprint_server @@ -20,9 +23,7 @@ get_user_selections_octoprint(){ #ask user to set a reverse proxy octoprint_reverse_proxy_dialog #ask to change hostname - if [ "$SET_REVERSE_PROXY" = "true" ]; then - create_custom_hostname - fi + [ "$SET_NGINX_CFG" = "true" ] && create_custom_hostname status_msg "Installation will start now! Please wait ..." } @@ -113,7 +114,6 @@ add_reboot_permission(){ } octoprint_reverse_proxy_dialog(){ - unset SET_REVERSE_PROXY echo top_border echo -e "| If you want to have nicer URLs or simply need | " @@ -128,10 +128,9 @@ octoprint_reverse_proxy_dialog(){ echo -e "${default}" case "$yn" in Y|y|Yes|yes) - SET_REVERSE_PROXY="true" + octoprint_port_check break;; N|n|No|no|"") - SET_REVERSE_PROXY="false" break;; *) print_unkown_cmd @@ -140,6 +139,46 @@ octoprint_reverse_proxy_dialog(){ done } +octoprint_port_check(){ + if [ "$OCTOPRINT_ENABLED" = "false" ]; then + if [ "$SITE_ENABLED" = "true" ]; then + echo "Detected other enabled Interfaces:" + [ "$MAINSAIL_ENABLED" = "true" ] && echo "${cyan}● Mainsail - Port:$MAINSAIL_PORT${default}" + [ "$FLUIDD_ENABLED" = "true" ] && echo "${cyan}● Fluidd - Port:$FLUIDD_PORT${default}" + [ "$DWC2_ENABLED" = "true" ] && echo "${cyan}● DWC2 - Port:$DWC2_PORT${default}" + if [ "$MAINSAIL_PORT" = "80" ] || [ "$DWC2_PORT" = "80" ] || [ "$FLUIDD_PORT" = "80" ]; then + PORT_80_BLOCKED="true" + fi + if [ "$PORT_80_BLOCKED" = "true" ]; then + [ "$MAINSAIL_PORT" = "80" ] && echo "${cyan}Mainsail${default} already listens on Port 80!" + [ "$FLUIDD_PORT" = "80" ] && echo "${cyan}Fluidd${default} already listens on Port 80!" + [ "$DWC2_PORT" = "80" ] && echo "${cyan}DWC2${default} already listens on Port 80!" + echo "You need to choose a different Port for OctoPrint than the above!" + select_octoprint_port + fi + else + DEFAULT_PORT=$(grep listen ${SRCDIR}/kiauh/resources/octoprint_nginx.cfg | head -1 | sed 's/^\s*//' | cut -d" " -f2 | cut -d";" -f1) + SET_LISTEN_PORT=$DEFAULT_PORT + fi + SET_NGINX_CFG="true" + else + SET_NGINX_CFG="false" + fi +} + +select_octoprint_port(){ + while true; do + read -p "${cyan}Please enter a new Port:${default} " NEW_PORT + if [ "$NEW_PORT" != "$MAINSAIL_PORT" ] && [ "$NEW_PORT" != "$DWC2_PORT" ] && [ "$NEW_PORT" != "$FLUIDD_PORT" ]; then + echo "Setting port $NEW_PORT for OctoPrint!" + SET_LISTEN_PORT=$NEW_PORT + break + else + echo "That port is already taken! Select a different one!" + fi + done +} + create_config_yaml(){ if [ ! -d $OCTOPRINT_CFG_DIR ]; then status_msg "Creating config.yaml ..." diff --git a/scripts/set_reverse_proxy.sh b/scripts/network_functions.sh similarity index 58% rename from scripts/set_reverse_proxy.sh rename to scripts/network_functions.sh index f024801..4d72664 100755 --- a/scripts/set_reverse_proxy.sh +++ b/scripts/network_functions.sh @@ -1,29 +1,81 @@ -create_reverse_proxy(){ - if [ "$SET_REVERSE_PROXY" = "true" ]; then +set_nginx_cfg(){ + if [ "$SET_NGINX_CFG" = "true" ]; then #check for dependencies dep=(nginx) dependency_check #execute operations status_msg "Creating Nginx configuration for $1 ..." - cat ${HOME}/kiauh/resources/$1_nginx.cfg > ${HOME}/kiauh/resources/$1 - sudo mv ${HOME}/kiauh/resources/$1 /etc/nginx/sites-available/$1 - #ONLY FOR MAINSAIL: replace username if not "pi" - if [ "$1" = "mainsail" ]; then - sudo sed -i "/root/s/pi/${USER}/" /etc/nginx/sites-available/mainsail - fi + #copy content from resources to the respective nginx config file + cat ${SRCDIR}/kiauh/resources/$1_nginx.cfg > ${SRCDIR}/kiauh/resources/$1 + ##edit the nginx config file before moving it + if [ "$SET_LISTEN_PORT" != "$DEFAULT_PORT" ]; then + status_msg "Configuring port for $1 ..." + #set listen port ipv4 + sed -i "s/listen\s[0-9]*;/listen $SET_LISTEN_PORT;/" ${SRCDIR}/kiauh/resources/$1 + #set listen port ipv6 + sed -i "s/listen\s\[\:*\]\:[0-9]*;/listen \[::\]\:$SET_LISTEN_PORT;/" ${SRCDIR}/kiauh/resources/$1 + fi + #set correct user + if [ "$1" = "mainsail" ] || [ "$1" = "fluidd" ]; then + sudo sed -i "/root/s/pi/${USER}/" ${SRCDIR}/kiauh/resources/$1 + fi + #moving the config file into correct directory + sudo mv ${SRCDIR}/kiauh/resources/$1 /etc/nginx/sites-available/$1 ok_msg "Nginx configuration for $1 was set!" - #remove default config - if [ -e /etc/nginx/sites-enabled/default ]; then - sudo rm /etc/nginx/sites-enabled/default - fi - #create symlink for own configs - if [ ! -e /etc/nginx/sites-enabled/$1 ]; then - sudo ln -s /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/ + if [ "$SET_LISTEN_PORT" != "" ]; then + ok_msg "$1 listening on port $SET_LISTEN_PORT!" + else + ok_msg "$1 listening on def-port $DEFAULT_PORT!" fi + #remove nginx default config + [ -e /etc/nginx/sites-enabled/default ] && sudo rm /etc/nginx/sites-enabled/default + #create symlink for own sites + [ ! -e /etc/nginx/sites-enabled/$1 ] && sudo ln -s /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/ restart_nginx fi } +read_listen_port(){ + LISTEN_PORT=$(grep listen /etc/nginx/sites-enabled/$1 | head -1 | sed 's/^\s*//' | cut -d" " -f2 | cut -d";" -f1) +} + +detect_enabled_sites(){ + #check if there is another UI config already installed + #and reads the port they are listening on + if [ -e /etc/nginx/sites-enabled/mainsail ]; then + SITE_ENABLED="true" && MAINSAIL_ENABLED="true" + read_listen_port "mainsail" + MAINSAIL_PORT=$LISTEN_PORT + #echo "debug: Mainsail listens on port: $MAINSAIL_PORT" + else + MAINSAIL_ENABLED="false" + fi + if [ -e /etc/nginx/sites-enabled/fluidd ]; then + SITE_ENABLED="true" && FLUIDD_ENABLED="true" + read_listen_port "fluidd" + FLUIDD_PORT=$LISTEN_PORT + #echo "debug: Fluidd listens on port: $FLUIDD_PORT" + else + FLUIDD_ENABLED="false" + fi + if [ -e /etc/nginx/sites-enabled/dwc2 ]; then + SITE_ENABLED="true" && DWC2_ENABLED="true" + read_listen_port "dwc2" + DWC2_PORT=$LISTEN_PORT + #echo "debug: DWC2 listens on port: $DWC2_PORT" + else + DWC2_ENABLED="false" + fi + if [ -e /etc/nginx/sites-enabled/octoprint ]; then + SITE_ENABLED="true" && OCTOPRINT_ENABLED="true" + read_listen_port "octoprint" + OCTOPRINT_PORT=$LISTEN_PORT + #echo "debug: OctoPrint listens on port: $OCTOPRINT_PORT" + else + OCTOPRINT_ENABLED="false" + fi +} + create_custom_hostname(){ echo top_border diff --git a/scripts/remove.sh b/scripts/remove.sh index 489be4f..87885ac 100755 --- a/scripts/remove.sh +++ b/scripts/remove.sh @@ -86,6 +86,8 @@ remove_moonraker(){ $MOONRAKER_SERVICE2 $MOONRAKER_DIR $MOONRAKER_ENV_DIR + $NGINX_CONFD/upstreams.conf + $NGINX_CONFD/common_vars.conf ${HOME}/moonraker.conf ${HOME}/moonraker.log ${HOME}/klipper_config/moonraker.log @@ -139,6 +141,11 @@ remove_moonraker(){ rm -rf ${HOME}/moonraker.log ${HOME}/klipper_config/moonraker.log ${HOME}/klipper_config/klippy.log /tmp/moonraker.log ok_msg "Files removed!" fi + #remove moonraker nginx config + if [[ -e $NGINX_CONFD/upstreams.conf || -e $NGINX_CONFD/common_vars.conf ]]; then + status_msg "Removing Moonraker NGINX configuration ..." + sudo rm -f $NGINX_CONFD/upstreams.conf $NGINX_CONFD/common_vars.conf && ok_msg "Moonraker NGINX configuration removed!" + fi #remove legacy api key if [ -e ${HOME}/.klippy_api_key ]; then status_msg "Removing legacy API Key ..." @@ -183,6 +190,33 @@ remove_mainsail(){ fi } +remove_fluidd(){ + data_arr=( + $fluidd_DIR + /etc/nginx/sites-available/fluidd + /etc/nginx/sites-enabled/fluidd + ) + print_error "Fluidd" && data_count=() + if [ "$ERROR_MSG" = "" ]; then + #remove fluidd dir + if [ -d $FLUIDD_DIR ]; then + status_msg "Removing Fluidd directory ..." + rm -rf $FLUIDD_DIR && ok_msg "Directory removed!" + fi + #remove fluidd config for nginx + if [ -e /etc/nginx/sites-available/fluidd ]; then + status_msg "Removing Fluidd configuration for Nginx ..." + sudo rm /etc/nginx/sites-available/fluidd && ok_msg "File removed!" + fi + #remove fluidd symlink for nginx + if [ -L /etc/nginx/sites-enabled/fluidd ]; then + status_msg "Removing Fluidd Symlink for Nginx ..." + sudo rm /etc/nginx/sites-enabled/fluidd && ok_msg "File removed!" + fi + CONFIRM_MSG="Fluidd successfully removed!" + fi +} + ############################################################# ############################################################# diff --git a/scripts/status.sh b/scripts/status.sh index 8f79f4b..a772056 100755 --- a/scripts/status.sh +++ b/scripts/status.sh @@ -258,6 +258,35 @@ compare_dwc2_versions(){ ############################################################# ############################################################# +read_moonraker_versions(){ + if [ -d $MOONRAKER_DIR ] && [ -d $MOONRAKER_DIR/.git ]; then + cd $MOONRAKER_DIR + git fetch origin master -q + LOCAL_MOONRAKER_COMMIT=$(git rev-parse --short=8 HEAD) + REMOTE_MOONRAKER_COMMIT=$(git rev-parse --short=8 origin/master) + else + LOCAL_MOONRAKER_COMMIT="${red}--------${default}" + REMOTE_MOONRAKER_COMMIT="${red}--------${default}" + fi +} + +compare_moonraker_versions(){ + unset MOONRAKER_UPDATE_AVAIL + read_moonraker_versions + #echo "Local: $LOCAL_MOONRAKER_COMMIT" + #echo "Remote: $REMOTE_MOONRAKER_COMMIT" + if [ "$LOCAL_MOONRAKER_COMMIT" != "$REMOTE_MOONRAKER_COMMIT" ]; then + LOCAL_MOONRAKER_COMMIT="${yellow}$LOCAL_MOONRAKER_COMMIT${default}" + REMOTE_MOONRAKER_COMMIT="${green}$REMOTE_MOONRAKER_COMMIT${default}" + MOONRAKER_UPDATE_AVAIL="true" + update_arr+=(update_moonraker) + else + LOCAL_MOONRAKER_COMMIT="${green}$LOCAL_MOONRAKER_COMMIT${default}" + REMOTE_MOONRAKER_COMMIT="${green}$REMOTE_MOONRAKER_COMMIT${default}" + MOONRAKER_UPDATE_AVAIL="false" + fi +} + read_local_mainsail_version(){ unset MAINSAIL_IS_INSTALLED if [ -e $MAINSAIL_DIR/version ]; then @@ -297,35 +326,48 @@ compare_mainsail_versions(){ fi } -read_moonraker_versions(){ - if [ -d $MOONRAKER_DIR ] && [ -d $MOONRAKER_DIR/.git ]; then - cd $MOONRAKER_DIR - git fetch origin master -q - LOCAL_MOONRAKER_COMMIT=$(git rev-parse --short=8 HEAD) - REMOTE_MOONRAKER_COMMIT=$(git rev-parse --short=8 origin/master) +read_local_fluidd_version(){ + unset FLUIDD_IS_INSTALLED + if [ -e $FLUIDD_DIR/version ]; then + FLUIDD_LOCAL_VER=$(head -n 1 $FLUIDD_DIR/version) + FLUIDD_IS_INSTALLED="true" else - LOCAL_MOONRAKER_COMMIT="${red}--------${default}" - REMOTE_MOONRAKER_COMMIT="${red}--------${default}" + FLUIDD_LOCAL_VER="${red}-----${default}" + FLUIDD_IS_INSTALLED="false" fi } -compare_moonraker_versions(){ - unset MOONRAKER_UPDATE_AVAIL - read_moonraker_versions - #echo "Local: $LOCAL_MOONRAKER_COMMIT" - #echo "Remote: $REMOTE_MOONRAKER_COMMIT" - if [ "$LOCAL_MOONRAKER_COMMIT" != "$REMOTE_MOONRAKER_COMMIT" ]; then - LOCAL_MOONRAKER_COMMIT="${yellow}$LOCAL_MOONRAKER_COMMIT${default}" - REMOTE_MOONRAKER_COMMIT="${green}$REMOTE_MOONRAKER_COMMIT${default}" - MOONRAKER_UPDATE_AVAIL="true" - update_arr+=(update_moonraker) +read_remote_fluidd_version(){ + #remote checks don't work without curl installed! + if [[ ! $(dpkg-query -f'${Status}' --show curl 2>/dev/null) = *\ installed ]]; then + FLUIDD_REMOTE_VER="${red}-----${default}" else - LOCAL_MOONRAKER_COMMIT="${green}$LOCAL_MOONRAKER_COMMIT${default}" - REMOTE_MOONRAKER_COMMIT="${green}$REMOTE_MOONRAKER_COMMIT${default}" - MOONRAKER_UPDATE_AVAIL="false" + get_fluidd_ver + FLUIDD_REMOTE_VER=$FLUIDD_VERSION fi } +compare_fluidd_versions(){ + unset FLUIDD_UPDATE_AVAIL + read_local_fluidd_version + read_remote_fluidd_version + #echo "Local: $FLUIDD_LOCAL_VER" + #echo "Remote: $FLUIDD_REMOTE_VER" + if [ "$FLUIDD_LOCAL_VER" != "$FLUIDD_REMOTE_VER" ] && [ "$FLUIDD_IS_INSTALLED" = "true" ]; then + FLUIDD_LOCAL_VER="${yellow}$FLUIDD_LOCAL_VER${default}" + FLUIDD_REMOTE_VER="${green}$FLUIDD_REMOTE_VER${default}" + FLUIDD_UPDATE_AVAIL="true" + update_arr+=(update_fluidd) + else + FLUIDD_LOCAL_VER="${green}$FLUIDD_LOCAL_VER${default}" + FLUIDD_REMOTE_VER="${green}$FLUIDD_REMOTE_VER${default}" + FLUIDD_UPDATE_AVAIL="false" + fi +} + +############################################################# +############################################################# + ui_print_versions(){ unset update_arr compare_klipper_versions @@ -333,4 +375,5 @@ ui_print_versions(){ compare_dwc2_versions compare_moonraker_versions compare_mainsail_versions + compare_fluidd_versions } diff --git a/scripts/ui/general_ui.sh b/scripts/ui/general_ui.sh index 70e26cf..f9aa137 100755 --- a/scripts/ui/general_ui.sh +++ b/scripts/ui/general_ui.sh @@ -7,6 +7,10 @@ bottom_border(){ echo -e "\=======================================================/" } +blank_line(){ + echo -e "| | " +} + hr(){ echo -e "|-------------------------------------------------------|" } @@ -29,7 +33,7 @@ kiauh_update_msg(){ top_border echo -e "| ${yellow}There is a newer version of this script available!${default} | " echo -e "| ${yellow}Type 'update' if you want to update KIAUH now.${default} | " - echo -e "| | " + blank_line echo -e "| ${yellow}Check out the KIAUH changelog for important changes${default} | " echo -e "| ${yellow}either to the script or the installable components!${default} | " bottom_border diff --git a/scripts/ui/install_menu.sh b/scripts/ui/install_menu.sh index 8e0ec75..3b0352a 100755 --- a/scripts/ui/install_menu.sh +++ b/scripts/ui/install_menu.sh @@ -9,8 +9,8 @@ install_ui(){ echo -e "| Firmware: | Webinterface: | " echo -e "| 1) [Klipper] | 3) [DWC2] | " echo -e "| | 4) [Mainsail] | " - echo -e "| Klipper API: | 5) [Octoprint] | " - echo -e "| 2) [Moonraker] | | " + echo -e "| Klipper API: | 5) [Fluidd] | " + echo -e "| 2) [Moonraker] | 6) [Octoprint] | " quit_footer } @@ -47,6 +47,12 @@ install_menu(){ print_msg && clear_msg install_ui;; 5) + clear + print_header + INST_FLUIDD="true" && install_fluidd + print_msg && clear_msg + install_ui;; + 6) clear print_header install_octoprint diff --git a/scripts/ui/main_menu.sh b/scripts/ui/main_menu.sh index 07d86c4..0844dec 100755 --- a/scripts/ui/main_menu.sh +++ b/scripts/ui/main_menu.sh @@ -32,6 +32,7 @@ main_menu(){ read -p "Perform action: " action; echo echo -e "${default}" case "$action" in + 8) read_listen_port;; update) clear print_header diff --git a/scripts/ui/remove_menu.sh b/scripts/ui/remove_menu.sh index f0692b5..efa91bb 100755 --- a/scripts/ui/remove_menu.sh +++ b/scripts/ui/remove_menu.sh @@ -11,10 +11,11 @@ remove_ui(){ echo -e "| Firmware: | Webinterface: | " echo -e "| 1) [Klipper] | 3) [DWC2] | " echo -e "| | 4) [Mainsail] | " - echo -e "| Klipper API: | 5) [Octoprint] | " - echo -e "| 2) [Moonraker] | | " + echo -e "| Klipper API: | 5) [Fluidd] | " + echo -e "| 2) [Moonraker] | 6) [Octoprint] | " + echo -e "| | | " echo -e "| | Webserver: | " - echo -e "| | 6) [Nginx] | " + echo -e "| | 7) [Nginx] | " quit_footer } @@ -53,10 +54,16 @@ remove_menu(){ 5) clear print_header - remove_octoprint + remove_fluidd print_msg && clear_msg remove_ui;; 6) + clear + print_header + remove_octoprint + print_msg && clear_msg + remove_ui;; + 7) clear print_header remove_nginx diff --git a/scripts/ui/update_menu.sh b/scripts/ui/update_menu.sh index 9834a3b..629da4e 100755 --- a/scripts/ui/update_menu.sh +++ b/scripts/ui/update_menu.sh @@ -21,6 +21,7 @@ update_ui(){ echo -e "| |---------------|--------------| " echo -e "| 4) [Moonraker] | $(echo "$LOCAL_MOONRAKER_COMMIT") | $(echo "$REMOTE_MOONRAKER_COMMIT") | " echo -e "| 5) [Mainsail] | $(echo "$MAINSAIL_LOCAL_VER") | $(echo "$MAINSAIL_REMOTE_VER") | " + echo -e "| 6) [Fluidd] | $(echo "$FLUIDD_LOCAL_VER") | $(echo "$FLUIDD_REMOTE_VER") | " quit_footer }