diff --git a/src/runtime-tools/linux/run.sh b/src/runtime-tools/linux/run.sh index 514a4602c..d224efce6 100755 --- a/src/runtime-tools/linux/run.sh +++ b/src/runtime-tools/linux/run.sh @@ -5,6 +5,7 @@ set -ex export PATH=$PATH:/onefuzz/bin:/onefuzz/tools/linux:/onefuzz/tools/linux/afl:/onefuzz/tools/linux/radamsa +export DOTNET_ROOT=/onefuzz/tools/dotnet export ONEFUZZ_TOOLS=/onefuzz/tools export ONEFUZZ_ROOT=/onefuzz export RUST_BACKTRACE=full diff --git a/src/runtime-tools/linux/setup.sh b/src/runtime-tools/linux/setup.sh index 37a8089f7..2670a4025 100755 --- a/src/runtime-tools/linux/setup.sh +++ b/src/runtime-tools/linux/setup.sh @@ -12,6 +12,8 @@ USER_SETUP="/onefuzz/setup/setup.sh" TASK_SETUP="/onefuzz/bin/task-setup.sh" MANAGED_SETUP="/onefuzz/bin/managed.sh" SCALESET_SETUP="/onefuzz/bin/scaleset-setup.sh" +DOTNET_VERSION="6.0.300" +export DOTNET_ROOT=/onefuzz/tools/dotnet export ONEFUZZ_ROOT=/onefuzz export LLVM_SYMBOLIZER_PATH=/onefuzz/bin/llvm-symbolizer @@ -26,6 +28,7 @@ mkdir -p /onefuzz/setup mkdir -p /onefuzz/tools mkdir -p /onefuzz/etc mkdir -p /onefuzz/instance-specific-setup +mkdir -p "$DOTNET_ROOT" echo $1 > /onefuzz/etc/mode export PATH=$PATH:/onefuzz/bin:/onefuzz/tools/linux:/onefuzz/tools/linux/afl:/onefuzz/tools/linux/radamsa @@ -122,6 +125,27 @@ if type apt > /dev/null 2> /dev/null; then # Using `llvm-symbolizer` works for clang 8 .. 10. sudo ln -f -s $(which llvm-symbolizer-10) $LLVM_SYMBOLIZER_PATH fi + + # Install dotnet + until sudo apt install -y curl libicu-dev; do + echo "apt failed, sleeping 10s then retrying" + sleep 10 + done + + echo "downloading dotnet install" + curl --retry 10 -sSL https://dot.net/v1/dotnet-install.sh -o dotnet-install.sh > /dev/null + chmod +x dotnet-install.sh + + echo "running dotnet install" + . ./dotnet-install.sh --version "$DOTNET_VERSION" --install-dir "$DOTNET_ROOT" 2>&1 | logger -s -i -t 'onefuzz-dotnet-setup' + rm dotnet-install.sh + + echo "install dotnet tools" + pushd "$DOTNET_ROOT" + ./dotnet tool install dotnet-dump --tool-path /onefuzz/tools + ./dotnet tool install dotnet-coverage --tool-path /onefuzz/tools + ./dotnet tool install dotnet-sos --tool-path /onefuzz/tools + popd fi if [ -d /etc/systemd/system ]; then diff --git a/src/runtime-tools/win64/onefuzz.ps1 b/src/runtime-tools/win64/onefuzz.ps1 index 0ead671f0..3b2d91d46 100644 --- a/src/runtime-tools/win64/onefuzz.ps1 +++ b/src/runtime-tools/win64/onefuzz.ps1 @@ -6,6 +6,10 @@ $env:ONEFUZZ_ROOT = "C:\onefuzz" $env:ONEFUZZ_TOOLS = "C:\onefuzz\tools" $env:LLVM_SYMBOLIZER_PATH = "llvm-symbolizer" $env:RUST_LOG = "info" +$env:DOTNET_VERSION = "6.0.300" +# Set a session and machine scoped env var +$env:DOTNET_ROOT = "c:\onefuzz\tools\dotnet" +[Environment]::SetEnvironmentVariable("DOTNET_ROOT", $env:DOTNET_ROOT, "Machine") $logFile = "C:\onefuzz.log" function log ($message) { @@ -168,3 +172,18 @@ function Install-VCRedist { Start-Process -FilePath C:\onefuzz\vcredist_x86.exe -ArgumentList "/install /q /norestart" -Wait -WindowStyle Hidden log "installing VC Redist: done" } + +function Install-Dotnet([string]$Version, [string]$InstallDir, [string]$ToolsDir) { + log "Installing dotnet to ${InstallDir}" + Invoke-WebRequest 'https://dot.net/v1/dotnet-install.ps1' -OutFile 'dotnet-install.ps1' + ./dotnet-install.ps1 -Version $Version -InstallDir $InstallDir + Remove-Item ./dotnet-install.ps1 + log "Installing dotnet: done" + log "Installing dotnet tools to ${ToolsDir}" + Push-Location $InstallDir + ./dotnet.exe tool install dotnet-dump --tool-path $ToolsDir + ./dotnet.exe tool install dotnet-coverage --tool-path $ToolsDir + ./dotnet.exe tool install dotnet-sos --tool-path $ToolsDir + Pop-Location + log "Installing dotnet tools: done" +} diff --git a/src/runtime-tools/win64/setup.ps1 b/src/runtime-tools/win64/setup.ps1 index 9657e5413..163451c0b 100644 --- a/src/runtime-tools/win64/setup.ps1 +++ b/src/runtime-tools/win64/setup.ps1 @@ -69,6 +69,7 @@ function Install-OnefuzzSetup { Enable-SSH Install-OnBoot Install-VCRedist + Install-Dotnet -Version $env:DOTNET_VERSION -InstallDir $env:DOTNET_ROOT -ToolsDir $env:ONEFUZZ_TOOLS Setup-Silent-Notification log "onefuzz: setup done" }