#!/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 ""