From 1d4d808d12d83adbaae79360f7ef6bf7afc69a71 Mon Sep 17 00:00:00 2001 From: Ralf-Peter Wolff Date: Mon, 11 May 2026 09:33:55 +0200 Subject: [PATCH] Rewrite: download pre-built binary instead of building from source --- build-windows.ps1 | 130 +++++++++++++--------------------------------- 1 file changed, 36 insertions(+), 94 deletions(-) diff --git a/build-windows.ps1 b/build-windows.ps1 index 24496c0..38d2525 100644 --- a/build-windows.ps1 +++ b/build-windows.ps1 @@ -17,7 +17,7 @@ if (-not $isAdmin) { } Write-Host "============================================================" -Write-Host " upterm Build-Setup (Go from Source)" +Write-Host " upterm Setup (Pre-built Binary)" Write-Host "============================================================" Write-Host "" @@ -41,112 +41,54 @@ function Download-File($url, $dest) { } } -# 1. Go pruefen / als ZIP installieren (kein MSI = kein Exit 1603) -# upterm benoetigt Go >= 1.26 - direkt richtige Version installieren -Write-Host "[1/3] Pruefe Go (benoetigt >= 1.26)..." -$goRoot = "C:\Go" -$goExe = "$goRoot\bin\go.exe" -$goVersion = "1.26.3" +# 1. upterm Binary herunterladen +$version = "v0.24.0" +$tarGz = "C:\Windows\Temp\upterm-windows.tar.gz" +$extractDir = "C:\Windows\Temp\upterm-extract" +$downloadUrl = "https://github.com/owenthereal/upterm/releases/download/$version/upterm_windows_amd64.tar.gz" -$needsInstall = $true -if (Test-Path $goExe) { - $verLine = (& $goExe version 2>&1).ToString() - if ($verLine -match 'go(\d+)\.(\d+)') { - $major = [int]$Matches[1]; $minor = [int]$Matches[2] - if ($major -gt 1 -or ($major -eq 1 -and $minor -ge 26)) { - $needsInstall = $false - Write-Host " OK ($verLine)" - } else { - Write-Host " Go $major.$minor zu alt - aktualisiere auf $goVersion..." - Remove-Item -Recurse -Force $goRoot -ErrorAction SilentlyContinue - } - } +Write-Host "[1/2] Lade upterm $version (Windows amd64)..." +if (-not (Download-File $downloadUrl $tarGz)) { + Read-Host "Enter zum Beenden"; exit 1 } +Write-Host " OK" -if ($needsInstall) { - $goZip = "C:\Windows\Temp\go-windows.zip" - $goUrl = "https://golang.org/dl/go$goVersion.windows-amd64.zip" - Write-Host " Lade go$goVersion (ZIP) herunter..." - if (-not (Download-File $goUrl $goZip)) { +# 2. Entpacken (tar.gz via tar.exe - verfuegbar ab Windows 10 1803 / Server 2019) +# Fallback: 7-Zip oder manuelle Methode +Write-Host "[2/2] Entpacke und installiere..." +if (Test-Path $extractDir) { Remove-Item -Recurse -Force $extractDir } +New-Item -ItemType Directory -Force -Path $extractDir | Out-Null + +$tarExe = "$env:SystemRoot\System32\tar.exe" +if (Test-Path $tarExe) { + & $tarExe -xzf $tarGz -C $extractDir 2>&1 | Out-Null +} else { + # Fallback: 7-Zip + $7zip = "C:\Program Files\7-Zip\7z.exe" + if (Test-Path $7zip) { + & $7zip x $tarGz -o"$extractDir" -y | Out-Null + $innerTar = Get-ChildItem $extractDir -Filter "*.tar" | Select-Object -First 1 + if ($innerTar) { & $7zip x $innerTar.FullName -o"$extractDir" -y | Out-Null } + } else { + Write-Host "FEHLER: Weder tar.exe noch 7-Zip gefunden." + Write-Host " Bitte 7-Zip installieren: https://www.7-zip.org/" Read-Host "Enter zum Beenden"; exit 1 } - Write-Host " Entpacke nach $goRoot ..." - if (Test-Path $goRoot) { Remove-Item -Recurse -Force $goRoot } - Expand-Archive -Path $goZip -DestinationPath "C:\" -Force - Remove-Item $goZip -ErrorAction SilentlyContinue - if (-not (Test-Path $goExe)) { - Write-Host "FEHLER: go.exe nach Entpacken nicht gefunden." - Read-Host "Enter zum Beenden"; exit 1 - } - Write-Host " OK (go$goVersion installiert)" } -# Go in PATH dieser Session -if ($env:PATH -notlike "*$goRoot\bin*") { - $env:PATH = "$env:PATH;$goRoot\bin" -} - -# 2. upterm bauen via Quellcode-ZIP -# (go install erlaubt keine replace-Direktiven in externen Modulen) -Write-Host "[2/3] Baue upterm (go build from source)..." -$env:GOPATH = "$env:USERPROFILE\go" -if ($env:PATH -notlike "*$env:GOPATH\bin*") { - $env:PATH = "$env:PATH;$env:GOPATH\bin" -} -New-Item -ItemType Directory -Force -Path "$env:GOPATH\bin" | Out-Null - -$srcZip = "$env:TEMP\upterm-src.zip" -$srcDir = "$env:TEMP\upterm-src" - -Write-Host " Lade Quellcode (ZIP) von GitHub..." -if (-not (Download-File "https://github.com/owenthereal/upterm/archive/refs/heads/master.zip" $srcZip)) { +$uptermExe = Get-ChildItem $extractDir -Recurse -Filter "upterm.exe" | Select-Object -First 1 +if (-not $uptermExe) { + Write-Host "FEHLER: upterm.exe nicht im Archiv gefunden." Read-Host "Enter zum Beenden"; exit 1 } -if (Test-Path $srcDir) { Remove-Item -Recurse -Force $srcDir } -Expand-Archive -Path $srcZip -DestinationPath $srcDir -Force -$repoDir = (Get-ChildItem $srcDir -Directory | Select-Object -First 1).FullName - -Write-Host " Kompiliere upterm (GOTOOLCHAIN=auto, laedt ggf. neueres Go)..." -# Kurze Temp-Pfade setzen (langer Benutzerpfad kann Windows-Fehler 87 ausloesen) -New-Item -ItemType Directory -Force -Path "C:\GoTemp" | Out-Null -New-Item -ItemType Directory -Force -Path "C:\GoCache" | Out-Null -$env:TEMP = "C:\GoTemp" -$env:TMP = "C:\GoTemp" -$env:GOCACHE = "C:\GoCache" -$env:GOTMPDIR = "C:\GoTemp" -Push-Location $repoDir -$env:GOTOOLCHAIN = "local" -& $goExe build -o "$env:GOPATH\bin\upterm.exe" ./cmd/upterm 2>&1 | ForEach-Object { Write-Host " $_" } -$buildExit = $LASTEXITCODE -Pop-Location -Remove-Item $srcZip, $srcDir -Recurse -Force -ErrorAction SilentlyContinue - -if ($buildExit -ne 0) { - Write-Host "FEHLER: go build fehlgeschlagen." - Read-Host "Enter zum Beenden"; exit 1 -} - -$uptermExe = "$env:USERPROFILE\go\bin\upterm.exe" -if (-not (Test-Path $uptermExe)) { - Write-Host "FEHLER: upterm.exe nicht gefunden nach Build." - Read-Host "Enter zum Beenden"; exit 1 -} -Write-Host " OK ($uptermExe)" - -# 3. Systemweit verfuegbar machen -Write-Host "[3/3] Kopiere upterm.exe nach C:\Windows\System32..." -try { - Copy-Item $uptermExe "C:\Windows\System32\upterm.exe" -Force - Write-Host " OK - upterm steht allen Nutzern zur Verfuegung" -} catch { - Write-Host " Hinweis: Kopieren fehlgeschlagen." - Write-Host " Binary liegt unter: $uptermExe" -} +Copy-Item $uptermExe.FullName "C:\Windows\System32\upterm.exe" -Force +Remove-Item $tarGz, $extractDir -Recurse -Force -ErrorAction SilentlyContinue +Write-Host " OK - upterm $version installiert" Write-Host "" Write-Host "============================================================" -Write-Host " Build abgeschlossen!" +Write-Host " Installation abgeschlossen!" Write-Host "============================================================" Write-Host "" Write-Host " PowerShell NEU STARTEN, dann Session teilen mit:"