66 lines
1.4 KiB
Bash
66 lines
1.4 KiB
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
set -e
|
||
|
|
|
||
|
|
# ============================
|
||
|
|
# CONFIG
|
||
|
|
# ============================
|
||
|
|
HEADSCALE_URL="https://headscale.rozic-dev.com"
|
||
|
|
TAILSCALE_BIN="tailscale"
|
||
|
|
DEFAULT_HOSTNAME="$(hostname)"
|
||
|
|
|
||
|
|
require_cmd() {
|
||
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
||
|
|
echo "ERROR: Command '$1' not found. Please install it first." >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
require_cmd "$TAILSCALE_BIN"
|
||
|
|
|
||
|
|
if ! command -v sudo >/dev/null 2>&1 && [[ $EUID -ne 0 ]]; then
|
||
|
|
echo "WARNING: 'sudo' not found and you are not root."
|
||
|
|
echo "You must run this script as root for 'tailscale up' to work."
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
AUTHKEY="${1:-}"
|
||
|
|
|
||
|
|
if [[ -z "$AUTHKEY" ]]; then
|
||
|
|
echo -n "Enter Headscale pre-auth key: "
|
||
|
|
read -r AUTHKEY
|
||
|
|
fi
|
||
|
|
|
||
|
|
if [[ -z "$AUTHKEY" ]]; then
|
||
|
|
echo "ERROR: No auth key provided." >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo -n "Hostname to register on Headscale [${DEFAULT_HOSTNAME}]: "
|
||
|
|
read -r CUSTOM_HOSTNAME
|
||
|
|
HOSTNAME_TO_USE="${CUSTOM_HOSTNAME:-$DEFAULT_HOSTNAME}"
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "Connecting this device to Headscale:"
|
||
|
|
echo " Server : ${HEADSCALE_URL}"
|
||
|
|
echo " Host : ${HOSTNAME_TO_USE}"
|
||
|
|
echo
|
||
|
|
|
||
|
|
TS_CMD=(
|
||
|
|
"$TAILSCALE_BIN" up
|
||
|
|
--reset
|
||
|
|
--login-server="${HEADSCALE_URL}"
|
||
|
|
--auth-key="${AUTHKEY}"
|
||
|
|
--hostname="${HOSTNAME_TO_USE}"
|
||
|
|
)
|
||
|
|
|
||
|
|
if [[ $EUID -ne 0 ]]; then
|
||
|
|
echo "Running: sudo ${TS_CMD[*]}"
|
||
|
|
sudo "${TS_CMD[@]}"
|
||
|
|
else
|
||
|
|
echo "Running: ${TS_CMD[*]}"
|
||
|
|
"${TS_CMD[@]}"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo
|
||
|
|
echo "✅ Done! This device should now be visible in Headscale."
|