From 54089582e4a57cf1cbe2d745c2c2e33670a1bdbe Mon Sep 17 00:00:00 2001 From: th33xitus Date: Sun, 13 Jun 2021 10:45:37 +0200 Subject: [PATCH] script: rewrite the auto mainsailOS/fluiddPi migration function No auto update anymore when updating Klipper. The user now must start this function. It's available in the Advanced Menu. --- scripts/ui/advanced_menu.sh | 41 +++++++++++++ scripts/update.sh | 116 ++++++++++++++++++++++++++++-------- 2 files changed, 131 insertions(+), 26 deletions(-) diff --git a/scripts/ui/advanced_menu.sh b/scripts/ui/advanced_menu.sh index 5dd55da..05602c2 100755 --- a/scripts/ui/advanced_menu.sh +++ b/scripts/ui/advanced_menu.sh @@ -14,6 +14,8 @@ advanced_ui(){ echo -e "| 4) [Build + Flash] | Extensions: | " echo -e "| 5) [Build + SD Flash] | 9) [Shell Command] | " echo -e "| 6) [Get MCU ID] | | " + echo -e "| | CustomPiOS: | " + echo -e "| | 10) [Migration Helper] | " quit_footer } @@ -66,6 +68,8 @@ advanced_menu(){ advanced_ui;; 9) do_action "setup_gcode_shell_command" "advanced_ui";; + 10) + do_action "migration_menu";; Q|q) clear; main_menu; break;; *) @@ -163,3 +167,40 @@ rollback_ui(){ echo -e "| $PREV_UI | " quit_footer } + +############################################################# +############################################################# + +migration_ui(){ + top_border + echo -e "| $(title_msg "~~~~~~~~~ [ CustomPiOS Migration ] ~~~~~~~~~~") | " + hr + echo -e "| This function will help you to migrate a vanilla | " + echo -e "| MainsailOS or FluiddPi image to a newer state. | " + blank_line + echo -e "| Only use this function if you use MainsailOS 0.4.0 | " + echo -e "| or lower, or FluiddPi v1.13.0 or lower. | " + blank_line + echo -e "| Please have a look at the KIAUH changelog for more | " + echo -e "| details on what this function will do. | " + hr + echo -e "| | " + echo -e "| 1) [Migrate MainsailOS] | " + echo -e "| 2) [Migrate FluiddPi] | " + echo -e "| | " + quit_footer +} + +migration_menu(){ + print_msg && clear_msg + migration_ui + while true; do + read -p "${cyan}Perform action:${default} " action; echo + case "$action" in + 1) migrate_custompios "mainsail"; migration_menu;; + 2) migrate_custompios "fluiddpi"; migration_menu;; + Q|q) clear; advanced_menu; break;; + *) print_unkown_cmd; migration_menu;; + esac + done +} \ No newline at end of file diff --git a/scripts/update.sh b/scripts/update.sh index 1a26aa0..f8d1506 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -99,40 +99,106 @@ update_log_paths(){ } migrate_custompios(){ - ### migrate vanilla mainsailOS 0.4.0 and fluiddPI v1.13.0 - ### and older to be in sync with their newer releases + ### migrate vanilla mainsailOS 0.4.0 / fluiddPI v1.13.0 + ### and older to be in sync with newer releases + WEBCAMD_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/root/usr/local/bin/webcamd" + MJPG_SERV_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/root/etc/systemd/system/webcamd.service" + KL_SERV_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/klipper/filesystem/root/etc/systemd/system/klipper.service" + NGINX_CFG1="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mainsail/filesystem/root/etc/nginx/conf.d/upstreams.conf" + NGINX_CFG2="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mainsail/filesystem/root/etc/nginx/sites-available/mainsail" + LOG_ROTATE_KLIPPER="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/klipper/filesystem/root/etc/logrotate.d/klipper" + LOG_ROTATE_MOONRAKER="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/moonraker/filesystem/root/etc/logrotate.d/moonraker" + LOG_ROTATE_WEBCAMD="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/root/etc/logrotate.d/webcamd" + + if [ "$1" == "mainsail" ]; then + OS_VER="MainsailOS" + MACRO_CFG="mainsail.cfg" + fi + if [ "$1" == "fluiddpi" ]; then + OS_VER="FluiddPi" + MACRO_CFG="client_macros.cfg" + fi + if [ ! -f "/boot/$1.txt" ] || [ ! -f "/etc/init.d/klipper" ]; then + # abort function if there is no sign of an old CustomPiOS anymore + ERROR_MSG="No vanilla $OS_VER found. Aborting..." && return 0 + fi + status_msg "Starting migration of $OS_VER... Please wait..." + if [ -d "${HOME}/klipper_logs" ]; then + # delete an existing klipper_logs directory + # shouldn't be there in the first place if its a true vanilla CustomPiOS + status_msg "Recreate '~/klipper_logs' directory..." + rm -rf "${HOME}/klipper_logs" && mkdir "${HOME}/klipper_logs" + ok_msg "OK!" + fi if [ -f "/boot/$1.txt" ]; then - status_msg "Starting migration... Please wait..." - ### migrate webcam related stuff - WEBCAMD_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/root/usr/local/bin/webcamd" - MJPG_SERV_SRC="${SRCDIR}/kiauh/resources/webcamd.service" - MJPG_SERV_TARGET="$SYSTEMDDIR/webcamd.service" - KL_SERV_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/klipper/filesystem/root/etc/systemd/system/klipper.service" - # stop webcam service - sudo systemctl stop webcamd.service - # replace old webcamd.service - sudo rm -f "$SYSTEMDDIR/webcamd.service" - # replace old webcamd + # replace old webcamd.service and webcamd + status_msg "Migrating MJPG-Streamer..." + sudo systemctl stop webcamd + sudo rm -f "/etc/systemd/system/webcamd.service" sudo rm -f "/root/bin/webcamd" - sudo cp $MJPG_SERV_SRC $MJPG_SERV_TARGET - sudo sed -i "s|%USER%|pi|" $MJPG_SERV_TARGET sudo wget $WEBCAMD_SRC -O "/usr/local/bin/webcamd" - sudo chmod +x /usr/local/bin/webcamd - # copy mainsail.txt or fluidd.txt to klipper_config and rename it + sudo wget $MJPG_SERV_SRC -O "/etc/systemd/system/webcamd.service" + sudo sed -i "s/MainsailOS/$OS_VER/" "/etc/systemd/system/webcamd.service" + sudo chmod +x "/usr/local/bin/webcamd" + # move mainsail.txt/fluiddpi.txt from boot to klipper_config and rename it sudo mv "/boot/$1.txt" "${HOME}/klipper_config/webcam.txt" sudo chown pi:pi "${HOME}/klipper_config/webcam.txt" - ### migrate klipper related stuff - sudo service klipper stop - # stop and remove init.d klipper service + sudo systemctl daemon-reload + sudo systemctl restart webcamd + ok_msg "OK!" + fi + if [ -f "/etc/init.d/klipper" ] && [ ! -f "/etc/systemd/system/klipper.service" ]; then + # replace klipper SysVinit service with systemd service + status_msg "Migrating Klipper Service..." + sudo systemctl stop klipper sudo update-rc.d -f klipper remove - sudo rm -f /etc/init.d/klipper - sudo rm -f /etc/default/klipper - # create new systemd service + sudo rm -f "/etc/init.d/klipper" + sudo rm -f "/etc/default/klipper" sudo wget $KL_SERV_SRC -O "/etc/systemd/system/klipper.service" sudo systemctl enable klipper.service sudo systemctl daemon-reload - ok_msg "Migration complete!" + sudo systemctl restart klipper + ok_msg "OK!" fi + if [ -f "/etc/systemd/system/moonraker.service" ]; then + # update new log path in existing moonraker service + status_msg "Updating Moonraker Service..." + sudo systemctl stop moonraker + update_log_paths "moonraker" + sudo systemctl restart moonraker + ok_msg "OK!" + fi + if [ -f "/etc/nginx/conf.d/upstreams.conf" ]; then + [ "$1" == "mainsail" ] && cfg="mainsail" + [ "$1" == "fluiddpi" ] && cfg="fluidd" + # update nginx upstreams.conf and mainsail/fluidd config file + status_msg "Updating NGINX configurations..." + sudo systemctl stop nginx + sudo rm -f "/etc/nginx/conf.d/upstreams.conf" + sudo rm -f "/etc/nginx/sites-available/$cfg" + sudo wget $NGINX_CFG1 -O "/etc/nginx/conf.d/upstreams.conf" + sudo wget $NGINX_CFG2 -O "/etc/nginx/sites-available/$cfg" + sudo sed -i "s/mainsail/$cfg/g" "/etc/nginx/sites-available/$cfg" + sudo systemctl restart nginx + ok_msg "OK!" + fi + if [ -f "${HOME}/klipper_config/$MACRO_CFG" ]; then + # update macro files + status_msg "Updating $MACRO_CFG ..." + MACRO_CFG_PATH="${HOME}/klipper_config/$MACRO_CFG" + sed -i "/SAVE_GCODE_STATE NAME=PAUSE_state/d" $MACRO_CFG_PATH + sed -i "/RESTORE_GCODE_STATE NAME=PAUSE_state/d" $MACRO_CFG_PATH + ok_msg "OK!" + fi + if [ -d "/etc/logrotate.d" ]; then + # download logrotate configs + status_msg "Setting up logrotations..." + sudo wget $LOG_ROTATE_KLIPPER -O "/etc/logrotate.d/klipper" + sudo wget $LOG_ROTATE_MOONRAKER -O "/etc/logrotate.d/moonraker" + sudo wget $LOG_ROTATE_WEBCAMD -O "/etc/logrotate.d/webcamd" + ok_msg "OK!" + fi + ok_msg "Migration done!" } update_klipper(){ @@ -172,8 +238,6 @@ update_klipper(){ ok_msg "Dependencies have been installed!" fi fi - migrate_custompios "mainsail" - migrate_custompios "fluiddpi" update_log_paths "klipper" ok_msg "Update complete!" klipper_service "restart"