290 lines
9.1 KiB
Bash
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 ""
|
|
|