Merge branch 'master' into dev
This commit is contained in:
@@ -27,7 +27,7 @@ install_packages()
|
||||
|
||||
# Update system package info
|
||||
report_status "Running apt-get update..."
|
||||
sudo apt-get update
|
||||
sudo apt-get update --allow-releaseinfo-change
|
||||
|
||||
# Install desired packages
|
||||
report_status "Installing packages..."
|
||||
|
||||
@@ -25,7 +25,7 @@ install_packages()
|
||||
|
||||
# Update system package info
|
||||
report_status "Running apt-get update..."
|
||||
sudo apt-get update
|
||||
sudo apt-get update --allow-releaseinfo-change
|
||||
|
||||
# Install desired packages
|
||||
report_status "Installing packages..."
|
||||
|
||||
@@ -82,7 +82,8 @@ change_klipper_cfg_path(){
|
||||
|
||||
set_klipper_cfg_path(){
|
||||
### stop services
|
||||
klipper_service "stop" && moonraker_service "stop"
|
||||
do_action_service "stop" "klipper"
|
||||
do_action_service "stop" "moonraker"
|
||||
|
||||
### copy config files to new klipper config folder
|
||||
if [ ! -z "$old_klipper_cfg_loc" ] && [ -d "$old_klipper_cfg_loc" ]; then
|
||||
@@ -137,77 +138,17 @@ set_klipper_cfg_path(){
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
### restart services
|
||||
klipper_service "restart" && moonraker_service "restart"
|
||||
do_action_service "restart" "klipper"
|
||||
do_action_service "restart" "moonraker"
|
||||
}
|
||||
|
||||
source_kiauh_ini(){
|
||||
source $INI_FILE
|
||||
}
|
||||
|
||||
klipper_service(){
|
||||
### set a variable for the ok and status messages
|
||||
[ "$1" == "start" ] && ACTION1="started" && ACTION2="Starting"
|
||||
[ "$1" == "stop" ] && ACTION1="stopped" && ACTION2="Stopping"
|
||||
[ "$1" == "restart" ] && ACTION1="restarted" && ACTION2="Restarting"
|
||||
|
||||
if ls /etc/systemd/system/klipper-*.service 2>/dev/null 1>&2; then
|
||||
INSTANCE_COUNT=$(systemctl list-units --full -all -t service --no-legend | grep -E "klipper-[[:digit:]].service" | wc -l)
|
||||
INSTANCE=1
|
||||
status_msg "$ACTION2 $INSTANCE_COUNT Klipper Services ..."
|
||||
while [ $INSTANCE -le $INSTANCE_COUNT ]; do
|
||||
sudo systemctl $1 klipper-$INSTANCE && ok_msg "Klipper Service #$INSTANCE $ACTION1!"
|
||||
### instance counter +1
|
||||
INSTANCE=$(expr $INSTANCE + 1)
|
||||
done
|
||||
elif [ "$(systemctl list-units --full -all -t service --no-legend | grep -E "klipper.service")" ]; then
|
||||
status_msg "$ACTION2 Klipper Service ..."
|
||||
sudo systemctl $1 klipper && ok_msg "Klipper Service $ACTION1!"
|
||||
fi
|
||||
}
|
||||
|
||||
moonraker_service(){
|
||||
### set a variable for the ok and status messages
|
||||
[ "$1" == "start" ] && ACTION1="started" && ACTION2="Starting"
|
||||
[ "$1" == "stop" ] && ACTION1="stopped" && ACTION2="Stopping"
|
||||
[ "$1" == "restart" ] && ACTION1="restarted" && ACTION2="Restarting"
|
||||
|
||||
if ls /etc/systemd/system/moonraker-*.service 2>/dev/null 1>&2; then
|
||||
INSTANCE_COUNT=$(systemctl list-units --full -all -t service --no-legend | grep -E "moonraker-[[:digit:]].service" | wc -l)
|
||||
INSTANCE=1
|
||||
status_msg "$ACTION2 $INSTANCE_COUNT Moonraker Services ..."
|
||||
while [ $INSTANCE -le $INSTANCE_COUNT ]; do
|
||||
sudo systemctl $1 moonraker-$INSTANCE && ok_msg "Moonraker Service #$INSTANCE $ACTION1!"
|
||||
### instance counter +1
|
||||
INSTANCE=$(expr $INSTANCE + 1)
|
||||
done
|
||||
elif [ "$(systemctl list-units --full -all -t service --no-legend | grep -E "moonraker.service")" ]; then
|
||||
status_msg "$ACTION2 Moonraker Service ..."
|
||||
sudo systemctl $1 moonraker && ok_msg "Moonraker Service $ACTION1!"
|
||||
fi
|
||||
}
|
||||
|
||||
dwc_service(){
|
||||
### set a variable for the ok and status messages
|
||||
[ "$1" == "start" ] && ACTION1="started" && ACTION2="Starting"
|
||||
[ "$1" == "stop" ] && ACTION1="stopped" && ACTION2="Stopping"
|
||||
[ "$1" == "restart" ] && ACTION1="restarted" && ACTION2="Restarting"
|
||||
|
||||
if ls /etc/systemd/system/dwc-*.service 2>/dev/null 1>&2; then
|
||||
INSTANCE_COUNT=$(systemctl list-units --full -all -t service --no-legend | grep -E "dwc-[[:digit:]].service" | wc -l)
|
||||
INSTANCE=1
|
||||
status_msg "$ACTION2 $INSTANCE_COUNT DWC-for-Klipper-Socket Services ..."
|
||||
while [ $INSTANCE -le $INSTANCE_COUNT ]; do
|
||||
sudo systemctl $1 dwc-$INSTANCE && ok_msg "DWC-for-Klipper-Socket Service #$INSTANCE $ACTION1!"
|
||||
### instance counter +1
|
||||
INSTANCE=$(expr $INSTANCE + 1)
|
||||
done
|
||||
elif [ "$(systemctl list-units --full -all -t service --no-legend | grep -E "dwc.service")" ]; then
|
||||
status_msg "$ACTION2 DWC-for-Klipper-Socket Service ..."
|
||||
sudo systemctl $1 dwc && ok_msg "DWC-for-Klipper-Socket Service $ACTION1!"
|
||||
fi
|
||||
}
|
||||
|
||||
octoprint_service(){
|
||||
do_action_service(){
|
||||
shopt -s extglob # enable extended globbing
|
||||
SERVICES="$SYSTEMDDIR/$2?(-*([0-9])).service"
|
||||
### set a variable for the ok and status messages
|
||||
[ "$1" == "start" ] && ACTION1="started" && ACTION2="Starting"
|
||||
[ "$1" == "stop" ] && ACTION1="stopped" && ACTION2="Stopping"
|
||||
@@ -215,30 +156,25 @@ octoprint_service(){
|
||||
[ "$1" == "enable" ] && ACTION1="enabled" && ACTION2="Enabling"
|
||||
[ "$1" == "disable" ] && ACTION1="disabled" && ACTION2="Disabling"
|
||||
|
||||
if ls /etc/systemd/system/octoprint-*.service 2>/dev/null 1>&2; then
|
||||
INSTANCE=1
|
||||
INSTANCE_COUNT=$(systemctl list-unit-files | grep -E "octoprint.*" | wc -l)
|
||||
status_msg "$ACTION2 $INSTANCE_COUNT OctoPrint Services ..."
|
||||
while [ $INSTANCE -le $INSTANCE_COUNT ]; do
|
||||
sudo systemctl $1 octoprint-$INSTANCE && ok_msg "OctoPrint Service #$INSTANCE $ACTION1!"
|
||||
### instance counter +1
|
||||
INSTANCE=$(expr $INSTANCE + 1)
|
||||
if ls $SERVICES 2>/dev/null 1>&2; then
|
||||
for service in $(ls $SERVICES | rev | cut -d"/" -f1 | rev); do
|
||||
status_msg "$ACTION2 $service ..."
|
||||
sudo systemctl $1 "$service"
|
||||
ok_msg "$service $ACTION1!"
|
||||
done
|
||||
elif [ "$(systemctl list-unit-files | grep -E "octoprint.*")" ]; then
|
||||
status_msg "$ACTION2 OctoPrint Service ..."
|
||||
sudo systemctl $1 octoprint && ok_msg "OctoPrint Service $ACTION1!"
|
||||
fi
|
||||
shopt -u extglob # disable extended globbing
|
||||
}
|
||||
|
||||
toggle_octoprint_service(){
|
||||
if systemctl list-unit-files | grep -E "octoprint.*" | grep "enabled" &>/dev/null; then
|
||||
octoprint_service "stop"
|
||||
octoprint_service "disable"
|
||||
do_action_service "stop" "octoprint"
|
||||
do_action_service "disable" "octoprint"
|
||||
sleep 2
|
||||
CONFIRM_MSG=" OctoPrint Service is now >>> DISABLED <<< !"
|
||||
elif systemctl list-unit-files | grep -E "octoprint.*" | grep "disabled" &>/dev/null; then
|
||||
octoprint_service "enable"
|
||||
octoprint_service "start"
|
||||
do_action_service "enable" "octoprint"
|
||||
do_action_service "start" "octoprint"
|
||||
sleep 2
|
||||
CONFIRM_MSG=" OctoPrint Service is now >>> ENABLED <<< !"
|
||||
else
|
||||
@@ -248,6 +184,9 @@ toggle_octoprint_service(){
|
||||
|
||||
read_octoprint_service_status(){
|
||||
unset OPRINT_SERVICE_STATUS
|
||||
if [ ! -f "/etc/systemd/system/octoprint.service" ]; then
|
||||
return 0
|
||||
fi
|
||||
if systemctl list-unit-files | grep -E "octoprint*" | grep "enabled" &>/dev/null; then
|
||||
OPRINT_SERVICE_STATUS="${red}[Disable]${default} OctoPrint Service "
|
||||
else
|
||||
@@ -310,7 +249,7 @@ dependency_check(){
|
||||
echo -e "${cyan}● $element ${default}"
|
||||
done
|
||||
echo
|
||||
sudo apt-get update && sudo apt-get install ${inst[@]} -y
|
||||
sudo apt-get update --allow-releaseinfo-change && sudo apt-get install ${inst[@]} -y
|
||||
ok_msg "Dependencies installed!"
|
||||
#clearing the array
|
||||
unset inst
|
||||
@@ -382,7 +321,7 @@ setup_gcode_shell_command(){
|
||||
}
|
||||
|
||||
install_gcode_shell_command(){
|
||||
klipper_service "stop"
|
||||
do_action_service "stop" "klipper"
|
||||
status_msg "Copy 'gcode_shell_command.py' to '$KLIPPER_DIR/klippy/extras' ..."
|
||||
cp ${SRCDIR}/kiauh/resources/gcode_shell_command.py $KLIPPER_DIR/klippy/extras
|
||||
while true; do
|
||||
@@ -424,7 +363,7 @@ install_gcode_shell_command(){
|
||||
esac
|
||||
done
|
||||
ok_msg "Shell command extension installed!"
|
||||
klipper_service "restart"
|
||||
do_action_service "restart" "klipper"
|
||||
}
|
||||
|
||||
create_minimal_cfg(){
|
||||
|
||||
@@ -174,7 +174,7 @@ install_dwc_packages()
|
||||
|
||||
# Update system package info
|
||||
status_msg "Running apt-get update..."
|
||||
sudo apt-get update
|
||||
sudo apt-get update --allow-releaseinfo-change
|
||||
|
||||
# Install desired packages
|
||||
status_msg "Installing packages..."
|
||||
|
||||
@@ -7,7 +7,11 @@ klipper_setup_dialog(){
|
||||
status_msg "Initializing Klipper installation ..."
|
||||
|
||||
### check for existing klipper service files
|
||||
if $(ls /etc/init.d/klipper* 2>/dev/null 1>&2) || $(ls /etc/systemd/system/klipper*.service 2>/dev/null 1>&2); then
|
||||
INITD=$(ls /etc/init.d | grep -E "^klipper(\-[[:digit:]]+)?$")
|
||||
SYSTEMD=$(ls /etc/systemd/system | grep -E "^klipper(\-[[:digit:]]+)?\.service$")
|
||||
|
||||
if [ ! -z "$INITD" ] || [ ! -z "$SYSTEMD" ]; then
|
||||
echo "${red}$INITD${default}" && echo "${red}$SYSTEMD${default}"
|
||||
ERROR_MSG="At least one Klipper service is already installed!\n Please remove Klipper first, before installing it again." && return 0
|
||||
fi
|
||||
|
||||
@@ -15,19 +19,19 @@ klipper_setup_dialog(){
|
||||
check_klipper_cfg_path
|
||||
|
||||
### ask for amount of instances to create
|
||||
while true; do
|
||||
INSTANCE_COUNT=""
|
||||
while [[ ! ($INSTANCE_COUNT =~ ^[1-9]+$) ]]; do
|
||||
echo
|
||||
read -p "${cyan}###### Number of Klipper instances to set up:${default} " INSTANCE_COUNT
|
||||
if [[ ! ($INSTANCE_COUNT =~ ^[1-9]+$) ]]; then
|
||||
warn_msg "Invalid Input!" && echo
|
||||
else
|
||||
echo
|
||||
read -p "${cyan}###### How many Klipper instances do you want to set up?:${default} " INSTANCE_COUNT
|
||||
echo
|
||||
if [ $INSTANCE_COUNT == 1 ]; then
|
||||
read -p "${cyan}###### Create $INSTANCE_COUNT single instance? (Y/n):${default} " yn
|
||||
else
|
||||
read -p "${cyan}###### Create $INSTANCE_COUNT instances? (Y/n):${default} " yn
|
||||
fi
|
||||
read -p "${cyan}###### Install $INSTANCE_COUNT instance(s)? (Y/n):${default} " yn
|
||||
case "$yn" in
|
||||
Y|y|Yes|yes|"")
|
||||
echo -e "###### > Yes"
|
||||
status_msg "Creating $INSTANCE_COUNT Klipper instances ..."
|
||||
status_msg "Installing $INSTANCE_COUNT Klipper instance(s) ..."
|
||||
klipper_setup
|
||||
break;;
|
||||
N|n|No|no)
|
||||
@@ -38,32 +42,34 @@ klipper_setup_dialog(){
|
||||
*)
|
||||
print_unkown_cmd
|
||||
print_msg && clear_msg;;
|
||||
esac
|
||||
esac
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
install_klipper_packages(){
|
||||
### Packages for python cffi
|
||||
PKGLIST="python-virtualenv virtualenv python-dev libffi-dev build-essential"
|
||||
### kconfig requirements
|
||||
PKGLIST="${PKGLIST} libncurses-dev"
|
||||
### hub-ctrl
|
||||
PKGLIST="${PKGLIST} libusb-dev"
|
||||
### AVR chip installation and building
|
||||
PKGLIST="${PKGLIST} avrdude gcc-avr binutils-avr avr-libc"
|
||||
### ARM chip installation and building
|
||||
PKGLIST="${PKGLIST} stm32flash libnewlib-arm-none-eabi"
|
||||
PKGLIST="${PKGLIST} gcc-arm-none-eabi binutils-arm-none-eabi libusb-1.0"
|
||||
### dbus requirement for DietPi
|
||||
PKGLIST="${PKGLIST} dbus"
|
||||
### read PKGLIST from official install script
|
||||
status_msg "Reading dependencies..."
|
||||
install_script="${HOME}/klipper/scripts/install-octopi.sh"
|
||||
PKGLIST=$(grep "PKGLIST=" $install_script | sed 's/PKGLIST//g; s/[$={}\n"]//g')
|
||||
### rewrite packages into new array
|
||||
unset PKGARR
|
||||
for PKG in $PKGLIST; do PKGARR+=($PKG); done
|
||||
### add dbus requirement for DietPi distro
|
||||
if [ -e "/boot/dietpi" ]; then
|
||||
PKGARR+=("dbus")
|
||||
fi
|
||||
|
||||
### display dependencies to user
|
||||
echo "${cyan}${PKGARR[@]}${default}"
|
||||
|
||||
### Update system package info
|
||||
status_msg "Running apt-get update..."
|
||||
sudo apt-get update
|
||||
sudo apt-get update --allow-releaseinfo-change
|
||||
|
||||
### Install desired packages
|
||||
status_msg "Installing packages..."
|
||||
sudo apt-get install --yes ${PKGLIST}
|
||||
sudo apt-get install --yes ${PKGARR[@]}
|
||||
}
|
||||
|
||||
create_klipper_virtualenv(){
|
||||
@@ -87,8 +93,9 @@ klipper_setup(){
|
||||
install_klipper_packages
|
||||
create_klipper_virtualenv
|
||||
|
||||
### step 3: create shared gcode_files folder
|
||||
### step 3: create shared gcode_files and logs folder
|
||||
[ ! -d ${HOME}/gcode_files ] && mkdir -p ${HOME}/gcode_files
|
||||
[ ! -d ${HOME}/klipper_logs ] && mkdir -p ${HOME}/klipper_logs
|
||||
|
||||
### step 4: create klipper instances
|
||||
create_klipper_service
|
||||
@@ -108,7 +115,7 @@ create_klipper_service(){
|
||||
CFG_PATH="$klipper_cfg_loc"
|
||||
KL_ENV=$KLIPPY_ENV
|
||||
KL_DIR=$KLIPPER_DIR
|
||||
KL_LOG="/tmp/klippy.log"
|
||||
KL_LOG="${HOME}/klipper_logs/klippy.log"
|
||||
KL_UDS="/tmp/klippy_uds"
|
||||
P_TMP="/tmp/printer"
|
||||
P_CFG="$CFG_PATH/printer.cfg"
|
||||
@@ -152,7 +159,7 @@ create_klipper_service(){
|
||||
KL_SERV_TARGET="$SYSTEMDDIR/klipper-$i.service"
|
||||
P_TMP="/tmp/printer-$i"
|
||||
P_CFG="$CFG_PATH/printer.cfg"
|
||||
KL_LOG="/tmp/klippy-$i.log"
|
||||
KL_LOG="${HOME}/klipper_logs/klippy-$i.log"
|
||||
KL_UDS="/tmp/klippy_uds-$i"
|
||||
### write multi instance service
|
||||
write_kl_service
|
||||
@@ -232,69 +239,72 @@ flash_routine_sd(){
|
||||
|
||||
select_mcu_id(){
|
||||
if [ ${#mcu_list[@]} -ge 1 ]; then
|
||||
echo
|
||||
top_border
|
||||
echo -e "| ${red}!!! IMPORTANT WARNING !!!${default} |"
|
||||
echo -e "| ${red}!!! ATTENTION !!!${default} |"
|
||||
hr
|
||||
echo -e "| Make sure, that you select the correct ID for the MCU |"
|
||||
echo -e "| you have build the firmware for in the previous step! |"
|
||||
blank_line
|
||||
echo -e "| This is especially important if you use different MCU |"
|
||||
echo -e "| models which each require their own firmware! |"
|
||||
blank_line
|
||||
echo -e "| Make sure, to select the correct number for the MCU! |"
|
||||
echo -e "| ${red}ONLY flash a firmware created for the respective MCU!${default} |"
|
||||
bottom_border
|
||||
|
||||
echo -e "${cyan}###### List of available MCU:${default}"
|
||||
### list all mcus
|
||||
i=1
|
||||
id=0
|
||||
for mcu in ${mcu_list[@]}; do
|
||||
echo -e "$i) ${cyan}$mcu${default}"
|
||||
i=$(expr $i + 1)
|
||||
let id++
|
||||
echo -e " $id) $mcu"
|
||||
done
|
||||
while true; do
|
||||
### verify user input
|
||||
sel_index=""
|
||||
while [[ ! ($sel_index =~ ^[1-9]+$) ]] || [ $sel_index -gt $id ]; do
|
||||
echo
|
||||
read -p "${cyan}###### Please select the ID for flashing:${default} " selected_index
|
||||
mcu_index=$(echo $((selected_index - 1)))
|
||||
read -p "${cyan}###### Select MCU to flash:${default} " sel_index
|
||||
if [[ ! ($sel_index =~ ^[1-9]+$) ]]; then
|
||||
warn_msg "Invalid input!"
|
||||
elif [ $sel_index -lt 1 ] || [ $sel_index -gt $id ]; then
|
||||
warn_msg "Please select a number between 1 and $id!"
|
||||
fi
|
||||
mcu_index=$(echo $((sel_index - 1)))
|
||||
selected_mcu_id="${mcu_list[$mcu_index]}"
|
||||
echo -e "\nYou have selected to flash:\n● MCU #$selected_index: $selected_mcu_id\n"
|
||||
while true; do
|
||||
read -p "${cyan}###### Do you want to continue? (Y/n):${default} " yn
|
||||
case "$yn" in
|
||||
Y|y|Yes|yes|"")
|
||||
echo -e "###### > Yes"
|
||||
status_msg "Flashing $selected_mcu_id ..."
|
||||
if [ "$FLASH_FIRMWARE" = "true" ]; then
|
||||
flash_mcu
|
||||
fi
|
||||
if [ "$FLASH_FW_SD" = "true" ]; then
|
||||
flash_mcu_sd
|
||||
fi
|
||||
break;;
|
||||
N|n|No|no)
|
||||
echo -e "###### > No"
|
||||
break;;
|
||||
*)
|
||||
print_unkown_cmd
|
||||
print_msg && clear_msg;;
|
||||
esac
|
||||
done
|
||||
break
|
||||
done
|
||||
### process flashing
|
||||
while true; do
|
||||
echo -e "\n###### You selected:\n ● MCU #$sel_index: $selected_mcu_id\n"
|
||||
read -p "${cyan}###### Continue? (Y/n):${default} " yn
|
||||
case "$yn" in
|
||||
Y|y|Yes|yes|"")
|
||||
echo -e "###### > Yes"
|
||||
status_msg "Flashing $selected_mcu_id ..."
|
||||
if [ "$FLASH_FIRMWARE" = "true" ]; then
|
||||
flash_mcu
|
||||
fi
|
||||
if [ "$FLASH_FW_SD" = "true" ]; then
|
||||
flash_mcu_sd
|
||||
fi
|
||||
break;;
|
||||
N|n|No|no)
|
||||
echo -e "###### > No"
|
||||
break;;
|
||||
*)
|
||||
print_unkown_cmd
|
||||
print_msg && clear_msg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
flash_mcu(){
|
||||
klipper_service "stop"
|
||||
do_action_service "stop" "klipper"
|
||||
if ! make flash FLASH_DEVICE="${mcu_list[$mcu_index]}" ; then
|
||||
warn_msg "Flashing failed!"
|
||||
warn_msg "Please read the console output above!"
|
||||
else
|
||||
ok_msg "Flashing successfull!"
|
||||
fi
|
||||
klipper_service "start"
|
||||
do_action_service "start" "klipper"
|
||||
}
|
||||
|
||||
flash_mcu_sd(){
|
||||
klipper_service "stop"
|
||||
do_action_service "stop" "klipper"
|
||||
|
||||
### write each supported board to the array to make it selectable
|
||||
board_list=()
|
||||
@@ -359,13 +369,15 @@ flash_mcu_sd(){
|
||||
ok_msg "Flashing successfull!"
|
||||
fi
|
||||
|
||||
klipper_service "start"
|
||||
do_action_service "start" "klipper"
|
||||
}
|
||||
|
||||
build_fw(){
|
||||
if [ -d $KLIPPER_DIR ]; then
|
||||
cd $KLIPPER_DIR
|
||||
status_msg "Initializing firmware build ..."
|
||||
dep=(build-essential dpkg-dev make)
|
||||
dependency_check
|
||||
make clean
|
||||
make menuconfig
|
||||
status_msg "Building firmware ..."
|
||||
@@ -382,17 +394,11 @@ get_mcu_id(){
|
||||
echo -e "| Please make sure your MCU is connected to the Pi! |"
|
||||
echo -e "| If the MCU is not connected yet, connect it now. |"
|
||||
bottom_border
|
||||
while true; do
|
||||
echo -e "${cyan}"
|
||||
read -p "###### Press any key to continue ... " yn
|
||||
echo -e "${default}"
|
||||
case "$yn" in
|
||||
*)
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
echo -e "${cyan}"
|
||||
read -p "###### Press ANY KEY to continue ... " -n 1 -r
|
||||
echo -e "${default}"
|
||||
status_msg "Identifying the ID of your MCU ..."
|
||||
sleep 2
|
||||
sleep 1
|
||||
unset MCU_ID
|
||||
### if there are devices found, continue, else show warn message
|
||||
if ls /dev/serial/by-id/* 2>/dev/null 1>&2; then
|
||||
@@ -412,4 +418,4 @@ get_mcu_id(){
|
||||
warn_msg "Could not retrieve ID!"
|
||||
warn_msg "Printer not plugged in or not detectable!"
|
||||
fi
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,6 +100,9 @@ install_webui(){
|
||||
### creating the mainsail/fluidd nginx cfg
|
||||
set_nginx_cfg "$1"
|
||||
|
||||
### symlink nginx log
|
||||
symlink_webui_nginx_log "$1"
|
||||
|
||||
### copy the kiauh_macros.cfg to the config location
|
||||
install_kiauh_macros
|
||||
|
||||
@@ -114,6 +117,23 @@ install_webui(){
|
||||
print_msg && clear_msg
|
||||
}
|
||||
|
||||
symlink_webui_nginx_log(){
|
||||
LPATH="${HOME}/klipper_logs"
|
||||
UI_ACCESS_LOG="/var/log/nginx/$1-access.log"
|
||||
UI_ERROR_LOG="/var/log/nginx/$1-error.log"
|
||||
[ ! -d "$LPATH" ] && mkdir -p "$LPATH"
|
||||
if [ -f "$UI_ACCESS_LOG" ] && [ ! -L "$LPATH/$1-access.log" ]; then
|
||||
status_msg "Creating symlink for $UI_ACCESS_LOG ..."
|
||||
ln -s $UI_ACCESS_LOG "$LPATH"
|
||||
ok_msg "OK!"
|
||||
fi
|
||||
if [ -f "$UI_ERROR_LOG" ] && [ ! -L "$LPATH/$1-error.log" ]; then
|
||||
status_msg "Creating symlink for $UI_ERROR_LOG ..."
|
||||
ln -s $UI_ERROR_LOG "$LPATH"
|
||||
ok_msg "OK!"
|
||||
fi
|
||||
}
|
||||
|
||||
install_kiauh_macros(){
|
||||
source_kiauh_ini
|
||||
### copy kiauh_macros.cfg
|
||||
@@ -143,7 +163,7 @@ install_kiauh_macros(){
|
||||
ok_msg "$klipper_cfg_loc/kiauh_macros.cfg created!"
|
||||
fi
|
||||
### restart klipper service to parse the modified printer.cfg
|
||||
klipper_service "restart"
|
||||
do_action_service "restart" "klipper"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -2,13 +2,8 @@ install_klipperscreen(){
|
||||
python3_check
|
||||
if [ $py_chk_ok = "true" ]; then
|
||||
source_kiauh_ini
|
||||
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
|
||||
@@ -29,57 +24,16 @@ python3_check(){
|
||||
fi
|
||||
}
|
||||
|
||||
system_check_klipperscreen(){
|
||||
source_kiauh_ini
|
||||
if [ ! -e $klipper_cfg_loc/KlipperScreen.log ]; then
|
||||
KLIPPERSCREEN_SL_FOUND="false"
|
||||
else
|
||||
KLIPPERSCREEN_SL_FOUND="true"
|
||||
fi
|
||||
}
|
||||
|
||||
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
|
||||
# force remove existing KlipperScreen dir
|
||||
[ -d $KLIPPERSCREEN_DIR ] && rm -rf $KLIPPERSCREEN_DIR
|
||||
#clone into fresh 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 [ "$SEL_KSLOG_SL" = "true" ] && [ ! -e $klipper_cfg_loc/KlipperScreen.log ]; then
|
||||
status_msg "Creating KlipperScreen.log symlink ..."
|
||||
ln -s /tmp/KlipperScreen.log $klipper_cfg_loc
|
||||
ok_msg "Symlink created!"
|
||||
fi
|
||||
ok_msg "KlipperScreen successfully installed!"
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
### base variables
|
||||
SYSTEMDDIR="/etc/systemd/system"
|
||||
WEBCAMD_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/home/root/bin/webcamd"
|
||||
WEBCAM_TXT_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/boot/mainsail.txt"
|
||||
WEBCAMD_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/root/usr/local/bin/webcamd"
|
||||
WEBCAM_TXT_SRC="https://raw.githubusercontent.com/raymondh2/MainsailOS/master/src/modules/mjpgstreamer/filesystem/home/pi/klipper_config/webcam.txt"
|
||||
|
||||
install_mjpg-streamer(){
|
||||
### checking dependencies
|
||||
@@ -49,8 +49,8 @@ install_mjpg-streamer(){
|
||||
</html>
|
||||
EOT
|
||||
sudo wget $WEBCAMD_SRC -O "/usr/local/bin/webcamd"
|
||||
sudo sed -i "/^config_dir=/ s|=.*|=$klipper_cfg_loc|" /usr/local/bin/webcamd
|
||||
sudo sed -i "/MJPGSTREAMER_HOME/ s/pi/${USER}/" /usr/local/bin/webcamd
|
||||
sudo sed -i "/^cfg_files+=/ s|=.*|=$WEBCAM_TXT|" /usr/local/bin/webcamd
|
||||
sudo chmod +x /usr/local/bin/webcamd
|
||||
|
||||
### step 4: create webcam.txt config file
|
||||
@@ -65,6 +65,7 @@ EOT
|
||||
status_msg "Creating MJPG-Streamer service ..."
|
||||
sudo cp $MJPG_SERV_SRC $MJPG_SERV_TARGET
|
||||
sudo sed -i "s|%USER%|${USER}|" $MJPG_SERV_TARGET
|
||||
ok_msg "MJPG-Streamer service created!"
|
||||
|
||||
### step 6: enabling and starting mjpg-streamer service
|
||||
status_msg "Starting MJPG-Streamer service ..."
|
||||
@@ -72,6 +73,12 @@ EOT
|
||||
sudo systemctl start webcamd.service
|
||||
ok_msg "MJPG-Streamer service started!"
|
||||
|
||||
### step 6.1: create webcamd.log symlink
|
||||
[ ! -d ${HOME}/klipper_logs ] && mkdir -p "${HOME}/klipper_logs"
|
||||
if [ -f "/var/log/webcamd.log" ] && [ ! -L "${HOME}/klipper_logs/webcamd.log" ]; then
|
||||
ln -s "/var/log/webcamd.log" "${HOME}/klipper_logs/webcamd.log"
|
||||
fi
|
||||
|
||||
### confirm message
|
||||
CONFIRM_MSG="MJPG-Streamer has been set up!"
|
||||
print_msg && clear_msg
|
||||
|
||||
@@ -46,15 +46,19 @@ moonraker_setup_dialog(){
|
||||
print_msg && clear_msg && return 0
|
||||
fi
|
||||
|
||||
shopt -s extglob # enable extended globbing
|
||||
### check for existing moonraker service installations
|
||||
if ls /etc/systemd/system/moonraker*.service 2>/dev/null 1>&2; then
|
||||
FILE="$SYSTEMDDIR/moonraker?(-*([0-9])).service"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
ERROR_MSG="At least one Moonraker service is already installed!" && return 0
|
||||
fi
|
||||
|
||||
### check for existing klipper service installations
|
||||
if ! ls /etc/systemd/system/klipper*.service 2>/dev/null 1>&2; then
|
||||
FILE="$SYSTEMDDIR/klipper?(-*([0-9])).service"
|
||||
if ! ls $FILE 2>/dev/null 1>&2; then
|
||||
ERROR_MSG="Klipper service not found, please install Klipper first!" && return 0
|
||||
fi
|
||||
shopt -u extglob # disable extended globbing
|
||||
|
||||
### count amount of klipper services
|
||||
if [ "$(systemctl list-units --full -all -t service --no-legend | grep -F "klipper.service")" ]; then
|
||||
@@ -103,7 +107,7 @@ moonraker_setup_dialog(){
|
||||
|
||||
moonraker_setup(){
|
||||
### checking dependencies
|
||||
dep=(wget curl unzip dfu-util)
|
||||
dep=(wget curl unzip dfu-util virtualenv)
|
||||
### additional deps for kiauh compatibility for armbian
|
||||
dep+=(libjpeg-dev zlib1g-dev)
|
||||
dependency_check
|
||||
@@ -142,15 +146,22 @@ moonraker_setup(){
|
||||
}
|
||||
|
||||
install_moonraker_packages(){
|
||||
PKGLIST="python3-virtualenv python3-dev nginx libopenjp2-7 python3-libgpiod"
|
||||
### read PKGLIST from official install script
|
||||
status_msg "Reading dependencies..."
|
||||
install_script="${HOME}/moonraker/scripts/install-moonraker.sh"
|
||||
PKGLIST=$(grep "PKGLIST=" $install_script | sed 's/PKGLIST//g; s/[$={}\n"]//g')
|
||||
### rewrite packages into new array
|
||||
unset PKGARR
|
||||
for PKG in $PKGLIST; do PKGARR+=($PKG); done
|
||||
echo "${cyan}${PKGARR[@]}${default}"
|
||||
|
||||
### Update system package info
|
||||
status_msg "Running apt-get update..."
|
||||
sudo apt-get update
|
||||
sudo apt-get update --allow-releaseinfo-change
|
||||
|
||||
### Install desired packages
|
||||
status_msg "Installing packages..."
|
||||
sudo apt-get install --yes ${PKGLIST}
|
||||
sudo apt-get install --yes ${PKGARR[@]}
|
||||
}
|
||||
|
||||
create_moonraker_virtualenv(){
|
||||
@@ -162,7 +173,10 @@ create_moonraker_virtualenv(){
|
||||
rm -rf ${MOONRAKER_ENV}
|
||||
fi
|
||||
|
||||
[ ! -d ${MOONRAKER_ENV} ] && virtualenv -p /usr/bin/python3 --system-site-packages ${MOONRAKER_ENV}
|
||||
if [ ! -d ${MOONRAKER_ENV} ]; then
|
||||
virtualenv -p /usr/bin/python3 ${MOONRAKER_ENV}
|
||||
ln -s /usr/lib/python3/dist-packages/gpiod* ${MOONRAKER_ENV}/lib/python*/site-packages
|
||||
fi
|
||||
|
||||
### Install/update dependencies
|
||||
${MOONRAKER_ENV}/bin/pip install -r ${MOONRAKER_DIR}/scripts/moonraker-requirements.txt
|
||||
@@ -177,7 +191,7 @@ create_moonraker_service(){
|
||||
CFG_PATH="$klipper_cfg_loc"
|
||||
MR_ENV=$MOONRAKER_ENV
|
||||
MR_DIR=$MOONRAKER_DIR
|
||||
MR_LOG="/tmp/moonraker.log"
|
||||
MR_LOG="${HOME}/klipper_logs/moonraker.log"
|
||||
MR_CONF="$CFG_PATH/moonraker.conf"
|
||||
MR_SERV_SRC="${SRCDIR}/kiauh/resources/moonraker.service"
|
||||
MR_SERV_TARGET="$SYSTEMDDIR/moonraker.service"
|
||||
@@ -211,7 +225,7 @@ create_moonraker_service(){
|
||||
CFG_PATH="$klipper_cfg_loc/printer_$i"
|
||||
MR_SERV_TARGET="$SYSTEMDDIR/moonraker-$i.service"
|
||||
MR_CONF="$CFG_PATH/moonraker.conf"
|
||||
MR_LOG="/tmp/moonraker-$i.log"
|
||||
MR_LOG="${HOME}/klipper_logs/moonraker-$i.log"
|
||||
### write multi instance service
|
||||
write_mr_service
|
||||
### enable instance
|
||||
@@ -244,6 +258,7 @@ create_moonraker_conf(){
|
||||
SINGLE_INST=1
|
||||
PORT=7125
|
||||
CFG_PATH="$klipper_cfg_loc"
|
||||
LOG_PATH="${HOME}/klipper_logs"
|
||||
MR_CONF="$CFG_PATH/moonraker.conf"
|
||||
MR_DB="~/.moonraker_database"
|
||||
KLIPPY_UDS="/tmp/klippy_uds"
|
||||
@@ -259,9 +274,16 @@ create_moonraker_conf(){
|
||||
cp $MR_CONF_SRC $MR_CONF
|
||||
sed -i "s|%PORT%|$PORT|" $MR_CONF
|
||||
sed -i "s|%CFG%|$CFG_PATH|" $MR_CONF
|
||||
sed -i "s|%LOG%|$LOG_PATH|" $MR_CONF
|
||||
sed -i "s|%MR_DB%|$MR_DB|" $MR_CONF
|
||||
sed -i "s|%UDS%|$KLIPPY_UDS|" $MR_CONF
|
||||
sed -i "s|%LAN%|$LAN|" $MR_CONF
|
||||
# if host ip is not in the default ip ranges, replace placeholder
|
||||
# otherwise remove placeholder from config
|
||||
if ! grep $LAN $MR_CONF; then
|
||||
sed -i "s|%LAN%|$LAN|" $MR_CONF
|
||||
else
|
||||
sed -i "/%LAN%/d" $MR_CONF
|
||||
fi
|
||||
sed -i "s|%USER%|${USER}|g" $MR_CONF
|
||||
ok_msg "moonraker.conf created!"
|
||||
else
|
||||
@@ -336,9 +358,9 @@ process_octoprint_dialog(){
|
||||
Y|y|Yes|yes|"")
|
||||
echo -e "###### > Yes"
|
||||
status_msg "Stopping OctoPrint ..."
|
||||
octoprint_service "stop" && ok_msg "OctoPrint service stopped!"
|
||||
do_action_service "stop" "octoprint" && ok_msg "OctoPrint service stopped!"
|
||||
status_msg "Disabling OctoPrint ..."
|
||||
octoprint_service "disable" && ok_msg "OctoPrint service disabled!"
|
||||
do_action_service "disable" "octoprint" && ok_msg "OctoPrint service disabled!"
|
||||
break;;
|
||||
N|n|No|no)
|
||||
echo -e "###### > No"
|
||||
|
||||
37
scripts/install_pgc_for_klipper.sh
Executable file
37
scripts/install_pgc_for_klipper.sh
Executable file
@@ -0,0 +1,37 @@
|
||||
### base variables
|
||||
PGC_FOR_KLIPPER_REPO="https://github.com/Kragrathea/pgcode"
|
||||
PGC_DIR="${HOME}/pgcode"
|
||||
|
||||
install_pgc_for_klipper(){
|
||||
pgconfsrc="$PGC_DIR/pgcode.local.conf"
|
||||
pgconf="/etc/nginx/sites-available/pgcode.local.conf"
|
||||
pgconfsl="/etc/nginx/sites-enabled/pgcode.local.conf"
|
||||
pgc_default_port="7136"
|
||||
|
||||
status_msg "Installing PrettyGCode for Klipper ..."
|
||||
### let the user decide which port is used
|
||||
echo -e "${cyan}\n###### On which port should PrettyGCode run? (Default: $pgc_default_port)${default} "
|
||||
read -e -p "${cyan}###### Port:${default} " -i "$pgc_default_port" pgc_custom_port
|
||||
### check nginx dependency
|
||||
dep=(nginx)
|
||||
dependency_check
|
||||
### clone repo
|
||||
[ -d $PGC_DIR ] && rm -rf $PGC_DIR
|
||||
cd ${HOME} && git clone $PGC_FOR_KLIPPER_REPO
|
||||
### copy nginx config into destination directory
|
||||
sudo cp $pgconfsrc $pgconf
|
||||
### replace default pi user in case the user is called different
|
||||
sudo sed -i "s|/home/pi/pgcode;|/home/${USER}/pgcode;|" $pgconf
|
||||
### replace default port
|
||||
if [ $pgc_custom_port != $pgc_default_port ]; then
|
||||
sudo sed -i "s|listen $pgc_default_port;|listen $pgc_custom_port;|" $pgconf
|
||||
sudo sed -i "s|listen \[::\]:$pgc_default_port;|listen \[::\]:$pgc_custom_port;|" $pgconf
|
||||
fi
|
||||
### create symlink
|
||||
[ ! -L $pgconfsl ] && sudo ln -s $pgconf $pgconfsl
|
||||
sudo systemctl restart nginx
|
||||
### show URI
|
||||
pgc_uri="http://$(hostname -I | cut -d" " -f1):$pgc_custom_port"
|
||||
echo -e "${cyan}\n● Accessible via:${default} $pgc_uri"
|
||||
ok_msg "PrettyGCode for Klipper installed!\n"
|
||||
}
|
||||
@@ -1,6 +1,67 @@
|
||||
### base variables
|
||||
SYSTEMDDIR="/etc/systemd/system"
|
||||
|
||||
get_theme_list(){
|
||||
theme_csv_url="https://raw.githubusercontent.com/meteyou/mainsail/cb874c1918f47f79441bd80decaa272fe8bae40f/docs/_data/themes.csv"
|
||||
theme_csv=$(curl -s -L $theme_csv_url)
|
||||
unset t_name
|
||||
unset t_note
|
||||
unset t_auth
|
||||
unset t_url
|
||||
i=0
|
||||
while IFS="," read -r col1 col2 col3 col4; do
|
||||
t_name+=("$col1")
|
||||
t_note+=("$col2")
|
||||
t_auth+=("$col3")
|
||||
t_url+=("$col4")
|
||||
if [ ! "$col1" == "name" ]; then
|
||||
printf "| $i) %-50s|\n" "[$col1]"
|
||||
fi
|
||||
let i++
|
||||
done <<< $theme_csv
|
||||
}
|
||||
|
||||
ms_theme_ui(){
|
||||
top_border
|
||||
echo -e "| ${red}~~~~~~~~ [ Mainsail Theme Installer ] ~~~~~~~${default} | "
|
||||
hr
|
||||
echo -e "| ${green}A preview of each Mainsail theme can be found here:${default} | "
|
||||
echo -e "| https://docs.mainsail.xyz/theming/themes | "
|
||||
blank_line
|
||||
echo -e "| ${yellow}Important note:${default} | "
|
||||
echo -e "| Installing a theme from this menu will overwrite an | "
|
||||
echo -e "| already installed theme or modified custom.css file! | "
|
||||
hr
|
||||
#echo -e "| Theme: | "
|
||||
# dynamically generate the themelist from a csv file
|
||||
get_theme_list
|
||||
echo -e "| | "
|
||||
echo -e "| R) [Remove Theme] | "
|
||||
#echo -e "| | "
|
||||
quit_footer
|
||||
}
|
||||
|
||||
ms_theme_menu(){
|
||||
ms_theme_ui
|
||||
while true; do
|
||||
read -p "${cyan}Install theme:${default} " a; echo
|
||||
if [ $a = "q" ] || [ $a = "Q" ]; then
|
||||
clear && advanced_menu && break
|
||||
elif [ $a = "r" ] || [ $a = "R" ]; then
|
||||
ms_theme_delete
|
||||
ms_theme_menu
|
||||
elif [ $a -le ${#t_url[@]} ]; then
|
||||
ms_theme_install "${t_auth[$a]}" "${t_url[$a]}" "${t_name[$a]}" "${t_note[$a]}"
|
||||
ms_theme_menu
|
||||
else
|
||||
clear && print_header
|
||||
ERROR_MSG="Invalid command!" && print_msg && clear_msg
|
||||
ms_theme_menu
|
||||
fi
|
||||
done
|
||||
ms_theme_menu
|
||||
}
|
||||
|
||||
check_select_printer(){
|
||||
unset printer_num
|
||||
|
||||
@@ -27,6 +88,24 @@ check_select_printer(){
|
||||
[ ! -d $THEME_PATH ] && mkdir -p $THEME_PATH
|
||||
}
|
||||
|
||||
ms_theme_install(){
|
||||
THEME_URL="https://github.com/$1/$2"
|
||||
|
||||
### check and select printer if there is more than 1
|
||||
check_select_printer
|
||||
|
||||
### download all files
|
||||
status_msg "Installing $3 ..."
|
||||
status_msg "Please wait ..."
|
||||
|
||||
[ -d "$THEME_PATH/.theme" ] && rm -rf "$THEME_PATH/.theme"
|
||||
cd $THEME_PATH && git clone "$THEME_URL" ".theme"
|
||||
|
||||
ok_msg "Theme installation complete!"
|
||||
[ ! -z "$4" ] && echo "${yellow}###### Theme Info: $4${default}"
|
||||
ok_msg "Please remember to delete your browser cache!\n"
|
||||
}
|
||||
|
||||
ms_theme_delete(){
|
||||
### check and select printer if there is more than 1
|
||||
check_select_printer
|
||||
@@ -39,20 +118,3 @@ ms_theme_delete(){
|
||||
status_msg "No Theme installed!\n"
|
||||
fi
|
||||
}
|
||||
|
||||
ms_theme_dracula(){
|
||||
THEME_URL="https://github.com/steadyjaw/dracula-mainsail-theme"
|
||||
|
||||
### check and select printer if there is more than 1
|
||||
check_select_printer
|
||||
|
||||
### download all files
|
||||
status_msg "Installing Dracula theme ..."
|
||||
status_msg "Please wait ..."
|
||||
|
||||
[ -d "$THEME_PATH/.theme" ] && rm -rf "$THEME_PATH/.theme"
|
||||
cd $THEME_PATH && git clone "$THEME_URL" ".theme"
|
||||
|
||||
ok_msg "Theme installation complete!"
|
||||
ok_msg "Please remember to delete your browser cache!\n"
|
||||
}
|
||||
@@ -2,9 +2,11 @@
|
||||
SYSTEMDDIR="/etc/systemd/system"
|
||||
|
||||
remove_klipper(){
|
||||
shopt -s extglob # enable extended globbing
|
||||
### ask the user if he wants to uninstall moonraker too.
|
||||
###? currently usefull if the user wants to switch from single-instance to multi-instance
|
||||
if ls /etc/systemd/system/moonraker*.service 2>/dev/null 1>&2; then
|
||||
FILE="$SYSTEMDDIR/moonraker?(-*([0-9])).service"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
while true; do
|
||||
unset REM_MR
|
||||
top_border
|
||||
@@ -45,9 +47,10 @@ remove_klipper(){
|
||||
fi
|
||||
|
||||
### remove all klipper services
|
||||
if ls /etc/systemd/system/klipper*.service 2>/dev/null 1>&2; then
|
||||
FILE="$SYSTEMDDIR/klipper?(-*([0-9])).service"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
status_msg "Removing Klipper Services ..."
|
||||
for service in $(ls /etc/systemd/system/klipper*.service | cut -d"/" -f5)
|
||||
for service in $(ls $FILE | cut -d"/" -f5)
|
||||
do
|
||||
status_msg "Removing $service ..."
|
||||
sudo systemctl stop $service
|
||||
@@ -62,32 +65,32 @@ remove_klipper(){
|
||||
fi
|
||||
|
||||
### remove all logfiles
|
||||
if ls /tmp/klippy*.log 2>/dev/null 1>&2; then
|
||||
for logfile in $(ls /tmp/klippy*.log)
|
||||
do
|
||||
status_msg "Removing $logfile ..."
|
||||
rm -f $logfile
|
||||
ok_msg "File '$logfile' removed!"
|
||||
FILE="${HOME}/klipper_logs/klippy?(-*([0-9])).log"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
for log in $(ls $FILE); do
|
||||
status_msg "Removing $log ..."
|
||||
rm -f $log
|
||||
ok_msg "$log removed!"
|
||||
done
|
||||
fi
|
||||
|
||||
### remove all UDS
|
||||
if ls /tmp/klippy_uds* 2>/dev/null 1>&2; then
|
||||
for uds in $(ls /tmp/klippy_uds*)
|
||||
do
|
||||
FILE="/tmp/klippy_uds?(-*([0-9]))"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
for uds in $(ls $FILE); do
|
||||
status_msg "Removing $uds ..."
|
||||
rm -f $uds
|
||||
ok_msg "File '$uds' removed!"
|
||||
ok_msg "$uds removed!"
|
||||
done
|
||||
fi
|
||||
|
||||
### remove all tmp-printer
|
||||
if ls /tmp/printer* 2>/dev/null 1>&2; then
|
||||
for tmp_printer in $(ls /tmp/printer*)
|
||||
do
|
||||
FILE="/tmp/printer?(-*([0-9]))"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
for tmp_printer in $(ls $FILE); do
|
||||
status_msg "Removing $tmp_printer ..."
|
||||
rm -f $tmp_printer
|
||||
ok_msg "File '$tmp_printer' removed!"
|
||||
ok_msg "$tmp_printer removed!"
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -102,6 +105,7 @@ remove_klipper(){
|
||||
fi
|
||||
|
||||
CONFIRM_MSG=" Klipper was successfully removed!" && print_msg && clear_msg
|
||||
shopt -u extglob # enable extended globbing
|
||||
|
||||
if [ "$REM_MR" == "true" ]; then
|
||||
remove_moonraker && unset REM_MR
|
||||
@@ -112,6 +116,7 @@ remove_klipper(){
|
||||
#############################################################
|
||||
|
||||
remove_moonraker(){
|
||||
shopt -s extglob # enable extended globbing
|
||||
### remove "legacy" moonraker init.d service
|
||||
if [ -f /etc/init.d/moonraker ]; then
|
||||
status_msg "Removing Moonraker Service ..."
|
||||
@@ -123,9 +128,10 @@ remove_moonraker(){
|
||||
fi
|
||||
|
||||
### remove all moonraker services
|
||||
if ls /etc/systemd/system/moonraker*.service 2>/dev/null 1>&2; then
|
||||
FILE="$SYSTEMDDIR/moonraker?(-*([0-9])).service"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
status_msg "Removing Moonraker Services ..."
|
||||
for service in $(ls /etc/systemd/system/moonraker*.service | cut -d"/" -f5)
|
||||
for service in $(ls $FILE | cut -d"/" -f5)
|
||||
do
|
||||
status_msg "Removing $service ..."
|
||||
sudo systemctl stop $service
|
||||
@@ -140,12 +146,12 @@ remove_moonraker(){
|
||||
fi
|
||||
|
||||
### remove all logfiles
|
||||
if ls /tmp/moonraker*.log 2>/dev/null 1>&2; then
|
||||
for logfile in $(ls /tmp/moonraker*.log)
|
||||
do
|
||||
status_msg "Removing $logfile ..."
|
||||
rm -f $logfile
|
||||
ok_msg "File '$logfile' removed!"
|
||||
FILE="${HOME}/klipper_logs/moonraker?(-*([0-9])).log"
|
||||
if ls $FILE 2>/dev/null 1>&2; then
|
||||
for log in $(ls $FILE); do
|
||||
status_msg "Removing $log ..."
|
||||
rm -f $log
|
||||
ok_msg "$log removed!"
|
||||
done
|
||||
fi
|
||||
|
||||
@@ -176,6 +182,7 @@ remove_moonraker(){
|
||||
fi
|
||||
|
||||
CONFIRM_MSG=" Moonraker was successfully removed!"
|
||||
shopt -u extglob # disable extended globbing
|
||||
}
|
||||
|
||||
#############################################################
|
||||
@@ -258,6 +265,14 @@ remove_mainsail(){
|
||||
sudo rm /etc/nginx/sites-enabled/mainsail && ok_msg "File removed!"
|
||||
fi
|
||||
|
||||
### remove mainsail nginx logs and log symlinks
|
||||
for log in $(find /var/log/nginx -name "mainsail*"); do
|
||||
sudo rm -f $log
|
||||
done
|
||||
for log in $(find ${HOME}/klipper_logs -name "mainsail*"); do
|
||||
rm -f $log
|
||||
done
|
||||
|
||||
CONFIRM_MSG="Mainsail successfully removed!"
|
||||
}
|
||||
|
||||
@@ -280,6 +295,14 @@ remove_fluidd(){
|
||||
sudo rm /etc/nginx/sites-enabled/fluidd && ok_msg "File removed!"
|
||||
fi
|
||||
|
||||
### remove mainsail nginx logs and log symlinks
|
||||
for log in $(find /var/log/nginx -name "fluidd*"); do
|
||||
sudo rm -f $log
|
||||
done
|
||||
for log in $(find ${HOME}/klipper_logs -name "fluidd*"); do
|
||||
rm -f $log
|
||||
done
|
||||
|
||||
CONFIRM_MSG="Fluidd successfully removed!"
|
||||
}
|
||||
|
||||
@@ -442,6 +465,11 @@ remove_mjpg-streamer(){
|
||||
ok_msg "MJPG-Streamer Service removed!"
|
||||
fi
|
||||
|
||||
### remove webcamd from /usr/local/bin
|
||||
if [ -e "/usr/local/bin/webcamd" ]; then
|
||||
sudo rm -f "/usr/local/bin/webcamd"
|
||||
fi
|
||||
|
||||
### remove MJPG-Streamer directory
|
||||
if [ -d ${HOME}/mjpg-streamer ]; then
|
||||
status_msg "Removing MJPG-Streamer directory ..."
|
||||
@@ -449,5 +477,24 @@ remove_mjpg-streamer(){
|
||||
ok_msg "MJPG-Streamer directory removed!"
|
||||
fi
|
||||
|
||||
### remove webcamd log and symlink
|
||||
[ -f "/var/log/webcamd.log" ] && sudo rm -f "/var/log/webcamd.log"
|
||||
[ -L "${HOME}/klipper_logs/webcamd.log" ] && rm -f "${HOME}/klipper_logs/webcamd.log"
|
||||
|
||||
CONFIRM_MSG="MJPG-Streamer successfully removed!"
|
||||
}
|
||||
|
||||
remove_prettygcode(){
|
||||
pgconf="/etc/nginx/sites-available/pgcode.local.conf"
|
||||
pgconfsl="/etc/nginx/sites-enabled/pgcode.local.conf"
|
||||
if [ -d ${HOME}/pgcode ] || [ -f $pgconf ] || [ -L $pgconfsl ]; then
|
||||
status_msg "Removing PrettyGCode for Klipper ..."
|
||||
rm -rf ${HOME}/pgcode
|
||||
sudo rm -f $pgconf
|
||||
sudo rm -f $pgconfsl
|
||||
sudo systemctl restart nginx
|
||||
CONFIRM_MSG="PrettyGCode for Klipper successfully removed!"
|
||||
else
|
||||
ERROR_MSG="PrettyGCode for Klipper not found!\n Skipping..."
|
||||
fi
|
||||
}
|
||||
@@ -30,7 +30,7 @@ klipper_status(){
|
||||
)
|
||||
|
||||
### count amount of klipper service files in /etc/systemd/system
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "klipper" | wc -l)
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "^klipper(\-[[:digit:]]+)?\.service$" | wc -l)
|
||||
|
||||
### a fix to detect an existing "legacy" klipper init.d installation
|
||||
if [ -f /etc/init.d/klipper ] && [ -f /etc/init.d/klipper ]; then
|
||||
@@ -68,7 +68,7 @@ dwc2_status(){
|
||||
)
|
||||
|
||||
### count amount of dwc service files in /etc/systemd/system
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "dwc" | wc -l)
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "^dwc(\-[[:digit:]]+)?\.service$" | wc -l)
|
||||
|
||||
### remove the "SERVICE" entry from the dwc_data array if a dwc service is installed
|
||||
[ $SERVICE_FILE_COUNT -gt 0 ] && unset dwc_data[0]
|
||||
@@ -99,7 +99,7 @@ moonraker_status(){
|
||||
)
|
||||
|
||||
### count amount of moonraker service files in /etc/systemd/system
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E 'moonraker\.service|moonraker-[[:digit:]]*.service' | wc -l)
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "^moonraker(\-[[:digit:]]+)?\.service$" | wc -l)
|
||||
|
||||
### remove the "SERVICE" entry from the moonraker_data array if a moonraker service is installed
|
||||
[ $SERVICE_FILE_COUNT -gt 0 ] && unset moonraker_data[0]
|
||||
@@ -175,7 +175,7 @@ octoprint_status(){
|
||||
$OCTOPRINT_DIR
|
||||
)
|
||||
### count amount of octoprint service files in /etc/systemd/system
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "octoprint" | wc -l)
|
||||
SERVICE_FILE_COUNT=$(ls /etc/systemd/system | grep -E "^octoprint(\-[[:digit:]]+)?\.service$" | wc -l)
|
||||
|
||||
### remove the "SERVICE" entry from the octoprint_data array if a octoprint service is installed
|
||||
[ $SERVICE_FILE_COUNT -gt 0 ] && unset octoprint_data[0]
|
||||
@@ -575,6 +575,37 @@ compare_MoonrakerTelegramBot_versions(){
|
||||
}
|
||||
|
||||
|
||||
#############################################################
|
||||
#############################################################
|
||||
|
||||
read_pgc_versions(){
|
||||
PGC_DIR="${HOME}/pgcode"
|
||||
if [ -d $PGC_DIR ] && [ -d $PGC_DIR/.git ]; then
|
||||
cd $PGC_DIR
|
||||
git fetch origin main -q
|
||||
LOCAL_PGC_COMMIT=$(git describe HEAD --always --tags | cut -d "-" -f 1,2)
|
||||
REMOTE_PGC_COMMIT=$(git describe origin/main --always --tags | cut -d "-" -f 1,2)
|
||||
else
|
||||
LOCAL_PGC_COMMIT=$NONE
|
||||
REMOTE_PGC_COMMIT=$NONE
|
||||
fi
|
||||
}
|
||||
|
||||
compare_pgc_versions(){
|
||||
unset PGC_UPDATE_AVAIL
|
||||
read_pgc_versions
|
||||
if [ "$LOCAL_PGC_COMMIT" != "$REMOTE_PGC_COMMIT" ]; then
|
||||
LOCAL_PGC_COMMIT="${yellow}$(printf "%-12s" "$LOCAL_PGC_COMMIT")${default}"
|
||||
REMOTE_PGC_COMMIT="${green}$(printf "%-12s" "$REMOTE_PGC_COMMIT")${default}"
|
||||
PGC_UPDATE_AVAIL="true"
|
||||
update_arr+=(update_pgc_for_klipper)
|
||||
else
|
||||
LOCAL_PGC_COMMIT="${green}$(printf "%-12s" "$LOCAL_PGC_COMMIT")${default}"
|
||||
REMOTE_PGC_COMMIT="${green}$(printf "%-12s" "$REMOTE_PGC_COMMIT")${default}"
|
||||
PGC_UPDATE_AVAIL="false"
|
||||
fi
|
||||
}
|
||||
|
||||
#############################################################
|
||||
#############################################################
|
||||
|
||||
@@ -592,4 +623,5 @@ ui_print_versions(){
|
||||
compare_fluidd_versions
|
||||
compare_klipperscreen_versions
|
||||
compare_MoonrakerTelegramBot_versions
|
||||
compare_pgc_versions
|
||||
}
|
||||
|
||||
@@ -2,11 +2,13 @@ advanced_ui(){
|
||||
top_border
|
||||
echo -e "| ${yellow}~~~~~~~~~~~~~ [ Advanced Menu ] ~~~~~~~~~~~~~${default} | "
|
||||
hr
|
||||
echo -e "| 0) $OPRINT_SERVICE_STATUS| "
|
||||
hr
|
||||
echo -e "| | | "
|
||||
if [ ! "$OPRINT_SERVICE_STATUS" == "" ]; then
|
||||
echo -e "| 0) $OPRINT_SERVICE_STATUS| "
|
||||
hr
|
||||
echo -e "| | | "
|
||||
fi
|
||||
echo -e "| Klipper: | Mainsail: | "
|
||||
echo -e "| 1) [Switch Version] | 7) [Theme installer] | "
|
||||
echo -e "| 1) [Switch Branch] | 7) [Theme installer] | "
|
||||
echo -e "| 2) [Rollback] | | "
|
||||
echo -e "| | System: | "
|
||||
echo -e "| Firmware: | 8) [Change hostname] | "
|
||||
@@ -14,6 +16,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
|
||||
}
|
||||
|
||||
@@ -40,7 +44,7 @@ advanced_menu(){
|
||||
clear && print_header
|
||||
flash_routine
|
||||
if [ $FLASH_FIRMWARE = "true" ]; then
|
||||
status_msg "Please wait..." && sleep 5 && build_fw
|
||||
status_msg "Please wait..." && sleep 3 && build_fw
|
||||
select_mcu_id
|
||||
fi
|
||||
print_msg && clear_msg
|
||||
@@ -49,7 +53,7 @@ advanced_menu(){
|
||||
clear && print_header
|
||||
flash_routine_sd
|
||||
if [ $FLASH_FW_SD = "true" ]; then
|
||||
status_msg "Please wait..." && sleep 5 && build_fw
|
||||
status_msg "Please wait..." && sleep 3 && build_fw
|
||||
select_mcu_id
|
||||
fi
|
||||
print_msg && clear_msg
|
||||
@@ -66,6 +70,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 +169,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
|
||||
}
|
||||
@@ -33,6 +33,8 @@ kiauh_update_msg(){
|
||||
top_border
|
||||
echo -e "|${green} New KIAUH update available! ${default}| "
|
||||
hr
|
||||
echo -e "|${green} View Changelog: https://git.io/JnmlX ${default}| "
|
||||
blank_line
|
||||
echo -e "|${yellow} It is recommended to keep KIAUH up to date. Updates ${default}| "
|
||||
echo -e "|${yellow} usually contain bugfixes, important changes or new ${default}| "
|
||||
echo -e "|${yellow} features. Please consider updating! ${default}| "
|
||||
|
||||
@@ -13,9 +13,10 @@ install_ui(){
|
||||
echo -e "| 2) [Moonraker] | 6) [Duet Web Control] | "
|
||||
echo -e "| | 7) [OctoPrint] | "
|
||||
echo -e "| Klipper Webinterface: | 8) [MoonrakerTelegramBot]| "
|
||||
echo -e "| 3) [Mainsail] | | "
|
||||
echo -e "| 4) [Fluidd] | Webcam: | "
|
||||
echo -e "| | 9) [MJPG-Streamer] | "
|
||||
echo -e "| 3) [Mainsail] | 9) [PrettyGCode] | "
|
||||
echo -e "| 4) [Fluidd] | | "
|
||||
echo -e "| | Webcam: | "
|
||||
echo -e "| | 10) [MJPG-Streamer] | "
|
||||
quit_footer
|
||||
}
|
||||
|
||||
@@ -41,6 +42,8 @@ install_menu(){
|
||||
8)
|
||||
do_action "install_MoonrakerTelegramBot" "install_ui";;
|
||||
9)
|
||||
do_action "install_pgc_for_klipper" "install_ui";;
|
||||
10)
|
||||
do_action "install_mjpg-streamer" "install_ui";;
|
||||
Q|q)
|
||||
clear; main_menu; break;;
|
||||
|
||||
@@ -61,46 +61,26 @@ main_menu(){
|
||||
while true; do
|
||||
read -p "${cyan}Perform action:${default} " action; echo
|
||||
case "$action" in
|
||||
"start klipper")
|
||||
do_action "klipper_service start" "main_ui";;
|
||||
"stop klipper")
|
||||
do_action "klipper_service stop" "main_ui";;
|
||||
"restart klipper")
|
||||
do_action "klipper_service restart" "main_ui";;
|
||||
"start moonraker")
|
||||
do_action "moonraker_service start" "main_ui";;
|
||||
"stop moonraker")
|
||||
do_action "moonraker_service stop" "main_ui";;
|
||||
"restart moonraker")
|
||||
do_action "moonraker_service restart" "main_ui";;
|
||||
"start dwc")
|
||||
do_action "dwc_service start" "main_ui";;
|
||||
"stop dwc")
|
||||
do_action "dwc_service stop" "main_ui";;
|
||||
"restart dwc")
|
||||
do_action "dwc_service restart" "main_ui";;
|
||||
"start octoprint")
|
||||
do_action "octoprint_service start" "main_ui";;
|
||||
"stop octoprint")
|
||||
do_action "octoprint_service stop" "main_ui";;
|
||||
"restart octoprint")
|
||||
do_action "octoprint_service restart" "main_ui";;
|
||||
update)
|
||||
do_action "update_kiauh" "main_ui";;
|
||||
0)
|
||||
do_action "upload_selection" "main_ui";;
|
||||
1)
|
||||
clear && install_menu && break;;
|
||||
2)
|
||||
clear && update_menu && break;;
|
||||
3)
|
||||
clear && remove_menu && break;;
|
||||
4)
|
||||
clear && advanced_menu && break;;
|
||||
5)
|
||||
clear && backup_menu && break;;
|
||||
6)
|
||||
clear && settings_menu && break;;
|
||||
"start klipper") do_action_service "start" "klipper"; main_ui;;
|
||||
"stop klipper") do_action_service "stop" "klipper"; main_ui;;
|
||||
"restart klipper") do_action_service "restart" "klipper"; main_ui;;
|
||||
"start moonraker") do_action_service "start" "moonraker"; main_ui;;
|
||||
"stop moonraker") do_action_service "stop" "moonraker"; main_ui;;
|
||||
"restart moonraker")do_action_service "restart" "moonraker"; main_ui;;
|
||||
"start dwc") do_action_service "start" "dwc"; main_ui;;
|
||||
"stop dwc") do_action_service "stop" "dwc"; main_ui;;
|
||||
"restart dwc") do_action_service "restart" "dwc"; main_ui;;
|
||||
"start octoprint") do_action_service "start" "octoprint"; main_ui;;
|
||||
"stop octoprint") do_action_service "stop" "octoprint"; main_ui;;
|
||||
"restart octoprint") do_action_service "restart" "octoprint"; main_ui;;
|
||||
update) do_action "update_kiauh" "main_ui";;
|
||||
0) do_action "upload_selection" "main_ui";;
|
||||
1) clear && install_menu && break;;
|
||||
2) clear && update_menu && break;;
|
||||
3) clear && remove_menu && break;;
|
||||
4) clear && advanced_menu && break;;
|
||||
5) clear && backup_menu && break;;
|
||||
6) clear && settings_menu && break;;
|
||||
Q|q)
|
||||
echo -e "${green}###### Happy printing! ######${default}"; echo
|
||||
exit -1;;
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
ms_theme_ui(){
|
||||
top_border
|
||||
echo -e "| ${red}~~~~~~~~ [ Mainsail Theme Installer ] ~~~~~~~${default} | "
|
||||
hr
|
||||
echo -e "| Please note: | "
|
||||
echo -e "| Installing a theme from this menu will overwrite an | "
|
||||
echo -e "| already installed theme or modified custom.css file! | "
|
||||
hr
|
||||
echo -e "| Theme: | "
|
||||
echo -e "| 1) [Dracula] | "
|
||||
echo -e "| | "
|
||||
echo -e "| R) [Remove Theme] | "
|
||||
echo -e "| | "
|
||||
quit_footer
|
||||
}
|
||||
|
||||
ms_theme_menu(){
|
||||
do_action "" "ms_theme_ui"
|
||||
while true; do
|
||||
read -p "${cyan}Perform action:${default} " action; echo
|
||||
case "$action" in
|
||||
1)
|
||||
do_action "ms_theme_dracula" "ms_theme_ui";;
|
||||
R|r)
|
||||
do_action "ms_theme_delete" "ms_theme_ui";;
|
||||
Q|q)
|
||||
clear; advanced_menu; break;;
|
||||
*)
|
||||
deny_action "ms_theme_ui";;
|
||||
esac
|
||||
done
|
||||
ms_theme_menu
|
||||
}
|
||||
@@ -12,10 +12,11 @@ remove_ui(){
|
||||
echo -e "| Klipper API: | Other: | "
|
||||
echo -e "| 2) [Moonraker] | 6) [Duet Web Control] | "
|
||||
echo -e "| | 7) [OctoPrint] | "
|
||||
echo -e "| Klipper Webinterface: | 8) [NGINX] | "
|
||||
echo -e "| 3) [Mainsail] | 9) [MJPG-Streamer] | "
|
||||
echo -e "| Klipper Webinterface: | 8) [MJPG-Streamer] | "
|
||||
echo -e "| 3) [Mainsail] | 9) [PrettyGCode] | "
|
||||
echo -e "| 4) [Fluidd] | 10) [MTelegramBot] | "
|
||||
echo -e "| | | "
|
||||
echo -e "| | 11) [NGINX] | "
|
||||
quit_footer
|
||||
}
|
||||
|
||||
@@ -39,11 +40,13 @@ remove_menu(){
|
||||
7)
|
||||
do_action "remove_octoprint" "remove_ui";;
|
||||
8)
|
||||
do_action "remove_nginx" "remove_ui";;
|
||||
9)
|
||||
do_action "remove_mjpg-streamer" "remove_ui";;
|
||||
9)
|
||||
do_action "remove_prettygcode" "remove_ui";;
|
||||
10)
|
||||
do_action "remove_MoonrakerTelegramBot" "remove_ui";;
|
||||
11)
|
||||
do_action "remove_nginx" "remove_ui";;
|
||||
Q|q)
|
||||
clear; main_menu; break;;
|
||||
*)
|
||||
|
||||
@@ -21,9 +21,10 @@ update_ui(){
|
||||
echo -e "| Other: |---------------|--------------| "
|
||||
echo -e "| 6) [DWC2-for-Klipper] | $LOCAL_DWC2FK_COMMIT | $REMOTE_DWC2FK_COMMIT | "
|
||||
echo -e "| 7) [DWC2 Web UI] | $DWC2_LOCAL_VER | $DWC2_REMOTE_VER | "
|
||||
echo -e "| 8) [MTelegramBot] | $LOCAL_MOONRAKERTELEGRAMBOT_COMMIT | $REMOTE_MOONRAKERTELEGRAMBOT_COMMIT | "
|
||||
echo -e "| 8) [PrettyGCode] | $LOCAL_PGC_COMMIT | $REMOTE_PGC_COMMIT | "
|
||||
echo -e "| 9) [MTelegramBot] | $LOCAL_MOONRAKERTELEGRAMBOT_COMMIT | $REMOTE_MOONRAKERTELEGRAMBOT_COMMIT | "
|
||||
echo -e "| |------------------------------| "
|
||||
echo -e "| 9) [System] | $DISPLAY_SYS_UPDATE | "
|
||||
echo -e "| 10) [System] | $DISPLAY_SYS_UPDATE | "
|
||||
quit_footer
|
||||
}
|
||||
|
||||
@@ -50,8 +51,10 @@ update_menu(){
|
||||
7)
|
||||
do_action "update_dwc2" "update_ui";;
|
||||
8)
|
||||
do_action "update_MoonrakerTelegramBot" "update_ui";;
|
||||
do_action "update_pgc_for_klipper" "update_ui";;
|
||||
9)
|
||||
do_action "update_MoonrakerTelegramBot" "update_ui";;
|
||||
10)
|
||||
do_action "update_system" "update_ui";;
|
||||
a)
|
||||
do_action "update_all" "update_ui";;
|
||||
|
||||
@@ -39,8 +39,11 @@ update_all(){
|
||||
if [ "$KLIPPERSCREEN_UPDATE_AVAIL" = "true" ]; then
|
||||
echo -e "| ${cyan}● KlipperScreen${default} |"
|
||||
fi
|
||||
if [ "$PGC_UPDATE_AVAIL" = "true" ]; then
|
||||
echo -e "| ${cyan}● PrettyGCode for Klipper${default} |"
|
||||
fi
|
||||
if [ "$MOONRAKERTELEGRAMBOT_UPDATE_AVAIL" = "true" ]; then
|
||||
echo -e "| ${cyan}● MoonrakerTelegramBot${default} |"
|
||||
echo -e "| ${cyan}● MoonrakerTelegramBot${default} |"
|
||||
fi
|
||||
if [ "$SYS_UPDATE_AVAIL" = "true" ]; then
|
||||
echo -e "| ${cyan}● System${default} |"
|
||||
@@ -65,8 +68,159 @@ update_all(){
|
||||
done
|
||||
}
|
||||
|
||||
update_log_paths(){
|
||||
### update services to make use of moonrakers new log_path option
|
||||
### https://github.com/Arksine/moonraker/commit/829b3a4ee80579af35dd64a37ccc092a1f67682a
|
||||
shopt -s extglob # enable extended globbing
|
||||
source_kiauh_ini
|
||||
LPATH="${HOME}/klipper_logs"
|
||||
[ ! -d "$LPATH" ] && mkdir -p "$LPATH"
|
||||
FILE="$SYSTEMDDIR/$1?(-*([0-9])).service"
|
||||
for file in $(ls $FILE); do
|
||||
[ "$1" == "klipper" ] && LOG="klippy"
|
||||
[ "$1" == "moonraker" ] && LOG="moonraker"
|
||||
if [ ! "$(grep "\-l" $file)" ]; then
|
||||
status_msg "Updating $file ..."
|
||||
sudo sed -i -r "/ExecStart=/ s|$| -l $LPATH/$LOG.log|" $file
|
||||
ok_msg "$file updated!"
|
||||
elif [ "$(grep "\-l \/tmp\/$LOG" $file)" ]; then
|
||||
status_msg "Updating $file ..."
|
||||
sudo sed -i -r "/ExecStart=/ s|-l \/tmp\/$LOG|-l $LPATH/$LOG|" $file
|
||||
ok_msg "$file updated!"
|
||||
fi
|
||||
done
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
# patch log_path entry if not found
|
||||
dir1="$klipper_cfg_loc"
|
||||
dir2="$klipper_cfg_loc/printer_*"
|
||||
for conf in $(find $dir1 $dir2 -name "moonraker.conf" 2> /dev/null); do
|
||||
if ! grep -q "log_path" $conf; then
|
||||
status_msg "Patching $conf"
|
||||
sed -i "/^config_path/a log_path: $LPATH" $conf
|
||||
ok_msg "OK!"
|
||||
fi
|
||||
done
|
||||
|
||||
# create symlink for mainsail and fluidd nginx logs
|
||||
symlink_webui_nginx_log "mainsail"
|
||||
symlink_webui_nginx_log "fluidd"
|
||||
|
||||
# create symlink for webcamd log
|
||||
if [ -f "/var/log/webcamd.log" ] && [ ! -L "$LPATH/webcamd.log" ]; then
|
||||
status_msg "Creating symlink for '/var/log/webcamd.log' ..."
|
||||
ln -s "/var/log/webcamd.log" "$LPATH"
|
||||
ok_msg "OK!"
|
||||
fi
|
||||
|
||||
shopt -u extglob # disable extended globbing
|
||||
}
|
||||
|
||||
migrate_custompios(){
|
||||
### 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
|
||||
# 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 wget $WEBCAMD_SRC -O "/usr/local/bin/webcamd"
|
||||
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"
|
||||
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"
|
||||
sudo wget $KL_SERV_SRC -O "/etc/systemd/system/klipper.service"
|
||||
sudo systemctl enable klipper.service
|
||||
sudo systemctl daemon-reload
|
||||
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(){
|
||||
klipper_service "stop"
|
||||
do_action_service "stop" "klipper"
|
||||
if [ ! -d $KLIPPER_DIR ]; then
|
||||
cd ${HOME} && git clone $KLIPPER_REPO
|
||||
else
|
||||
@@ -75,42 +229,32 @@ update_klipper(){
|
||||
save_klipper_state
|
||||
status_msg "Updating $GET_BRANCH"
|
||||
cd $KLIPPER_DIR
|
||||
KLIPPER_OLDREQ_MD5SUM="$(md5sum $KLIPPER_DIR/scripts/klippy-requirements.txt | cut -d " " -f1)"
|
||||
|
||||
if [ "$DETACHED_HEAD" == "true" ]; then
|
||||
git checkout $GET_BRANCH
|
||||
unset DETACHED_HEAD
|
||||
fi
|
||||
|
||||
### pull latest files from github
|
||||
git pull && ok_msg "Update successfull!"
|
||||
|
||||
### check for possible new dependencies and install them
|
||||
if [[ $(md5sum $KLIPPER_DIR/scripts/klippy-requirements.txt | cut -d " " -f1) != $KLIPPER_OLDREQ_MD5SUM ]]; then
|
||||
PYTHONDIR="${HOME}/klippy-env"
|
||||
status_msg "New dependecies detected..."
|
||||
|
||||
### always rebuild the pythondir from scratch if new dependencies were detected
|
||||
rm -rf ${PYTHONDIR}
|
||||
virtualenv -p python2 ${PYTHONDIR}
|
||||
$PYTHONDIR/bin/pip install -r $KLIPPER_DIR/scripts/klippy-requirements.txt
|
||||
ok_msg "Dependencies have been installed!"
|
||||
fi
|
||||
|
||||
ok_msg "Update complete!"
|
||||
git pull
|
||||
### read PKGLIST and install possible new dependencies
|
||||
install_klipper_packages
|
||||
### install possible new python dependencies
|
||||
KLIPPER_REQ_TXT="$KLIPPER_DIR/scripts/klippy-requirements.txt"
|
||||
$KLIPPY_ENV/bin/pip install -r $KLIPPER_REQ_TXT
|
||||
fi
|
||||
klipper_service "restart"
|
||||
update_log_paths "klipper"
|
||||
ok_msg "Update complete!"
|
||||
do_action_service "restart" "klipper"
|
||||
}
|
||||
|
||||
update_dwc2fk(){
|
||||
dwc_service "stop"
|
||||
do_action_service "stop" "dwc"
|
||||
bb4u "dwc2"
|
||||
if [ ! -d $DWC2FK_DIR ]; then
|
||||
cd ${HOME} && git clone $DWC2FK_REPO
|
||||
else
|
||||
cd $DWC2FK_DIR && git pull
|
||||
fi
|
||||
dwc_service "start"
|
||||
do_action_service "start" "dwc"
|
||||
}
|
||||
|
||||
update_dwc2(){
|
||||
@@ -122,38 +266,30 @@ update_mainsail(){
|
||||
bb4u "mainsail"
|
||||
status_msg "Updating Mainsail ..."
|
||||
mainsail_setup
|
||||
symlink_webui_nginx_log "mainsail"
|
||||
}
|
||||
|
||||
update_fluidd(){
|
||||
bb4u "fluidd"
|
||||
status_msg "Updating Fluidd ..."
|
||||
fluidd_setup
|
||||
symlink_webui_nginx_log "fluidd"
|
||||
}
|
||||
|
||||
update_moonraker(){
|
||||
moonraker_service "stop"
|
||||
do_action_service "stop" "moonraker"
|
||||
bb4u "moonraker"
|
||||
status_msg "Updating Moonraker ..."
|
||||
cd $MOONRAKER_DIR
|
||||
MOONRAKER_OLDREQ_MD5SUM=$(md5sum $MOONRAKER_DIR/scripts/moonraker-requirements.txt | cut -d " " -f1)
|
||||
|
||||
### pull latest files from github
|
||||
git pull && ok_msg "Update successfull!"
|
||||
|
||||
### check for possible new dependencies and install them
|
||||
if [[ $(md5sum $MOONRAKER_DIR/scripts/moonraker-requirements.txt | cut -d " " -f1) != $MOONRAKER_OLDREQ_MD5SUM ]]; then
|
||||
PYTHONDIR="${HOME}/moonraker-env"
|
||||
status_msg "New dependecies detected..."
|
||||
### always rebuild the pythondir from scratch if new dependencies were detected
|
||||
rm -rf ${PYTHONDIR}
|
||||
virtualenv -p /usr/bin/python3 ${PYTHONDIR}
|
||||
ln -s /usr/lib/python3/dist-packages/gpiod* ${PYTHONDIR}/lib/python*/site-packages
|
||||
${PYTHONDIR}/bin/pip install -r $MOONRAKER_DIR/scripts/moonraker-requirements.txt
|
||||
ok_msg "Dependencies have been installed!"
|
||||
fi
|
||||
|
||||
cd $MOONRAKER_DIR && git pull
|
||||
### read PKGLIST and install possible new dependencies
|
||||
install_moonraker_packages
|
||||
### install possible new python dependencies
|
||||
MR_REQ_TXT="$MOONRAKER_DIR/scripts/moonraker-requirements.txt"
|
||||
$MOONRAKER_ENV/bin/pip install -r $MR_REQ_TXT
|
||||
update_log_paths "moonraker"
|
||||
ok_msg "Update complete!"
|
||||
moonraker_service "restart"
|
||||
do_action_service "restart" "moonraker"
|
||||
}
|
||||
|
||||
update_klipperscreen(){
|
||||
@@ -161,7 +297,7 @@ update_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"
|
||||
git checkout -f 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..."
|
||||
@@ -173,6 +309,13 @@ update_klipperscreen(){
|
||||
start_klipperscreen
|
||||
}
|
||||
|
||||
update_pgc_for_klipper(){
|
||||
PGC_DIR="${HOME}/pgcode"
|
||||
status_msg "Updating PrettyGCode for Klipper ..."
|
||||
cd $PGC_DIR && git pull
|
||||
ok_msg "Update complete!"
|
||||
}
|
||||
|
||||
update_MoonrakerTelegramBot(){
|
||||
stop_MoonrakerTelegramBot
|
||||
cd $MOONRAKERTELEGRAMBOT_DIR
|
||||
@@ -184,7 +327,7 @@ update_MoonrakerTelegramBot(){
|
||||
|
||||
update_system(){
|
||||
status_msg "Updating System ..."
|
||||
sudo apt-get update && sudo apt-get upgrade -y
|
||||
sudo apt-get update --allow-releaseinfo-change && sudo apt-get upgrade -y
|
||||
ok_msg "Update complete! Check the log above!"
|
||||
ok_msg "KIAUH won't do any dist-upgrades!\n"
|
||||
}
|
||||
@@ -42,13 +42,16 @@ upload_selection(){
|
||||
|
||||
### find all suitable logfiles for klipper
|
||||
logfiles=()
|
||||
if ls /tmp/klippy*.log 2>/dev/null 1>&2; then
|
||||
for kl_log in $(find /tmp/klippy*.log); do
|
||||
klipper_logs="${HOME}/klipper_logs/klippy*.log"
|
||||
moonraker_logs="${HOME}/klipper_logs/moonraker*.log"
|
||||
|
||||
if ls $klipper_logs 2>/dev/null 1>&2; then
|
||||
for kl_log in $(find $klipper_logs); do
|
||||
logfiles+=($kl_log)
|
||||
done
|
||||
fi
|
||||
if ls /tmp/moonraker*.log 2>/dev/null 1>&2; then
|
||||
for mr_log in $(find /tmp/moonraker*.log); do
|
||||
if ls $moonraker_logs 2>/dev/null 1>&2; then
|
||||
for mr_log in $(find $moonraker_logs); do
|
||||
logfiles+=($mr_log)
|
||||
done
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user