зеркало из https://github.com/microsoft/msquic.git
597 строки
25 KiB
PowerShell
597 строки
25 KiB
PowerShell
<#
|
|
|
|
.SYNOPSIS
|
|
This script installs all necessary dependencies on the machine, depending
|
|
on the provided configuration.
|
|
|
|
.PARAMETER Tls
|
|
The TLS library in use.
|
|
|
|
.PARAMETER Force
|
|
Overwrite and force installation of all dependencies.
|
|
|
|
.PARAMETER ForKernel
|
|
Indicates build is for kernel mode.
|
|
|
|
.PARAMETER InstallTestCertificates
|
|
Generate test certificates. Only supported on Windows.
|
|
|
|
.PARAMETER InstallSigningCertificates
|
|
Generate a code signing certificate for kernel driver tests.
|
|
|
|
.EXAMPLE
|
|
prepare-machine.ps1
|
|
|
|
.EXAMPLE
|
|
prepare-machine.ps1 -ForBuild
|
|
|
|
.EXAMPLE
|
|
prepare-machine.ps1 -ForTest
|
|
|
|
#>
|
|
|
|
param (
|
|
[Parameter(Mandatory = $false)]
|
|
[string]$Tls = "",
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$Force,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$ForContainerBuild,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$ForBuild,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$ForTest,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$ForKernel,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallSigningCertificates,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallTestCertificates,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallDuoNic,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallCodeCoverage,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallNasm,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallJom,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallPerl,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$UseXdp,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$ForceXdpInstall,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallArm64Toolchain,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallXdpDriver,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$UninstallXdp,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallClog2Text,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$DisableTest,
|
|
|
|
[Parameter(Mandatory = $false)]
|
|
[switch]$InstallCoreNetCiDeps
|
|
)
|
|
|
|
# Admin is required because a lot of things are installed to the local machine
|
|
# in the script.
|
|
#Requires -RunAsAdministrator
|
|
|
|
Set-StrictMode -Version 'Latest'
|
|
$PSDefaultParameterValues['*:ErrorAction'] = 'Stop'
|
|
$ProgressPreference = 'SilentlyContinue'
|
|
|
|
$IsUbuntu2404 = $false
|
|
if ($IsLinux) {
|
|
$IsUbuntu2404 = (Get-Content -Path /etc/os-release | Select-String -Pattern "24.04") -ne $null
|
|
if ($UseXdp -and !$IsUbuntu2404 -and !$ForceXdpInstall) {
|
|
Write-Host "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! WARN !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
Write-Host "Linux XDP installs dependencies from Ubuntu 24.04 packages, which should affect your environment"
|
|
Write-Host "You need to understand the impact of this on your environment before proceeding"
|
|
$userInput = Read-Host "Type 'YES' to proceed"
|
|
if ($userInput -ne 'YES') {
|
|
Write-Output "User did not type YES. Exiting script."
|
|
exit
|
|
}
|
|
}
|
|
}
|
|
|
|
$PrepConfig = & (Join-Path $PSScriptRoot get-buildconfig.ps1) -Tls $Tls
|
|
$Tls = $PrepConfig.Tls
|
|
|
|
if ($PSVersionTable.PSVersion.Major -lt 7) {
|
|
# This script requires PowerShell core (mostly for xplat stuff).
|
|
Write-Error ("`nPowerShell v7.x or greater is needed for this script to work. " +
|
|
"Please visit https://github.com/microsoft/msquic/blob/main/docs/BUILD.md#powershell-usage")
|
|
}
|
|
|
|
if (!$ForContainerBuild -and !$ForBuild -and !$ForTest -and !$InstallXdpDriver -and !$UninstallXdp) {
|
|
# When no args are passed, assume we want to build and test everything
|
|
# locally (i.e. a dev environment). Set Tls to OpenSSL to make sure
|
|
# everything is available.
|
|
Write-Host "No arguments passed, defaulting -ForBuild and -ForTest"
|
|
$ForBuild = $true
|
|
$ForTest = $true
|
|
}
|
|
|
|
if ($ForBuild) {
|
|
# When configured for building, make sure we have all possible dependencies
|
|
# enabled for any possible build.
|
|
$InstallNasm = $true
|
|
$InstallJom = $true
|
|
$InstallCoreNetCiDeps = $true; # For kernel signing certs
|
|
}
|
|
|
|
if ($ForTest) {
|
|
# When configured for testing, make sure we have all possible dependencies
|
|
# enabled for any possible test.
|
|
$InstallTestCertificates = $true
|
|
$InstallClog2Text = $true
|
|
|
|
# Since installing signing certs also checks whether test signing is enabled, which most
|
|
# likely will fail on a devbox, do it only when we need to test kernel drivers so that
|
|
# local testing setup won't be blocked by test signing not enabled.
|
|
if ($ForKernel) {
|
|
$InstallSigningCertificates = $true;
|
|
}
|
|
|
|
if ($UseXdp) {
|
|
$InstallXdpDriver = $true;
|
|
$InstallDuoNic = $true;
|
|
}
|
|
|
|
#$InstallCodeCoverage = $true # Ideally we'd enable this by default, but it
|
|
# hangs sometimes, so we only want to install
|
|
# for jobs that absoultely need it.
|
|
}
|
|
|
|
if ($InstallXdpDriver) {
|
|
$InstallSigningCertificates = $true;
|
|
}
|
|
|
|
if ($InstallDuoNic) {
|
|
$InstallSigningCertificates = $true;
|
|
}
|
|
|
|
if ($InstallSigningCertificates) {
|
|
# Signing certs need the CoreNet-CI dependencies.
|
|
$InstallCoreNetCiDeps = $true;
|
|
}
|
|
|
|
# Root directory of the project.
|
|
$RootDir = Split-Path $PSScriptRoot -Parent
|
|
$ArtifactsPath = Join-Path $RootDir "artifacts"
|
|
if (!(Test-Path $ArtifactsPath)) { mkdir $ArtifactsPath | Out-Null }
|
|
|
|
# Directory for the corenet CI install.
|
|
$CoreNetCiPath = Join-Path $ArtifactsPath "corenet-ci-main"
|
|
$SetupPath = Join-Path $CoreNetCiPath "vm-setup"
|
|
|
|
# Generic, default password for test certificates.
|
|
$PfxPassword = ConvertTo-SecureString -String "placeholder" -Force -AsPlainText
|
|
|
|
# Downloads and caches the latest version of the corenet-ci-main repo.
|
|
function Download-CoreNet-Deps {
|
|
if (!$IsWindows) { return } # Windows only
|
|
# Download and extract https://github.com/microsoft/corenet-ci.
|
|
if ($Force) { rm -Force -Recurse $CoreNetCiPath -ErrorAction Ignore }
|
|
if (!(Test-Path $CoreNetCiPath)) {
|
|
Write-Host "Downloading CoreNet-CI"
|
|
$ZipPath = Join-Path $ArtifactsPath "corenet-ci.zip"
|
|
Invoke-WebRequest -Uri "https://github.com/microsoft/corenet-ci/archive/refs/heads/main.zip" -OutFile $ZipPath
|
|
Expand-Archive -Path $ZipPath -DestinationPath $ArtifactsPath -Force
|
|
Remove-Item -Path $ZipPath
|
|
}
|
|
}
|
|
|
|
# Installs the certs downloaded via Download-CoreNet-Deps and used for signing
|
|
# our test drivers.
|
|
function Install-SigningCertificates {
|
|
if (!$IsWindows) { return } # Windows only
|
|
|
|
# Check to see if test signing is enabled.
|
|
$HasTestSigning = $false
|
|
try { $HasTestSigning = ("$(bcdedit)" | Select-String -Pattern "testsigning\s+Yes").Matches.Success } catch { }
|
|
if (!$HasTestSigning) { Write-Error "Test Signing Not Enabled!" }
|
|
|
|
Write-Host "Installing driver signing certificates"
|
|
try {
|
|
CertUtil.exe -addstore Root "$SetupPath\CoreNetSignRoot.cer" 2>&1 | Out-Null
|
|
CertUtil.exe -addstore TrustedPublisher "$SetupPath\CoreNetSignRoot.cer" 2>&1 | Out-Null
|
|
CertUtil.exe -addstore Root "$SetupPath\testroot-sha2.cer" 2>&1 | Out-Null # For duonic
|
|
} catch {
|
|
Write-Host "WARNING: Exception encountered while installing signing certs. Drivers may not start!"
|
|
}
|
|
}
|
|
|
|
# Installs the XDP driver (for testing).
|
|
# NB: XDP can be uninstalled via Uninstall-Xdp
|
|
function Install-Xdp-Driver {
|
|
if (!$IsWindows) { return } # Windows only
|
|
Write-Host "Downloading XDP msi"
|
|
$MsiPath = Join-Path $ArtifactsPath "xdp.msi"
|
|
Invoke-WebRequest -Uri (Get-Content (Join-Path $PSScriptRoot "xdp.json") | ConvertFrom-Json).installer -OutFile $MsiPath
|
|
Write-Host "Installing XDP driver"
|
|
msiexec.exe /i $MsiPath /quiet | Out-Null
|
|
}
|
|
|
|
# Completely removes the XDP driver and SDK.
|
|
function Uninstall-Xdp {
|
|
if (!$IsWindows) { return } # Windows only
|
|
$MsiPath = Join-Path $ArtifactsPath "xdp.msi"
|
|
if (Test-Path $MsiPath) {
|
|
Write-Host "Uninstalling XDP driver"
|
|
try { msiexec.exe /x $MsiPath /quiet | Out-Null } catch {}
|
|
}
|
|
}
|
|
|
|
# Installs DuoNic from the CoreNet-CI repo.
|
|
function Install-DuoNic {
|
|
# Install the DuoNic driver.
|
|
if ($IsWindows) {
|
|
Write-Host "Installing DuoNic driver"
|
|
$DuoNicPath = Join-Path $SetupPath duonic
|
|
$DuoNicScript = (Join-Path $DuoNicPath duonic.ps1)
|
|
if (!(Test-Path $DuoNicScript)) { Write-Error "Missing file: $DuoNicScript" }
|
|
Invoke-Expression "cmd /c `"pushd $DuoNicPath && pwsh duonic.ps1 -Install`""
|
|
} elseif ($IsLinux) {
|
|
Write-Host "Creating DuoNic endpoints"
|
|
$DuoNicScript = Join-Path $PSScriptRoot "duonic.sh"
|
|
Invoke-Expression "sudo bash $DuoNicScript install"
|
|
}
|
|
}
|
|
|
|
function Update-Path($NewPath) {
|
|
Write-Host "Updating PATH"
|
|
$CurrentSystemPath = [Environment]::GetEnvironmentVariable("PATH", [System.EnvironmentVariableTarget]::Machine)
|
|
$CurrentSystemPath = "$CurrentSystemPath;$NewPath"
|
|
$env:PATH = "${env:PATH};$NewPath"
|
|
[Environment]::SetEnvironmentVariable("PATH", $CurrentSystemPath, [System.EnvironmentVariableTarget]::Machine)
|
|
Write-Host "##vso[task.setvariable variable=PATH;]${env:PATH}"
|
|
Write-Host "PATH has been updated. You'll need to restart your terminal for this to take affect."
|
|
}
|
|
|
|
# Installs NASM from the public release.
|
|
function Install-NASM {
|
|
if (!$IsWindows) { return } # Windows only
|
|
$NasmVersion = "2.16.01"
|
|
$NasmPath = Join-Path $env:Programfiles "nasm-$NasmVersion"
|
|
$NasmExe = Join-Path $NasmPath "nasm.exe"
|
|
if ($Force) { rm -Force -Recurse $NasmPath -ErrorAction Ignore }
|
|
if (!(Test-Path $NasmExe) -and $env:GITHUB_PATH -eq $null) {
|
|
Write-Host "Downloading NASM"
|
|
$NasmArch = "win64"
|
|
if (![System.Environment]::Is64BitOperatingSystem) { $NasmArch = "win32" }
|
|
try {
|
|
Invoke-WebRequest -Uri "https://www.nasm.us/pub/nasm/releasebuilds/$NasmVersion/win64/nasm-$NasmVersion-$NasmArch.zip" -OutFile "$ArtifactsPath\nasm.zip"
|
|
} catch {
|
|
# Mirror fallback
|
|
Invoke-WebRequest -Uri "https://fossies.org/windows/misc/nasm-$NasmVersion-$NasmArch.zip" -OutFile "$ArtifactsPath\nasm.zip"
|
|
}
|
|
|
|
Write-Host "Extracting/installing NASM"
|
|
Expand-Archive -Path "$ArtifactsPath\nasm.zip" -DestinationPath $env:Programfiles -Force
|
|
Remove-Item -Path "$ArtifactsPath\nasm.zip"
|
|
Update-Path $NasmPath
|
|
}
|
|
}
|
|
|
|
# Installs JOM from the public release.
|
|
function Install-JOM {
|
|
if (!$IsWindows) { return } # Windows only
|
|
$JomVersion = "1_1_3"
|
|
$JomPath = Join-Path $env:Programfiles "jom_$JomVersion"
|
|
$JomExe = Join-Path $JomPath "jom.exe"
|
|
|
|
if (!(Test-Path $JomExe) -and $env:GITHUB_PATH -eq $null) {
|
|
Write-Host "Downloading JOM"
|
|
try {
|
|
Invoke-WebRequest -Uri "https://qt.mirror.constant.com/official_releases/jom/jom_$JomVersion.zip" -OutFile "$ArtifactsPath\jom.zip"
|
|
} catch {
|
|
# Mirror fallback
|
|
Invoke-WebRequest -Uri "https://mirrors.ocf.berkeley.edu/qt/official_releases/jom/jom_$JomVersion.zip" -OutFile "$ArtifactsPath\jom.zip"
|
|
}
|
|
|
|
Write-Host "Extracting/installing JOM"
|
|
New-Item -Path $JomPath -ItemType Directory -Force
|
|
Expand-Archive -Path "$ArtifactsPath\jom.zip" -DestinationPath $JomPath -Force
|
|
Remove-Item -Path "$ArtifactsPath\jom.zip"
|
|
Update-Path $JomPath
|
|
}
|
|
}
|
|
|
|
# Installs OpenCppCoverage from the public release.
|
|
function Install-OpenCppCoverage {
|
|
if (!$IsWindows) { return } # Windows only
|
|
if (!(Test-Path "C:\Program Files\OpenCppCoverage\OpenCppCoverage.exe")) {
|
|
# Download the installer.
|
|
$Installer = $null
|
|
if ([System.Environment]::Is64BitOperatingSystem) {
|
|
$Installer = "OpenCppCoverageSetup-x64-0.9.9.0.exe"
|
|
} else {
|
|
$Installer = "OpenCppCoverageSetup-x86-0.9.9.0.exe"
|
|
}
|
|
$ExeFile = Join-Path $Env:TEMP $Installer
|
|
Write-Host "Downloading $Installer"
|
|
Invoke-WebRequest -Uri "https://github.com/OpenCppCoverage/OpenCppCoverage/releases/download/release-0.9.9.0/$($Installer)" -OutFile $ExeFile
|
|
|
|
# Start the installer and wait for it to finish.
|
|
Write-Host "Installing $Installer"
|
|
Start-Process $ExeFile -Wait -ArgumentList {"/silent"} -NoNewWindow
|
|
Remove-Item -Path $ExeFile
|
|
}
|
|
}
|
|
|
|
# Installs StrawberryPerl on Windows via Winget.
|
|
function Install-Perl {
|
|
if (!$IsWindows) { return } # Windows only
|
|
Write-Host "Installing StrawberryPerl via winget..."
|
|
winget install StrawberryPerl.StrawberryPerl
|
|
}
|
|
|
|
# Checks the OS version number to see if it's recent enough (> 2019) to support
|
|
# the necessary features for creating and installing the test certificates.
|
|
function Win-SupportsCerts {
|
|
$ver = [environment]::OSVersion.Version
|
|
if ($ver.Build -lt 20000) { return $false }
|
|
return $true
|
|
}
|
|
|
|
# Creates and installs certificates used for testing.
|
|
function Install-TestCertificates {
|
|
if (!$IsWindows -or !(Win-SupportsCerts)) { return } # Windows only
|
|
$DnsNames = $env:computername,"localhost","127.0.0.1","::1","192.168.1.11","192.168.1.12","fc00::1:11","fc00::1:12"
|
|
$NewRoot = $false
|
|
Write-Debug "Searching for MsQuicTestRoot certificate..."
|
|
$RootCert = Get-ChildItem -path Cert:\LocalMachine\Root\* -Recurse | Where-Object {$_.Subject -eq "CN=MsQuicTestRoot"}
|
|
if (!$RootCert) {
|
|
Write-Host "MsQuicTestRoot not found! Creating new MsQuicTestRoot certificate..."
|
|
$RootCert = New-SelfSignedCertificate -Subject "CN=MsQuicTestRoot" -FriendlyName MsQuicTestRoot -KeyUsageProperty Sign -KeyUsage CertSign,DigitalSignature -CertStoreLocation cert:\CurrentUser\My -HashAlgorithm SHA256 -Provider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable -KeyAlgorithm ECDSA_nistP521 -CurveExport CurveName -NotAfter(Get-Date).AddYears(5) -TextExtension @("2.5.29.19 = {text}ca=1&pathlength=0") -Type Custom
|
|
$TempRootPath = Join-Path $Env:TEMP "MsQuicTestRoot.cer"
|
|
Export-Certificate -Type CERT -Cert $RootCert -FilePath $TempRootPath
|
|
CertUtil.exe -addstore Root $TempRootPath 2>&1 | Out-Null
|
|
Remove-Item $TempRootPath
|
|
$NewRoot = $true
|
|
Write-Host "New MsQuicTestRoot certificate installed!"
|
|
} else {
|
|
Write-Debug "Found existing MsQuicTestRoot certificate!"
|
|
}
|
|
|
|
Write-Debug "Searching for MsQuicTestServer certificate..."
|
|
$ServerCert = Get-ChildItem -path Cert:\LocalMachine\My\* -Recurse | Where-Object {$_.Subject -eq "CN=MsQuicTestServer"}
|
|
if (!$ServerCert) {
|
|
Write-Host "MsQuicTestServer not found! Creating new MsQuicTestServer certificate..."
|
|
$ServerCert = New-SelfSignedCertificate -Subject "CN=MsQuicTestServer" -DnsName $DnsNames -FriendlyName MsQuicTestServer -KeyUsageProperty Sign -KeyUsage DigitalSignature -CertStoreLocation cert:\CurrentUser\My -HashAlgorithm SHA256 -Provider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable -KeyAlgorithm ECDSA_nistP256 -CurveExport CurveName -NotAfter(Get-Date).AddYears(5) -TextExtension @("2.5.29.19 = {text}","2.5.29.37 = {text}1.3.6.1.5.5.7.3.1") -Signer $RootCert
|
|
$TempServerPath = Join-Path $Env:TEMP "MsQuicTestServerCert.pfx"
|
|
Export-PfxCertificate -Cert $ServerCert -Password $PfxPassword -FilePath $TempServerPath
|
|
Import-PfxCertificate -FilePath $TempServerPath -Password $PfxPassword -Exportable -CertStoreLocation Cert:\LocalMachine\My
|
|
Remove-Item $TempServerPath
|
|
Write-Host "New MsQuicTestServer certificate installed!"
|
|
} else {
|
|
Write-Debug "Found existing MsQuicTestServer certificate!"
|
|
}
|
|
|
|
Write-Debug "Searching for MsQuicTestExpiredServer certificate..."
|
|
$ExpiredServerCert = Get-ChildItem -path Cert:\LocalMachine\My\* -Recurse | Where-Object {$_.Subject -eq "CN=MsQuicTestExpiredServer"}
|
|
if (!$ExpiredServerCert) {
|
|
Write-Host "MsQuicTestExpiredServer not found! Creating new MsQuicTestExpiredServer certificate..."
|
|
$ExpiredServerCert = New-SelfSignedCertificate -Subject "CN=MsQuicTestExpiredServer" -DnsName $DnsNames -FriendlyName MsQuicTestExpiredServer -KeyUsageProperty Sign -KeyUsage DigitalSignature -CertStoreLocation cert:\CurrentUser\My -HashAlgorithm SHA256 -Provider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable -KeyAlgorithm ECDSA_nistP256 -CurveExport CurveName -NotBefore (Get-Date).AddYears(-2) -NotAfter(Get-Date).AddYears(-1) -TextExtension @("2.5.29.19 = {text}","2.5.29.37 = {text}1.3.6.1.5.5.7.3.1") -Signer $RootCert
|
|
$TempExpiredServerPath = Join-Path $Env:TEMP "MsQuicTestExpiredServerCert.pfx"
|
|
Export-PfxCertificate -Cert $ExpiredServerCert -Password $PfxPassword -FilePath $TempExpiredServerPath
|
|
Import-PfxCertificate -FilePath $TempExpiredServerPath -Password $PfxPassword -Exportable -CertStoreLocation Cert:\LocalMachine\My
|
|
Remove-Item $TempExpiredServerPath
|
|
Write-Host "New MsQuicTestExpiredServer certificate installed!"
|
|
} else {
|
|
Write-Debug "Found existing MsQuicTestExpiredServer certificate!"
|
|
}
|
|
|
|
Write-Debug "Searching for MsQuicTestClient certificate..."
|
|
$ClientCert = Get-ChildItem -path Cert:\LocalMachine\My\* -Recurse | Where-Object {$_.Subject -eq "CN=MsQuicTestClient"}
|
|
if (!$ClientCert) {
|
|
Write-Host "MsQuicTestClient not found! Creating new MsQuicTestClient certificate..."
|
|
$ClientCert = New-SelfSignedCertificate -Subject "CN=MsQuicTestClient" -FriendlyName MsQuicTestClient -KeyUsageProperty Sign -KeyUsage DigitalSignature -CertStoreLocation cert:\CurrentUser\My -HashAlgorithm SHA256 -Provider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable -KeyAlgorithm ECDSA_nistP256 -CurveExport CurveName -NotAfter(Get-Date).AddYears(5) -TextExtension @("2.5.29.19 = {text}","2.5.29.37 = {text}1.3.6.1.5.5.7.3.2") -Signer $RootCert
|
|
$TempClientPath = Join-Path $Env:TEMP "MsQuicTestClientCert.pfx"
|
|
Export-PfxCertificate -Cert $ClientCert -Password $PfxPassword -FilePath $TempClientPath
|
|
Import-PfxCertificate -FilePath $TempClientPath -Password $PfxPassword -Exportable -CertStoreLocation Cert:\LocalMachine\My
|
|
Remove-Item $TempClientPath
|
|
Write-Host "New MsQuicTestClient certificate installed!"
|
|
} else {
|
|
Write-Debug "Found existing MsQuicTestClient certificate!"
|
|
}
|
|
|
|
Write-Debug "Searching for MsQuicTestExpiredClient certificate..."
|
|
$ExpiredClientCert = Get-ChildItem -path Cert:\LocalMachine\My\* -Recurse | Where-Object {$_.Subject -eq "CN=MsQuicTestExpiredClient"}
|
|
if (!$ExpiredClientCert) {
|
|
Write-Host "MsQuicTestExpiredClient not found! Creating new MsQuicTestExpiredClient certificate..."
|
|
$ExpiredClientCert = New-SelfSignedCertificate -Subject "CN=MsQuicTestExpiredClient" -FriendlyName MsQuicTestExpiredClient -KeyUsageProperty Sign -KeyUsage DigitalSignature -CertStoreLocation cert:\CurrentUser\My -HashAlgorithm SHA256 -Provider "Microsoft Software Key Storage Provider" -KeyExportPolicy Exportable -KeyAlgorithm ECDSA_nistP256 -CurveExport CurveName -NotBefore (Get-Date).AddYears(-2) -NotAfter(Get-Date).AddYears(-1) -TextExtension @("2.5.29.19 = {text}","2.5.29.37 = {text}1.3.6.1.5.5.7.3.2") -Signer $RootCert
|
|
$TempExpiredClientPath = Join-Path $Env:TEMP "MsQuicTestClientExpiredCert.pfx"
|
|
Export-PfxCertificate -Cert $ExpiredClientCert -Password $PfxPassword -FilePath $TempExpiredClientPath
|
|
Import-PfxCertificate -FilePath $TempExpiredClientPath -Password $PfxPassword -Exportable -CertStoreLocation Cert:\LocalMachine\My
|
|
Remove-Item $TempExpiredClientPath
|
|
Write-Host "New MsQuicTestExpiredClient certificate installed!"
|
|
} else {
|
|
Write-Debug "Found existing MsQuicTestExpiredClient certificate!"
|
|
}
|
|
|
|
if ($NewRoot) {
|
|
Write-Host "Deleting MsQuicTestRoot from MY store..."
|
|
Remove-Item $rootCert.PSPath
|
|
}
|
|
}
|
|
|
|
function Install-DotnetTool {
|
|
param($ToolName, $Version, $NuGetPath)
|
|
$NuGetName = "$ToolName.$Version.nupkg"
|
|
$NuGetFile = Join-Path $NuGetPath $NuGetName
|
|
if (!(Test-Path -Path $NuGetFile)) {
|
|
Write-Host "$ToolName not found. Parsing lttng logs will fail"
|
|
return
|
|
}
|
|
|
|
try {
|
|
Write-Host "Installing: $ToolName"
|
|
dotnet tool update --global --add-source $NuGetPath $ToolName
|
|
} catch {
|
|
$err = $_
|
|
Write-Host "$ToolName could not be installed. Parsing lttng logs will fail"
|
|
Write-Host $err.ToString()
|
|
}
|
|
}
|
|
|
|
function Install-Clog2Text {
|
|
Write-Host "Initializing clog submodule"
|
|
git submodule init $RootDir/submodules/clog
|
|
git submodule update
|
|
|
|
dotnet build (Join-Path $RootDir submodules clog)
|
|
$NuGetPath = Join-Path $RootDir "submodules" "clog" "src" "nupkg"
|
|
Install-DotnetTool -ToolName "Microsoft.Logging.CLOG2Text.Lttng" -Version "0.0.1" -NuGetPath $NuGetPath
|
|
}
|
|
|
|
# We remove OpenSSL path for kernel builds because it's not needed.
|
|
if ($ForKernel) {
|
|
git rm $RootDir/submodules/openssl
|
|
git rm $RootDir/submodules/openssl3
|
|
}
|
|
|
|
if ($ForBuild -or $ForContainerBuild) {
|
|
Write-Host "Initializing clog submodule"
|
|
git submodule init $RootDir/submodules/clog
|
|
|
|
if (!$IsLinux) {
|
|
Write-Host "Initializing XDP-for-Windows submodule"
|
|
git submodule init $RootDir/submodules/xdp-for-windows
|
|
}
|
|
|
|
if ($Tls -eq "openssl") {
|
|
Write-Host "Initializing openssl submodule"
|
|
git submodule init $RootDir/submodules/openssl
|
|
}
|
|
|
|
if ($Tls -eq "openssl3") {
|
|
Write-Host "Initializing openssl3 submodule"
|
|
git submodule init $RootDir/submodules/openssl3
|
|
}
|
|
|
|
if (!$DisableTest) {
|
|
Write-Host "Initializing googletest submodule"
|
|
git submodule init $RootDir/submodules/googletest
|
|
}
|
|
|
|
git submodule update --jobs=8
|
|
}
|
|
|
|
if ($InstallCoreNetCiDeps) { Download-CoreNet-Deps }
|
|
if ($InstallSigningCertificates) { Install-SigningCertificates }
|
|
if ($InstallDuoNic) { Install-DuoNic }
|
|
if ($InstallXdpDriver) { Install-Xdp-Driver }
|
|
if ($UninstallXdp) { Uninstall-Xdp }
|
|
if ($InstallNasm) { Install-NASM }
|
|
if ($InstallJOM) { Install-JOM }
|
|
if ($InstallPerl) { Install-Perl }
|
|
if ($InstallCodeCoverage) { Install-OpenCppCoverage }
|
|
if ($InstallTestCertificates) { Install-TestCertificates }
|
|
|
|
if ($IsLinux) {
|
|
if ($InstallClog2Text) {
|
|
Install-Clog2Text
|
|
}
|
|
|
|
if ($ForBuild) {
|
|
sudo apt-add-repository ppa:lttng/stable-2.13 -y
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y cmake
|
|
sudo apt-get install -y build-essential
|
|
sudo apt-get install -y liblttng-ust-dev
|
|
sudo apt-get install -y libssl-dev
|
|
sudo apt-get install -y libnuma-dev
|
|
if ($InstallArm64Toolchain) {
|
|
sudo apt-get install -y gcc-aarch64-linux-gnu
|
|
sudo apt-get install -y binutils-aarch64-linux-gnu
|
|
sudo apt-get install -y g++-aarch64-linux-gnu
|
|
}
|
|
# only used for the codecheck CI run:
|
|
sudo apt-get install -y cppcheck clang-tidy
|
|
# used for packaging
|
|
sudo apt-get install -y ruby ruby-dev rpm
|
|
sudo gem install public_suffix -v 4.0.7
|
|
sudo gem install fpm
|
|
|
|
# XDP dependencies
|
|
if ($UseXdp) {
|
|
sudo apt-get -y install --no-install-recommends libc6-dev-i386 # for building xdp programs
|
|
if (!$IsUbuntu2404) {
|
|
sudo apt-add-repository "deb http://mirrors.kernel.org/ubuntu noble main" -y
|
|
sudo apt-get update -y
|
|
}
|
|
sudo apt-get -y install libxdp-dev libbpf-dev
|
|
sudo apt-get -y install libnl-3-dev libnl-genl-3-dev libnl-route-3-dev zlib1g-dev zlib1g pkg-config m4 clang libpcap-dev libelf-dev
|
|
}
|
|
}
|
|
|
|
if ($ForTest) {
|
|
sudo apt-add-repository ppa:lttng/stable-2.13 -y
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y lttng-tools
|
|
sudo apt-get install -y liblttng-ust-dev
|
|
sudo apt-get install -y gdb
|
|
if ($UseXdp) {
|
|
if (!$IsUbuntu2404) {
|
|
sudo apt-add-repository "deb http://mirrors.kernel.org/ubuntu noble main" -y
|
|
sudo apt-get update -y
|
|
}
|
|
sudo apt-get install -y libxdp1 libbpf1
|
|
sudo apt-get install -y libnl-3-200 libnl-route-3-200 libnl-genl-3-200
|
|
sudo apt-get install -y iproute2 iptables
|
|
Install-DuoNic
|
|
}
|
|
|
|
# Enable core dumps for the system.
|
|
Write-Host "Setting core dump size limit"
|
|
sudo sh -c "echo 'root soft core unlimited' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo 'root hard core unlimited' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo '* soft core unlimited' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo '* hard core unlimited' >> /etc/security/limits.conf"
|
|
# Increase the number of file descriptors.
|
|
sudo sh -c "echo 'root soft nofile 1048576' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo 'root hard nofile 1048576' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo '* soft nofile 1048576' >> /etc/security/limits.conf"
|
|
sudo sh -c "echo '* hard nofile 1048576' >> /etc/security/limits.conf"
|
|
#sudo cat /etc/security/limits.conf
|
|
|
|
# Set the core dump pattern.
|
|
Write-Host "Setting core dump pattern"
|
|
sudo sh -c "echo -n '%e.%p.%t.core' > /proc/sys/kernel/core_pattern"
|
|
#sudo cat /proc/sys/kernel/core_pattern
|
|
}
|
|
}
|
|
|
|
if ($IsMacOS) {
|
|
if ($ForTest) {
|
|
Write-Host "Setting core dump pattern"
|
|
sudo sysctl -w kern.corefile=%N.%P.core
|
|
}
|
|
}
|