shellcheck(moonraker.sh): fix shellcheck warnings

Signed-off-by: Dominik Willner th33xitus@gmail.com
This commit is contained in:
th33xitus
2022-05-14 17:34:39 +02:00
parent a2a8a4b673
commit 9a87e6e296

View File

@@ -25,7 +25,7 @@ function moonraker_setup_dialog(){
status_msg "Initializing Moonraker installation ..." status_msg "Initializing Moonraker installation ..."
### return early if python version check fails ### return early if python version check fails
if [[ "$(python3_check)" == "false" ]]; then if [[ $(python3_check) == "false" ]]; then
local error="Versioncheck failed! Python 3.7 or newer required!\n" local error="Versioncheck failed! Python 3.7 or newer required!\n"
error="${error} Please upgrade Python." error="${error} Please upgrade Python."
print_error "${error}" && return print_error "${error}" && return
@@ -34,7 +34,7 @@ function moonraker_setup_dialog(){
### return early if moonraker already exists ### return early if moonraker already exists
local moonraker_services local moonraker_services
moonraker_services=$(moonraker_systemd) moonraker_services=$(moonraker_systemd)
if [[ -n "${moonraker_services}" ]]; then if [[ -n ${moonraker_services} ]]; then
local error="At least one Moonraker service is already installed:" local error="At least one Moonraker service is already installed:"
for s in ${moonraker_services}; do for s in ${moonraker_services}; do
log_info "Found Moonraker service: ${s}" log_info "Found Moonraker service: ${s}"
@@ -46,7 +46,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=$(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."
print_error "${error}" && return print_error "${error}" && return
@@ -95,9 +95,10 @@ function moonraker_setup_dialog(){
user_input+=("${moonraker_count}") user_input+=("${moonraker_count}")
### confirm instance amount ### confirm instance amount
local yn
while true; do while true; do
((moonraker_count == 1)) && local question="Install Moonraker?" (( moonraker_count == 1 )) && local question="Install Moonraker?"
((moonraker_count > 1)) && local question="Install ${moonraker_count} Moonraker instances?" (( moonraker_count > 1 )) && local question="Install ${moonraker_count} Moonraker instances?"
read -p "${cyan}###### ${question} (Y/n):${white} " yn read -p "${cyan}###### ${question} (Y/n):${white} " yn
case "${yn}" in case "${yn}" in
Y|y|Yes|yes|"") Y|y|Yes|yes|"")
@@ -119,8 +120,8 @@ function moonraker_setup_dialog(){
done done
fi fi
((moonraker_count > 1)) && status_msg "Installing ${moonraker_count} Moonraker instances ..." (( moonraker_count > 1 )) && status_msg "Installing ${moonraker_count} Moonraker instances ..."
((moonraker_count == 1)) && status_msg "Installing Moonraker ..." (( moonraker_count == 1 )) && status_msg "Installing Moonraker ..."
moonraker_setup "${user_input[@]}" moonraker_setup "${user_input[@]}"
} }
@@ -128,7 +129,7 @@ function install_moonraker_dependencies(){
local packages local packages
local install_script="${HOME}/moonraker/scripts/install-moonraker.sh" local install_script="${HOME}/moonraker/scripts/install-moonraker.sh"
### read PKGLIST from official install script ### read PKGLIST from official install-script
status_msg "Reading dependencies..." status_msg "Reading dependencies..."
# shellcheck disable=SC2016 # shellcheck disable=SC2016
packages="$(grep "PKGLIST=" "${install_script}" | cut -d'"' -f2 | sed 's/\${PKGLIST}//g' | tr -d '\n')" packages="$(grep "PKGLIST=" "${install_script}" | cut -d'"' -f2 | sed 's/\${PKGLIST}//g' | tr -d '\n')"
@@ -166,7 +167,7 @@ function moonraker_setup(){
### step 1: clone moonraker ### step 1: clone moonraker
status_msg "Downloading Moonraker ..." status_msg "Downloading Moonraker ..."
### force remove existing moonraker dir and clone into fresh moonraker dir ### force remove existing moonraker dir and clone into fresh moonraker dir
[ -d "${MOONRAKER_DIR}" ] && rm -rf "${MOONRAKER_DIR}" [[ -d ${MOONRAKER_DIR} ]] && rm -rf "${MOONRAKER_DIR}"
cd "${HOME}" && git clone "${MOONRAKER_REPO}" cd "${HOME}" && git clone "${MOONRAKER_REPO}"
### step 2: install moonraker dependencies and create python virtualenv ### step 2: install moonraker dependencies and create python virtualenv
@@ -189,8 +190,8 @@ function moonraker_setup(){
### confirm message ### confirm message
local confirm="" local confirm=""
(( instance_arr[0] == 1)) && confirm="Moonraker has been set up!" (( instance_arr[0] == 1 )) && confirm="Moonraker has been set up!"
(( instance_arr[0] > 1)) && confirm="${instance_arr[0]} Moonraker instances have been set up!" (( instance_arr[0] > 1 )) && confirm="${instance_arr[0]} Moonraker instances have been set up!"
print_confirm "${confirm}" && print_mr_ip_list "${instance_arr[0]}" && return print_confirm "${confirm}" && print_mr_ip_list "${instance_arr[0]}" && return
} }
@@ -214,7 +215,7 @@ function create_moonraker_conf(){
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]*$"
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}]}" cfg_dir="${KLIPPER_CONFIG}/printer_${names[${j}]}"
@@ -227,8 +228,8 @@ function create_moonraker_conf(){
db="${HOME}/.moonraker_database_${names[${j}]}" 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}" "${log}" "${db}" "${uds}" "${lan}"
port=$((port+1)) port=$(( port + 1 ))
j=$((j+1)) j=$(( j + 1 ))
done && unset j done && unset j
else else
@@ -239,9 +240,10 @@ 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} log=${4} db=${5} uds=${6} lan=${7}
local conf_template="${KIAUH_SRCDIR}/resources/moonraker.conf" local conf_template="${KIAUH_SRCDIR}/resources/moonraker.conf"
[ ! -d "${cfg_dir}" ] && mkdir -p "${cfg_dir}"
if [ ! -f "${cfg}" ]; then [[ ! -d ${cfg_dir} ]] && mkdir -p "${cfg_dir}"
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" "${cfg}"
@@ -272,13 +274,13 @@ function create_moonraker_service(){
log="${HOME}/klipper_logs/moonraker.log" log="${HOME}/klipper_logs/moonraker.log"
service="${SYSTEMD}/moonraker.service" service="${SYSTEMD}/moonraker.service"
### write single instance service ### write single instance service
write_moonraker_service "" "${cfg_dir}" "${cfg}" "${log}" "${service}" write_moonraker_service "" "${cfg}" "${log}" "${service}"
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
local j=0 re="^[1-9][0-9]*$" local j=0 re="^[1-9][0-9]*$"
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}]}" cfg_dir="${KLIPPER_CONFIG}/printer_${names[${j}]}"
@@ -290,13 +292,13 @@ function create_moonraker_service(){
log="${HOME}/klipper_logs/moonraker-${names[${j}]}.log" log="${HOME}/klipper_logs/moonraker-${names[${j}]}.log"
service="${SYSTEMD}/moonraker-${names[${j}]}.service" service="${SYSTEMD}/moonraker-${names[${j}]}.service"
### write multi instance service ### write multi instance service
write_moonraker_service "${names[${j}]}" "${cfg_dir}" "${cfg}" "${log}" "${service}" write_moonraker_service "${names[${j}]}" "${cfg}" "${log}" "${service}"
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
### enable mainsails remoteMode if mainsail is found ### enable mainsails remoteMode if mainsail is found
if [[ -d "${MAINSAIL_DIR}" ]]; then if [[ -d ${MAINSAIL_DIR} ]]; then
status_msg "Mainsail installation found! Enabling Mainsail remote mode ..." status_msg "Mainsail installation found! Enabling Mainsail remote mode ..."
enable_mainsail_remotemode enable_mainsail_remotemode
ok_msg "Mainsails remote mode enabled!" ok_msg "Mainsails remote mode enabled!"
@@ -308,28 +310,28 @@ function create_moonraker_service(){
} }
function write_moonraker_service(){ function write_moonraker_service(){
local i=${1} cfg_dir=${2} cfg=${3} log=${4} service=${5} local i=${1} cfg=${2} log=${3} service=${4}
local service_template="${KIAUH_SRCDIR}/resources/moonraker.service" local service_template="${KIAUH_SRCDIR}/resources/moonraker.service"
### 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}"
[ -z "${i}" ] && sudo sed -i "s| for instance moonraker-%INST%||" "${service}" [[ -z ${i} ]] && sudo sed -i "s| for instance moonraker-%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}|; s|%ENV%|${MOONRAKER_ENV}|; s|%DIR%|${MOONRAKER_DIR}|" "${service}"
sudo sed -i "s|%CFG%|${cfg}|; s|%LOG%|${log}|" "${service}" sudo sed -i "s|%CFG%|${cfg}|; s|%LOG%|${log}|" "${service}"
fi fi
} }
function print_mr_ip_list(){ function print_mr_ip_list(){
local ip count=${1} i=1 port=7125 local ip count=${1} port=7125
ip=$(hostname -I | cut -d" " -f1) ip=$(hostname -I | cut -d" " -f1)
while (( i <= count )); do
for (( i=1; i <= count; i++ )); do
echo -e " ${cyan}● Instance ${i}:${white} ${ip}:${port}" echo -e " ${cyan}● Instance ${i}:${white} ${ip}:${port}"
port=$((port+1)) port=$(( port + 1 ))
i=$((i+1))
done && echo done && echo
} }
@@ -338,17 +340,20 @@ function print_mr_ip_list(){
### https://github.com/Arksine/moonraker/pull/346 ### https://github.com/Arksine/moonraker/pull/346
function moonraker_polkit(){ function moonraker_polkit(){
local has_sup local has_sup
### check for required SupplementaryGroups entry in service files ### check for required SupplementaryGroups entry in service files
### write it to the service if it doesn't exist ### write it to the service if it doesn't exist
for service in $(moonraker_systemd); do for service in $(moonraker_systemd); do
has_sup="$(grep "SupplementaryGroups=moonraker-admin" "${service}")" has_sup="$(grep "SupplementaryGroups=moonraker-admin" "${service}")"
if [ -z "${has_sup}" ]; then if [[ -z ${has_sup} ]]; then
status_msg "Adding moonraker-admin supplementary group to ${service} ..." status_msg "Adding moonraker-admin supplementary group to ${service} ..."
sudo sed -i "/^Type=simple$/a SupplementaryGroups=moonraker-admin" "${service}" sudo sed -i "/^Type=simple$/a SupplementaryGroups=moonraker-admin" "${service}"
ok_msg "Adding moonraker-admin supplementary group successfull!" ok_msg "Adding moonraker-admin supplementary group successfull!"
fi fi
done done
[ -z "${has_sup}" ] && echo "reloading services!!!" && sudo systemctl daemon-reload
[[ -z ${has_sup} ]] && echo "reloading services!!!" && sudo systemctl daemon-reload
### execute moonrakers policykit-rules script ### execute moonrakers policykit-rules script
"${HOME}"/moonraker/scripts/set-policykit-rules.sh "${HOME}"/moonraker/scripts/set-policykit-rules.sh
} }
@@ -358,7 +363,7 @@ function moonraker_polkit(){
#==================================================# #==================================================#
function remove_moonraker_sysvinit() { function remove_moonraker_sysvinit() {
[ ! -e "${INITD}/moonraker" ] && return [[ ! -e "${INITD}/moonraker" ]] && return
status_msg "Removing Moonraker SysVinit service ..." status_msg "Removing Moonraker SysVinit service ..."
sudo systemctl stop moonraker sudo systemctl stop moonraker
sudo update-rc.d -f moonraker remove sudo update-rc.d -f moonraker remove
@@ -367,17 +372,18 @@ function remove_moonraker_sysvinit() {
} }
function remove_moonraker_systemd() { function remove_moonraker_systemd() {
[ -z "$(moonraker_systemd)" ] && return [[ -z $(moonraker_systemd) ]] && return
status_msg "Removing Moonraker Systemd Services ..." status_msg "Removing Moonraker Systemd Services ..."
local files
for service in $(moonraker_systemd | cut -d"/" -f5) for service in $(moonraker_systemd | cut -d"/" -f5); do
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}"
sudo rm -f "${SYSTEMD}/${service}" sudo rm -f "${SYSTEMD}/${service}"
ok_msg "Done!" ok_msg "Done!"
done done
### reloading units ### reloading units
sudo systemctl daemon-reload sudo systemctl daemon-reload
sudo systemctl reset-failed sudo systemctl reset-failed
@@ -387,7 +393,8 @@ function remove_moonraker_systemd() {
function remove_moonraker_logs() { function remove_moonraker_logs() {
local files local files
files=$(find "${HOME}/klipper_logs" -maxdepth 1 -regextype posix-extended -regex "${HOME}/klipper_logs/moonraker(-[0-9a-zA-Z]+)?\.log(.*)?" | sort) files=$(find "${HOME}/klipper_logs" -maxdepth 1 -regextype posix-extended -regex "${HOME}/klipper_logs/moonraker(-[0-9a-zA-Z]+)?\.log(.*)?" | 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} ..."
rm -f "${file}" rm -f "${file}"
@@ -398,13 +405,14 @@ function remove_moonraker_logs() {
function remove_moonraker_api_key() { function remove_moonraker_api_key() {
### remove legacy api key ### remove legacy api key
if [ -e "${HOME}/.klippy_api_key" ]; then if [[ -e "${HOME}/.klippy_api_key" ]]; then
status_msg "Removing legacy API Key ..." status_msg "Removing legacy API Key ..."
rm "${HOME}/.klippy_api_key" rm "${HOME}/.klippy_api_key"
ok_msg "Done!" ok_msg "Done!"
fi fi
### remove api key ### remove api key
if [ -e "${HOME}/.moonraker_api_key" ]; then if [[ -e "${HOME}/.moonraker_api_key" ]]; then
status_msg "Removing API Key ..." status_msg "Removing API Key ..."
rm "${HOME}/.moonraker_api_key" rm "${HOME}/.moonraker_api_key"
ok_msg "Done!" ok_msg "Done!"
@@ -412,21 +420,24 @@ function remove_moonraker_api_key() {
} }
function remove_moonraker_dir() { function remove_moonraker_dir() {
[ ! -d "${MOONRAKER_DIR}" ] && return [[ ! -d ${MOONRAKER_DIR} ]] && return
status_msg "Removing Moonraker directory ..." status_msg "Removing Moonraker directory ..."
rm -rf "${MOONRAKER_DIR}" rm -rf "${MOONRAKER_DIR}"
ok_msg "Directory removed!" ok_msg "Directory removed!"
} }
function remove_moonraker_env() { function remove_moonraker_env() {
[ ! -d "${MOONRAKER_ENV}" ] && return [[ ! -d ${MOONRAKER_ENV} ]] && return
status_msg "Removing moonraker-env directory ..." status_msg "Removing moonraker-env directory ..."
rm -rf "${MOONRAKER_ENV}" rm -rf "${MOONRAKER_ENV}"
ok_msg "Directory removed!" ok_msg "Directory removed!"
} }
function remove_moonraker_polkit() { function remove_moonraker_polkit() {
[ ! -d "${MOONRAKER_DIR}" ] && return [[ ! -d ${MOONRAKER_DIR} ]] && return
status_msg "Removing all Moonraker PolicyKit rules ..." status_msg "Removing all Moonraker PolicyKit rules ..."
"${MOONRAKER_DIR}"/scripts/set-policykit-rules.sh --clear "${MOONRAKER_DIR}"/scripts/set-policykit-rules.sh --clear
ok_msg "Done!" ok_msg "Done!"
@@ -462,7 +473,8 @@ function remove_moonraker(){
function update_moonraker(){ function update_moonraker(){
do_action_service "stop" "moonraker" do_action_service "stop" "moonraker"
if [ ! -d "${MOONRAKER_DIR}" ]; then
if [[ ! -d ${MOONRAKER_DIR} ]]; then
cd "${HOME}" && git clone "${MOONRAKER_REPO}" cd "${HOME}" && git clone "${MOONRAKER_REPO}"
else else
backup_before_update "moonraker" backup_before_update "moonraker"
@@ -473,6 +485,7 @@ function update_moonraker(){
### install possible new python dependencies ### install possible new python dependencies
"${MOONRAKER_ENV}"/bin/pip install -r "${MOONRAKER_DIR}/scripts/moonraker-requirements.txt" "${MOONRAKER_ENV}"/bin/pip install -r "${MOONRAKER_DIR}/scripts/moonraker-requirements.txt"
fi fi
### required due to https://github.com/Arksine/moonraker/issues/349 ### required due to https://github.com/Arksine/moonraker/issues/349
moonraker_polkit moonraker_polkit
@@ -490,35 +503,38 @@ function get_moonraker_status(){
### remove the "SERVICE" entry from the data array if a moonraker service is installed ### remove the "SERVICE" entry from the data array if a moonraker service is installed
local data_arr=(SERVICE "${MOONRAKER_DIR}" "${MOONRAKER_ENV}") local data_arr=(SERVICE "${MOONRAKER_DIR}" "${MOONRAKER_ENV}")
[ "${sf_count}" -gt 0 ] && unset "data_arr[0]" [[ ${sf_count} -gt 0 ]] && unset "data_arr[0]"
### count+1 for each found data-item from array ### count+1 for each found data-item from array
local filecount=0 local filecount=0
for data in "${data_arr[@]}"; do for data in "${data_arr[@]}"; do
[ -e "${data}" ] && filecount=$(("${filecount}" + 1)) [[ -e ${data} ]] && filecount=$(( filecount + 1 ))
done done
if (( filecount == ${#data_arr[*]})); then if (( filecount == ${#data_arr[*]} )); then
status="Installed: ${sf_count}" status="Installed: ${sf_count}"
elif ((filecount == 0)); then elif (( filecount == 0 )); then
status="Not installed!" status="Not installed!"
else else
status="Incomplete!" status="Incomplete!"
fi fi
echo "${status}" echo "${status}"
} }
function get_local_moonraker_commit(){ function get_local_moonraker_commit(){
[[ ! -d ${MOONRAKER_DIR} || ! -d "${MOONRAKER_DIR}/.git" ]] && return
local commit local commit
[ ! -d "${MOONRAKER_DIR}" ] || [ ! -d "${MOONRAKER_DIR}"/.git ] && return
cd "${MOONRAKER_DIR}" cd "${MOONRAKER_DIR}"
commit="$(git describe HEAD --always --tags | cut -d "-" -f 1,2)" commit="$(git describe HEAD --always --tags | cut -d "-" -f 1,2)"
echo "${commit}" echo "${commit}"
} }
function get_remote_moonraker_commit(){ function get_remote_moonraker_commit(){
[[ ! -d ${MOONRAKER_DIR} || ! -d "${MOONRAKER_DIR}/.git" ]] && return
local commit local commit
[ ! -d "${MOONRAKER_DIR}" ] || [ ! -d "${MOONRAKER_DIR}"/.git ] && return
cd "${MOONRAKER_DIR}" && git fetch origin -q cd "${MOONRAKER_DIR}" && git fetch origin -q
commit=$(git describe origin/master --always --tags | cut -d "-" -f 1,2) commit=$(git describe origin/master --always --tags | cut -d "-" -f 1,2)
echo "${commit}" echo "${commit}"
@@ -529,7 +545,8 @@ function compare_moonraker_versions(){
local versions local_ver remote_ver local versions local_ver remote_ver
local_ver="$(get_local_moonraker_commit)" local_ver="$(get_local_moonraker_commit)"
remote_ver="$(get_remote_moonraker_commit)" remote_ver="$(get_remote_moonraker_commit)"
if [ "${local_ver}" != "${remote_ver}" ]; then
if [[ ${local_ver} != "${remote_ver}" ]]; then
versions="${yellow}$(printf " %-14s" "${local_ver}")${white}" versions="${yellow}$(printf " %-14s" "${local_ver}")${white}"
versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}" versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}"
# add moonraker to the update all array for the update all function in the updater # add moonraker to the update all array for the update all function in the updater
@@ -539,5 +556,6 @@ function compare_moonraker_versions(){
versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}" versions+="|${green}$(printf " %-13s" "${remote_ver}")${white}"
MOONRAKER_UPDATE_AVAIL="false" MOONRAKER_UPDATE_AVAIL="false"
fi fi
echo "${versions}" echo "${versions}"
} }