mirror of
https://gitlab.com/pulsechaincom/prysm-pulse.git
synced 2024-12-22 19:40:37 +00:00
1b012ccfa5
* Remove incorrect x64 error message when showing usage description * Add missing escape characters in usage description The actual environment variable value would be printed without these escape characters. * Add missing quotation marks in usage description * Also test existence of sha and signature files For multiple reason the executable could be downloaded, but not the signature files. Later on the script will error out because these files are lacking. Co-authored-by: Raul Jordan <raul@prysmaticlabs.com>
127 lines
4.8 KiB
PowerShell
127 lines
4.8 KiB
PowerShell
$folderDist = "dist";
|
|
$ProgressPreference = 'SilentlyContinue' # Disable Invoke-WebRequest progress bar, makes it silent and faster.
|
|
|
|
# Complain if invalid arguments were provided.
|
|
if ("beacon-chain", "validator", "slasher" -notcontains $args[0]) {
|
|
Write-Host @"
|
|
Usage: ./prysm.sh1 PROCESS FLAGS.
|
|
|
|
PROCESS can be beacon-chain, validator, or slasher.
|
|
FLAGS are the flags or arguments passed to the PROCESS.
|
|
|
|
Use this script to download the latest Prysm release binaries.
|
|
Downloaded binaries are saved to .\dist
|
|
|
|
To specify a specific release version:
|
|
`$env:USE_PRYSM_VERSION="v1.0.0-beta.3"
|
|
to resume using the latest release:
|
|
Remove-Item env:USE_PRYSM_VERSION
|
|
|
|
To automatically restart crashed processes:
|
|
`$env:PRYSM_AUTORESTART=`$TRUE ; .\prysm.sh1 beacon-chain
|
|
to stop autorestart run:
|
|
Remove-Item env:PRYSM_AUTORESTART
|
|
"@;
|
|
|
|
exit;
|
|
}
|
|
|
|
# 64bit check.
|
|
if (-not [Environment]::Is64BitOperatingSystem) {
|
|
Write-Host "ERROR: prysm is only supported on 64-bit Operating Systems" -ForegroundColor Red;
|
|
exit;
|
|
}
|
|
|
|
# Create directory for us to download our binaries to, if it not yet exists.
|
|
if (-not (Test-Path $folderDist)) {
|
|
New-Item -Path . -Name $folderDist -ItemType "directory";
|
|
}
|
|
|
|
# Determine the latest release version, unless specified by $USE_PRYSM_VERSION.
|
|
if (Test-Path env:USE_PRYSM_VERSION) {
|
|
Write-Host "Detected variable `$env:USE_PRYSM_VERSION=$env:USE_PRYSM_VERSION";
|
|
$version = $env:USE_PRYSM_VERSION;
|
|
}
|
|
else {
|
|
try {
|
|
$response = Invoke-WebRequest -Uri "https://prysmaticlabs.com/releases/latest";
|
|
$version = $response.Content.Trim();
|
|
|
|
Write-Host "Using (latest) prysm version: $version";
|
|
}
|
|
catch {
|
|
Write-Host "ERROR: Failed to get the latest version:" -ForegroundColor Red;
|
|
Write-Host " $($_.Exception.Message)" -ForegroundColor Red;
|
|
exit;
|
|
}
|
|
}
|
|
|
|
# Make sure the binary we want to use is up to date, otherwise download (and possibly verify) it.
|
|
$fileName = "$($args[0])-$version-windows-amd64.exe";
|
|
$folderBin = "$folderDist\$fileName";
|
|
|
|
if ((Test-Path $folderBin) -and (Test-Path "$folderBin.sha256") -and (Test-Path "$folderBin.sig")) {
|
|
Write-Host "$($args[0]) is up to date with version: $version" -ForegroundColor Green;
|
|
}
|
|
else {
|
|
try {
|
|
Write-Host "Downloading $fileName" -ForegroundColor Green;
|
|
|
|
Invoke-WebRequest -Uri "https://prysmaticlabs.com/releases/$fileName" -OutFile "$folderBin";
|
|
Invoke-WebRequest -Uri "https://prysmaticlabs.com/releases/$fileName.sha256" -OutFile "$folderBin.sha256";
|
|
Invoke-WebRequest -Uri "https://prysmaticlabs.com/releases/$fileName.sig" -OutFile "$folderBin.sig";
|
|
|
|
Write-Host "Downloading complete!" -ForegroundColor Green;
|
|
}
|
|
catch {
|
|
Write-Host "ERROR: Failed to get download $fileName`:" -ForegroundColor Red;
|
|
Write-Host " $($_.Exception.Message)" -ForegroundColor Red;
|
|
exit;
|
|
}
|
|
}
|
|
|
|
# GPG not natively available on Windows, external module required.
|
|
Write-Host "WARN GPG verification is not natively available on Windows" -ForegroundColor Yellow;
|
|
Write-Host "WARN Skipping integrity verification of downloaded binary" -ForegroundColor Yellow;
|
|
|
|
# Check SHA256 File Hash before running
|
|
Write-Host "Verifying binary authenticity with SHA256 Hash";
|
|
$hashExpected = (Get-Content -Path "$folderBin.sha256" -Delimiter " ")[0].Trim().ToUpperInvariant();
|
|
$hashActual = (Get-FileHash -Path $folderBin -Algorithm SHA256).Hash.ToUpperInvariant();
|
|
if ($hashExpected -eq $hashActual) {
|
|
Write-Host "SHA256 Hash Match!" -ForegroundColor Green;
|
|
}
|
|
elseif ((Test-Path env:PRYSM_ALLOW_UNVERIFIED_BINARIES) -and $env:PRYSM_ALLOW_UNVERIFIED_BINARIES -eq $TRUE) {
|
|
Write-Host "WARN Failed to verify prysm binary" -ForegroundColor Yellow;
|
|
Write-Host "Detected `$env:PRYSM_ALLOW_UNVERIFIED_BINARIES=`$TRUE";
|
|
Write-Host "Proceeding...";
|
|
}
|
|
else {
|
|
Write-Host "ERROR Failed to verify prysm binary" -ForegroundColor Red;
|
|
Write-Host @"
|
|
Please erase downloads in the
|
|
dist directory and run this script again. Alternatively, you can use a
|
|
a prior version by specifying environment variable `$env:USE_PRYSM_VERSION
|
|
with the specific version, as desired. Example: `$env:USE_PRYSM_VERSION=v1.0.0-alpha.5
|
|
If you must wish to continue running an unverified binary, use:
|
|
`$env:PRYSM_ALLOW_UNVERIFIED_BINARIES=`$TRUE
|
|
"@;
|
|
|
|
exit;
|
|
}
|
|
|
|
# Finally, start the process.
|
|
do {
|
|
Write-Host "Starting: prysm $($args -join ' ')";
|
|
|
|
$argumentList = $args | Select-Object -Skip 1;
|
|
|
|
if ($argumentList.Length -gt 0) {
|
|
$process = Start-Process -FilePath $folderBin -ArgumentList $argumentList -NoNewWindow -PassThru -Wait;
|
|
}
|
|
else {
|
|
$process = Start-Process -FilePath $folderBin -NoNewWindow -PassThru -Wait;
|
|
}
|
|
|
|
$restart = (Test-Path env:PRYSM_AUTORESTART) -and $env:PRYSM_AUTORESTART -eq $TRUE -and $process.ExitCode -ne 0;
|
|
} while ($restart) |