157 lines
4.2 KiB
Bash
Executable File
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 ""
|