Files
komari-agent/install.ps1

110 lines
4.1 KiB
PowerShell

# Windows PowerShell installation script for Komari Agent
# Logging functions with colors
function Log-Info { Write-Host "[INFO] $($_)" -ForegroundColor Cyan }
function Log-Success{ Write-Host "[SUCCESS] $($_)" -ForegroundColor Green }
function Log-Warning{ Write-Host "[WARNING] $($_)" -ForegroundColor Yellow }
function Log-Error { Write-Host "[ERROR] $($_)" -ForegroundColor Red }
function Log-Step { Write-Host "[STEP] $($_)" -ForegroundColor Magenta }
function Log-Config { Write-Host "[CONFIG] $($_)" -ForegroundColor White }
# Default parameters
$InstallDir = Join-Path $Env:ProgramFiles "Komari"
$ServiceName = "komari-agent"
$GitHubProxy = ""
$KomariArgs = @()
# Parse script arguments
for ($i = 0; $i -lt $args.Count; $i++) {
switch ($args[$i]) {
"--install-dir" { $InstallDir = $args[$i+1]; $i++; continue }
"--install-service-name" { $ServiceName = $args[$i+1]; $i++; continue }
"--install-ghproxy" { $GitHubProxy = $args[$i+1]; $i++; continue }
Default { $KomariArgs += $args[$i] }
}
}
# Ensure running as Administrator
if (-not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()
).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
Log-Error "Please run this script as Administrator."
exit 1
}
# Prepare GitHub proxy display
if ($GitHubProxy -ne '') { $ProxyDisplay = $GitHubProxy } else { $ProxyDisplay = '(direct)' }
# Detect architecture early for constructing binary name
switch ($env:PROCESSOR_ARCHITECTURE) {
'AMD64' { $arch = 'amd64' }
'ARM64' { $arch = 'arm64' }
Default { Log-Error "Unsupported architecture: $env:PROCESSOR_ARCHITECTURE"; exit 1 }
}
Log-Step "Installation configuration:"
Log-Config "Service name: $ServiceName"
Log-Config "Install directory: $InstallDir"
Log-Config "GitHub proxy: $ProxyDisplay"
Log-Config "Agent arguments: $($KomariArgs -join ' ')"
# Paths
$BinaryName = "komari-agent-windows-$arch.exe"
$AgentPath = Join-Path $InstallDir $BinaryName
# Uninstall previous service and binary
function Uninstall-Previous {
Log-Step "Checking for existing service..."
$svc = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue
if ($svc) {
Log-Info "Stopping service $ServiceName..."
Stop-Service $ServiceName -Force
Log-Info "Deleting service $ServiceName..."
sc.exe delete $ServiceName | Out-Null
}
if (Test-Path $AgentPath) {
Log-Info "Removing old binary..."
Remove-Item $AgentPath -Force
}
}
Uninstall-Previous
# Fetch latest release version
$ApiUrl = "https://api.github.com/repos/komari-monitor/komari-agent/releases/latest"
Log-Step "Fetching latest version from GitHub API..."
try {
$release = Invoke-RestMethod -Uri $ApiUrl -UseBasicParsing
$latestVersion = $release.tag_name
} catch {
Log-Error "Failed to fetch latest version: $_"
exit 1
}
Log-Success "Latest version: $latestVersion"
# Construct download URL
$BinaryName = "komari-agent-windows-$arch.exe"
$DownloadUrl = if ($GitHubProxy) { "$GitHubProxy/https://github.com/komari-monitor/komari-agent/releases/download/$latestVersion/$BinaryName" } else { "https://github.com/komari-monitor/komari-agent/releases/download/$latestVersion/$BinaryName" }
# Download and install
Log-Step "Preparing installation directory..."
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
Log-Step "Downloading $BinaryName..."
Log-Info "URL: $DownloadUrl"
try {
Invoke-WebRequest -Uri $DownloadUrl -OutFile $AgentPath -UseBasicParsing
} catch {
Log-Error "Download failed: $_"
exit 1
}
Log-Success "Downloaded and saved to $AgentPath"
# Register and start service
Log-Step "Configuring Windows service..."
$argString = $KomariArgs -join ' '
New-Service -Name $ServiceName -BinaryPathName "`"$AgentPath`" $argString" -DisplayName "Komari Agent Service" -StartupType Automatic
Start-Service $ServiceName
Log-Success "Service $ServiceName installed and started."
Log-Success "Komari Agent installation completed!"
Log-Config "Service name: $ServiceName"
Log-Config "Arguments: $argString"