97 lines
3.0 KiB
Bash
97 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# SnarfNet Gaming PC Bootstrap Script
|
|
# MAC: bc:24:11:67:16:cd | IP: 140.44.44.80 (Compute / Game VLAN)
|
|
# ==============================================================================
|
|
set -euo pipefail
|
|
|
|
echo "======================================================="
|
|
echo "🌲 Bootstrapping SnarfNet Dedicated Game Server Host"
|
|
echo "======================================================="
|
|
|
|
# 1. System Updates & Essential Tools
|
|
echo ">>> Installing prerequisites and system tools..."
|
|
apt-get update && apt-get install -y \
|
|
curl wget git jq ufw nfs-common ethtool net-tools \
|
|
python3 python3-yaml python3-pip apt-transport-https \
|
|
ca-certificates gnupg lsb-release
|
|
|
|
# 2. Configure Wake-on-LAN (Persistent via systemd)
|
|
echo ">>> Configuring Wake-on-LAN for primary interface..."
|
|
NIC=$(ip route show default | awk '{print $5}' | head -n1)
|
|
ethtool -s "$NIC" wol g || true
|
|
|
|
cat <<EOF > /etc/systemd/system/wol.service
|
|
[Unit]
|
|
Description=Enable Wake-on-LAN on $NIC
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
ExecStart=/sbin/ethtool -s $NIC wol g
|
|
|
|
[Install]
|
|
WantedBy=basic.target
|
|
EOF
|
|
systemctl daemon-reload
|
|
systemctl enable wol.service
|
|
|
|
# 3. Mount Synology NAS Game Backup Share
|
|
echo ">>> Configuring Synology NAS NFS Mount (14.10.10.71:/volume1/docker/game-backups)..."
|
|
mkdir -p /mnt/nas/game-backups
|
|
if ! grep -qs '/mnt/nas/game-backups' /etc/fstab; then
|
|
echo "14.10.10.71:/volume1/docker/game-backups /mnt/nas/game-backups nfs rw,hard,intr,nolock,timeo=14 0 0" >> /etc/fstab
|
|
fi
|
|
mount -a || true
|
|
|
|
# 4. Install Docker & Compose (if not present)
|
|
if ! command -v docker &> /dev/null; then
|
|
echo ">>> Installing Docker Engine..."
|
|
curl -fsSL https://get.docker.com | sh
|
|
systemctl enable docker
|
|
systemctl start docker
|
|
fi
|
|
|
|
# 5. Prepare Game Directory Structure
|
|
echo ">>> Creating game server storage paths..."
|
|
mkdir -p /opt/game-servers/{enshrouded,fs25,stationeers,valheim,vrising}/{savegame,saves,worlds,data}
|
|
chmod -R 775 /opt/game-servers
|
|
|
|
# 6. Setup Seed Manager Service & Daily Cron
|
|
echo ">>> Installing SnarfNet Seed Reconciler and Backup Timer..."
|
|
cat <<EOF > /etc/systemd/system/gameseed-backup.service
|
|
[Unit]
|
|
Description=SnarfNet Declarative Game Server Save Backup
|
|
After=network.target docker.service
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
WorkingDirectory=/opt/snarfnet-game-seeds
|
|
ExecStart=/usr/bin/python3 /opt/snarfnet-game-seeds/core/manager.py backup
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
|
|
cat <<EOF > /etc/systemd/system/gameseed-backup.timer
|
|
[Unit]
|
|
Description=Nightly Game Save Backup Timer (04:00 AM)
|
|
|
|
[Timer]
|
|
OnCalendar=*-*-* 04:00:00
|
|
Persistent=true
|
|
|
|
[Install]
|
|
Timers.target
|
|
EOF
|
|
|
|
systemctl daemon-reload
|
|
systemctl enable gameseed-backup.timer
|
|
systemctl start gameseed-backup.timer
|
|
|
|
echo "======================================================="
|
|
echo "✓ Host bootstrap complete!"
|
|
echo "Run: python3 /opt/snarfnet-game-seeds/core/manager.py compose && docker compose up -d"
|
|
echo "======================================================="
|
|
|