Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 81 additions & 47 deletions radarr4k.sh
Original file line number Diff line number Diff line change
@@ -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

<Config>
<LogLevel>info</LogLevel>
<EnableSsl>False</EnableSsl>
<Port>${port}</Port>
<SslPort>9898</SslPort>
<UrlBase></UrlBase>
<BindAddress>*</BindAddress>
<SslPort>8787</SslPort>
<EnableSsl>False</EnableSsl>
<LogLevel>Info</LogLevel>
<Branch>develop</Branch>
<LaunchBrowser>False</LaunchBrowser>
<UpdateMechanism>BuiltIn</UpdateMechanism>
<AnalyticsEnabled>False</AnalyticsEnabled>
<SslCertPath></SslCertPath>
<AuthenticationMethod>None</AuthenticationMethod>
<UpdateMechanism>BuiltIn</UpdateMechanism>
<Branch>main</Branch>
<LaunchBrowser>False</LaunchBrowser>
<SslCertHash></SslCertHash>
<ApiKey>${api_key}</ApiKey>
</Config>
EOF
echo "Starting the userland service."
systemctl enable --user --now -q radarr4k
sleep 45
apikey=$(grep -oPm1 "(?<=<ApiKey>)[^<]+" /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'
Expand All @@ -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
;;
Expand Down
85 changes: 53 additions & 32 deletions sonarr4k.sh
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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

Expand All @@ -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

<Config>
<LogLevel>info</LogLevel>
<EnableSsl>False</EnableSsl>
Expand All @@ -51,31 +64,35 @@ function _install() {
<Branch>main</Branch>
<LaunchBrowser>False</LaunchBrowser>
<SslCertHash></SslCertHash>
<ApiKey>${api_key}</ApiKey>
</Config>
EOF
systemctl enable --user --now -q sonarr4k
sleep 45
apikey=$(grep -oPm1 "(?<=<ApiKey>)[^<]+" /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'
Expand All @@ -95,35 +112,39 @@ 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
fi
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
;;
Expand Down