diff --git a/radarr4k.sh b/radarr4k.sh
index ca2216e..b078855 100755
--- a/radarr4k.sh
+++ b/radarr4k.sh
@@ -1,84 +1,103 @@
#!/bin/bash
user=$(whoami)
-mkdir -p "/home/$user/.logs/"
-touch "/home/$user/.logs/radarr4k.log"
-log="/home/$user/.logs/radarr4k.log"
+mkdir -p "$HOME/.logs/"
+touch "$HOME/.logs/radarr4k.log"
+log="$HOME/.logs/radarr4k.log"
function port() {
LOW_BOUND=$1
UPPER_BOUND=$2
- comm -23 <(seq "${LOW_BOUND}" "${UPPER_BOUND}" | sort) <(ss -Htan | awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1
+ comm -23 <(seq ${LOW_BOUND} ${UPPER_BOUND} | sort) <(ss -Htan | awk '{print $4}' | cut -d':' -f2 | sort -u) | shuf | head -n 1
}
-function _install() {
- if [[ ! -f "/home/$user/.install/.radarr.lock" ]]; then
- echo "Radarr is not installed. Exiting..."
- exit 1
- fi
- mkdir -p "/home/$user/.config/systemd/user/"
- mkdir -p "/home/$user/.config/Radarr4k/"
- echo "Installing the service"
- cat > "/home/$user/.config/systemd/user/radarr4k.service" << SERV
+function _systemd() {
+ cat > $HOME/.config/systemd/user/radarr4k.service << SERVICE
[Unit]
-Description=Radarr4k
+Description=Radarr 4K instance
After=syslog.target network.target
[Service]
Type=simple
Environment="TMPDIR=%h/.tmp"
-ExecStart=%h/Radarr/Radarr -nobrowser -data=%h/.config/Radarr4k
-TimeoutStopSec=20
-KillMode=process
-Restart=on-failure
+ExecStart=%h/Radarr4k/Radarr -nobrowser -data=%h/.config/Radarr4k
WorkingDirectory=%h
+Restart=on-failure
[Install]
WantedBy=default.target
-SERV
- port=$(port 12000 14000)
-echo "Installing Configuration"
- cat > "/home/$user/.config/Radarr4k/config.xml" << EOF
+SERVICE
+
+}
+
+function _download() {
+ echo "Downloading Radarr 4K binaries"
+ wget "https://radarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=x64" -q --show-progress -O $HOME/radarr4k.tar.gz
+
+ echo "Extracting Radarr 4K binaries"
+ mkdir -p $HOME/Radarr4k
+ tar -C $HOME/Radarr4k -xzf $HOME/radarr4k.tar.gz --strip=1 >> "$log" 2>&1
+ rm $HOME/radarr4k.tar.gz
+
+ # This is needed in order for Radarr to work on older systems
+ # https://wiki.servarr.com/radarr/faq#radarr-wont-start-on-debian-11-or-older-systems-due-to-sqlite-version
+ rm $HOME/Radarr4k/libe_sqlite3.so
+ ln -s /usr/lib/x86_64-linux-gnu/libsqlite3.so.0 $HOME/Radarr4k/libe_sqlite3.so
+}
+
+function _install() {
+ _download
+
+ port=$(port 8000 11000)
+ _systemd
+
+ mkdir -p "$HOME/.config/systemd/user/"
+ mkdir -p "$HOME/.config/Radarr4k/"
+
+ echo "Installing the service"
+ api_key=$(openssl rand -hex 16)
+ cat > $HOME/.config/Radarr4k/config.xml << EOF
+
+ info
+ False
${port}
+ 9898
*
- 8787
- False
- Info
- develop
- False
- BuiltIn
- False
-
None
+ BuiltIn
+ main
+ False
+
+ ${api_key}
EOF
-echo "Starting the userland service."
systemctl enable --user --now -q radarr4k
- sleep 45
- apikey=$(grep -oPm1 "(?<=)[^<]+" /home/"$user"/.config/Radarr4k/config.xml)
- if ! timeout 45 bash -c -- "while ! curl -fL \"http://127.0.0.1:${port}/api/v3/system/status?apiKey=${apikey}\" >> \"$log\" 2>&1; do sleep 5; done"; then
- echo "Radarr API did not respond as expected. Please make sure Radarr is on v3 and running."
+ mkdir -p "$HOME/.install/"
+ touch "$HOME/.install/.radarr4k.lock"
+
+ echo "Attempting to contact Radarr 4K API"
+ if ! timeout 45 bash -c -- "while ! curl -fL \"http://127.0.0.1:${port}/api/v3/system/status?apiKey=${api_key}\" >> \"$log\" 2>&1; do sleep 5; done"; then
+ echo "Radarr 4K API did not respond as expected. Installation failed."
exit 1
fi
- read -rep "Please set a password for your radarr4k user ${user}> " -i "" password
+
+ read -rep "Please set a password for your Radarr 4K user '${user}': " -i "" password
echo "Applying authentication"
- payload=$(curl -sL "http://127.0.0.1:${port}/api/v3/config/host?apikey=${apikey}" | jq ".authenticationMethod = \"forms\" | .username = \"${user}\" | .password = \"${password}\"")
- curl -s "http://127.0.0.1:${port}/api/v3/config/host?apikey=${apikey}" -X PUT -H 'Accept: application/json, text/javascript, */*; q=0.01' --compressed -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data-raw "${payload}" >> "$log"
+ payload=$(curl -sL "http://127.0.0.1:${port}/api/v3/config/host?apikey=${api_key}" | jq ".authenticationMethod = \"forms\" | .username = \"${user}\" | .password = \"${password}\" | .passwordConfirmation = \"${password}\"")
+ curl -s -v "http://127.0.0.1:${port}/api/v3/config/host?apikey=${api_key}" -X PUT --header 'Content-Type: application/json' --data-raw "${payload}" >> "$log" 2>&1
sleep 15
- echo "Restarting Radarr4k"
systemctl restart --user radarr4k
echo "Now up and running at http://$(hostname -f):${port}"
- mkdir -p "/home/${user}/.install/"
- touch "/home/${user}/.install/.radarr4k.lock"
}
function _remove {
systemctl stop --user radarr4k
- systemctl disable --user radarr4k
- rm -rf "/home/$user/.config/Radarr4k"
- rm "/home/$user/.config/systemd/user/radarr4k.service"
- rm "/home/${user}/.install/.radarr4k.lock"
+ systemctl disable --user radarr4k >> "$log" 2>&1
+ rm -rf $HOME/.config/Radarr4k >> "$log" 2>&1
+ rm $HOME/.config/systemd/user/radarr4k.service >> "$log" 2>&1
+ rm "$HOME/.install/.radarr4k.lock" >> "$log" 2>&1
+ rm -rf $HOME/Radarr4k >> "$log" 2>&1
}
echo 'This is unsupported software. You will not get help with this, please answer `yes` if you understand and wish to proceed'
@@ -98,24 +117,39 @@ echo ""
echo "What do you like to do?"
echo "install = Install Radarr 4K"
echo "uninstall = Completely removes Radarr 4K"
+echo "upgrade = Upgrade Radarr 4K to latest version"
echo "exit = Exits Installer"
while true; do
read -r -p "Enter it here: " choice
case $choice in
"install")
- if [[ -f "/home/$user/.install/.radarr4k.lock" ]]; then
+ if [[ -f "$HOME/.install/.radarr4k.lock" ]]; then
echo "Radarr 4K is already installed."
else
_install
fi
break
;;
+ "upgrade")
+ if [[ -f "$HOME/.install/.radarr4k.lock" ]]; then
+ systemctl --user stop radarr4k
+ _systemd
+ _download
+ systemctl --user daemon-reload
+ systemctl --user start radarr4k
+ echo "Radarr 4K has been upgraded to the latest version"
+ else
+ echo "Radarr 4K is not installed"
+ fi
+ break
+ ;;
"uninstall")
- if [[ ! -f "/home/$user/.install/.radarr4k.lock" ]]; then
+ if [[ ! -f "$HOME/.install/.radarr4k.lock" ]]; then
echo "Radarr 4K is not installed."
break
else
_remove
+ echo "Radarr 4K has been uninstalled."
fi
break
;;
diff --git a/sonarr4k.sh b/sonarr4k.sh
index 1bea8c6..93b3042 100755
--- a/sonarr4k.sh
+++ b/sonarr4k.sh
@@ -1,8 +1,8 @@
#!/bin/bash
user=$(whoami)
-mkdir -p "/home/$user/.logs/"
-touch "/home/$user/.logs/sonarr4k.log"
-log="/home/$user/.logs/sonarr4k.log"
+mkdir -p "$HOME/.logs/"
+touch "$HOME/.logs/sonarr4k.log"
+log="$HOME/.logs/sonarr4k.log"
function port() {
LOW_BOUND=$1
@@ -11,15 +11,15 @@ function port() {
}
function _systemd() {
- cat > /home/${USER}/.config/systemd/user/sonarr4k.service << SERVICE
+ cat > $HOME/.config/systemd/user/sonarr4k.service << SERVICE
[Unit]
-Description=Sonarr4k
+Description=Sonarr 4K instance
After=syslog.target network.target
[Service]
Type=simple
Environment="TMPDIR=%h/.tmp"
-ExecStart=%h/Sonarr/Sonarr -nobrowser -data=%h/.config/Sonarr4k
+ExecStart=%h/Sonarr4k/Sonarr -nobrowser -data=%h/.config/Sonarr4k
WorkingDirectory=%h
Restart=on-failure
@@ -28,17 +28,30 @@ WantedBy=default.target
SERVICE
}
+
+function _download() {
+ echo "Downloading Sonarr 4K binaries"
+ wget "https://services.sonarr.tv/v1/download/main/latest?version=4&os=linux&arch=x64" -q --show-progress -O $HOME/sonarr4k.tar.gz
+
+ echo "Extracting Sonarr 4K binaries"
+ mkdir -p $HOME/Sonarr4k
+ tar -C $HOME/Sonarr4k -xzf $HOME/sonarr4k.tar.gz --strip=1 >> "$log" 2>&1
+ rm $HOME/sonarr4k.tar.gz
+}
+
function _install() {
- if [[ ! -f "/home/$user/.install/.sonarr.lock" ]]; then
- echo "Sonarr is not installed. Exiting..."
- exit 1
- fi
- mkdir -p /home/$user/.config/systemd/user/
- mkdir -p /home/$user/.config/Sonarr4k/
+ _download
+
port=$(port 8000 11000)
_systemd
+
+ mkdir -p "$HOME/.config/systemd/user/"
+ mkdir -p "$HOME/.config/Sonarr4k/"
- cat > /home/$user/.config/Sonarr4k/config.xml << EOF
+ echo "Installing the service"
+ api_key=$(openssl rand -hex 16)
+ cat > $HOME/.config/Sonarr4k/config.xml << EOF
+
info
False
@@ -51,31 +64,35 @@ function _install() {
main
False
+ ${api_key}
EOF
systemctl enable --user --now -q sonarr4k
- sleep 45
- apikey=$(grep -oPm1 "(?<=)[^<]+" /home/"$user"/.config/Sonarr4k/config.xml)
- if ! timeout 45 bash -c -- "while ! curl -fL \"http://127.0.0.1:${port}/api/v3/system/status?apiKey=${apikey}\" >> \"$log\" 2>&1; do sleep 5; done"; then
- echo "Sonarr API did not respond as expected. Please make sure Sonarr is on v3 and running."
+ mkdir -p "$HOME/.install/"
+ touch "$HOME/.install/.sonarr4k.lock"
+
+ echo "Attempting to contact Sonarr 4K API"
+ if ! timeout 45 bash -c -- "while ! curl -fL \"http://127.0.0.1:${port}/api/v3/system/status?apiKey=${api_key}\" >> \"$log\" 2>&1; do sleep 5; done"; then
+ echo "Sonarr 4K API did not respond as expected. Installation failed."
exit 1
fi
- read -rep "Please set a password for your sonarr4k user ${user}> " -i "" password
- payload=$(curl -sL "http://127.0.0.1:${port}/api/v3/config/host?apikey=${apikey}" | jq ".authenticationMethod = \"forms\" | .username = \"${user}\" | .password = \"${password}\"")
- curl -s "http://127.0.0.1:${port}/api/v3/config/host?apikey=${apikey}" -X PUT -H 'Accept: application/json, text/javascript, */*; q=0.01' --compressed -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' --data-raw "${payload}" >> "$log"
+
+ read -rep "Please set a password for your Sonarr 4K user '${user}': " -i "" password
+ echo "Applying authentication"
+ payload=$(curl -sL "http://127.0.0.1:${port}/api/v3/config/host?apikey=${api_key}" | jq ".authenticationMethod = \"forms\" | .username = \"${user}\" | .password = \"${password}\" | .passwordConfirmation = \"${password}\"")
+ curl -s -v "http://127.0.0.1:${port}/api/v3/config/host?apikey=${api_key}" -X PUT --header 'Content-Type: application/json' --data-raw "${payload}" >> "$log" 2>&1
sleep 15
systemctl restart --user sonarr4k
echo "Now up and running at http://$(hostname -f):${port}"
- mkdir -p "/home/${user}/.install/"
- touch "/home/${user}/.install/.sonarr4k.lock"
}
function _remove {
systemctl stop --user sonarr4k
- systemctl disable --user sonarr4k
- rm -rf /home/$user/.config/Sonarr4k
- rm /home/$user/.config/systemd/user/sonarr4k.service
- rm "/home/${user}/.install/.sonarr4k.lock"
+ systemctl disable --user sonarr4k >> "$log" 2>&1
+ rm -rf $HOME/.config/Sonarr4k >> "$log" 2>&1
+ rm $HOME/.config/systemd/user/sonarr4k.service >> "$log" 2>&1
+ rm "$HOME/.install/.sonarr4k.lock" >> "$log" 2>&1
+ rm -rf $HOME/Sonarr4k >> "$log" 2>&1
}
echo 'This is unsupported software. You will not get help with this, please answer `yes` if you understand and wish to proceed'
@@ -95,12 +112,13 @@ echo ""
echo "What do you like to do?"
echo "install = Install Sonarr 4K"
echo "uninstall = Completely removes Sonarr 4K"
+echo "upgrade = Upgrade Sonarr 4K to latest version"
echo "exit = Exits Installer"
while true; do
read -r -p "Enter it here: " choice
case $choice in
"install")
- if [[ -f "/home/$user/.install/.sonarr4k.lock" ]]; then
+ if [[ -f "$HOME/.install/.sonarr4k.lock" ]]; then
echo "Sonarr 4K is already installed."
else
_install
@@ -108,22 +126,25 @@ while true; do
break
;;
"upgrade")
- if [[ -f "/home/$user/.install/.sonarr4k.lock" ]]; then
- echo "Upgrading Sonarr 4K systemd"
+ if [[ -f "$HOME/.install/.sonarr4k.lock" ]]; then
+ systemctl --user stop sonarr4k
_systemd
+ _download
systemctl --user daemon-reload
- systemctl --user try-restart sonarr4k
+ systemctl --user start sonarr4k
+ echo "Sonarr 4K has been upgraded to the latest version"
else
echo "Sonarr 4K is not installed"
- break
fi
+ break
;;
"uninstall")
- if [[ ! -f "/home/$user/.install/.sonarr4k.lock" ]]; then
+ if [[ ! -f "$HOME/.install/.sonarr4k.lock" ]]; then
echo "Sonarr 4K is not installed."
break
else
_remove
+ echo "Sonarr 4K has been uninstalled."
fi
break
;;