fix(seedbox): robust Tailscale hostname detection with fallback

- Add get_tailscale_hostname() function with error handling
- Use sed instead of grep -o for better compatibility
- Add fallback to hostname.ts.net if detection fails
- Fix MOTD to use dynamic hostname detection
- Prevent script exit on empty grep result with pipefail
This commit is contained in:
2026-01-02 18:00:53 +00:00
parent eae04f2ecb
commit 5cb9c1cc8a

View File

@@ -46,6 +46,21 @@ generate_password() {
head -c 100 /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 16 || true head -c 100 /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 16 || true
} }
# Get Tailscale FQDN hostname
# Uses tailscale status --json and parses Self.DNSName
get_tailscale_hostname() {
local dns_name
# Try to get DNSName from Self object in JSON
dns_name=$(tailscale status --json 2>/dev/null | sed -n 's/.*"DNSName":"\([^"]*\)".*/\1/p' | head -1 | sed 's/\.$//' || true)
if [[ -z "$dns_name" ]]; then
# Fallback: use hostname + default tailnet domain hint
dns_name="${HOSTNAME}.ts.net"
log_warn "Could not determine Tailscale FQDN, using fallback: $dns_name"
fi
echo "$dns_name"
}
# Configuration variables (can be overridden via environment) # Configuration variables (can be overridden via environment)
HOSTNAME="${SEEDBOX_HOSTNAME:-seedbox}" HOSTNAME="${SEEDBOX_HOSTNAME:-seedbox}"
# NFS shares configuration # NFS shares configuration
@@ -162,7 +177,7 @@ EOF
sudo tailscale serve --bg http://localhost:9091 sudo tailscale serve --bg http://localhost:9091
# Get Tailscale hostname for final message # Get Tailscale hostname for final message
TS_HOSTNAME=$(tailscale status --json | grep -o '"DNSName":"[^"]*' | head -1 | cut -d'"' -f4 | sed 's/\.$//') TS_HOSTNAME=$(get_tailscale_hostname)
log_info "Configuring UFW firewall..." log_info "Configuring UFW firewall..."
sudo ufw --force reset > /dev/null sudo ufw --force reset > /dev/null
@@ -188,11 +203,15 @@ EOF
log_info "Configuring MOTD..." log_info "Configuring MOTD..."
sudo chmod -x /etc/update-motd.d/* 2>/dev/null || true sudo chmod -x /etc/update-motd.d/* 2>/dev/null || true
cat << MOTD | sudo tee /etc/update-motd.d/00-seedbox > /dev/null cat << 'MOTD' | sudo tee /etc/update-motd.d/00-seedbox > /dev/null
#!/bin/bash #!/bin/bash
# Get Tailscale FQDN
TS_FQDN=$(tailscale status --json 2>/dev/null | sed -n 's/.*"DNSName":"\([^"]*\)".*/\1/p' | head -1 | sed 's/\.$//')
[[ -z "$TS_FQDN" ]] && TS_FQDN="$(hostname).ts.net"
echo "" echo ""
echo " ____ _____ _____ ____ ____ _____ __" echo " ____ _____ _____ ____ ____ _____ __"
echo "/ ___|| ____| ____| _ \| __ ) / _ \ \\/ /" echo "/ ___|| ____| ____| _ \| __ ) / _ \ \/ /"
echo "\___ \| _| | _| | | | | _ \| | | \ /" echo "\___ \| _| | _| | | | | _ \| | | \ /"
echo " ___) | |___| |___| |_| | |_) | |_| / \\" echo " ___) | |___| |___| |_| | |_) | |_| / \\"
echo "|____/|_____|_____|____/|____/ \___/_/\_\\" echo "|____/|_____|_____|____/|____/ \___/_/\_\\"
@@ -200,17 +219,17 @@ echo ""
echo "ISO Seedbox Server - Transmission" echo "ISO Seedbox Server - Transmission"
echo "─────────────────────────────────────────" echo "─────────────────────────────────────────"
echo "Access:" echo "Access:"
echo " • WebUI : https://\$(tailscale status --json | grep -o '\"DNSName\":\"[^\"]*' | head -1 | cut -d'\"' -f4 | sed 's/\.\$//')" echo " • WebUI : https://${TS_FQDN}"
echo " • SSH : Tailscale only" echo " • SSH : Tailscale only"
echo " • Seeding : Public port ${PEER_PORT}" echo " • Seeding : Public port 51413"
echo "" echo ""
echo "Storage:" echo "Storage:"
echo " • Downloads : ${NFS_MOUNT_DOWNLOAD}" echo " • Downloads : /mnt/download"
echo " • Media : ${NFS_MOUNT_MEDIA}" echo " • Media : /mnt/media"
echo "" echo ""
echo "Useful commands:" echo "Useful commands:"
echo " cd ~/transmission && docker compose logs -f" echo " cd ~/transmission && docker compose logs -f"
echo " df -h ${NFS_MOUNT_DOWNLOAD} ${NFS_MOUNT_MEDIA}" echo " df -h /mnt/download /mnt/media"
echo "─────────────────────────────────────────" echo "─────────────────────────────────────────"
echo "" echo ""
MOTD MOTD