Includes: * refactor of install.sh, splitting it to libs * fix of custompios module according to install changes * added test script to verify install * refactor of `make config` script Signed-off-by: Stephan Wendel <me@stephanwe.de> Signed-off-by: Stephan Wendel <me@stephanwe.de>
271 lines
7.0 KiB
Bash
Executable File
271 lines
7.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#### crowsnest - A webcam Service for multiple Cams and Stream Services.
|
|
####
|
|
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
|
|
#### Copyright 2021 - till today
|
|
#### https://github.com/mainsail-crew/crowsnest
|
|
####
|
|
#### This File is distributed under GPLv3
|
|
####
|
|
|
|
# shellcheck enable=require-variable-braces
|
|
|
|
# Exit on errors
|
|
set -Ee
|
|
|
|
# Debug
|
|
# set -x
|
|
|
|
# Global Vars
|
|
TITLE="\e[31mcrowsnest\e[0m - A webcam daemon for multiple Cams and stream services."
|
|
SRC_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd -P)"
|
|
SERVICE_FILE="/etc/systemd/system/crowsnest.service"
|
|
|
|
|
|
# Global func
|
|
msg() {
|
|
echo -e "${1}"
|
|
}
|
|
|
|
status_msg() {
|
|
local msg status
|
|
msg="${1}"
|
|
status="${2}"
|
|
echo -en "${msg}\r"
|
|
if [[ "${status}" == "0" ]]; then
|
|
echo -e "${msg} [\e[32mOK\e[0m]"
|
|
fi
|
|
if [[ "${status}" == "1" ]]; then
|
|
echo -e "${msg} [\e[31mFAILED\e[0m]"
|
|
error_msg
|
|
exit 1
|
|
fi
|
|
if [[ "${status}" == "2" ]]; then
|
|
echo -e "${msg} [\e[33mSKIPPED\e[0m]"
|
|
fi
|
|
}
|
|
|
|
## Messages
|
|
welcome_msg() {
|
|
msg "${TITLE}\n"
|
|
msg "\t\e[34mAhoi!\e[0m"
|
|
msg "\tTo sad that you want to uninstall crowsnest :("
|
|
msg "\tThis will take a while ... "
|
|
msg "\tPlease reboot after uninstallation has finished.\n"
|
|
sleep 1
|
|
}
|
|
|
|
goodbye_msg() {
|
|
msg "Please remove manually the 'crowsnest' folder in ${HOME}\n"
|
|
msg "\tRemove [update manager crowsnest] section from moonraker.conf,before reboot!\n"
|
|
msg "After that is done, please reboot!\nGoodBye...\n"
|
|
}
|
|
|
|
error_msg() {
|
|
msg "Something went wrong!\nPlease copy the last output and head over to\n"
|
|
msg "\thttps://discord.gg/mainsail\n"
|
|
msg "open a ticket in #supportforum ..."
|
|
}
|
|
|
|
## Interactive
|
|
ask_uninstall() {
|
|
local remove
|
|
while true; do
|
|
read -erp "Do you REALLY want to remove existing 'crowsnest'? (y/N) " -i "N" remove
|
|
case "${remove}" in
|
|
[yY]*)
|
|
break
|
|
;;
|
|
[nN]*)
|
|
msg "\nYou answered '${remove}'! Uninstall will be aborted..."
|
|
msg "GoodBye...\n"
|
|
exit 1
|
|
;;
|
|
*)
|
|
msg "\nInvalid input, please try again."
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
ask_remove_config() {
|
|
local reply
|
|
while true; do
|
|
read -erp "Do you want to remove crowsnest.conf? [y/N]: " -i "N" reply
|
|
case "${reply}" in
|
|
[yY]* )
|
|
remove_conf_file
|
|
break
|
|
;;
|
|
[nN]* )
|
|
status_msg "Removing 'crowsnest.conf' ..." "2"
|
|
break
|
|
;;
|
|
* )
|
|
msg "\e[31mERROR: Not a valid choice, try again ...\e[0m"
|
|
;;
|
|
esac
|
|
done
|
|
return 0
|
|
}
|
|
|
|
## remove funcs
|
|
remove_service_file() {
|
|
if [[ ! -f "${SERVICE_FILE}" ]]; then
|
|
status_msg "Removing service file ..." "2"
|
|
msg "\t==> File does not exist!"
|
|
return 0
|
|
fi
|
|
if [[ -f "${SERVICE_FILE}" ]]; then
|
|
if sudo rm -f "${SERVICE_FILE}"; then
|
|
status_msg "Removing service file ..." "0"
|
|
else
|
|
status_msg "Removing service file ..." "1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
remove_env_file() {
|
|
local env_file
|
|
env_file="${CROWSNEST_ENV_PATH}/crowsnest.env"
|
|
if [[ ! -f "${env_file}" ]]; then
|
|
status_msg "Removing environment file ..." "2"
|
|
msg "\t==> File does not exist!"
|
|
return 0
|
|
fi
|
|
if [[ -f "${env_file}" ]]; then
|
|
if sudo rm -f "${env_file}"; then
|
|
status_msg "Removing environment file ..." "0"
|
|
else
|
|
status_msg "Removing environment file ..." "1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
remove_conf_file() {
|
|
local conf_file
|
|
conf_file="${CROWSNEST_CONFIG_PATH}/crowsnest.conf"
|
|
if [[ ! -f "${conf_file}" ]]; then
|
|
status_msg "Removing 'crowsnest.conf' ..." "2"
|
|
msg "\t==> File does not exist!"
|
|
return 0
|
|
fi
|
|
if [[ -f "${conf_file}" ]]; then
|
|
if sudo rm -f "${conf_file}"; then
|
|
status_msg "Removing 'crowsnest.conf' ..." "0"
|
|
else
|
|
status_msg "Removing 'crowsnest.conf' ..." "1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
remove_log_files() {
|
|
local log_file
|
|
log_file="${CROWSNEST_LOG_PATH}/crowsnest.log"
|
|
if [[ ! -f "${log_file}" ]]; then
|
|
status_msg "Removing 'crowsnest.log' ..." "2"
|
|
msg "\t==> File does not exist!"
|
|
return 0
|
|
fi
|
|
if [[ -f "${log_file}" ]]; then
|
|
if sudo rm -f "${log_file}"; then
|
|
status_msg "Removing 'crowsnest.log' ..." "0"
|
|
else
|
|
status_msg "Removing 'crowsnest.log' ..." "1"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
remove_logrotate() {
|
|
local logrotate_conf
|
|
logrotate_conf="/etc/logrotate.d/crowsnest"
|
|
if [[ ! -f "${logrotate_conf}" ]]; then
|
|
status_msg "Removing Logrotate Rule ..." "2"
|
|
msg "\t==> File does not exist!"
|
|
return 0
|
|
fi
|
|
if [[ -f "${logrotate_conf}" ]]; then
|
|
sudo rm -f /etc/logrotate.d/crowsnest || return 1
|
|
fi
|
|
}
|
|
|
|
get_path() {
|
|
local cn_base_path
|
|
cn_base_path="$(
|
|
dirname "$(grep "EnvironmentFile" < "${SERVICE_FILE}" | cut -f2 -d= )"
|
|
)"
|
|
cn_base_path="${cn_base_path%/*}"
|
|
echo "${cn_base_path}"
|
|
}
|
|
|
|
main() {
|
|
if [[ "${UID}" = '0' ]]; then
|
|
msg "\n\tYOU DONT NEED TO RUN UNINSTALLER AS ROOT!"
|
|
msg "\tYou will be prompted for 'sudo' password"
|
|
exit 1
|
|
fi
|
|
|
|
welcome_msg
|
|
|
|
[[ -f "${SERVICE_FILE}" ]] || (
|
|
msg "\nERROR: File ${SERVICE_FILE} not found!"
|
|
msg "\t ==> Crowsnest seems not to be installed ... [EXITING]"
|
|
exit 1
|
|
)
|
|
|
|
ask_uninstall
|
|
|
|
## fake sudo
|
|
sudo echo "fakesudo" >> /dev/null
|
|
|
|
#shellcheck disable=SC1091
|
|
[[ -f "${SRC_DIR}/.config" ]] && . "${SRC_DIR}/.config"
|
|
DATA_DIR="$(get_path)"
|
|
[[ -n "${CROWSNEST_CONFIG_PATH}" ]] || CROWSNEST_CONFIG_PATH="${DATA_DIR}/config"
|
|
[[ -n "${CROWSNEST_LOG_PATH}" ]] || CROWSNEST_LOG_PATH="${DATA_DIR}/logs"
|
|
[[ -n "${CROWSNEST_ENV_PATH}" ]] || CROWSNEST_ENV_PATH="${DATA_DIR}/systemd"
|
|
|
|
if systemctl is-active crowsnest.service &> /dev/null; then
|
|
if sudo systemctl stop crowsnest.service &> /dev/null; then
|
|
status_msg "Stopping crowsnest service ..." "0"
|
|
else
|
|
status_msg "Stopping crowsnest service ..." "1"
|
|
fi
|
|
else
|
|
status_msg "Stopping crowsnest service ..." "2"
|
|
msg "\t==> crowsnest service is not running"
|
|
fi
|
|
|
|
if systemctl is-enabled crowsnest.service &> /dev/null; then
|
|
if sudo systemctl disable crowsnest.service &> /dev/null; then
|
|
status_msg "Disable crowsnest service ..." "0"
|
|
else
|
|
status_msg "Disable crowsnest service ..." "1"
|
|
fi
|
|
else
|
|
status_msg "Disable crowsnest service ..." "2"
|
|
msg "\t==> crowsnest service is enabled"
|
|
fi
|
|
|
|
|
|
remove_service_file
|
|
|
|
remove_env_file
|
|
|
|
if remove_logrotate; then
|
|
status_msg "Removing Logrotate Rule ..." "0"
|
|
else
|
|
status_msg "Removing Logrotate Rule ..." "1"
|
|
fi
|
|
|
|
remove_log_files
|
|
|
|
ask_remove_config
|
|
|
|
goodbye_msg
|
|
}
|
|
|
|
main "${@}"
|
|
exit 0
|