Files
onefuzz/src/runtime-tools/linux/setup.sh
Teo Voinea dec4285527 Add scripts to install dotnet on windows and ubuntu (#2038)
* 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
2022-06-14 14:56:53 +00:00

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