Files
pezkuwi-validator-v1.0.0/scripts/windows/install-validator.ps1
T
pezkuwichain 4e93995605 feat: Add Windows PowerShell installer
- Created automated installer for Windows 10+
- Installs as Windows Service (auto-restart)
- Uses NSSM for service management
- Includes system requirements check
- Downloads and extracts binaries automatically
- Generates validator keys
- Updated README with Windows instructions
2025-10-27 21:17:42 +03:00

221 lines
7.2 KiB
PowerShell
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Pezkuwi Validator Installer for Windows
# Usage: iwr -useb https://raw.githubusercontent.com/pezkuwichain/pezkuwi-validator-v1.0.0/main/scripts/windows/install-validator.ps1 | iex
#Requires -RunAsAdministrator
$ErrorActionPreference = "Stop"
Write-Host "🚀 Pezkuwi Validator Installer v1.0.0 (Windows)" -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""
# Configuration
$PEZKUWI_VERSION = "v1.0.0-local-testnet-success"
$GITHUB_REPO = "pezkuwichain/pezkuwi-sdk"
$INSTALL_DIR = "$env:USERPROFILE\.pezkuwi"
$CHAIN_SPEC_URL = "https://raw.githubusercontent.com/$GITHUB_REPO/main/pezkuwi-local-raw.json"
# Functions
function Write-Success {
param($Message)
Write-Host "$Message" -ForegroundColor Green
}
function Write-Error-Custom {
param($Message)
Write-Host "$Message" -ForegroundColor Red
}
function Write-Info {
param($Message)
Write-Host " $Message" -ForegroundColor Yellow
}
function Check-Requirements {
Write-Info "Checking system requirements..."
# Check Windows version
$osVersion = [System.Environment]::OSVersion.Version
if ($osVersion.Major -lt 10) {
Write-Error-Custom "Windows 10 or later required"
exit 1
}
# Check CPU cores
$cpuCores = (Get-WmiObject Win32_Processor).NumberOfLogicalProcessors
if ($cpuCores -lt 2) {
Write-Error-Custom "Minimum 2 CPU cores required (found: $cpuCores)"
exit 1
}
# Check RAM
$totalRAM = [math]::Round((Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1GB)
if ($totalRAM -lt 4) {
Write-Error-Custom "Minimum 4GB RAM required (found: ${totalRAM}GB)"
exit 1
}
Write-Success "System requirements met"
}
function Install-Dependencies {
Write-Info "Checking dependencies..."
# Check if Chocolatey is installed
if (-not (Get-Command choco -ErrorAction SilentlyContinue)) {
Write-Info "Installing Chocolatey..."
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
}
Write-Success "Dependencies ready"
}
function Download-Binaries {
Write-Info "Downloading Pezkuwi binaries..."
New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\bin" | Out-Null
$RELEASE_URL = "https://github.com/$GITHUB_REPO/releases/download/$PEZKUWI_VERSION"
$ARCHIVE_NAME = "pezkuwi-binaries-linux-x86_64.tar.gz"
$TEMP_FILE = "$env:TEMP\$ARCHIVE_NAME"
try {
# Download archive
Write-Info "Downloading from: $RELEASE_URL/$ARCHIVE_NAME"
Invoke-WebRequest -Uri "$RELEASE_URL/$ARCHIVE_NAME" -OutFile $TEMP_FILE -UseBasicParsing
# Extract using tar (available in Windows 10+)
Write-Info "Extracting binaries..."
tar -xzf $TEMP_FILE -C "$INSTALL_DIR\bin\"
# Cleanup
Remove-Item $TEMP_FILE
Write-Success "Binaries downloaded and extracted"
}
catch {
Write-Error-Custom "Failed to download binaries: $_"
Write-Info "Please check if release exists: $RELEASE_URL"
exit 1
}
}
function Download-ChainSpec {
Write-Info "Downloading chain specification..."
New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\config" | Out-Null
try {
Invoke-WebRequest -Uri $CHAIN_SPEC_URL -OutFile "$INSTALL_DIR\config\chain-spec.json" -UseBasicParsing
Write-Success "Chain spec downloaded"
}
catch {
Write-Error-Custom "Failed to download chain spec: $_"
exit 1
}
}
function Generate-Keys {
Write-Info "Generating validator keys..."
New-Item -ItemType Directory -Force -Path "$INSTALL_DIR\keys" | Out-Null
$nodeKeyOutput = & "$INSTALL_DIR\bin\pezkuwi.exe" key generate-node-key --base-path "$INSTALL_DIR\data" --chain "$INSTALL_DIR\config\chain-spec.json" 2>&1
$nodeKeyOutput | Out-File "$INSTALL_DIR\keys\node-id.txt"
$nodeId = Get-Content "$INSTALL_DIR\keys\node-id.txt"
Write-Success "Keys generated"
Write-Info "Your Node ID: $nodeId"
}
function Create-WindowsService {
Write-Info "Creating Windows service..."
$serviceName = "PezkuwiValidator"
$displayName = "Pezkuwi Validator Node"
$description = "Pezkuwi blockchain validator node"
# Remove existing service if present
$existingService = Get-Service -Name $serviceName -ErrorAction SilentlyContinue
if ($existingService) {
Write-Info "Removing existing service..."
Stop-Service -Name $serviceName -Force
sc.exe delete $serviceName
Start-Sleep -Seconds 2
}
# Create batch file to run the validator
$batchFile = "$INSTALL_DIR\start-validator.bat"
@"
@echo off
cd /d "$INSTALL_DIR"
"$INSTALL_DIR\bin\pezkuwi.exe" --chain "$INSTALL_DIR\config\chain-spec.json" --base-path "$INSTALL_DIR\data" --validator --name "Validator-$env:COMPUTERNAME" --port 30333 --rpc-port 9944 --rpc-cors all --rpc-methods=unsafe
"@ | Out-File -FilePath $batchFile -Encoding ASCII
# Create service using NSSM (Non-Sucking Service Manager)
choco install nssm -y --no-progress
nssm install $serviceName "$batchFile"
nssm set $serviceName DisplayName $displayName
nssm set $serviceName Description $description
nssm set $serviceName Start SERVICE_AUTO_START
Write-Success "Windows service created"
}
function Start-Validator {
Write-Info "Starting validator..."
Start-Service -Name "PezkuwiValidator"
Start-Sleep -Seconds 3
$service = Get-Service -Name "PezkuwiValidator"
if ($service.Status -eq "Running") {
Write-Success "Validator started successfully!"
}
else {
Write-Error-Custom "Failed to start validator"
Write-Info "Check logs in Event Viewer"
exit 1
}
}
function Print-Summary {
Write-Host ""
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host "🎉 Installation Complete!" -ForegroundColor Cyan
Write-Host "=============================================" -ForegroundColor Cyan
Write-Host ""
Write-Host "📍 Install Directory: $INSTALL_DIR"
Write-Host "🔑 Node ID: $(Get-Content $INSTALL_DIR\keys\node-id.txt)"
Write-Host ""
Write-Host "📊 Useful Commands:" -ForegroundColor Yellow
Write-Host " • Check status: Get-Service PezkuwiValidator"
Write-Host " • View logs: Get-EventLog -LogName Application -Source PezkuwiValidator -Newest 50"
Write-Host " • Stop node: Stop-Service PezkuwiValidator"
Write-Host " • Restart node: Restart-Service PezkuwiValidator"
Write-Host ""
Write-Host "🌐 RPC Endpoint: http://localhost:9944"
Write-Host "📡 P2P Port: 30333"
Write-Host ""
}
# Main execution
try {
Check-Requirements
Install-Dependencies
Download-Binaries
Download-ChainSpec
Generate-Keys
Create-WindowsService
Start-Validator
Print-Summary
}
catch {
Write-Error-Custom "Installation failed: $_"
exit 1
}