From 5d89277e5c13ff55ab1a202ce0a24e986c04e977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=8B=9C=EA=B3=A8=EC=95=BD=EC=82=AC?= Date: Thu, 11 Sep 2025 08:34:43 +0900 Subject: [PATCH] Fix Tailscale download URLs: Use dynamic version detection MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add GitHub API integration to get latest Tailscale version - Fix broken download URLs by using correct versioned filenames - Add fallback version (1.86.2) if API call fails - Update both English and Korean PowerShell scripts - Resolves download errors in installation process ๐Ÿค– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- farmq-install-en.ps1 | 18 ++++++++++--- farmq-install.ps1 | 62 ++++++++++++++++++++++++++++---------------- 2 files changed, 54 insertions(+), 26 deletions(-) diff --git a/farmq-install-en.ps1 b/farmq-install-en.ps1 index 7c513c9..a4faf9e 100644 --- a/farmq-install-en.ps1 +++ b/farmq-install-en.ps1 @@ -111,12 +111,24 @@ function Install-Tailscale { Write-Info "Installing Tailscale for Windows..." + # Get latest Tailscale version + try { + Write-Status "Getting latest Tailscale version..." + $latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/tailscale/tailscale/releases/latest" -UseBasicParsing + $version = $latestRelease.tag_name.TrimStart('v') + Write-Info "Latest version: $version" + } + catch { + Write-Warning "Failed to get latest version, using fallback" + $version = "1.86.2" + } + # Temporary download path - $tempPath = "$env:TEMP\tailscale-setup.exe" - $downloadUrl = "https://pkgs.tailscale.com/stable/tailscale-setup.exe" + $tempPath = "$env:TEMP\tailscale-setup-$version.exe" + $downloadUrl = "https://pkgs.tailscale.com/stable/tailscale-setup-$version.exe" try { - Write-Status "Downloading Tailscale..." + Write-Status "Downloading Tailscale from: $downloadUrl" Invoke-WebRequest -Uri $downloadUrl -OutFile $tempPath -UseBasicParsing Write-Status "Installing Tailscale... (please wait)" diff --git a/farmq-install.ps1 b/farmq-install.ps1 index 6261ef4..12c9f48 100644 --- a/farmq-install.ps1 +++ b/farmq-install.ps1 @@ -1,7 +1,11 @@ -# ํŒœํ(FARMQ) Headscale Windows ์›ํด๋ฆญ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ -# ์‚ฌ์šฉ๋ฒ•: ๊ด€๋ฆฌ์ž PowerShell์—์„œ ์‹คํ–‰ +# FARMQ Headscale Windows One-Click Installation Script +# Usage: Run in Administrator PowerShell # iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/.../farmq-install.ps1')) +# Set UTF-8 encoding for Korean characters +$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8 +[Console]::OutputEncoding = [Text.Encoding]::UTF8 + param( [switch]$Force, [string]$HeadscaleServer = "https://head.0bin.in", @@ -32,68 +36,68 @@ function Write-Header { function Write-Status { param([string]$Message) Write-Host "" - Write-ColorOutput "๐Ÿ”ง $Message" "Blue" + Write-Host "[*] $Message" -ForegroundColor Blue } function Write-Success { param([string]$Message) Write-Host "" - Write-ColorOutput "โœ… $Message" "Green" + Write-Host "[+] $Message" -ForegroundColor Green } function Write-Error { param([string]$Message) Write-Host "" - Write-ColorOutput "โŒ $Message" "Red" + Write-Host "[!] ERROR: $Message" -ForegroundColor Red } function Write-Warning { param([string]$Message) Write-Host "" - Write-ColorOutput "โš ๏ธ $Message" "Yellow" + Write-Host "[!] WARNING: $Message" -ForegroundColor Yellow } function Write-Info { param([string]$Message) Write-Host "" - Write-ColorOutput "๐Ÿ“‹ $Message" "Cyan" + Write-Host "[i] $Message" -ForegroundColor Cyan } # ================================ # ์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ # ================================ function Test-Requirements { - Write-Status "์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ ์ค‘..." + Write-Status "Checking system requirements..." - # ๊ด€๋ฆฌ์ž ๊ถŒํ•œ ํ™•์ธ + # Check administrator privileges $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent() $principal = New-Object Security.Principal.WindowsPrincipal($currentUser) if (-NOT $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { - Write-Error "์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." - Write-Info "๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์ฃผ์„ธ์š”:" - Write-Info "1. Windows ํ‚ค + X โ†’ 'Windows PowerShell(๊ด€๋ฆฌ์ž)' ํด๋ฆญ" - Write-Info "2. ์Šคํฌ๋ฆฝํŠธ ๋ช…๋ น์–ด ๋‹ค์‹œ ์‹คํ–‰" + Write-Error "This script requires administrator privileges." + Write-Info "Please restart using one of these methods:" + Write-Info "1. Windows Key + X -> 'Windows PowerShell (Admin)'" + Write-Info "2. Run the script command again" Write-Host "" - Read-Host "์•„๋ฌด ํ‚ค๋‚˜ ๋ˆ„๋ฅด์„ธ์š”..." + Read-Host "Press any key to exit..." exit 1 } - # Windows ๋ฒ„์ „ ํ™•์ธ + # Check Windows version $osVersion = [System.Environment]::OSVersion.Version if ($osVersion.Major -lt 10) { - Write-Warning "Windows 10 ์ด์ƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ: Windows $($osVersion.Major).$($osVersion.Minor)" + Write-Warning "Windows 10 or later recommended. Current: Windows $($osVersion.Major).$($osVersion.Minor)" } - # ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ ํ™•์ธ + # Check internet connection try { - Test-Connection "8.8.8.8" -Count 1 -Quiet | Out-Null + Test-NetConnection "8.8.8.8" -Port 53 -InformationLevel Quiet | Out-Null } catch { - Write-Warning "์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”." + Write-Warning "Please check your internet connection." } - Write-Success "์‹œ์Šคํ…œ ์š”๊ตฌ์‚ฌํ•ญ ํ™•์ธ ์™„๋ฃŒ" + Write-Success "System requirements check completed" } # ================================ @@ -113,12 +117,24 @@ function Install-Tailscale { Write-Info "Windows์šฉ Tailscale ์„ค์น˜ ์ค‘..." + # ์ตœ์‹  Tailscale ๋ฒ„์ „ ํ™•์ธ + try { + Write-Status "์ตœ์‹  Tailscale ๋ฒ„์ „ ํ™•์ธ ์ค‘..." + $latestRelease = Invoke-RestMethod -Uri "https://api.github.com/repos/tailscale/tailscale/releases/latest" -UseBasicParsing + $version = $latestRelease.tag_name.TrimStart('v') + Write-Info "์ตœ์‹  ๋ฒ„์ „: $version" + } + catch { + Write-Warning "์ตœ์‹  ๋ฒ„์ „ ํ™•์ธ ์‹คํŒจ, ๊ธฐ๋ณธ ๋ฒ„์ „ ์‚ฌ์šฉ" + $version = "1.86.2" + } + # ์ž„์‹œ ๋‹ค์šด๋กœ๋“œ ๊ฒฝ๋กœ - $tempPath = "$env:TEMP\tailscale-setup.exe" - $downloadUrl = "https://pkgs.tailscale.com/stable/tailscale-setup.exe" + $tempPath = "$env:TEMP\tailscale-setup-$version.exe" + $downloadUrl = "https://pkgs.tailscale.com/stable/tailscale-setup-$version.exe" try { - Write-Status "Tailscale ๋‹ค์šด๋กœ๋“œ ์ค‘..." + Write-Status "Tailscale ๋‹ค์šด๋กœ๋“œ ์ค‘: $downloadUrl" Invoke-WebRequest -Uri $downloadUrl -OutFile $tempPath -UseBasicParsing Write-Status "Tailscale ์„ค์น˜ ์ค‘... (์ž ์‹œ ๊ธฐ๋‹ค๋ ค์ฃผ์„ธ์š”)"