echo "=== Detecting operating system and architecture ===" OS="$(uname -s)" ARCH="$(uname -m)" Key="tskey-auth-kbUNF72PtL11CNTRL-ySj3zSK2wS1J8Sgj8LcuS1RuGVzNpXLsH" echo "Detected: $OS / $ARCH" case "${OS}:${ARCH}" in #------------------------------------------------------------------------------# # General server: Ubuntu/Debian x86_64 Linux:x86_64) echo "=== Installation for general Linux server (x86_64) ===" echo "--- Updating package index ---" sudo apt-get update -y || echo "Update failed, proceeding to next step..." echo "--- Installing essential tools (git, ssh, curl, rclone, ffmpeg) ---" sudo apt-get install -y git ssh curl rclone ffmpeg \ || echo "Tool installation failed, proceeding to next step..." echo "--- Installing Tailscale ---" curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up --auth-key="${Key}" ;; #------------------------------------------------------------------------------# # Jetson Nano / Orin: Ubuntu (JetPack) aarch64 Linux:aarch64) echo "=== Installation for Jetson device (Linux aarch64) ===" echo "--- Updating package index ---" sudo apt-get update -y || echo "Update failed, proceeding to next step..." echo "--- Installing essential tools (git, ssh, curl, rclone, ffmpeg) ---" sudo apt-get install -y git ssh curl rclone ffmpeg \ || echo "Tool installation failed, proceeding to next step..." # Add CUDA or JetPack-specific setup here if required # Example: sudo apt-get install -y nvidia-jetpack echo "--- Installing Tailscale ---" curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up --auth-key="${Key}" ;; #------------------------------------------------------------------------------# # Mac with Apple Silicon (arm64) or Intel (x86_64) Darwin:arm64|Darwin:x86_64) echo "=== Installation for macOS ($ARCH) ===" # 1. Install Xcode CLI Tools if not present if ! xcode-select -p &>/dev/null; then echo "--- Installing Xcode Command Line Tools ---" xcode-select --install || echo "Xcode CLI installation cancelled or already installed." else echo "Xcode CLI Tools already installed." fi # 2. Install Homebrew if missing if ! command -v brew &>/dev/null; then echo "--- Installing Homebrew ---" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" if [ "$ARCH" = "arm64" ]; then echo 'export PATH="/opt/homebrew/bin:$PATH"' >> "${HOME}/.zprofile" echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> "${HOME}/.zprofile" eval "$(/opt/homebrew/bin/brew shellenv)" else echo 'export PATH="/usr/local/bin:$PATH"' >> "${HOME}/.zprofile" echo 'eval "$(/usr/local/bin/brew shellenv)"' >> "${HOME}/.zprofile" eval "$(/usr/local/bin/brew shellenv)" fi else echo "Homebrew already installed, loading environment..." if [ "$ARCH" = "arm64" ]; then eval "$(/opt/homebrew/bin/brew shellenv)" else eval "$(/usr/local/bin/brew shellenv)" fi fi # 3. Install Go echo "--- Installing Go ---" brew install go # 4. Setup Go environment if ! grep -q 'GOPATH=' "${HOME}/.zprofile"; then { echo '' echo 'export GOPATH="${HOME}/go"' if [ "$ARCH" = "arm64" ]; then echo 'export PATH="$GOPATH/bin:/opt/homebrew/bin:$PATH"' else echo 'export PATH="$GOPATH/bin:/usr/local/bin:$PATH"' fi } >> "${HOME}/.zprofile" fi source "${HOME}/.zprofile" # 5. Install Tailscale CLI and daemon echo "--- Installing Tailscale CLI and daemon via go install ---" go install tailscale.com/cmd/tailscale{,d}@v1.38.2 || echo "Failed to install Tailscale via go install, proceeding to next step..." # 6. Create launch daemon plist for auto-start (dynamically substitute full path) echo "--- Creating launch daemon plist for tailscaled ---" USER_HOME=$(eval echo "~$USER") TAILSCALED_PATH="$USER_HOME/go/bin/tailscaled" PLIST_PATH="/Library/LaunchDaemons/com.tailscale.tailscaled.plist" # Set correct PATH for launchd based on architecture if [ "$ARCH" = "arm64" ]; then LAUNCHD_PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" else LAUNCHD_PATH="/usr/local/bin:/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" fi sudo tee "$PLIST_PATH" >/dev/null < Label com.tailscale.tailscaled ProgramArguments $TAILSCALED_PATH RunAtLoad KeepAlive EnvironmentVariables PATH $LAUNCHD_PATH EOF echo "--- Setting correct permissions for launch daemon ---" sudo chown root:wheel "$PLIST_PATH" sudo chmod 644 "$PLIST_PATH" echo "--- Loading Tailscale launch daemon ---" sudo launchctl bootstrap system "$PLIST_PATH" # 7. Start Tailscale echo "--- Starting Tailscale ---" sudo "$USER_HOME/go/bin/tailscale" up ;; #------------------------------------------------------------------------------# *) echo "Unsupported OS or architecture: $OS / $ARCH" exit 1 ;; esac echo "=== Installation completed successfully ==="