diff --git a/install_service_systemd.sh b/install_service_systemd.sh index 91e1b8a37..4f7d6f81c 100755 --- a/install_service_systemd.sh +++ b/install_service_systemd.sh @@ -1,39 +1,66 @@ #!/bin/bash -#Setting up colors +# If you have problems installing Jackett, please open an issue on +# https://github.com/Jackett/Jackett/issues + +# Setting up colors BOLDRED="$(printf '\033[1;31m')" BOLDGREEN="$(printf '\033[1;32m')" NC="$(printf '\033[0m')" # No Color -# Stop and unload the service if it's running -jackettservice="jackett.service" -systemctl stop ${jackettservice} +# Check if the install script is running as root +if [ "$EUID" -ne 0 ]; then + echo "${BOLDRED}ERROR${NC}: Please run this script as root" + exit 1 +fi + +# Check if Jackett service is running +JACKETT_SERVICE="jackett.service" +echo "Checking if the service '${JACKETT_SERVICE}' is running ..." +if systemctl is-active --quiet "${JACKETT_SERVICE}"; then + echo "Service '${JACKETT_SERVICE}' is running" + + # Stop and unload the service + if systemctl stop "${JACKETT_SERVICE}"; then + echo "Service '${JACKETT_SERVICE}' stopped" + else + echo "${BOLDRED}ERROR${NC}: The service '${JACKETT_SERVICE}' Can not be stopped" + exit 1 + fi + +else + echo "Service '${JACKETT_SERVICE}' is not running" +fi # Move working directory to Jackett's -cd "$(dirname "$0")" +JACKETT_DIR="$(dirname "$(readlink -f "$0")")" +echo "Jackett will be installed in '${JACKETT_DIR}'" +if ! cd "${JACKETT_DIR}"; then + echo "${BOLDRED}ERROR${NC}: Can not cd into '${JACKETT_DIR}' folder" + exit 1 +fi # Check if we're running from Jackett's directory if [ ! -f ./jackett ]; then -echo "${BOLDRED}ERROR${NC}: Couldn't locate jackett. Is the script in the right directory?" + echo "${BOLDRED}ERROR${NC}: Can not locate 'jackett' file in '${JACKETT_DIR}'." + echo "Is the script in the right directory?" exit 1 fi -jackettdir="$(pwd)" # Check if Jackett's owner is root -jackettuser="$(stat -c "%U" ./jackett)" -if [ "${jackettuser}" == "root" ]; then -echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory." - exit 1 -fi - -# Check that no other service called Jackett is already running -if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then - echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again." +JACKETT_USER="$(stat -c "%U" ./jackett)" +if [ "${JACKETT_USER}" == "root" ] || [ "${JACKETT_USER}" == "UNKNOWN" ] ; then + echo "${BOLDRED}ERROR${NC}: The owner of Jackett directory is '${JACKETT_USER}'." + echo "Please, change the owner with the command 'chown : -R \"${JACKETT_DIR}\"'" + echo "The user will be used to run Jackett." exit 1 fi +echo "Jackett will be executed with the user '${JACKETT_USER}'" # Write the systemd service descriptor -cat >"/etc/systemd/system/${jackettservice}" < "${JACKETT_SERVICE_PATH}" <: -R \"${JACKETT_DIR}\"'" + echo "The user will be used to run Jackett." exit 1 fi +echo "Jackett will be executed with the user '${JACKETT_USER}'" -# Check if mono is installed -command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; } -monodir="$(dirname $(command -v mono))" - -# Check that no other service called Jackett is already running -if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then - echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again." +# Check if Mono is installed +echo "Checking if Mono is installed ..." +if ! command -v mono > /dev/null; then + echo "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed" exit 1 fi +MONO_DIR="$(dirname "$(command -v mono)")" +echo "Mono is installed in '${MONO_DIR}'" # Write the systemd service descriptor -cat >"/etc/systemd/system/${jackettservice}" < "${JACKETT_SERVICE_PATH}" < /dev/null; do +while pgrep -u "${JACKETT_USER}" JackettUpdater > /dev/null; do sleep 1 done