Files
dropshell-templates/tailscale/start.sh
j842 2c07950d0e
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 41s
Update tailscale/start.sh
2025-09-08 12:12:29 +12:00

91 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
# shellcheck disable=SC1091
source "${AGENT_PATH}/common.sh"
_check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" "TAILSCALE_AUTH_KEY"
# Check if auth key is set
if [ -z "$TAILSCALE_AUTH_KEY" ] || [ "$TAILSCALE_AUTH_KEY" = "" ]; then
_die "TAILSCALE_AUTH_KEY is not set in config/service.env! Please add your Tailscale auth key."
fi
echo "Starting Tailscale container..."
# Determine if we should use userspace networking
NETWORK_MODE=""
CAP_ADD=""
DEVICE_MOUNT=""
if [ "$TAILSCALE_USERSPACE" = "true" ]; then
echo "Using userspace networking mode..."
TAILSCALE_EXTRA_ARGS="--tun=userspace-networking ${TAILSCALE_EXTRA_ARGS}"
else
# Standard mode with TUN device
CAP_ADD="--cap-add=NET_ADMIN --cap-add=SYS_MODULE"
DEVICE_MOUNT="--device=/dev/net/tun:/dev/net/tun"
fi
# Build hostname argument if provided
HOSTNAME_ARG=""
if [ -n "$TAILSCALE_HOSTNAME" ]; then
HOSTNAME_ARG="--hostname=${TAILSCALE_HOSTNAME}"
fi
# Build the Docker run command
DOCKER_RUN_CMD="docker run -d \
--restart always \
--name ${CONTAINER_NAME} \
--network=host \
-v ${STATE_VOLUME}:/var/lib/tailscale \
-v /dev/net/tun:/dev/net/tun \
${CAP_ADD} \
${DEVICE_MOUNT} \
-e TS_AUTHKEY=${TAILSCALE_AUTH_KEY} \
-e TS_STATE_DIR=/var/lib/tailscale \
-e TS_USERSPACE=${TAILSCALE_USERSPACE} \
${HOSTNAME_ARG} \
${IMAGE_REGISTRY}/${IMAGE_REPO}:${IMAGE_TAG} \
tailscaled"
# Create and start the container
if ! _create_and_start_container "$DOCKER_RUN_CMD" "$CONTAINER_NAME"; then
_die "Failed to start Tailscale container"
fi
# Give it a moment to initialize
sleep 2
# Check if the container is still running (didn't crash immediately)
if ! _is_container_running "$CONTAINER_NAME"; then
echo "Container failed to start. Checking logs..."
docker logs "$CONTAINER_NAME" 2>&1 | tail -20
_die "Tailscale container exited unexpectedly. Check the TAILSCALE_AUTH_KEY and logs above."
fi
# Connect to Tailscale network
echo "Connecting to Tailscale network..."
# Build tailscale up command
TAILSCALE_UP_CMD="tailscale up --authkey=${TAILSCALE_AUTH_KEY}"
if [ -n "$TAILSCALE_HOSTNAME" ]; then
TAILSCALE_UP_CMD="${TAILSCALE_UP_CMD} --hostname=${TAILSCALE_HOSTNAME}"
fi
if [ -n "$TAILSCALE_EXTRA_ARGS" ]; then
TAILSCALE_UP_CMD="${TAILSCALE_UP_CMD} ${TAILSCALE_EXTRA_ARGS}"
fi
# Execute tailscale up command
if ! docker exec ${CONTAINER_NAME} ${TAILSCALE_UP_CMD}; then
echo "Warning: Failed to connect to Tailscale network automatically."
echo "You may need to connect manually using:"
echo " docker exec ${CONTAINER_NAME} tailscale up"
fi
echo ""
echo "Tailscale started successfully!"
echo "Container: ${CONTAINER_NAME}"
echo ""
echo "The device should appear as connected in your Tailscale admin console."
echo "Manage at: https://login.tailscale.com/admin/machines"