jellyfin-media/scripts/setup-hetzner-storage.sh

157 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# Setup Hetzner Storage Box mount on Netcup RS 8000
# Run this script ON the Netcup server after signing up for Hetzner Storage Box
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}Hetzner Storage Box Setup${NC}"
echo "=========================="
echo ""
# Check if running as root
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}Please run as root (sudo)${NC}"
exit 1
fi
# Prompt for Hetzner credentials if not provided via env
if [ -z "$HETZNER_USER" ]; then
read -p "Enter Hetzner Storage Box username (e.g., u123456): " HETZNER_USER
fi
if [ -z "$HETZNER_PASS" ]; then
read -sp "Enter Hetzner Storage Box password: " HETZNER_PASS
echo ""
fi
# Validate input
if [ -z "$HETZNER_USER" ] || [ -z "$HETZNER_PASS" ]; then
echo -e "${RED}Error: Username and password are required${NC}"
exit 1
fi
HETZNER_HOST="${HETZNER_USER}.your-storagebox.de"
MOUNT_POINT="/mnt/hetzner-media"
CREDENTIALS_FILE="/etc/smbcredentials/hetzner"
echo -e "${YELLOW}Configuration:${NC}"
echo " Host: $HETZNER_HOST"
echo " User: $HETZNER_USER"
echo " Mount: $MOUNT_POINT"
echo ""
# Install required packages
echo -e "${GREEN}Installing CIFS utilities...${NC}"
apt-get update -qq
apt-get install -y cifs-utils
# Create mount point
echo -e "${GREEN}Creating mount point...${NC}"
mkdir -p "$MOUNT_POINT"
mkdir -p "$MOUNT_POINT/archive"
mkdir -p "$MOUNT_POINT/movies"
mkdir -p "$MOUNT_POINT/shows"
mkdir -p "$MOUNT_POINT/music"
# Create credentials file
echo -e "${GREEN}Creating credentials file...${NC}"
mkdir -p /etc/smbcredentials
cat > "$CREDENTIALS_FILE" << EOF
username=$HETZNER_USER
password=$HETZNER_PASS
EOF
chmod 600 "$CREDENTIALS_FILE"
# Create systemd mount unit
echo -e "${GREEN}Creating systemd mount unit...${NC}"
cat > /etc/systemd/system/mnt-hetzner\\x2dmedia.mount << EOF
[Unit]
Description=Hetzner Storage Box (Media Archive)
After=network-online.target
Wants=network-online.target
[Mount]
What=//${HETZNER_HOST}/${HETZNER_USER}
Where=${MOUNT_POINT}
Type=cifs
Options=credentials=${CREDENTIALS_FILE},iocharset=utf8,rw,vers=3.0,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,nofail,_netdev
[Install]
WantedBy=multi-user.target
EOF
# Create automount unit for on-demand mounting
cat > /etc/systemd/system/mnt-hetzner\\x2dmedia.automount << EOF
[Unit]
Description=Automount Hetzner Storage Box
After=network-online.target
Wants=network-online.target
[Automount]
Where=${MOUNT_POINT}
TimeoutIdleSec=300
[Install]
WantedBy=multi-user.target
EOF
# Reload systemd and enable mount
echo -e "${GREEN}Enabling mount...${NC}"
systemctl daemon-reload
systemctl enable mnt-hetzner\\x2dmedia.automount
systemctl start mnt-hetzner\\x2dmedia.automount
# Test the mount
echo -e "${GREEN}Testing mount...${NC}"
if mountpoint -q "$MOUNT_POINT" || ls "$MOUNT_POINT" &>/dev/null; then
echo -e "${GREEN}Mount successful!${NC}"
df -h "$MOUNT_POINT"
else
echo -e "${YELLOW}Mount will activate on first access (automount enabled)${NC}"
# Trigger automount by accessing
ls "$MOUNT_POINT" &>/dev/null
sleep 2
if mountpoint -q "$MOUNT_POINT"; then
echo -e "${GREEN}Mount successful!${NC}"
df -h "$MOUNT_POINT"
else
echo -e "${RED}Mount may have failed. Check with: systemctl status mnt-hetzner\\x2dmedia.mount${NC}"
fi
fi
# Create directory structure on Hetzner
echo -e "${GREEN}Creating directory structure on Hetzner...${NC}"
mkdir -p "$MOUNT_POINT/archive/movies"
mkdir -p "$MOUNT_POINT/archive/shows"
mkdir -p "$MOUNT_POINT/archive/music"
# Save config for reference
cat > /opt/media-server/.hetzner-config << EOF
HETZNER_USER=$HETZNER_USER
HETZNER_HOST=$HETZNER_HOST
MOUNT_POINT=$MOUNT_POINT
SETUP_DATE=$(date -Iseconds)
EOF
chmod 600 /opt/media-server/.hetzner-config
echo ""
echo -e "${GREEN}Setup complete!${NC}"
echo ""
echo "Mount point: $MOUNT_POINT"
echo ""
echo "Directory structure:"
echo " $MOUNT_POINT/archive/movies - Archived movies"
echo " $MOUNT_POINT/archive/shows - Archived TV shows"
echo " $MOUNT_POINT/archive/music - Archived music"
echo ""
echo "Next steps:"
echo " 1. Run: docker compose down && docker compose up -d"
echo " 2. Use media-archive.sh to move content to Hetzner"
echo ""