mirror of
https://github.com/dw-0/kiauh.git
synced 2025-12-12 18:14:28 +05:00
refactor!: update KIAUH for recent moonraker changes (#245)
This commit is contained in:
@@ -2,6 +2,57 @@
|
|||||||
|
|
||||||
This document covers possible important changes to KIAUH.
|
This document covers possible important changes to KIAUH.
|
||||||
|
|
||||||
|
### 2022-10-20
|
||||||
|
KIAUH has now reached major version 5 !
|
||||||
|
|
||||||
|
Recently Moonraker introduced some changes which makes it necessary to change the folder structure of printer setups.
|
||||||
|
If you are interested in the details, check out this PR: https://github.com/Arksine/moonraker/pull/491 \
|
||||||
|
Although Moonraker has some mechanics available to migrate existing setups to the new file structure with the use of symlinks, fresh and clean installs
|
||||||
|
should be considered.
|
||||||
|
|
||||||
|
The version jump of KIAUH to v5 is a breaking change due to those major changes! That means v4 and v5 are not compatible with each other!
|
||||||
|
This is also the reason why you will currently be greeted by a yellow notification in the main menu of KIAUH leading to this changelog.
|
||||||
|
I decided to disable a few functions of the script and focus on releasing the required changes to the core components of this script.
|
||||||
|
I will work on updating the other parts of the script piece by piece during the next days/weeks.
|
||||||
|
So I am already sorry in advance if one of your desired components you wanted to install or use temporarily cannot be installed or used right now.
|
||||||
|
|
||||||
|
The following functions are currently unavailable:
|
||||||
|
- Installation of: KlipperScreen, Obico, Octoprint, MJPG-Streamer, Telegram Bot and PrettyGCode
|
||||||
|
- All backup functions and the Log-Upload
|
||||||
|
|
||||||
|
**So what is working?**\
|
||||||
|
Installation of Klipper, Moonraker, Mainsail and Fluidd. Both, single and multi-instance setups work!\
|
||||||
|
As already said, the rest will follow in the near future. Updating and removal of already installed components should continue to work.
|
||||||
|
|
||||||
|
**What was removed?**\
|
||||||
|
The option to change Klippers configuration directory got removed. From now on it will not be possible anymore to change
|
||||||
|
the configuration directory from within KIAUH and the new filestructure is enforced.
|
||||||
|
|
||||||
|
**What if I don't have an existing Klipper/Moonraker install right now?**\
|
||||||
|
Nothing important to think about, install Klipper and Moonraker. KIAUH will install both of them with the new filestructure.
|
||||||
|
|
||||||
|
**What if I have an existing Klipper/Moonraker install?**\
|
||||||
|
First of all: Backups! Please copy all of your config files and the Moonraker database (it is a hidden folder, usually `~/.moonraker_database`) to a safe location.
|
||||||
|
After that, uninstall Klipper and Moonraker with KIAUH. You can then proceed and re-install both of them with KIAUH again. It is important that you are on KIAUH v5 for that!
|
||||||
|
Once everything is installed again, you need to manually copy your configuration files from the old `~/klipper_config` folder to the new `~/printer_data/config` folder.
|
||||||
|
Previous, by Moonraker created symlinks to folder of the old filestructure will not work anymore, you need to move the files to their new location now!
|
||||||
|
Do the same with the two files inside of `~/.moonraker_database`. Move/copy them into `~/printer_data/database`. If `~/printer_data/database` is already populated with a `data.mdb` and `lock.mdb`
|
||||||
|
delete them or simply overwrite them. Nothing should be lost as those should be empty database files. Anyway, you made backups, right?
|
||||||
|
You can now proceed and restart Moonraker. Either from within Mainsail or Fluidd, or use SSH and execute `sudo systemctl restart moonraker`.
|
||||||
|
If everything went smooth, you should be good to go again. If you see some Moonraker warnings about deprecated options in the `moonraker.conf`, go ahead and resolve them.
|
||||||
|
I will not cover them in detail here. A good source is the Moonraker documentation: https://moonraker.readthedocs.io/en/latest/configuration/
|
||||||
|
|
||||||
|
**What if I have an existing Klipper/Moonraker multi-instance install?**\
|
||||||
|
Pretty much the same steps that are required for single instance installs apply to multi-instance setups. So please go ahead and read the previous paragraph if you didn't already.
|
||||||
|
Make backups of everything first. Then remove and install the desired amount of Klipper and Moonraker instances again.
|
||||||
|
Now you need to move all config and database files to their new locations.\
|
||||||
|
Example with an instance called `printer_1`:\
|
||||||
|
The config files go from `~/klipper_config/printer_1` to `~/printer_1_data/config`.
|
||||||
|
The database files go from `~/.moonraker_database_1` to `~/printer_1_data/database`.
|
||||||
|
Now restart all Moonraker services. You can restart all of them at once if you launch KIAUH, and in the main menu type `restart moonraker` and hit Enter.
|
||||||
|
|
||||||
|
I hope I have covered the most important things. In case you need further support, the official Klipper Discord is a good place to ask for help.
|
||||||
|
|
||||||
### 2022-08-15
|
### 2022-08-15
|
||||||
Support for "Obico for Klipper" was added! Huge thanks to [kennethjiang](https://github.com/kennethjiang) for helping me with the implementation!
|
Support for "Obico for Klipper" was added! Huge thanks to [kennethjiang](https://github.com/kennethjiang) for helping me with the implementation!
|
||||||
|
|
||||||
|
|||||||
9
kiauh.sh
9
kiauh.sh
@@ -9,6 +9,15 @@
|
|||||||
# This file may be distributed under the terms of the GNU GPLv3 license #
|
# This file may be distributed under the terms of the GNU GPLv3 license #
|
||||||
#=======================================================================#
|
#=======================================================================#
|
||||||
|
|
||||||
|
# TODO: mjpg-streamer
|
||||||
|
# TODO: moonraker-telegram-bot
|
||||||
|
# TODO: obico
|
||||||
|
# TODO: pretty_gcode
|
||||||
|
# TODO: upload_log
|
||||||
|
# TODO: all backup functions
|
||||||
|
# TODO: octoprint
|
||||||
|
# TODO: doublecheck that nothing got missed!
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
clear
|
clear
|
||||||
|
|
||||||
|
|||||||
1
resources/klipper.env
Normal file
1
resources/klipper.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
KLIPPER_ARGS="/home/%USER%/klipper/klippy/klippy.py %CFG% -I %PRINTER% -l %LOG% -a %UDS%"
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
#Systemd Klipper Service
|
|
||||||
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Systemd Klipper Service for instance klipper-%INST%
|
Description=Klipper 3D Printer Firmware SV1 %INST%
|
||||||
Documentation=https://www.klipper3d.org/
|
Documentation=https://www.klipper3d.org/
|
||||||
After=network.target
|
After=network.target
|
||||||
Wants=udev.target
|
Wants=udev.target
|
||||||
@@ -10,13 +8,11 @@ Wants=udev.target
|
|||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Environment=KLIPPER_CONFIG=%CFG%
|
|
||||||
Environment=KLIPPER_LOG=%LOG%
|
|
||||||
Environment=KLIPPER_SOCKET=%UDS%
|
|
||||||
Environment=KLIPPER_PRINTER=%PRINTER%
|
|
||||||
Type=simple
|
Type=simple
|
||||||
User=%USER%
|
User=%USER%
|
||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
ExecStart=%ENV%/bin/python %DIR%/klippy/klippy.py ${KLIPPER_CONFIG} -I ${KLIPPER_PRINTER} -l ${KLIPPER_LOG} -a ${KLIPPER_SOCKET}
|
WorkingDirectory=/home/%USER%/klipper
|
||||||
|
EnvironmentFile=%ENV_FILE%
|
||||||
|
ExecStart=%ENV%/bin/python $KLIPPER_ARGS
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=10
|
RestartSec=10
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
[server]
|
[server]
|
||||||
host: 0.0.0.0
|
host: 0.0.0.0
|
||||||
port: %PORT%
|
port: %PORT%
|
||||||
enable_debug_logging: False
|
|
||||||
klippy_uds_address: %UDS%
|
klippy_uds_address: %UDS%
|
||||||
|
|
||||||
[authorization]
|
[authorization]
|
||||||
@@ -22,13 +21,6 @@ cors_domains:
|
|||||||
https://app.fluidd.xyz
|
https://app.fluidd.xyz
|
||||||
http://app.fluidd.xyz
|
http://app.fluidd.xyz
|
||||||
|
|
||||||
[database]
|
|
||||||
database_path: %DB%
|
|
||||||
|
|
||||||
[file_manager]
|
|
||||||
config_path: %CFG%
|
|
||||||
log_path: %LOG%
|
|
||||||
|
|
||||||
[octoprint_compat]
|
[octoprint_compat]
|
||||||
|
|
||||||
[history]
|
[history]
|
||||||
|
|||||||
1
resources/moonraker.env
Normal file
1
resources/moonraker.env
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MOONRAKER_ARGS="/home/%USER%/moonraker/moonraker/moonraker.py -d %PRINTER_DATA%"
|
||||||
@@ -1,20 +1,19 @@
|
|||||||
#Systemd Moonraker Service
|
|
||||||
|
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Systemd Moonraker Service for instance moonraker-%INST%
|
Description=API Server for Klipper SV1 %INST%
|
||||||
Documentation=https://moonraker.readthedocs.io/
|
Documentation=https://moonraker.readthedocs.io/
|
||||||
After=network.target
|
Requires=network-online.target
|
||||||
|
After=network-online.target
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Environment=MOONRAKER_CONF=%CFG%
|
|
||||||
Environment=MOONRAKER_LOG=%LOG%
|
|
||||||
Type=simple
|
Type=simple
|
||||||
SupplementaryGroups=moonraker-admin
|
|
||||||
User=%USER%
|
User=%USER%
|
||||||
|
SupplementaryGroups=moonraker-admin
|
||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
ExecStart=%ENV%/bin/python %DIR%/moonraker/moonraker.py -c ${MOONRAKER_CONF} -l ${MOONRAKER_LOG}
|
WorkingDirectory=/home/%USER%/moonraker
|
||||||
|
EnvironmentFile=%ENV_FILE%
|
||||||
|
ExecStart=%ENV%/bin/python $MOONRAKER_ARGS
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=10
|
RestartSec=10
|
||||||
@@ -39,29 +39,29 @@ function install_fluidd() {
|
|||||||
### check if another site already listens to port 80
|
### check if another site already listens to port 80
|
||||||
fluidd_port_check
|
fluidd_port_check
|
||||||
|
|
||||||
### ask user to install mjpg-streamer
|
# ### ask user to install mjpg-streamer
|
||||||
local install_mjpg_streamer
|
# local install_mjpg_streamer
|
||||||
if [[ ! -f "${SYSTEMD}/webcamd.service" ]]; then
|
# if [[ ! -f "${SYSTEMD}/webcamd.service" ]]; then
|
||||||
while true; do
|
# while true; do
|
||||||
echo
|
# echo
|
||||||
top_border
|
# top_border
|
||||||
echo -e "| Install MJPG-Streamer for webcam support? |"
|
# echo -e "| Install MJPG-Streamer for webcam support? |"
|
||||||
bottom_border
|
# bottom_border
|
||||||
read -p "${cyan}###### Please select (y/N):${white} " yn
|
# read -p "${cyan}###### Please select (y/N):${white} " yn
|
||||||
case "${yn}" in
|
# case "${yn}" in
|
||||||
Y|y|Yes|yes)
|
# Y|y|Yes|yes)
|
||||||
select_msg "Yes"
|
# select_msg "Yes"
|
||||||
install_mjpg_streamer="true"
|
# install_mjpg_streamer="true"
|
||||||
break;;
|
# break;;
|
||||||
N|n|No|no|"")
|
# N|n|No|no|"")
|
||||||
select_msg "No"
|
# select_msg "No"
|
||||||
install_mjpg_streamer="false"
|
# install_mjpg_streamer="false"
|
||||||
break;;
|
# break;;
|
||||||
*)
|
# *)
|
||||||
error_msg "Invalid command!";;
|
# error_msg "Invalid command!";;
|
||||||
esac
|
# esac
|
||||||
done
|
# done
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
### download fluidd
|
### download fluidd
|
||||||
download_fluidd
|
download_fluidd
|
||||||
@@ -83,7 +83,7 @@ function install_fluidd() {
|
|||||||
patch_fluidd_update_manager
|
patch_fluidd_update_manager
|
||||||
|
|
||||||
### install mjpg-streamer
|
### install mjpg-streamer
|
||||||
[[ ${install_mjpg_streamer} == "true" ]] && install_mjpg-streamer
|
# [[ ${install_mjpg_streamer} == "true" ]] && install_mjpg-streamer
|
||||||
|
|
||||||
fetch_webui_ports #WIP
|
fetch_webui_ports #WIP
|
||||||
|
|
||||||
@@ -124,9 +124,11 @@ function install_fluidd_macros() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function download_fluidd_macros() {
|
function download_fluidd_macros() {
|
||||||
local fluidd_cfg="https://raw.githubusercontent.com/fluidd-core/FluiddPI/master/src/modules/fluidd/filesystem/home/pi/klipper_config/fluidd.cfg"
|
local fluidd_cfg path configs regex
|
||||||
local configs path
|
|
||||||
configs=$(find "${KLIPPER_CONFIG}" -type f -name "printer.cfg" | sort)
|
fluidd_cfg="https://raw.githubusercontent.com/fluidd-core/FluiddPI/master/src/modules/fluidd/filesystem/home/pi/klipper_config/fluidd.cfg"
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/printer\.cfg"
|
||||||
|
configs=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
if [[ -n ${configs} ]]; then
|
if [[ -n ${configs} ]]; then
|
||||||
for config in ${configs}; do
|
for config in ${configs}; do
|
||||||
@@ -214,8 +216,23 @@ function remove_fluidd_logs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function remove_fluidd_log_symlinks() {
|
function remove_fluidd_log_symlinks() {
|
||||||
|
local files regex
|
||||||
|
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/logs\/fluidd-.*"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" 2> /dev/null | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_legacy_fluidd_log_symlinks() {
|
||||||
local files
|
local files
|
||||||
files=$(find "${KLIPPER_LOGS}" -name "fluidd*" 2> /dev/null | sort)
|
files=$(find "${HOME}/klipper_logs" -name "fluidd*" 2> /dev/null | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
@@ -231,6 +248,7 @@ function remove_fluidd() {
|
|||||||
remove_fluidd_config
|
remove_fluidd_config
|
||||||
remove_fluidd_logs
|
remove_fluidd_logs
|
||||||
remove_fluidd_log_symlinks
|
remove_fluidd_log_symlinks
|
||||||
|
remove_legacy_fluidd_log_symlinks
|
||||||
|
|
||||||
### remove fluidd_port from ~/.kiauh.ini
|
### remove fluidd_port from ~/.kiauh.ini
|
||||||
sed -i "/^fluidd_port=/d" "${INI_FILE}"
|
sed -i "/^fluidd_port=/d" "${INI_FILE}"
|
||||||
@@ -395,10 +413,11 @@ function select_fluidd_port() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function patch_fluidd_update_manager() {
|
function patch_fluidd_update_manager() {
|
||||||
local patched="false"
|
local patched moonraker_configs regex
|
||||||
local moonraker_configs
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf"
|
||||||
moonraker_configs=$(find "${KLIPPER_CONFIG}" -type f -name "moonraker.conf" | sort)
|
moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
patched="false"
|
||||||
for conf in ${moonraker_configs}; do
|
for conf in ${moonraker_configs}; do
|
||||||
if ! grep -Eq "^\[update_manager fluidd\]$" "${conf}"; then
|
if ! grep -Eq "^\[update_manager fluidd\]$" "${conf}"; then
|
||||||
### add new line to conf if it doesn't end with one
|
### add new line to conf if it doesn't end with one
|
||||||
|
|||||||
@@ -105,10 +105,11 @@ function create_example_shell_command() {
|
|||||||
### create a backup of the config folder
|
### create a backup of the config folder
|
||||||
backup_klipper_config_dir
|
backup_klipper_config_dir
|
||||||
|
|
||||||
local printer_cfgs path
|
local configs regex path
|
||||||
printer_cfgs=$(find "$(get_klipper_cfg_dir)" -type f -name "printer.cfg" | sort)
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/printer\.cfg"
|
||||||
|
configs=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
for cfg in ${printer_cfgs}; do
|
for cfg in ${configs}; do
|
||||||
path=$(echo "${cfg}" | rev | cut -d"/" -f2- | rev)
|
path=$(echo "${cfg}" | rev | cut -d"/" -f2- | rev)
|
||||||
|
|
||||||
if [[ ! -f "${path}/shell_command.cfg" ]]; then
|
if [[ ! -f "${path}/shell_command.cfg" ]]; then
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ function set_globals() {
|
|||||||
KLIPPY_ENV="${HOME}/klippy-env"
|
KLIPPY_ENV="${HOME}/klippy-env"
|
||||||
KLIPPER_DIR="${HOME}/klipper"
|
KLIPPER_DIR="${HOME}/klipper"
|
||||||
KLIPPER_REPO="https://github.com/Klipper3d/klipper.git"
|
KLIPPER_REPO="https://github.com/Klipper3d/klipper.git"
|
||||||
KLIPPER_LOGS="${HOME}/klipper_logs"
|
|
||||||
KLIPPER_CONFIG="$(get_klipper_cfg_dir)" # default: ${HOME}/klipper_config
|
|
||||||
|
|
||||||
#================= MOONRAKER ==================#
|
#================= MOONRAKER ==================#
|
||||||
MOONRAKER_ENV="${HOME}/moonraker-env"
|
MOONRAKER_ENV="${HOME}/moonraker-env"
|
||||||
|
|||||||
@@ -15,19 +15,6 @@ set -e
|
|||||||
#================ INSTALL KLIPPER ================#
|
#================ INSTALL KLIPPER ================#
|
||||||
#=================================================#
|
#=================================================#
|
||||||
|
|
||||||
### check for existing klipper service installations
|
|
||||||
function klipper_initd() {
|
|
||||||
local services
|
|
||||||
services=$(find "${INITD}" -maxdepth 1 -regextype posix-extended -regex "${INITD}/klipper(-[^0])?[0-9]*" | sort)
|
|
||||||
echo "${services}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function klipper_systemd() {
|
|
||||||
local services
|
|
||||||
services=$(find "${SYSTEMD}" -maxdepth 1 -regextype posix-extended -regex "${SYSTEMD}/klipper(-[0-9a-zA-Z]+)?.service" | sort)
|
|
||||||
echo "${services}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function klipper_setup_dialog() {
|
function klipper_setup_dialog() {
|
||||||
status_msg "Initializing Klipper installation ..."
|
status_msg "Initializing Klipper installation ..."
|
||||||
|
|
||||||
@@ -36,8 +23,8 @@ function klipper_setup_dialog() {
|
|||||||
local python_version="${1}" user_input=()
|
local python_version="${1}" user_input=()
|
||||||
local error
|
local error
|
||||||
|
|
||||||
klipper_initd_service=$(klipper_initd)
|
klipper_initd_service=$(find_klipper_initd)
|
||||||
klipper_systemd_services=$(klipper_systemd)
|
klipper_systemd_services=$(find_klipper_systemd)
|
||||||
user_input+=("${python_version}")
|
user_input+=("${python_version}")
|
||||||
|
|
||||||
### return early if klipper already exists
|
### return early if klipper already exists
|
||||||
@@ -150,6 +137,103 @@ function klipper_setup_dialog() {
|
|||||||
klipper_setup "${user_input[@]}"
|
klipper_setup "${user_input[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function klipper_setup() {
|
||||||
|
read_kiauh_ini "${FUNCNAME[0]}"
|
||||||
|
### index 0: python version, index 1: instance count, index 2-n: instance names (optional)
|
||||||
|
local user_input=("${@}")
|
||||||
|
local python_version="${user_input[0]}" && unset "user_input[0]"
|
||||||
|
local instance_arr=("${user_input[@]}") && unset "user_input[@]"
|
||||||
|
local custom_repo="${custom_klipper_repo}"
|
||||||
|
local custom_branch="${custom_klipper_repo_branch}"
|
||||||
|
local dep=(git)
|
||||||
|
|
||||||
|
### checking dependencies
|
||||||
|
dependency_check "${dep[@]}"
|
||||||
|
|
||||||
|
### step 1: clone klipper
|
||||||
|
clone_klipper "${custom_repo}" "${custom_branch}"
|
||||||
|
|
||||||
|
### step 2: install klipper dependencies and create python virtualenv
|
||||||
|
install_klipper_packages "${python_version}"
|
||||||
|
create_klipper_virtualenv "${python_version}"
|
||||||
|
|
||||||
|
### step 3: configure and create klipper instances
|
||||||
|
configure_klipper_service "${instance_arr[@]}"
|
||||||
|
|
||||||
|
### step 4: enable and start all instances
|
||||||
|
do_action_service "enable" "klipper"
|
||||||
|
do_action_service "start" "klipper"
|
||||||
|
|
||||||
|
### step 5: check for dialout group membership
|
||||||
|
check_usergroups
|
||||||
|
|
||||||
|
### confirm message
|
||||||
|
local confirm=""
|
||||||
|
(( instance_arr[0] == 1 )) && confirm="Klipper has been set up!"
|
||||||
|
(( instance_arr[0] > 1 )) && confirm="${instance_arr[0]} Klipper instances have been set up!"
|
||||||
|
|
||||||
|
print_confirm "${confirm}" && return
|
||||||
|
}
|
||||||
|
|
||||||
|
function clone_klipper() {
|
||||||
|
local repo=${1} branch=${2}
|
||||||
|
|
||||||
|
[[ -z ${repo} ]] && repo="${KLIPPER_REPO}"
|
||||||
|
repo=$(echo "${repo}" | sed -r "s/^(http|https):\/\/github\.com\///i; s/\.git$//")
|
||||||
|
repo="https://github.com/${repo}"
|
||||||
|
|
||||||
|
[[ -z ${branch} ]] && branch="master"
|
||||||
|
|
||||||
|
### force remove existing klipper dir and clone into fresh klipper dir
|
||||||
|
[[ -d ${KLIPPER_DIR} ]] && rm -rf "${KLIPPER_DIR}"
|
||||||
|
|
||||||
|
status_msg "Cloning Klipper from ${repo} ..."
|
||||||
|
|
||||||
|
cd "${HOME}" || exit 1
|
||||||
|
if git clone "${repo}" "${KLIPPER_DIR}"; then
|
||||||
|
cd "${KLIPPER_DIR}" && git checkout "${branch}"
|
||||||
|
else
|
||||||
|
print_error "Cloning Klipper from\n ${repo}\n failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_klipper_virtualenv() {
|
||||||
|
local python_version="${1}"
|
||||||
|
|
||||||
|
[[ ${python_version} == "python2" ]] && \
|
||||||
|
status_msg "Installing $(python2 -V) virtual environment..."
|
||||||
|
|
||||||
|
[[ ${python_version} == "python3" ]] && \
|
||||||
|
status_msg "Installing $(python3 -V) virtual environment..."
|
||||||
|
|
||||||
|
### remove klippy-env if it already exists
|
||||||
|
[[ -d ${KLIPPY_ENV} ]] && rm -rf "${KLIPPY_ENV}"
|
||||||
|
|
||||||
|
if [[ ${python_version} == "python2" ]]; then
|
||||||
|
if virtualenv -p python2 "${KLIPPY_ENV}"; then
|
||||||
|
"${KLIPPY_ENV}"/bin/pip install -r "${KLIPPER_DIR}"/scripts/klippy-requirements.txt
|
||||||
|
else
|
||||||
|
log_error "failure while creating python2 klippy-env"
|
||||||
|
error_msg "Creation of Klipper virtualenv failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ${python_version} == "python3" ]]; then
|
||||||
|
if virtualenv -p python3 "${KLIPPY_ENV}"; then
|
||||||
|
"${KLIPPY_ENV}"/bin/pip install -U pip
|
||||||
|
"${KLIPPY_ENV}"/bin/pip install -r "${KLIPPER_DIR}"/scripts/klippy-requirements.txt
|
||||||
|
else
|
||||||
|
log_error "failure while creating python3 klippy-env"
|
||||||
|
error_msg "Creation of Klipper virtualenv failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
# extracts the required packages from the
|
# extracts the required packages from the
|
||||||
# install-debian.sh script and installs them
|
# install-debian.sh script and installs them
|
||||||
@@ -200,124 +284,84 @@ function install_klipper_packages() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_klipper_virtualenv() {
|
function configure_klipper_service() {
|
||||||
local python_version="${1}"
|
local input=("${@}")
|
||||||
|
local klipper_count=${input[0]} && unset "input[0]"
|
||||||
|
local names=("${input[@]}") && unset "input[@]"
|
||||||
|
local printer_data cfg_dir cfg log printer uds service env_file
|
||||||
|
|
||||||
[[ ${python_version} == "python2" ]] && \
|
if (( klipper_count == 1 )) && [[ ${#names[@]} -eq 0 ]]; then
|
||||||
status_msg "Installing $(python2 -V) virtual environment..."
|
printer_data="${HOME}/printer_data"
|
||||||
|
cfg_dir="${printer_data}/config"
|
||||||
|
cfg="${cfg_dir}/printer.cfg"
|
||||||
|
log="${printer_data}/logs/klippy.log"
|
||||||
|
printer="${printer_data}/comms/klippy.serial"
|
||||||
|
uds="${printer_data}/comms/klippy.sock"
|
||||||
|
service="${SYSTEMD}/klipper.service"
|
||||||
|
env_file="${printer_data}/systemd/klipper.env"
|
||||||
|
|
||||||
[[ ${python_version} == "python3" ]] && \
|
### create required folder structure
|
||||||
status_msg "Installing $(python3 -V) virtual environment..."
|
create_required_folders "${printer_data}"
|
||||||
|
|
||||||
### remove klippy-env if it already exists
|
### write single instance service
|
||||||
[[ -d ${KLIPPY_ENV} ]] && rm -rf "${KLIPPY_ENV}"
|
write_klipper_service "" "${cfg}" "${log}" "${printer}" "${uds}" "${service}" "${env_file}"
|
||||||
|
write_example_printer_cfg "${cfg_dir}" "${cfg}"
|
||||||
|
ok_msg "Klipper instance created!"
|
||||||
|
|
||||||
if [[ ${python_version} == "python2" ]]; then
|
elif (( klipper_count >= 1 )) && [[ ${#names[@]} -gt 0 ]]; then
|
||||||
if virtualenv -p python2 "${KLIPPY_ENV}"; then
|
local j=0 re="^[1-9][0-9]*$"
|
||||||
"${KLIPPY_ENV}"/bin/pip install -r "${KLIPPER_DIR}"/scripts/klippy-requirements.txt
|
|
||||||
else
|
|
||||||
log_error "failure while creating python2 klippy-env"
|
|
||||||
error_msg "Creation of Klipper virtualenv failed!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${python_version} == "python3" ]]; then
|
for (( i=1; i <= klipper_count; i++ )); do
|
||||||
if virtualenv -p python3 "${KLIPPY_ENV}"; then
|
### overwrite config folder if name is only a number
|
||||||
"${KLIPPY_ENV}"/bin/pip install -U pip
|
if [[ ${names[j]} =~ ${re} ]]; then
|
||||||
"${KLIPPY_ENV}"/bin/pip install -r "${KLIPPER_DIR}"/scripts/klippy-requirements.txt
|
printer_data="${HOME}/printer_${names[${j}]}_data"
|
||||||
else
|
else
|
||||||
log_error "failure while creating python3 klippy-env"
|
printer_data="${HOME}/${names[${j}]}_data"
|
||||||
error_msg "Creation of Klipper virtualenv failed!"
|
fi
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
return
|
cfg_dir="${printer_data}/config"
|
||||||
}
|
cfg="${cfg_dir}/printer.cfg"
|
||||||
|
log="${printer_data}/logs/klippy.log"
|
||||||
|
printer="${printer_data}/comms/klippy.serial"
|
||||||
|
uds="${printer_data}/comms/klippy.sock"
|
||||||
|
service="${SYSTEMD}/klipper-${names[${j}]}.service"
|
||||||
|
env_file="${printer_data}/systemd/klipper.env"
|
||||||
|
|
||||||
function klipper_setup() {
|
### create required folder structure
|
||||||
read_kiauh_ini "${FUNCNAME[0]}"
|
create_required_folders "${printer_data}"
|
||||||
### index 0: python version, index 1: instance count, index 2-n: instance names (optional)
|
|
||||||
local user_input=("${@}")
|
|
||||||
local python_version="${user_input[0]}" && unset "user_input[0]"
|
|
||||||
local instance_arr=("${user_input[@]}") && unset "user_input[@]"
|
|
||||||
local custom_repo="${custom_klipper_repo}"
|
|
||||||
local custom_branch="${custom_klipper_repo_branch}"
|
|
||||||
### checking dependencies
|
|
||||||
local dep=(git)
|
|
||||||
dependency_check "${dep[@]}"
|
|
||||||
|
|
||||||
### step 1: clone klipper
|
### write multi instance service
|
||||||
clone_klipper "${custom_repo}" "${custom_branch}"
|
write_klipper_service "${names[${j}]}" "${cfg}" "${log}" "${printer}" "${uds}" "${service}" "${env_file}"
|
||||||
|
write_example_printer_cfg "${cfg_dir}" "${cfg}"
|
||||||
|
ok_msg "Klipper instance 'klipper-${names[${j}]}' created!"
|
||||||
|
j=$(( j + 1 ))
|
||||||
|
done && unset j
|
||||||
|
|
||||||
### step 2: install klipper dependencies and create python virtualenv
|
|
||||||
install_klipper_packages "${python_version}"
|
|
||||||
create_klipper_virtualenv "${python_version}"
|
|
||||||
|
|
||||||
### step 3: create gcode_files and logs folder
|
|
||||||
[[ ! -d "${HOME}/gcode_files" ]] && mkdir -p "${HOME}/gcode_files"
|
|
||||||
[[ ! -d ${KLIPPER_LOGS} ]] && mkdir -p "${KLIPPER_LOGS}"
|
|
||||||
|
|
||||||
### step 4: create klipper instances
|
|
||||||
create_klipper_service "${instance_arr[@]}"
|
|
||||||
|
|
||||||
### step 5: enable and start all instances
|
|
||||||
do_action_service "enable" "klipper"
|
|
||||||
do_action_service "start" "klipper"
|
|
||||||
|
|
||||||
### step 6: check for dialout group membership
|
|
||||||
check_usergroups
|
|
||||||
|
|
||||||
### confirm message
|
|
||||||
local confirm=""
|
|
||||||
(( instance_arr[0] == 1 )) && confirm="Klipper has been set up!"
|
|
||||||
(( instance_arr[0] > 1 )) && confirm="${instance_arr[0]} Klipper instances have been set up!"
|
|
||||||
|
|
||||||
print_confirm "${confirm}" && return
|
|
||||||
}
|
|
||||||
|
|
||||||
function clone_klipper() {
|
|
||||||
local repo=${1} branch=${2}
|
|
||||||
|
|
||||||
[[ -z ${repo} ]] && repo="${KLIPPER_REPO}"
|
|
||||||
repo=$(echo "${repo}" | sed -r "s/^(http|https):\/\/github\.com\///i; s/\.git$//")
|
|
||||||
repo="https://github.com/${repo}"
|
|
||||||
|
|
||||||
[[ -z ${branch} ]] && branch="master"
|
|
||||||
|
|
||||||
### force remove existing klipper dir and clone into fresh klipper dir
|
|
||||||
[[ -d ${KLIPPER_DIR} ]] && rm -rf "${KLIPPER_DIR}"
|
|
||||||
|
|
||||||
status_msg "Cloning Klipper from ${repo} ..."
|
|
||||||
|
|
||||||
cd "${HOME}" || exit 1
|
|
||||||
if git clone "${repo}" "${KLIPPER_DIR}"; then
|
|
||||||
cd "${KLIPPER_DIR}" && git checkout "${branch}"
|
|
||||||
else
|
else
|
||||||
print_error "Cloning Klipper from\n ${repo}\n failed!"
|
return 1
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function write_klipper_service() {
|
function write_klipper_service() {
|
||||||
local i=${1} cfg=${2} log=${3} printer=${4} uds=${5} service=${6}
|
local i=${1} cfg=${2} log=${3} printer=${4} uds=${5} service=${6} env_file=${7}
|
||||||
local service_template="${KIAUH_SRCDIR}/resources/klipper.service"
|
local service_template="${KIAUH_SRCDIR}/resources/klipper.service"
|
||||||
|
local env_template="${KIAUH_SRCDIR}/resources/klipper.env"
|
||||||
|
|
||||||
### replace all placeholders
|
### replace all placeholders
|
||||||
if [[ ! -f ${service} ]]; then
|
if [[ ! -f ${service} ]]; then
|
||||||
status_msg "Creating Klipper Service ${i} ..."
|
status_msg "Creating Klipper Service ${i} ..."
|
||||||
sudo cp "${service_template}" "${service}"
|
sudo cp "${service_template}" "${service}"
|
||||||
[[ -z ${i} ]] && sudo sed -i "s| for instance klipper-%INST%||" "${service}"
|
sudo cp "${env_template}" "${env_file}"
|
||||||
|
[[ -z ${i} ]] && sudo sed -i "s| %INST%||" "${service}"
|
||||||
[[ -n ${i} ]] && sudo sed -i "s|%INST%|${i}|" "${service}"
|
[[ -n ${i} ]] && sudo sed -i "s|%INST%|${i}|" "${service}"
|
||||||
sudo sed -i "s|%USER%|${USER}|; s|%ENV%|${KLIPPY_ENV}|; s|%DIR%|${KLIPPER_DIR}|" "${service}"
|
sudo sed -i "s|%USER%|${USER}|g; s|%ENV%|${KLIPPY_ENV}|; s|%ENV_FILE%|${env_file}|" "${service}"
|
||||||
sudo sed -i "s|%LOG%|${log}|; s|%CFG%|${cfg}|; s|%PRINTER%|${printer}|; s|%UDS%|${uds}|" "${service}"
|
sudo sed -i "s|%USER%|${USER}|; s|%LOG%|${log}|; s|%CFG%|${cfg}|; s|%PRINTER%|${printer}|; s|%UDS%|${uds}|" "${env_file}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function write_example_printer_cfg() {
|
function write_example_printer_cfg() {
|
||||||
local cfg_dir=${1} cfg=${2}
|
local cfg_dir=${1} cfg=${2}
|
||||||
local cfg_template="${KIAUH_SRCDIR}/resources/printer.cfg"
|
local cfg_template="${KIAUH_SRCDIR}/resources/example.printer.cfg"
|
||||||
|
|
||||||
### create a config directory if it doesn't exist
|
### create a config directory if it doesn't exist
|
||||||
if [[ ! -d ${cfg_dir} ]]; then
|
if [[ ! -d ${cfg_dir} ]]; then
|
||||||
@@ -332,52 +376,6 @@ function write_example_printer_cfg() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_klipper_service() {
|
|
||||||
local input=("${@}")
|
|
||||||
local klipper_count=${input[0]} && unset "input[0]"
|
|
||||||
local names=("${input[@]}") && unset "input[@]"
|
|
||||||
local cfg_dir cfg log printer uds service
|
|
||||||
|
|
||||||
if (( klipper_count == 1 )) && [[ ${#names[@]} -eq 0 ]]; then
|
|
||||||
cfg_dir="${KLIPPER_CONFIG}"
|
|
||||||
cfg="${cfg_dir}/printer.cfg"
|
|
||||||
log="${KLIPPER_LOGS}/klippy.log"
|
|
||||||
printer="/tmp/printer"
|
|
||||||
uds="/tmp/klippy_uds"
|
|
||||||
service="${SYSTEMD}/klipper.service"
|
|
||||||
### write single instance service
|
|
||||||
write_klipper_service "" "${cfg}" "${log}" "${printer}" "${uds}" "${service}"
|
|
||||||
write_example_printer_cfg "${cfg_dir}" "${cfg}"
|
|
||||||
ok_msg "Klipper instance created!"
|
|
||||||
|
|
||||||
elif (( klipper_count >= 1 )) && [[ ${#names[@]} -gt 0 ]]; then
|
|
||||||
local j=0 re="^[1-9][0-9]*$"
|
|
||||||
|
|
||||||
for (( i=1; i <= klipper_count; i++ )); do
|
|
||||||
### overwrite config folder if name is only a number
|
|
||||||
if [[ ${names[j]} =~ ${re} ]]; then
|
|
||||||
cfg_dir="${KLIPPER_CONFIG}/printer_${names[${j}]}"
|
|
||||||
else
|
|
||||||
cfg_dir="${KLIPPER_CONFIG}/${names[${j}]}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cfg="${cfg_dir}/printer.cfg"
|
|
||||||
log="${KLIPPER_LOGS}/klippy-${names[${j}]}.log"
|
|
||||||
printer="/tmp/printer-${names[${j}]}"
|
|
||||||
uds="/tmp/klippy_uds-${names[${j}]}"
|
|
||||||
service="${SYSTEMD}/klipper-${names[${j}]}.service"
|
|
||||||
### write multi instance service
|
|
||||||
write_klipper_service "${names[${j}]}" "${cfg}" "${log}" "${printer}" "${uds}" "${service}"
|
|
||||||
write_example_printer_cfg "${cfg_dir}" "${cfg}"
|
|
||||||
ok_msg "Klipper instance 'klipper-${names[${j}]}' created!"
|
|
||||||
j=$(( j + 1 ))
|
|
||||||
done && unset j
|
|
||||||
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
#================================================#
|
#================================================#
|
||||||
#================ REMOVE KLIPPER ================#
|
#================ REMOVE KLIPPER ================#
|
||||||
#================================================#
|
#================================================#
|
||||||
@@ -393,10 +391,10 @@ function remove_klipper_sysvinit() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function remove_klipper_systemd() {
|
function remove_klipper_systemd() {
|
||||||
[[ -z $(klipper_systemd) ]] && return
|
[[ -z $(find_klipper_systemd) ]] && return
|
||||||
|
|
||||||
status_msg "Removing Klipper Systemd Services ..."
|
status_msg "Removing Klipper Systemd Services ..."
|
||||||
for service in $(klipper_systemd | cut -d"/" -f5); do
|
for service in $(find_klipper_systemd | cut -d"/" -f5); do
|
||||||
status_msg "Removing ${service} ..."
|
status_msg "Removing ${service} ..."
|
||||||
sudo systemctl stop "${service}"
|
sudo systemctl stop "${service}"
|
||||||
sudo systemctl disable "${service}"
|
sudo systemctl disable "${service}"
|
||||||
@@ -410,9 +408,35 @@ function remove_klipper_systemd() {
|
|||||||
ok_msg "Klipper Service removed!"
|
ok_msg "Klipper Service removed!"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function remove_klipper_env_file() {
|
||||||
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/systemd\/klipper\.env"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function remove_klipper_logs() {
|
function remove_klipper_logs() {
|
||||||
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/logs\/klippy\.log.*"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_legacy_klipper_logs() {
|
||||||
local files regex="klippy(-[0-9a-zA-Z]+)?\.log(.*)?"
|
local files regex="klippy(-[0-9a-zA-Z]+)?\.log(.*)?"
|
||||||
files=$(find "${KLIPPER_LOGS}" -maxdepth 1 -regextype posix-extended -regex "${KLIPPER_LOGS}/${regex}" 2> /dev/null | sort)
|
files=$(find "${HOME}/klipper_logs" -maxdepth 1 -regextype posix-extended -regex "${HOME}/klipper_logs/${regex}" 2> /dev/null | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
@@ -424,8 +448,8 @@ function remove_klipper_logs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function remove_klipper_uds() {
|
function remove_klipper_uds() {
|
||||||
local files
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/comms\/klippy\.sock"
|
||||||
files=$(find /tmp -maxdepth 1 -regextype posix-extended -regex "/tmp/klippy_uds(-[0-9a-zA-Z]+)?" | sort)
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
@@ -437,9 +461,22 @@ function remove_klipper_uds() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function remove_klipper_printer() {
|
function remove_klipper_printer() {
|
||||||
local files
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/comms\/klippy\.serial"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_legacy_klipper_printer() {
|
||||||
|
local files
|
||||||
files=$(find /tmp -maxdepth 1 -regextype posix-extended -regex "/tmp/printer(-[0-9a-zA-Z]+)?" | sort)
|
files=$(find /tmp -maxdepth 1 -regextype posix-extended -regex "/tmp/printer(-[0-9a-zA-Z]+)?" | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
status_msg "Removing ${file} ..."
|
status_msg "Removing ${file} ..."
|
||||||
@@ -468,9 +505,12 @@ function remove_klipper_env() {
|
|||||||
function remove_klipper() {
|
function remove_klipper() {
|
||||||
remove_klipper_sysvinit
|
remove_klipper_sysvinit
|
||||||
remove_klipper_systemd
|
remove_klipper_systemd
|
||||||
|
remove_klipper_env_file
|
||||||
remove_klipper_logs
|
remove_klipper_logs
|
||||||
|
remove_legacy_klipper_logs
|
||||||
remove_klipper_uds
|
remove_klipper_uds
|
||||||
remove_klipper_printer
|
remove_klipper_printer
|
||||||
|
remove_legacy_klipper_printer
|
||||||
remove_klipper_dir
|
remove_klipper_dir
|
||||||
remove_klipper_env
|
remove_klipper_env
|
||||||
|
|
||||||
@@ -520,11 +560,11 @@ function update_klipper() {
|
|||||||
|
|
||||||
function get_klipper_status() {
|
function get_klipper_status() {
|
||||||
local sf_count status py_ver
|
local sf_count status py_ver
|
||||||
sf_count="$(klipper_systemd | wc -w)"
|
sf_count="$(find_klipper_systemd | wc -w)"
|
||||||
|
|
||||||
### detect an existing "legacy" klipper init.d installation
|
### detect an existing "legacy" klipper init.d installation
|
||||||
if [[ $(klipper_systemd | wc -w) -eq 0 ]] \
|
if [[ $(find_klipper_systemd | wc -w) -eq 0 ]] \
|
||||||
&& [[ $(klipper_initd | wc -w) -ge 1 ]]; then
|
&& [[ $(find_klipper_initd | wc -w) -ge 1 ]]; then
|
||||||
sf_count=1
|
sf_count=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -595,19 +635,6 @@ function compare_klipper_versions() {
|
|||||||
#=================== HELPERS ====================#
|
#=================== HELPERS ====================#
|
||||||
#================================================#
|
#================================================#
|
||||||
|
|
||||||
function get_klipper_cfg_dir() {
|
|
||||||
local cfg_dir
|
|
||||||
read_kiauh_ini "${FUNCNAME[0]}"
|
|
||||||
|
|
||||||
if [[ -z ${custom_klipper_cfg_loc} ]]; then
|
|
||||||
cfg_dir="${HOME}/klipper_config"
|
|
||||||
else
|
|
||||||
cfg_dir="${custom_klipper_cfg_loc}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${cfg_dir}"
|
|
||||||
}
|
|
||||||
|
|
||||||
###
|
###
|
||||||
# reads the python version from the klipper virtual environment
|
# reads the python version from the klipper virtual environment
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -39,29 +39,29 @@ function install_mainsail() {
|
|||||||
### check if another site already listens to port 80
|
### check if another site already listens to port 80
|
||||||
mainsail_port_check
|
mainsail_port_check
|
||||||
|
|
||||||
### ask user to install mjpg-streamer
|
# ### ask user to install mjpg-streamer
|
||||||
local install_mjpg_streamer
|
# local install_mjpg_streamer
|
||||||
if [[ ! -f "${SYSTEMD}/webcamd.service" ]]; then
|
# if [[ ! -f "${SYSTEMD}/webcamd.service" ]]; then
|
||||||
while true; do
|
# while true; do
|
||||||
echo
|
# echo
|
||||||
top_border
|
# top_border
|
||||||
echo -e "| Install MJPG-Streamer for webcam support? |"
|
# echo -e "| Install MJPG-Streamer for webcam support? |"
|
||||||
bottom_border
|
# bottom_border
|
||||||
read -p "${cyan}###### Please select (y/N):${white} " yn
|
# read -p "${cyan}###### Please select (y/N):${white} " yn
|
||||||
case "${yn}" in
|
# case "${yn}" in
|
||||||
Y|y|Yes|yes)
|
# Y|y|Yes|yes)
|
||||||
select_msg "Yes"
|
# select_msg "Yes"
|
||||||
install_mjpg_streamer="true"
|
# install_mjpg_streamer="true"
|
||||||
break;;
|
# break;;
|
||||||
N|n|No|no|"")
|
# N|n|No|no|"")
|
||||||
select_msg "No"
|
# select_msg "No"
|
||||||
install_mjpg_streamer="false"
|
# install_mjpg_streamer="false"
|
||||||
break;;
|
# break;;
|
||||||
*)
|
# *)
|
||||||
error_msg "Invalid command!";;
|
# error_msg "Invalid command!";;
|
||||||
esac
|
# esac
|
||||||
done
|
# done
|
||||||
fi
|
# fi
|
||||||
|
|
||||||
### download mainsail
|
### download mainsail
|
||||||
download_mainsail
|
download_mainsail
|
||||||
@@ -83,7 +83,7 @@ function install_mainsail() {
|
|||||||
patch_mainsail_update_manager
|
patch_mainsail_update_manager
|
||||||
|
|
||||||
### install mjpg-streamer
|
### install mjpg-streamer
|
||||||
[[ ${install_mjpg_streamer} == "true" ]] && install_mjpg-streamer
|
# [[ ${install_mjpg_streamer} == "true" ]] && install_mjpg-streamer
|
||||||
|
|
||||||
fetch_webui_ports #WIP
|
fetch_webui_ports #WIP
|
||||||
|
|
||||||
@@ -124,9 +124,11 @@ function install_mainsail_macros() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function download_mainsail_macros() {
|
function download_mainsail_macros() {
|
||||||
local ms_cfg="https://raw.githubusercontent.com/mainsail-crew/MainsailOS/master/src/modules/mainsail/filesystem/home/pi/klipper_config/mainsail.cfg"
|
local ms_cfg path configs regex
|
||||||
local configs path
|
|
||||||
configs=$(find "${KLIPPER_CONFIG}" -type f -name "printer.cfg" | sort)
|
ms_cfg="https://raw.githubusercontent.com/mainsail-crew/MainsailOS/master/src/modules/mainsail/filesystem/home/pi/klipper_config/mainsail.cfg"
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/printer\.cfg"
|
||||||
|
configs=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
if [[ -n ${configs} ]]; then
|
if [[ -n ${configs} ]]; then
|
||||||
for config in ${configs}; do
|
for config in ${configs}; do
|
||||||
@@ -219,8 +221,23 @@ function remove_mainsail_logs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function remove_mainsail_log_symlinks() {
|
function remove_mainsail_log_symlinks() {
|
||||||
|
local files regex
|
||||||
|
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/logs\/mainsail-.*"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" 2> /dev/null | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_legacy_mainsail_log_symlinks() {
|
||||||
local files
|
local files
|
||||||
files=$(find "${KLIPPER_LOGS}" -name "mainsail*" 2> /dev/null | sort)
|
files=$(find "${HOME}/klipper_logs" -name "mainsail*" 2> /dev/null | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
@@ -236,6 +253,7 @@ function remove_mainsail() {
|
|||||||
remove_mainsail_config
|
remove_mainsail_config
|
||||||
remove_mainsail_logs
|
remove_mainsail_logs
|
||||||
remove_mainsail_log_symlinks
|
remove_mainsail_log_symlinks
|
||||||
|
remove_legacy_mainsail_log_symlinks
|
||||||
|
|
||||||
### remove mainsail_port from ~/.kiauh.ini
|
### remove mainsail_port from ~/.kiauh.ini
|
||||||
sed -i "/^mainsail_port=/d" "${INI_FILE}"
|
sed -i "/^mainsail_port=/d" "${INI_FILE}"
|
||||||
@@ -397,13 +415,13 @@ function ms_theme_install() {
|
|||||||
for folder in "${folder_arr[@]}"; do
|
for folder in "${folder_arr[@]}"; do
|
||||||
### instance names/identifier of only numbers need to be prefixed with 'printer_'
|
### instance names/identifier of only numbers need to be prefixed with 'printer_'
|
||||||
if [[ ${folder} =~ ^[0-9]+$ ]]; then
|
if [[ ${folder} =~ ^[0-9]+$ ]]; then
|
||||||
target_folders+=("${KLIPPER_CONFIG}/printer_${folder}")
|
target_folders+=("${HOME}/printer_${folder}_data/config")
|
||||||
else
|
else
|
||||||
target_folders+=("${KLIPPER_CONFIG}/${folder}")
|
target_folders+=("${HOME}/${folder}_data/config")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
target_folders+=("${KLIPPER_CONFIG}")
|
target_folders+=("${HOME}/printer_data/config")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if (( ${#target_folders[@]} > 1 )); then
|
if (( ${#target_folders[@]} > 1 )); then
|
||||||
@@ -411,7 +429,7 @@ function ms_theme_install() {
|
|||||||
echo -e "| Please select the printer you want to apply the theme |"
|
echo -e "| Please select the printer you want to apply the theme |"
|
||||||
echo -e "| installation to: |"
|
echo -e "| installation to: |"
|
||||||
for (( i=0; i < ${#target_folders[@]}; i++ )); do
|
for (( i=0; i < ${#target_folders[@]}; i++ )); do
|
||||||
folder=$(echo "${target_folders[${i}]}" | rev | cut -d "/" -f1 | rev)
|
folder=$(echo "${target_folders[${i}]}" | rev | cut -d "/" -f2 | cut -d"_" -f2- | rev)
|
||||||
printf "|${cyan}%-55s${white}|\n" " ${i}) ${folder}"
|
printf "|${cyan}%-55s${white}|\n" " ${i}) ${folder}"
|
||||||
done
|
done
|
||||||
bottom_border
|
bottom_border
|
||||||
@@ -440,8 +458,11 @@ function ms_theme_install() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function ms_theme_delete() {
|
function ms_theme_delete() {
|
||||||
local theme_folders target_folders=()
|
local regex theme_folders target_folders=()
|
||||||
theme_folders=$(find "${KLIPPER_CONFIG}" -mindepth 1 -type d -name ".theme" | sort)
|
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/\.theme"
|
||||||
|
theme_folders=$(find "${HOME}" -maxdepth 3 -type d -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
# theme_folders=$(find "${KLIPPER_CONFIG}" -mindepth 1 -type d -name ".theme" | sort)
|
||||||
|
|
||||||
### build target folder array
|
### build target folder array
|
||||||
for folder in ${theme_folders}; do
|
for folder in ${theme_folders}; do
|
||||||
@@ -570,10 +591,11 @@ function enable_mainsail_remotemode() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function patch_mainsail_update_manager() {
|
function patch_mainsail_update_manager() {
|
||||||
local patched="false"
|
local patched moonraker_configs regex
|
||||||
local moonraker_configs
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/config\/moonraker\.conf"
|
||||||
moonraker_configs=$(find "${KLIPPER_CONFIG}" -type f -name "moonraker.conf" | sort)
|
moonraker_configs=$(find "${HOME}" -maxdepth 3 -type f -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
patched="false"
|
||||||
for conf in ${moonraker_configs}; do
|
for conf in ${moonraker_configs}; do
|
||||||
if ! grep -Eq "^\[update_manager mainsail\]$" "${conf}"; then
|
if ! grep -Eq "^\[update_manager mainsail\]$" "${conf}"; then
|
||||||
### add new line to conf if it doesn't end with one
|
### add new line to conf if it doesn't end with one
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ function moonraker_setup_dialog() {
|
|||||||
|
|
||||||
### return early if klipper is not installed
|
### return early if klipper is not installed
|
||||||
local klipper_services
|
local klipper_services
|
||||||
klipper_services=$(klipper_systemd)
|
klipper_services=$(find_klipper_systemd)
|
||||||
if [[ -z ${klipper_services} ]]; then
|
if [[ -z ${klipper_services} ]]; then
|
||||||
local error="Klipper not installed! Please install Klipper first!"
|
local error="Klipper not installed! Please install Klipper first!"
|
||||||
log_error "Moonraker setup started without Klipper being installed. Aborting setup."
|
log_error "Moonraker setup started without Klipper being installed. Aborting setup."
|
||||||
@@ -205,7 +205,7 @@ function moonraker_setup() {
|
|||||||
create_moonraker_conf "${instance_arr[@]}"
|
create_moonraker_conf "${instance_arr[@]}"
|
||||||
|
|
||||||
### step 4: create moonraker instances
|
### step 4: create moonraker instances
|
||||||
create_moonraker_service "${instance_arr[@]}"
|
configure_moonraker_service "${instance_arr[@]}"
|
||||||
|
|
||||||
### step 5: create polkit rules for moonraker
|
### step 5: create polkit rules for moonraker
|
||||||
install_moonraker_polkit || true
|
install_moonraker_polkit || true
|
||||||
@@ -240,18 +240,19 @@ function create_moonraker_conf() {
|
|||||||
local input=("${@}")
|
local input=("${@}")
|
||||||
local moonraker_count=${input[0]} && unset "input[0]"
|
local moonraker_count=${input[0]} && unset "input[0]"
|
||||||
local names=("${input[@]}") && unset "input[@]"
|
local names=("${input[@]}") && unset "input[@]"
|
||||||
local log="${KLIPPER_LOGS}"
|
local port lan printer_data cfg_dir cfg uds
|
||||||
local lan
|
|
||||||
|
port=7125
|
||||||
lan="$(hostname -I | cut -d" " -f1 | cut -d"." -f1-2).0.0/16"
|
lan="$(hostname -I | cut -d" " -f1 | cut -d"." -f1-2).0.0/16"
|
||||||
local port=7125 cfg_dir cfg db uds
|
|
||||||
|
|
||||||
if (( moonraker_count == 1 )); then
|
if (( moonraker_count == 1 )); then
|
||||||
cfg_dir="${KLIPPER_CONFIG}"
|
printer_data="${HOME}/printer_data"
|
||||||
|
cfg_dir="${printer_data}/config"
|
||||||
cfg="${cfg_dir}/moonraker.conf"
|
cfg="${cfg_dir}/moonraker.conf"
|
||||||
db="${HOME}/.moonraker_database"
|
uds="${printer_data}/comms/klippy.sock"
|
||||||
uds="/tmp/klippy_uds"
|
|
||||||
### write single instance config
|
### write single instance config
|
||||||
write_moonraker_conf "${cfg_dir}" "${cfg}" "${port}" "${log}" "${db}" "${uds}" "${lan}"
|
write_moonraker_conf "${cfg_dir}" "${cfg}" "${port}" "${uds}" "${lan}"
|
||||||
|
|
||||||
elif (( moonraker_count > 1 )); then
|
elif (( moonraker_count > 1 )); then
|
||||||
local j=0 re="^[1-9][0-9]*$"
|
local j=0 re="^[1-9][0-9]*$"
|
||||||
@@ -259,16 +260,17 @@ function create_moonraker_conf() {
|
|||||||
for (( i=1; i <= moonraker_count; i++ )); do
|
for (( i=1; i <= moonraker_count; i++ )); do
|
||||||
### overwrite config folder if name is only a number
|
### overwrite config folder if name is only a number
|
||||||
if [[ ${names[j]} =~ ${re} ]]; then
|
if [[ ${names[j]} =~ ${re} ]]; then
|
||||||
cfg_dir="${KLIPPER_CONFIG}/printer_${names[${j}]}"
|
printer_data="${HOME}/printer_${names[${j}]}_data"
|
||||||
else
|
else
|
||||||
cfg_dir="${KLIPPER_CONFIG}/${names[${j}]}"
|
printer_data="${HOME}/${names[${j}]}_data"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
cfg_dir="${printer_data}/config"
|
||||||
cfg="${cfg_dir}/moonraker.conf"
|
cfg="${cfg_dir}/moonraker.conf"
|
||||||
uds="/tmp/klippy_uds-${names[${j}]}"
|
uds="${printer_data}/comms/klippy.sock"
|
||||||
db="${HOME}/.moonraker_database_${names[${j}]}"
|
|
||||||
### write multi instance config
|
### write multi instance config
|
||||||
write_moonraker_conf "${cfg_dir}" "${cfg}" "${port}" "${log}" "${db}" "${uds}" "${lan}"
|
write_moonraker_conf "${cfg_dir}" "${cfg}" "${port}" "${uds}" "${lan}"
|
||||||
port=$(( port + 1 ))
|
port=$(( port + 1 ))
|
||||||
j=$(( j + 1 ))
|
j=$(( j + 1 ))
|
||||||
done && unset j
|
done && unset j
|
||||||
@@ -279,7 +281,7 @@ function create_moonraker_conf() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function write_moonraker_conf() {
|
function write_moonraker_conf() {
|
||||||
local cfg_dir=${1} cfg=${2} port=${3} log=${4} db=${5} uds=${6} lan=${7}
|
local cfg_dir=${1} cfg=${2} port=${3} uds=${4} lan=${5}
|
||||||
local conf_template="${KIAUH_SRCDIR}/resources/moonraker.conf"
|
local conf_template="${KIAUH_SRCDIR}/resources/moonraker.conf"
|
||||||
|
|
||||||
[[ ! -d ${cfg_dir} ]] && mkdir -p "${cfg_dir}"
|
[[ ! -d ${cfg_dir} ]] && mkdir -p "${cfg_dir}"
|
||||||
@@ -287,8 +289,7 @@ function write_moonraker_conf() {
|
|||||||
if [[ ! -f ${cfg} ]]; then
|
if [[ ! -f ${cfg} ]]; then
|
||||||
status_msg "Creating moonraker.conf in ${cfg_dir} ..."
|
status_msg "Creating moonraker.conf in ${cfg_dir} ..."
|
||||||
cp "${conf_template}" "${cfg}"
|
cp "${conf_template}" "${cfg}"
|
||||||
sed -i "s|%USER%|${USER}|g" "${cfg}"
|
sed -i "s|%USER%|${USER}|g; s|%PORT%|${port}|; s|%UDS%|${uds}|" "${cfg}"
|
||||||
sed -i "s|%CFG%|${cfg_dir}|; s|%PORT%|${port}|; s|%LOG%|${log}|; s|%DB%|${db}|; s|%UDS%|${uds}|" "${cfg}"
|
|
||||||
# if host ip is not in the default ip ranges replace placeholder,
|
# if host ip is not in the default ip ranges replace placeholder,
|
||||||
# otherwise remove placeholder from config
|
# otherwise remove placeholder from config
|
||||||
if ! grep -q "${lan}" "${cfg}"; then
|
if ! grep -q "${lan}" "${cfg}"; then
|
||||||
@@ -302,20 +303,24 @@ function write_moonraker_conf() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function create_moonraker_service() {
|
function configure_moonraker_service() {
|
||||||
local input=("${@}")
|
local input=("${@}")
|
||||||
local moonraker_count=${input[0]} && unset "input[0]"
|
local moonraker_count=${input[0]} && unset "input[0]"
|
||||||
local names=("${input[@]}") && unset "input[@]"
|
local names=("${input[@]}") && unset "input[@]"
|
||||||
local cfg_dir cfg log service
|
local printer_data cfg_dir service env_file
|
||||||
|
|
||||||
if (( moonraker_count == 1 )) && [[ ${#names[@]} -eq 0 ]]; then
|
if (( moonraker_count == 1 )) && [[ ${#names[@]} -eq 0 ]]; then
|
||||||
i=""
|
i=""
|
||||||
cfg_dir="${KLIPPER_CONFIG}"
|
printer_data="${HOME}/printer_data"
|
||||||
cfg="${cfg_dir}/moonraker.conf"
|
cfg_dir="${printer_data}/config"
|
||||||
log="${KLIPPER_LOGS}/moonraker.log"
|
|
||||||
service="${SYSTEMD}/moonraker.service"
|
service="${SYSTEMD}/moonraker.service"
|
||||||
|
env_file="${printer_data}/systemd/moonraker.env"
|
||||||
|
|
||||||
|
### create required folder structure
|
||||||
|
create_required_folders "${printer_data}"
|
||||||
|
|
||||||
### write single instance service
|
### write single instance service
|
||||||
write_moonraker_service "" "${cfg}" "${log}" "${service}"
|
write_moonraker_service "" "${printer_data}" "${service}" "${env_file}"
|
||||||
ok_msg "Moonraker instance created!"
|
ok_msg "Moonraker instance created!"
|
||||||
|
|
||||||
elif (( moonraker_count > 1 )) && [[ ${#names[@]} -gt 0 ]]; then
|
elif (( moonraker_count > 1 )) && [[ ${#names[@]} -gt 0 ]]; then
|
||||||
@@ -324,16 +329,20 @@ function create_moonraker_service() {
|
|||||||
for (( i=1; i <= moonraker_count; i++ )); do
|
for (( i=1; i <= moonraker_count; i++ )); do
|
||||||
### overwrite config folder if name is only a number
|
### overwrite config folder if name is only a number
|
||||||
if [[ ${names[j]} =~ ${re} ]]; then
|
if [[ ${names[j]} =~ ${re} ]]; then
|
||||||
cfg_dir="${KLIPPER_CONFIG}/printer_${names[${j}]}"
|
printer_data="${HOME}/printer_${names[${j}]}_data"
|
||||||
else
|
else
|
||||||
cfg_dir="${KLIPPER_CONFIG}/${names[${j}]}"
|
printer_data="${HOME}/${names[${j}]}_data"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cfg="${cfg_dir}/moonraker.conf"
|
cfg_dir="${printer_data}/config"
|
||||||
log="${KLIPPER_LOGS}/moonraker-${names[${j}]}.log"
|
|
||||||
service="${SYSTEMD}/moonraker-${names[${j}]}.service"
|
service="${SYSTEMD}/moonraker-${names[${j}]}.service"
|
||||||
|
env_file="${printer_data}/systemd/moonraker.env"
|
||||||
|
|
||||||
|
### create required folder structure
|
||||||
|
create_required_folders "${printer_data}"
|
||||||
|
|
||||||
### write multi instance service
|
### write multi instance service
|
||||||
write_moonraker_service "${names[${j}]}" "${cfg}" "${log}" "${service}"
|
write_moonraker_service "${names[${j}]}" "${printer_data}" "${service}" "${env_file}"
|
||||||
ok_msg "Moonraker instance 'moonraker-${names[${j}]}' created!"
|
ok_msg "Moonraker instance 'moonraker-${names[${j}]}' created!"
|
||||||
j=$(( j + 1 ))
|
j=$(( j + 1 ))
|
||||||
done && unset i
|
done && unset i
|
||||||
@@ -349,18 +358,20 @@ function create_moonraker_service() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function write_moonraker_service() {
|
function write_moonraker_service() {
|
||||||
local i=${1} cfg=${2} log=${3} service=${4}
|
local i=${1} printer_data=${2} service=${3} env_file=${4}
|
||||||
local service_template="${KIAUH_SRCDIR}/resources/moonraker.service"
|
local service_template="${KIAUH_SRCDIR}/resources/moonraker.service"
|
||||||
|
local env_template="${KIAUH_SRCDIR}/resources/moonraker.env"
|
||||||
|
|
||||||
### replace all placeholders
|
### replace all placeholders
|
||||||
if [[ ! -f ${service} ]]; then
|
if [[ ! -f ${service} ]]; then
|
||||||
status_msg "Creating Moonraker Service ${i} ..."
|
status_msg "Creating Moonraker Service ${i} ..."
|
||||||
sudo cp "${service_template}" "${service}"
|
sudo cp "${service_template}" "${service}"
|
||||||
|
sudo cp "${env_template}" "${env_file}"
|
||||||
|
|
||||||
[[ -z ${i} ]] && sudo sed -i "s| for instance moonraker-%INST%||" "${service}"
|
[[ -z ${i} ]] && sudo sed -i "s| %INST%||" "${service}"
|
||||||
[[ -n ${i} ]] && sudo sed -i "s|%INST%|${i}|" "${service}"
|
[[ -n ${i} ]] && sudo sed -i "s|%INST%|${i}|" "${service}"
|
||||||
sudo sed -i "s|%USER%|${USER}|; s|%ENV%|${MOONRAKER_ENV}|; s|%DIR%|${MOONRAKER_DIR}|" "${service}"
|
sudo sed -i "s|%USER%|${USER}|g; s|%ENV%|${MOONRAKER_ENV}|; s|%ENV_FILE%|${env_file}|" "${service}"
|
||||||
sudo sed -i "s|%CFG%|${cfg}|; s|%LOG%|${log}|" "${service}"
|
sudo sed -i "s|%USER%|${USER}|; s|%PRINTER_DATA%|${printer_data}|" "${env_file}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -453,9 +464,35 @@ function remove_moonraker_systemd() {
|
|||||||
ok_msg "Moonraker Services removed!"
|
ok_msg "Moonraker Services removed!"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function remove_moonraker_env_file() {
|
||||||
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/systemd\/moonraker\.env"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function remove_moonraker_logs() {
|
function remove_moonraker_logs() {
|
||||||
|
local files regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/logs\/moonraker\.log.*"
|
||||||
|
files=$(find "${HOME}" -maxdepth 3 -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
|
if [[ -n ${files} ]]; then
|
||||||
|
for file in ${files}; do
|
||||||
|
status_msg "Removing ${file} ..."
|
||||||
|
rm -f "${file}"
|
||||||
|
ok_msg "${file} removed!"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function remove_legacy_moonraker_logs() {
|
||||||
local files regex="moonraker(-[0-9a-zA-Z]+)?\.log(.*)?"
|
local files regex="moonraker(-[0-9a-zA-Z]+)?\.log(.*)?"
|
||||||
files=$(find "${KLIPPER_LOGS}" -maxdepth 1 -regextype posix-extended -regex "${KLIPPER_LOGS}/${regex}" 2> /dev/null | sort)
|
files=$(find "${HOME}/klipper_logs" -maxdepth 1 -regextype posix-extended -regex "${HOME}/klipper_logs/${regex}" 2> /dev/null | sort)
|
||||||
|
|
||||||
if [[ -n ${files} ]]; then
|
if [[ -n ${files} ]]; then
|
||||||
for file in ${files}; do
|
for file in ${files}; do
|
||||||
@@ -509,7 +546,9 @@ function remove_moonraker_polkit() {
|
|||||||
function remove_moonraker() {
|
function remove_moonraker() {
|
||||||
remove_moonraker_sysvinit
|
remove_moonraker_sysvinit
|
||||||
remove_moonraker_systemd
|
remove_moonraker_systemd
|
||||||
|
remove_moonraker_env_file
|
||||||
remove_moonraker_logs
|
remove_moonraker_logs
|
||||||
|
remove_legacy_moonraker_logs
|
||||||
remove_moonraker_api_key
|
remove_moonraker_api_key
|
||||||
remove_moonraker_polkit
|
remove_moonraker_polkit
|
||||||
remove_moonraker_dir
|
remove_moonraker_dir
|
||||||
|
|||||||
@@ -74,23 +74,29 @@ function set_upstream_nginx_cfg() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function symlink_webui_nginx_log() {
|
function symlink_webui_nginx_log() {
|
||||||
local interface=${1} path="${KLIPPER_LOGS}"
|
local interface path access_log error_log regex logpaths
|
||||||
local access_log="/var/log/nginx/${interface}-access.log"
|
|
||||||
local error_log="/var/log/nginx/${interface}-error.log"
|
|
||||||
|
|
||||||
[[ ! -d ${path} ]] && mkdir -p "${path}"
|
interface=${1}
|
||||||
|
access_log="/var/log/nginx/${interface}-access.log"
|
||||||
|
error_log="/var/log/nginx/${interface}-error.log"
|
||||||
|
regex="\/home\/${USER}\/([A-Za-z0-9_]+)\/logs"
|
||||||
|
logpaths=$(find "${HOME}" -maxdepth 2 -type d -regextype posix-extended -regex "${regex}" | sort)
|
||||||
|
|
||||||
if [[ -f ${access_log} && ! -L "${path}/${interface}-access.log" ]]; then
|
for path in ${logpaths}; do
|
||||||
status_msg "Creating symlink for ${access_log} ..."
|
[[ ! -d ${path} ]] && mkdir -p "${path}"
|
||||||
ln -s "${access_log}" "${path}"
|
|
||||||
ok_msg "Done!"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ -f ${error_log} && ! -L "${path}/${interface}-error.log" ]]; then
|
if [[ -f ${access_log} && ! -L "${path}/${interface}-access.log" ]]; then
|
||||||
status_msg "Creating symlink for ${error_log} ..."
|
status_msg "Creating symlink for ${access_log} ..."
|
||||||
ln -s "${error_log}" "${path}"
|
ln -s "${access_log}" "${path}"
|
||||||
ok_msg "Done!"
|
ok_msg "Symlink created: ${path}/${interface}-access.log"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ -f ${error_log} && ! -L "${path}/${interface}-error.log" ]]; then
|
||||||
|
status_msg "Creating symlink for ${error_log} ..."
|
||||||
|
ln -s "${error_log}" "${path}"
|
||||||
|
ok_msg "Symlink created: ${path}/${interface}-error.log"
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function match_nginx_configs() {
|
function match_nginx_configs() {
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ function octoprint_setup_dialog() {
|
|||||||
status_msg "Initializing OctoPrint installation ..."
|
status_msg "Initializing OctoPrint installation ..."
|
||||||
|
|
||||||
local klipper_services
|
local klipper_services
|
||||||
klipper_services=$(klipper_systemd)
|
klipper_services=$(find_klipper_systemd)
|
||||||
if [[ -z ${klipper_services} ]]; then
|
if [[ -z ${klipper_services} ]]; then
|
||||||
local error="Klipper not installed! Please install Klipper first!"
|
local error="Klipper not installed! Please install Klipper first!"
|
||||||
log_error "OctoPrint setup started without Klipper being installed. Aborting setup."
|
log_error "OctoPrint setup started without Klipper being installed. Aborting setup."
|
||||||
|
|||||||
@@ -55,17 +55,35 @@ function install_menu() {
|
|||||||
4)
|
4)
|
||||||
do_action "install_fluidd" "install_ui";;
|
do_action "install_fluidd" "install_ui";;
|
||||||
5)
|
5)
|
||||||
do_action "install_klipperscreen" "install_ui";;
|
#do_action "install_klipperscreen" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
6)
|
6)
|
||||||
do_action "octoprint_setup_dialog" "install_ui";;
|
#do_action "octoprint_setup_dialog" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
7)
|
7)
|
||||||
do_action "install_pgc_for_klipper" "install_ui";;
|
#do_action "install_pgc_for_klipper" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
8)
|
8)
|
||||||
do_action "telegram_bot_setup_dialog" "install_ui";;
|
#do_action "telegram_bot_setup_dialog" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
9)
|
9)
|
||||||
do_action "moonraker_obico_setup_dialog" "install_ui";;
|
#do_action "moonraker_obico_setup_dialog" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
10)
|
10)
|
||||||
do_action "install_mjpg-streamer" "install_ui";;
|
#do_action "install_mjpg-streamer" "install_ui";;
|
||||||
|
clear && print_header
|
||||||
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
install_ui;;
|
||||||
B|b)
|
B|b)
|
||||||
clear; main_menu; break;;
|
clear; main_menu; break;;
|
||||||
*)
|
*)
|
||||||
|
|||||||
@@ -12,6 +12,10 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
function main_ui() {
|
function main_ui() {
|
||||||
|
echo -e "${yellow}/=======================================================\\"
|
||||||
|
echo -e "| Please read the newest changelog carefully: |"
|
||||||
|
echo -e "| https://git.io/JnmlX |"
|
||||||
|
echo -e "\=======================================================/${white}"
|
||||||
top_border
|
top_border
|
||||||
echo -e "| $(title_msg "~~~~~~~~~~~~~~~ [ Main Menu ] ~~~~~~~~~~~~~~~") |"
|
echo -e "| $(title_msg "~~~~~~~~~~~~~~~ [ Main Menu ] ~~~~~~~~~~~~~~~") |"
|
||||||
hr
|
hr
|
||||||
@@ -83,7 +87,8 @@ function print_klipper_repo() {
|
|||||||
|
|
||||||
|
|
||||||
function main_menu() {
|
function main_menu() {
|
||||||
print_header && main_ui
|
clear && print_header
|
||||||
|
main_ui
|
||||||
|
|
||||||
### initialize kiauh.ini
|
### initialize kiauh.ini
|
||||||
init_ini
|
init_ini
|
||||||
@@ -103,8 +108,9 @@ function main_menu() {
|
|||||||
"restart octoprint") do_action_service "restart" "octoprint"; main_ui;;
|
"restart octoprint") do_action_service "restart" "octoprint"; main_ui;;
|
||||||
update) do_action "update_kiauh" "main_ui";;
|
update) do_action "update_kiauh" "main_ui";;
|
||||||
0)clear && print_header
|
0)clear && print_header
|
||||||
upload_selection
|
#upload_selection
|
||||||
break;;
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
main_ui;;
|
||||||
1)clear && print_header
|
1)clear && print_header
|
||||||
install_menu
|
install_menu
|
||||||
break;;
|
break;;
|
||||||
@@ -118,8 +124,9 @@ function main_menu() {
|
|||||||
advanced_menu
|
advanced_menu
|
||||||
break;;
|
break;;
|
||||||
5)clear && print_header
|
5)clear && print_header
|
||||||
backup_menu
|
#backup_menu
|
||||||
break;;
|
print_error "Function currently disabled! Sorry!"
|
||||||
|
main_ui;;
|
||||||
6)clear && print_header
|
6)clear && print_header
|
||||||
settings_menu
|
settings_menu
|
||||||
break;;
|
break;;
|
||||||
@@ -130,5 +137,5 @@ function main_menu() {
|
|||||||
deny_action "main_ui";;
|
deny_action "main_ui";;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
clear; main_menu
|
main_menu
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,20 +14,12 @@ set -e
|
|||||||
function settings_ui() {
|
function settings_ui() {
|
||||||
read_kiauh_ini "${FUNCNAME[0]}"
|
read_kiauh_ini "${FUNCNAME[0]}"
|
||||||
|
|
||||||
local custom_cfg_loc="${custom_klipper_cfg_loc}"
|
|
||||||
local custom_repo="${custom_klipper_repo}"
|
local custom_repo="${custom_klipper_repo}"
|
||||||
local custom_branch="${custom_klipper_repo_branch}"
|
local custom_branch="${custom_klipper_repo_branch}"
|
||||||
local ms_pre_rls="${mainsail_install_unstable}"
|
local ms_pre_rls="${mainsail_install_unstable}"
|
||||||
local fl_pre_rls="${fluidd_install_unstable}"
|
local fl_pre_rls="${fluidd_install_unstable}"
|
||||||
local bbu="${backup_before_update}"
|
local bbu="${backup_before_update}"
|
||||||
|
|
||||||
### config location
|
|
||||||
if [[ -z ${custom_cfg_loc} ]]; then
|
|
||||||
custom_cfg_loc="${cyan}${KLIPPER_CONFIG}${white}"
|
|
||||||
else
|
|
||||||
custom_cfg_loc="${cyan}${custom_cfg_loc}${white}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
### custom repository
|
### custom repository
|
||||||
custom_repo=$(echo "${custom_repo}" | sed "s/https:\/\/github\.com\///" | sed "s/\.git$//" )
|
custom_repo=$(echo "${custom_repo}" | sed "s/https:\/\/github\.com\///" | sed "s/\.git$//" )
|
||||||
if [[ -z ${custom_repo} ]]; then
|
if [[ -z ${custom_repo} ]]; then
|
||||||
@@ -67,8 +59,6 @@ function settings_ui() {
|
|||||||
echo -e "| $(title_msg "~~~~~~~~~~~~ [ KIAUH Settings ] ~~~~~~~~~~~~~") |"
|
echo -e "| $(title_msg "~~~~~~~~~~~~ [ KIAUH Settings ] ~~~~~~~~~~~~~") |"
|
||||||
hr
|
hr
|
||||||
echo -e "| Klipper: |"
|
echo -e "| Klipper: |"
|
||||||
echo -e "| ● Config folder: |"
|
|
||||||
printf "| %-60s|\n" "${custom_cfg_loc}"
|
|
||||||
echo -e "| ● Repository: |"
|
echo -e "| ● Repository: |"
|
||||||
printf "| %-70s|\n" "${custom_repo} (${custom_branch})"
|
printf "| %-70s|\n" "${custom_repo} (${custom_branch})"
|
||||||
hr
|
hr
|
||||||
@@ -77,24 +67,23 @@ function settings_ui() {
|
|||||||
hr
|
hr
|
||||||
printf "| Backup before updating: %-42s|\n" "${bbu}"
|
printf "| Backup before updating: %-42s|\n" "${bbu}"
|
||||||
hr
|
hr
|
||||||
echo -e "| 1) Change Klipper config folder location |"
|
echo -e "| 1) Set custom Klipper repository |"
|
||||||
echo -e "| 2) Set custom Klipper repository |"
|
|
||||||
blank_line
|
blank_line
|
||||||
if [[ ${mainsail_install_unstable} == "false" ]]; then
|
if [[ ${mainsail_install_unstable} == "false" ]]; then
|
||||||
echo -e "| 3) ${green}Allow${white} unstable Mainsail releases |"
|
echo -e "| 2) ${green}Allow${white} unstable Mainsail releases |"
|
||||||
else
|
else
|
||||||
echo -e "| 3) ${red}Disallow${white} unstable Mainsail releases |"
|
echo -e "| 2) ${red}Disallow${white} unstable Mainsail releases |"
|
||||||
fi
|
fi
|
||||||
if [[ ${fluidd_install_unstable} == "false" ]]; then
|
if [[ ${fluidd_install_unstable} == "false" ]]; then
|
||||||
echo -e "| 4) ${green}Allow${white} unstable Fluidd releases |"
|
echo -e "| 3) ${green}Allow${white} unstable Fluidd releases |"
|
||||||
else
|
else
|
||||||
echo -e "| 4) ${red}Disallow${white} unstable Fluidd releases |"
|
echo -e "| 3) ${red}Disallow${white} unstable Fluidd releases |"
|
||||||
fi
|
fi
|
||||||
blank_line
|
blank_line
|
||||||
if [[ ${backup_before_update} == "false" ]]; then
|
if [[ ${backup_before_update} == "false" ]]; then
|
||||||
echo -e "| 5) ${green}Enable${white} automatic backups before updates |"
|
echo -e "| 4) ${green}Enable${white} automatic backups before updates |"
|
||||||
else
|
else
|
||||||
echo -e "| 5) ${red}Disable${white} automatic backups before updates |"
|
echo -e "| 4) ${red}Disable${white} automatic backups before updates |"
|
||||||
fi
|
fi
|
||||||
back_help_footer
|
back_help_footer
|
||||||
}
|
}
|
||||||
@@ -105,16 +94,6 @@ function show_settings_help() {
|
|||||||
top_border
|
top_border
|
||||||
echo -e "| ~~~~~~ < ? > Help: KIAUH Settings < ? > ~~~~~~ |"
|
echo -e "| ~~~~~~ < ? > Help: KIAUH Settings < ? > ~~~~~~ |"
|
||||||
hr
|
hr
|
||||||
echo -e "| ${cyan}Klipper config folder:${white} |"
|
|
||||||
echo -e "| The location of your printer.cfg and all other config |"
|
|
||||||
echo -e "| files that gets used during installation of Klipper |"
|
|
||||||
echo -e "| and all other components which need that location. |"
|
|
||||||
echo -e "| It is not recommended to change this location. |"
|
|
||||||
echo -e "| Be advised, that negative side effects could occur. |"
|
|
||||||
blank_line
|
|
||||||
printf "| Default: %-55s|\n" "${default_cfg}"
|
|
||||||
blank_line
|
|
||||||
hr
|
|
||||||
echo -e "| ${cyan}Install unstable releases:${white} |"
|
echo -e "| ${cyan}Install unstable releases:${white} |"
|
||||||
echo -e "| If set to ${green}true${white}, KIAUH installs/updates the software |"
|
echo -e "| If set to ${green}true${white}, KIAUH installs/updates the software |"
|
||||||
echo -e "| with the latest, currently available release. |"
|
echo -e "| with the latest, currently available release. |"
|
||||||
@@ -160,20 +139,16 @@ function settings_menu() {
|
|||||||
read -p "${cyan}####### Perform action:${white} " action
|
read -p "${cyan}####### Perform action:${white} " action
|
||||||
case "${action}" in
|
case "${action}" in
|
||||||
1)
|
1)
|
||||||
clear && print_header
|
|
||||||
change_klipper_cfg_folder
|
|
||||||
settings_ui;;
|
|
||||||
2)
|
|
||||||
clear && print_header
|
clear && print_header
|
||||||
change_klipper_repo_menu
|
change_klipper_repo_menu
|
||||||
settings_ui;;
|
settings_ui;;
|
||||||
3)
|
2)
|
||||||
switch_mainsail_releasetype
|
switch_mainsail_releasetype
|
||||||
settings_menu;;
|
settings_menu;;
|
||||||
4)
|
3)
|
||||||
switch_fluidd_releasetype
|
switch_fluidd_releasetype
|
||||||
settings_menu;;
|
settings_menu;;
|
||||||
5)
|
4)
|
||||||
toggle_backup_before_update
|
toggle_backup_before_update
|
||||||
settings_menu;;
|
settings_menu;;
|
||||||
B|b)
|
B|b)
|
||||||
|
|||||||
@@ -156,10 +156,6 @@ function init_ini() {
|
|||||||
echo -e "\nlogupload_accepted=false\c" >> "${INI_FILE}"
|
echo -e "\nlogupload_accepted=false\c" >> "${INI_FILE}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! grep -Eq "^custom_klipper_cfg_loc=" "${INI_FILE}"; then
|
|
||||||
echo -e "\ncustom_klipper_cfg_loc=\c" >> "${INI_FILE}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! grep -Eq "^custom_klipper_repo=" "${INI_FILE}"; then
|
if ! grep -Eq "^custom_klipper_repo=" "${INI_FILE}"; then
|
||||||
echo -e "\ncustom_klipper_repo=\c" >> "${INI_FILE}"
|
echo -e "\ncustom_klipper_repo=\c" >> "${INI_FILE}"
|
||||||
fi
|
fi
|
||||||
@@ -184,157 +180,6 @@ function init_ini() {
|
|||||||
sed -i "/^[[:blank:]]*$/ d" "${INI_FILE}"
|
sed -i "/^[[:blank:]]*$/ d" "${INI_FILE}"
|
||||||
}
|
}
|
||||||
|
|
||||||
function change_klipper_cfg_folder() {
|
|
||||||
local current_cfg_loc example_loc recommended_loc new_cfg_loc
|
|
||||||
current_cfg_loc="$(get_klipper_cfg_dir)"
|
|
||||||
example_loc=$(printf "%s/<your_config_folder>" "${HOME}")
|
|
||||||
recommended_loc=$(printf "%s/klipper_config" "${HOME}")
|
|
||||||
|
|
||||||
local yn
|
|
||||||
while true; do
|
|
||||||
top_border
|
|
||||||
echo -e "| ${yellow}IMPORTANT:${white} |"
|
|
||||||
echo -e "| Please enter the new path in the following format: |"
|
|
||||||
printf "| ${cyan}%-51s${white} |\n" "${example_loc}"
|
|
||||||
blank_line
|
|
||||||
echo -e "| ${red}WARNING: ${white} |"
|
|
||||||
echo -e "| ${red}There will be no validation checks! Make sure to set${white} |"
|
|
||||||
echo -e "| ${red}a valid directory to prevent possible problems!${white} |"
|
|
||||||
blank_line
|
|
||||||
printf "| Recommended: ${cyan}%-38s${white} |\n" "${recommended_loc}"
|
|
||||||
bottom_border
|
|
||||||
echo
|
|
||||||
echo -e "${cyan}###### Please set the new Klipper config directory:${white} "
|
|
||||||
read -e -i "${current_cfg_loc}" -e new_cfg_loc
|
|
||||||
echo
|
|
||||||
read -p "${cyan}###### Set config directory to '${yellow}${new_cfg_loc}${cyan}' ? (Y/n):${white} " yn
|
|
||||||
case "${yn}" in
|
|
||||||
Y|y|Yes|yes|"")
|
|
||||||
select_msg "Yes"
|
|
||||||
set_klipper_cfg_path "${current_cfg_loc}" "${new_cfg_loc}"
|
|
||||||
print_confirm "New config directory set!"
|
|
||||||
break;;
|
|
||||||
N|n|No|no)
|
|
||||||
select_msg "No"
|
|
||||||
break;;
|
|
||||||
*)
|
|
||||||
print_error "Invalid command!";;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
function set_klipper_cfg_path() {
|
|
||||||
local current_cfg_loc="${1}" new_cfg_loc="${2}"
|
|
||||||
local instance klipper_services moonraker_services moonraker_configs
|
|
||||||
|
|
||||||
log_info "Function set_klipper_cfg_path invoked\nCurrent location: ${1}\nNew location: ${2}"
|
|
||||||
### backup the old config dir
|
|
||||||
backup_klipper_config_dir
|
|
||||||
### write new location to .kiauh.ini
|
|
||||||
sed -i "/^custom_klipper_cfg_loc=/d" "${INI_FILE}"
|
|
||||||
sed -i '$a'"custom_klipper_cfg_loc=${new_cfg_loc}" "${INI_FILE}"
|
|
||||||
status_msg "New directory was set to '${new_cfg_loc}'!"
|
|
||||||
|
|
||||||
### stop services
|
|
||||||
do_action_service "stop" "klipper"
|
|
||||||
do_action_service "stop" "moonraker"
|
|
||||||
|
|
||||||
### copy config files to new klipper config folder
|
|
||||||
if [[ -n ${current_cfg_loc} && -d ${current_cfg_loc} ]]; then
|
|
||||||
status_msg "Copy config files to '${new_cfg_loc}' ..."
|
|
||||||
|
|
||||||
if [[ ! -d ${new_cfg_loc} ]]; then
|
|
||||||
log_info "Copy process started"
|
|
||||||
mkdir -p "${new_cfg_loc}"
|
|
||||||
cd "${current_cfg_loc}"
|
|
||||||
cp -r -v ./* "${new_cfg_loc}"
|
|
||||||
ok_msg "Done!"
|
|
||||||
else
|
|
||||||
log_warning "Copy process skipped, new config directory already exists and may not be empty!"
|
|
||||||
warn_msg "New config directory already exists! Copy process skipped!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
klipper_services=$(klipper_systemd)
|
|
||||||
|
|
||||||
if [[ -n ${klipper_services} ]]; then
|
|
||||||
status_msg "Re-writing Klipper services to use new config file location ..."
|
|
||||||
|
|
||||||
for service in ${klipper_services}; do
|
|
||||||
if [[ ${service} = "/etc/systemd/system/klipper.service" ]]; then
|
|
||||||
|
|
||||||
if grep -q "Environment=KLIPPER_CONFIG=" "${service}"; then
|
|
||||||
### single instance klipper service installed by kiauh v4 / MainsailOS > 0.5.0
|
|
||||||
sudo sed -i -r "/KLIPPER_CONFIG=/ s|CONFIG=(.+)\/printer\.cfg|CONFIG=${new_cfg_loc}/printer\.cfg|" "${service}"
|
|
||||||
else
|
|
||||||
### single instance klipper service installed by kiauh v3
|
|
||||||
sudo sed -i -r "/ExecStart=/ s|klippy\.py (.+)\/printer\.cfg|klippy\.py ${new_cfg_loc}\/printer\.cfg|" "${service}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
instance=$(echo "${service}" | cut -d"-" -f2 | cut -d"." -f1)
|
|
||||||
|
|
||||||
if grep -q "Environment=KLIPPER_CONFIG=" "${service}"; then
|
|
||||||
### multi instance klipper service installed by kiauh v4 / MainsailOS > 0.5.0
|
|
||||||
sudo sed -i -r "/KLIPPER_CONFIG=/ s|CONFIG=(.+)\/printer_${instance}\/printer\.cfg|CONFIG=${new_cfg_loc}\/printer_${instance}\/printer\.cfg|" "${service}"
|
|
||||||
else
|
|
||||||
### multi instance klipper service installed by kiauh v3
|
|
||||||
sudo sed -i -r "/ExecStart=/ s|klippy\.py (.+)\/printer_${instance}\/printer\.cfg|klippy\.py ${new_cfg_loc}\/printer_${instance}\/printer\.cfg|" "${service}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
ok_msg "OK!"
|
|
||||||
fi
|
|
||||||
|
|
||||||
moonraker_services=$(moonraker_systemd)
|
|
||||||
|
|
||||||
if [[ -n ${moonraker_services} ]]; then
|
|
||||||
### handle multi moonraker instance service file
|
|
||||||
status_msg "Re-writing Moonraker services to use new config file location ..."
|
|
||||||
|
|
||||||
for service in ${moonraker_services}; do
|
|
||||||
if [[ ${service} = "/etc/systemd/system/moonraker.service" ]]; then
|
|
||||||
|
|
||||||
if grep -q "Environment=MOONRAKER_CONF=" "${service}"; then
|
|
||||||
### single instance moonraker service installed by kiauh v4 / MainsailOS > 0.5.0
|
|
||||||
sudo sed -i -r "/MOONRAKER_CONF=/ s|_CONF=(.+)\/moonraker\.conf|_CONF=${new_cfg_loc}\/moonraker\.conf|" "${service}"
|
|
||||||
else
|
|
||||||
### single instance moonraker service installed by kiauh v3
|
|
||||||
sudo sed -i -r "/ExecStart=/ s| -c (.+)\/moonraker\.conf| -c ${new_cfg_loc}\/moonraker\.conf|" "${service}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
|
||||||
instance=$(echo "${service}" | cut -d"-" -f2 | cut -d"." -f1)
|
|
||||||
|
|
||||||
if grep -q "Environment=MOONRAKER_CONF=" "${service}"; then
|
|
||||||
### multi instance moonraker service installed by kiauh v4 / MainsailOS > 0.5.0
|
|
||||||
sudo sed -i -r "/MOONRAKER_CONF=/ s|_CONF=(.+)\/printer_${instance}\/moonraker\.conf|_CONF=${new_cfg_loc}\/printer_${instance}\/moonraker\.conf|" "${service}"
|
|
||||||
else
|
|
||||||
### multi instance moonraker service installed by kiauh v3
|
|
||||||
sudo sed -i -r "/ExecStart=/ s| -c (.+)\/printer_${instance}\/moonraker\.conf| -c ${new_cfg_loc}\/printer_${instance}\/moonraker\.conf|" "${service}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
moonraker_configs=$(find "${new_cfg_loc}" -type f -name "moonraker.conf" | sort)
|
|
||||||
|
|
||||||
### replace old file path with new one in moonraker.conf
|
|
||||||
local loc
|
|
||||||
for conf in ${moonraker_configs}; do
|
|
||||||
loc=$(echo "${conf}" | rev | cut -d"/" -f2- | rev)
|
|
||||||
sed -i -r "/config_path:/ s|config_path:.*|config_path: ${loc}|" "${conf}"
|
|
||||||
done
|
|
||||||
ok_msg "OK!"
|
|
||||||
fi
|
|
||||||
|
|
||||||
### reloading units
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
|
|
||||||
### restart services
|
|
||||||
do_action_service "restart" "klipper"
|
|
||||||
do_action_service "restart" "moonraker"
|
|
||||||
}
|
|
||||||
|
|
||||||
function switch_mainsail_releasetype() {
|
function switch_mainsail_releasetype() {
|
||||||
read_kiauh_ini "${FUNCNAME[0]}"
|
read_kiauh_ini "${FUNCNAME[0]}"
|
||||||
local state="${mainsail_install_unstable}"
|
local state="${mainsail_install_unstable}"
|
||||||
@@ -493,6 +338,38 @@ function fetch_webui_ports() {
|
|||||||
#=================== SYSTEM =====================#
|
#=================== SYSTEM =====================#
|
||||||
#================================================#
|
#================================================#
|
||||||
|
|
||||||
|
function find_klipper_initd() {
|
||||||
|
local services
|
||||||
|
services=$(find "${INITD}" -maxdepth 1 -regextype posix-extended -regex "${INITD}/klipper(-[^0])?[0-9]*" | sort)
|
||||||
|
echo "${services}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function find_klipper_systemd() {
|
||||||
|
local services
|
||||||
|
services=$(find "${SYSTEMD}" -maxdepth 1 -regextype posix-extended -regex "${SYSTEMD}/klipper(-[0-9a-zA-Z]+)?.service" | sort)
|
||||||
|
echo "${services}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_required_folders() {
|
||||||
|
local printer_data=${1} folders
|
||||||
|
folders=("backup" "certs" "config" "database" "gcodes" "comms" "logs" "systemd")
|
||||||
|
|
||||||
|
for folder in "${folders[@]}"; do
|
||||||
|
local dir="${printer_data}/${folder}"
|
||||||
|
|
||||||
|
### remove possible symlink created by moonraker
|
||||||
|
if [[ -L "${dir}" && -d "${dir}" ]]; then
|
||||||
|
rm "${dir}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d "${dir}" ]]; then
|
||||||
|
status_msg "Creating folder '${dir}' ..."
|
||||||
|
mkdir -p "${dir}"
|
||||||
|
ok_msg "Folder '${dir}' created!"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
function check_system_updates() {
|
function check_system_updates() {
|
||||||
local updates_avail info_msg
|
local updates_avail info_msg
|
||||||
updates_avail=$(apt list --upgradeable 2>/dev/null | sed "1d")
|
updates_avail=$(apt list --upgradeable 2>/dev/null | sed "1d")
|
||||||
@@ -720,7 +597,7 @@ function set_multi_instance_names() {
|
|||||||
|
|
||||||
local name
|
local name
|
||||||
local names=""
|
local names=""
|
||||||
local services=$(klipper_systemd)
|
local services=$(find_klipper_systemd)
|
||||||
|
|
||||||
###
|
###
|
||||||
# if value of 'multi_instance_names' is not an empty
|
# if value of 'multi_instance_names' is not an empty
|
||||||
@@ -785,7 +662,7 @@ function get_config_folders() {
|
|||||||
cfg_dirs+=("${KLIPPER_CONFIG}/${name}")
|
cfg_dirs+=("${KLIPPER_CONFIG}/${name}")
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
elif [[ -z ${instance_names} && $(klipper_systemd | wc -w) -gt 0 ]]; then
|
elif [[ -z ${instance_names} && $(find_klipper_systemd | wc -w) -gt 0 ]]; then
|
||||||
cfg_dirs+=("${KLIPPER_CONFIG}")
|
cfg_dirs+=("${KLIPPER_CONFIG}")
|
||||||
else
|
else
|
||||||
cfg_dirs=()
|
cfg_dirs=()
|
||||||
|
|||||||
Reference in New Issue
Block a user