Files
beStream/scripts/install-arr-services.sh
2025-12-14 12:57:37 +01:00

290 lines
9.1 KiB
Bash

#!/bin/bash
###############################################################################
# beStream - *Arr Services Installation Script for Ubuntu/Debian
#
# This script automates the installation of:
# - Radarr (Movies) - Port 7878
# - Sonarr (TV Shows) - Port 8989
# - Lidarr (Music) - Port 8686
#
# Usage: sudo bash install-arr-services.sh
###############################################################################
set -e # Exit on error
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
ARR_USER="arr"
ARR_GROUP="media"
RADARR_PORT=7878
SONARR_PORT=8989
LIDARR_PORT=8686
# Detect architecture
ARCH=$(dpkg --print-architecture)
case $ARCH in
amd64)
ARCH="x64"
;;
arm64)
ARCH="arm64"
;;
armhf|armv7l)
ARCH="arm"
;;
*)
echo -e "${RED}Unsupported architecture: $ARCH${NC}"
exit 1
;;
esac
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} beStream *Arr Services Installer${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${YELLOW}Detected Architecture: $ARCH${NC}"
echo -e "${YELLOW}Services to install:${NC}"
echo -e " - Radarr (Movies) - Port $RADARR_PORT"
echo -e " - Sonarr (TV Shows) - Port $SONARR_PORT"
echo -e " - Lidarr (Music) - Port $LIDARR_PORT"
echo ""
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}Please run as root (use sudo)${NC}"
exit 1
fi
###############################################################################
# Step 1: Install Prerequisites
###############################################################################
echo -e "${GREEN}[1/8] Installing prerequisites...${NC}"
apt update
apt install -y curl wget sqlite3 mediainfo libchromaprint-tools ufw
###############################################################################
# Step 2: Configure Firewall
###############################################################################
echo -e "${GREEN}[2/8] Configuring firewall...${NC}"
# Check if UFW is active
if ufw status | grep -q "Status: active"; then
echo -e "${YELLOW}UFW is active, opening ports...${NC}"
ufw allow $RADARR_PORT/tcp comment 'Radarr'
ufw allow $SONARR_PORT/tcp comment 'Sonarr'
ufw allow $LIDARR_PORT/tcp comment 'Lidarr'
echo -e "${GREEN}Ports opened: $RADARR_PORT (Radarr), $SONARR_PORT (Sonarr), $LIDARR_PORT (Lidarr)${NC}"
else
echo -e "${YELLOW}UFW is not active. To enable and open ports, run:${NC}"
echo -e " ${BLUE}sudo ufw enable${NC}"
echo -e " ${BLUE}sudo ufw allow $RADARR_PORT/tcp${NC}"
echo -e " ${BLUE}sudo ufw allow $SONARR_PORT/tcp${NC}"
echo -e " ${BLUE}sudo ufw allow $LIDARR_PORT/tcp${NC}"
fi
###############################################################################
# Step 3: Create User and Group
###############################################################################
echo -e "${GREEN}[3/8] Creating user and group...${NC}"
# Create media group if it doesn't exist
if ! getent group $ARR_GROUP > /dev/null 2>&1; then
groupadd $ARR_GROUP
echo -e "${GREEN}Created group: $ARR_GROUP${NC}"
else
echo -e "${YELLOW}Group $ARR_GROUP already exists${NC}"
fi
# Create arr user if it doesn't exist
if ! id "$ARR_USER" &>/dev/null; then
useradd -r -g $ARR_GROUP -s /bin/false -d /var/lib/$ARR_USER $ARR_USER
echo -e "${GREEN}Created user: $ARR_USER${NC}"
else
echo -e "${YELLOW}User $ARR_USER already exists${NC}"
# Ensure user is in media group
usermod -a -G $ARR_GROUP $ARR_USER
fi
###############################################################################
# Step 4: Create Data Directories
###############################################################################
echo -e "${GREEN}[4/8] Creating data directories...${NC}"
mkdir -p /var/lib/radarr
mkdir -p /var/lib/sonarr
mkdir -p /var/lib/lidarr
chown -R $ARR_USER:$ARR_GROUP /var/lib/radarr
chown -R $ARR_USER:$ARR_GROUP /var/lib/sonarr
chown -R $ARR_USER:$ARR_GROUP /var/lib/lidarr
###############################################################################
# Step 5: Install Radarr
###############################################################################
echo -e "${GREEN}[5/8] Installing Radarr...${NC}"
if [ -d "/opt/Radarr" ]; then
echo -e "${YELLOW}Radarr already installed, skipping...${NC}"
else
cd /tmp
wget --content-disposition "http://radarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=$ARCH" -O radarr.tar.gz
tar -xvzf radarr.tar.gz
mv Radarr /opt/
chown -R $ARR_USER:$ARR_GROUP /opt/Radarr
rm -f radarr.tar.gz
echo -e "${GREEN}Radarr installed successfully${NC}"
fi
###############################################################################
# Step 6: Install Sonarr
###############################################################################
echo -e "${GREEN}[6/8] Installing Sonarr...${NC}"
if [ -d "/opt/Sonarr" ]; then
echo -e "${YELLOW}Sonarr already installed, skipping...${NC}"
else
cd /tmp
wget -qO install-sonarr.sh https://raw.githubusercontent.com/Sonarr/Sonarr/develop/distribution/debian/install.sh
bash install-sonarr.sh <<EOF
$ARR_USER
$ARR_GROUP
EOF
rm -f install-sonarr.sh
echo -e "${GREEN}Sonarr installed successfully${NC}"
fi
###############################################################################
# Step 7: Install Lidarr
###############################################################################
echo -e "${GREEN}[7/8] Installing Lidarr...${NC}"
if [ -d "/opt/Lidarr" ]; then
echo -e "${YELLOW}Lidarr already installed, skipping...${NC}"
else
cd /tmp
wget --content-disposition "http://lidarr.servarr.com/v1/update/master/updatefile?os=linux&runtime=netcore&arch=$ARCH" -O lidarr.tar.gz
tar -xvzf lidarr.tar.gz
mv Lidarr /opt/
chown -R $ARR_USER:$ARR_GROUP /opt/Lidarr
rm -f lidarr.tar.gz
echo -e "${GREEN}Lidarr installed successfully${NC}"
fi
###############################################################################
# Step 8: Configure Systemd Services
###############################################################################
echo -e "${GREEN}[8/8] Configuring systemd services...${NC}"
# Radarr systemd service
cat > /etc/systemd/system/radarr.service <<EOF
[Unit]
Description=Radarr Daemon
After=syslog.target network.target
[Service]
User=$ARR_USER
Group=$ARR_GROUP
Type=simple
ExecStart=/opt/Radarr/Radarr -nobrowser -data=/var/lib/radarr/
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# Sonarr systemd service (if not created by install script)
if [ ! -f "/etc/systemd/system/sonarr.service" ]; then
cat > /etc/systemd/system/sonarr.service <<EOF
[Unit]
Description=Sonarr Daemon
After=syslog.target network.target
[Service]
User=$ARR_USER
Group=$ARR_GROUP
Type=simple
ExecStart=/opt/Sonarr/Sonarr -nobrowser -data=/var/lib/sonarr/
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
fi
# Lidarr systemd service
cat > /etc/systemd/system/lidarr.service <<EOF
[Unit]
Description=Lidarr Daemon
After=syslog.target network.target
[Service]
User=$ARR_USER
Group=$ARR_GROUP
Type=simple
ExecStart=/opt/Lidarr/Lidarr -nobrowser -data=/var/lib/lidarr/
TimeoutStopSec=20
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd
systemctl daemon-reload
# Enable and start services
echo -e "${GREEN}Enabling and starting services...${NC}"
systemctl enable --now radarr
systemctl enable --now sonarr
systemctl enable --now lidarr
# Wait a moment for services to start
sleep 3
###############################################################################
# Step 8: Check Service Status
###############################################################################
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE} Installation Complete!${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
# Get server IP
SERVER_IP=$(hostname -I | awk '{print $1}')
echo -e "${GREEN}Service Status:${NC}"
systemctl is-active --quiet radarr && echo -e " ${GREEN}${NC} Radarr: http://$SERVER_IP:$RADARR_PORT" || echo -e " ${RED}${NC} Radarr: Not running"
systemctl is-active --quiet sonarr && echo -e " ${GREEN}${NC} Sonarr: http://$SERVER_IP:$SONARR_PORT" || echo -e " ${RED}${NC} Sonarr: Not running"
systemctl is-active --quiet lidarr && echo -e " ${GREEN}${NC} Lidarr: http://$SERVER_IP:$LIDARR_PORT" || echo -e " ${RED}${NC} Lidarr: Not running"
echo ""
echo -e "${YELLOW}Next Steps:${NC}"
echo " 1. Access each service's web interface using the URLs above"
echo " 2. Complete the initial setup wizard for each service"
echo " 3. Get API keys from Settings → General → Security"
echo " 4. Configure beStream to connect to these services"
echo ""
echo -e "${YELLOW}To check service logs:${NC}"
echo " sudo journalctl -u radarr -f"
echo " sudo journalctl -u sonarr -f"
echo " sudo journalctl -u lidarr -f"
echo ""
echo -e "${YELLOW}To restart services:${NC}"
echo " sudo systemctl restart radarr"
echo " sudo systemctl restart sonarr"
echo " sudo systemctl restart lidarr"
echo ""