
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 41s
106 lines
3.3 KiB
Bash
Executable File
106 lines
3.3 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 with retries
|
|
RETRY_COUNT=0
|
|
MAX_RETRIES=5
|
|
RETRY_DELAY=10
|
|
|
|
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
|
if docker exec ${CONTAINER_NAME} ${TAILSCALE_UP_CMD}; then
|
|
echo "Successfully connected to Tailscale network!"
|
|
break
|
|
else
|
|
RETRY_COUNT=$((RETRY_COUNT + 1))
|
|
if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
|
|
echo "Connection attempt $RETRY_COUNT failed. Retrying in ${RETRY_DELAY} seconds..."
|
|
sleep $RETRY_DELAY
|
|
else
|
|
echo "Warning: Failed to connect after $MAX_RETRIES attempts."
|
|
echo "You may need to connect manually using:"
|
|
echo " docker exec ${CONTAINER_NAME} tailscale up"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
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"
|