mirror of
https://github.com/microsoft/onefuzz.git
synced 2025-06-18 12:48:07 +00:00
* Add scripts to install dotnet on windows and ubuntu * Install dotnet on linux setup * Move the install to the setup scripts * Fix slash direction * typo * PR comments
192 lines
6.0 KiB
Bash
Executable File
192 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
|
|
find .
|
|
set -x
|
|
|
|
INSTANCE_OS_SETUP="/onefuzz/instance-specific-setup/linux/setup.sh"
|
|
INSTANCE_SETUP="/onefuzz/instance-specific-setup/setup.sh"
|
|
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
|
|
|
|
logger "onefuzz: making directories"
|
|
sudo mkdir -p /onefuzz/downloaded
|
|
sudo chown -R $(whoami) /onefuzz
|
|
mv * /onefuzz/downloaded
|
|
cd /onefuzz
|
|
mkdir -p /onefuzz/bin
|
|
mkdir -p /onefuzz/logs
|
|
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
|
|
|
|
# Basic setup
|
|
mv /onefuzz/downloaded/config.json /onefuzz
|
|
mv /onefuzz/downloaded/azcopy /onefuzz/bin
|
|
mv /onefuzz/downloaded/managed.sh /onefuzz/bin
|
|
|
|
if [ -f /onefuzz/downloaded/task-setup.sh ]; then
|
|
mv /onefuzz/downloaded/task-setup.sh /onefuzz/bin/
|
|
fi
|
|
|
|
if [ -f /onefuzz/downloaded/repro.sh ]; then
|
|
mv /onefuzz/downloaded/repro.sh /onefuzz/bin/
|
|
fi
|
|
if [ -f /onefuzz/downloaded/repro-stdout.sh ]; then
|
|
mv /onefuzz/downloaded/repro-stdout.sh /onefuzz/bin/
|
|
fi
|
|
if [ -f /onefuzz/downloaded/scaleset-setup.sh ]; then
|
|
mv /onefuzz/downloaded/scaleset-setup.sh /onefuzz/bin
|
|
fi
|
|
|
|
chmod -R a+rx /onefuzz/bin
|
|
|
|
if [ -f ${MANAGED_SETUP} ]; then
|
|
logger "onefuzz: managed setup script start"
|
|
chmod +x ${MANAGED_SETUP}
|
|
${MANAGED_SETUP} 2>&1 | logger -s -i -t 'onefuzz-managed-setup'
|
|
logger "onefuzz: managed setup script stop"
|
|
else
|
|
logger "onefuzz: no managed setup script"
|
|
fi
|
|
|
|
if [ -f ${SCALESET_SETUP} ]; then
|
|
logger "onefuzz: scaleset setup script start"
|
|
chmod +x ${SCALESET_SETUP}
|
|
${SCALESET_SETUP} 2>&1 | logger -s -i -t 'onefuzz-scaleset-setup'
|
|
logger "onefuzz: scaleset setup script stop"
|
|
else
|
|
logger "onefuzz: no scaleset setup script"
|
|
fi
|
|
|
|
if [ -f ${INSTANCE_SETUP} ]; then
|
|
logger "onefuzz: instance setup script start"
|
|
chmod +x ${INSTANCE_SETUP}
|
|
${INSTANCE_SETUP} 2>&1 | logger -s -i -t 'onefuzz-instance-setup'
|
|
logger "onefuzz: instance setup script stop"
|
|
elif [ -f ${INSTANCE_OS_SETUP} ]; then
|
|
logger "onefuzz: instance setup script (linux) start"
|
|
chmod +x ${INSTANCE_OS_SETUP}
|
|
${INSTANCE_OS_SETUP} 2>&1 | logger -s -i -t 'onefuzz-instance-setup'
|
|
logger "onefuzz: instance setup script stop"
|
|
else
|
|
logger "onefuzz: no instance setup script"
|
|
fi
|
|
|
|
# When repro case is moved into the supervisor, this should be deleted
|
|
if [ -f ${TASK_SETUP} ]; then
|
|
logger "onefuzz: task-specific setup script start"
|
|
chmod +x ${TASK_SETUP}
|
|
${TASK_SETUP} 2>&1 | logger -s -i -t 'onefuzz-task-setup'
|
|
logger "onefuzz: task-specific setup script stop"
|
|
else
|
|
logger "onefuzz: no task-specific setup script"
|
|
fi
|
|
|
|
|
|
if [ -f ${USER_SETUP} ]; then
|
|
logger "onefuzz: user-specific setup script start"
|
|
chmod +x ${USER_SETUP}
|
|
${USER_SETUP} 2>&1 | logger -s -i -t 'onefuzz-user-setup'
|
|
logger "onefuzz: user-specific setup script stop"
|
|
else
|
|
logger "onefuzz: no user-specific setup script"
|
|
fi
|
|
|
|
chmod -R a+rx /onefuzz/tools/linux
|
|
|
|
if type apt > /dev/null 2> /dev/null; then
|
|
sudo apt update
|
|
until sudo apt install -y gdb gdbserver; do
|
|
echo "apt failed. sleep 10s, then retrying"
|
|
sleep 10
|
|
done
|
|
|
|
if ! [ -f ${LLVM_SYMBOLIZER_PATH} ]; then
|
|
until sudo apt install -y llvm-10; do
|
|
echo "apt failed, sleeping 10s then retrying"
|
|
sleep 10
|
|
done
|
|
|
|
# If specifying symbolizer, exe name must be a "known symbolizer".
|
|
# 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
|
|
logger "onefuzz: setting up systemd"
|
|
sudo chmod 644 /onefuzz/tools/linux/onefuzz.service
|
|
sudo chown root /onefuzz/tools/linux/onefuzz.service
|
|
sudo ln -s /onefuzz/tools/linux/onefuzz.service /etc/systemd/system/onefuzz.service
|
|
sudo systemctl enable onefuzz
|
|
if [ "X$2" == "Xreboot" ]; then
|
|
logger "onefuzz: restarting"
|
|
echo rebooting
|
|
sudo reboot
|
|
else
|
|
logger "onefuzz: starting via systemd"
|
|
sudo systemctl start onefuzz
|
|
fi
|
|
elif [ -d /etc/init.d ]; then
|
|
logger "onefuzz: setting up init.d"
|
|
sudo chown root /onefuzz/tools/linux/onefuzz.initd
|
|
sudo ln -s /onefuzz/tools/linux/onefuzz.initd /etc/init.d/onefuzz
|
|
RCDIRS=/etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d
|
|
for RCDIR in ${RCDRS}; do
|
|
if [ -d ${RCDIR} ]; then
|
|
sudo ln -s /onefuzz/tools/linux/onefuzz.initd ${RCDIR}/S99onefuzz
|
|
fi
|
|
done
|
|
if [ "X$2" == "Xreboot" ]; then
|
|
logger "onefuzz: rebooting"
|
|
sudo reboot
|
|
else
|
|
logger "onefuzz: starting via init"
|
|
sudo /etc/init.d/onefuzz start
|
|
fi
|
|
else
|
|
logger "onefuzz: unknown startup"
|
|
if [ "X$2" == "Xreboot" ]; then
|
|
logger "onefuzz: rebooting without startup script"
|
|
sudo reboot
|
|
else
|
|
logger "onefuzz: starting directly"
|
|
nohup sudo /onefuzz/tools/linux/run.sh
|
|
fi
|
|
fi
|