blob: 631227ce15865e49b8c62490ad875e4c167af32d [file] [log] [blame]
#!/bin/bash
#
# Setup the files and checkouts on a cluster telemetry machine.
#
set -e
# Install packages.
echo "Installing packages..."
sudo apt-get update
sudo apt-get -y install libosmesa-dev clang-3.6 poppler-utils netpbm \
python-django libgif-dev lua5.2 libnss3 python-setuptools python-pip \
libglu1 libgtk3.0 xvfb gperf bison libglu1-mesa-dev libgbm-dev
sudo pip install -U crcmod mock psutil httplib2 numpy
# Install openjdk-8. See skbug.com/6975 for context.
sudo apt-get -y install openjdk-8-jdk openjdk-8-jre
echo "Installing Python..."
sudo apt-get -y install autotools-dev blt-dev bzip2 dpkg-dev g++-multilib \
gcc-multilib libbluetooth-dev libbz2-dev libexpat1-dev libffi-dev libffi6 \
libffi6-dbg libgdbm-dev libgpm2 libncursesw5-dev libreadline-dev \
libsqlite3-dev libssl-dev libtinfo-dev mime-support net-tools netbase \
python-crypto python-mox3 python-pil python-ply quilt tk-dev zlib1g-dev \
mesa-utils android-tools-adb
echo "Bring artifacts in from Google storage..."
# TODO(rmistry): Figure out which ones we really need.
/snap/bin/gsutil cp gs://cluster-telemetry-bucket/artifacts/bots/.gitconfig_ct ~/.gitconfig
/snap/bin/gsutil cp gs://cluster-telemetry-bucket/artifacts/bots/.netrc_ct ~/.netrc
/snap/bin/gsutil cp gs://cluster-telemetry-bucket/artifacts/bots/.boto_ct ~/.boto
echo "Checking out depot_tools..."
if [ ! -d ~/depot_tools ]; then
cd ~
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
echo 'export PATH=~/depot_tools:$PATH' >> ~/.bashrc
fi
PATH=$PATH:~/depot_tools
# CT uses this directory for storage of artifacts.
mkdir -p /b/storage
# If the bot is a builder then checkout Chromium and Skia repositories.
if [[ $(hostname -s) = ct-*-builder* ]]; then
echo "Checking out Chromium repository..."
mkdir -p /b/storage/chromium
cd /b/storage/chromium
if [[ $(hostname -s) = *android* ]]; then
# Say yes to prompts for installing Android SDK.
yes | ~/depot_tools/fetch android
else
~/depot_tools/fetch chromium
fi
cd src
git checkout master
~/depot_tools/gclient sync
echo "Checking out Skia repository..."
mkdir /b/skia-repo/
cd /b/skia-repo/
cat > .gclient << EOF
solutions = [
{ 'name' : 'trunk',
'url' : 'https://skia.googlesource.com/skia.git',
'deps_file' : 'DEPS',
'managed' : True,
'custom_deps' : {
},
'safesync_url': '',
},
]
EOF
~/depot_tools/gclient sync
cd trunk
git checkout master
fi
# Get access token from metadata.
TOKEN=`curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google" | python -c "import sys, json; print json.load(sys.stdin)['access_token']"`
# Bootstrap Swarming.
mkdir -p /b/s
SWARMING=https://chrome-swarming.appspot.com
HOSTNAME=`hostname`
curl ${SWARMING}/bot_code?bot_id=$HOSTNAME -H "Authorization":"Bearer $TOKEN" -o /b/s/swarming_bot.zip
# See skbug.com/9425 for why LimitNOFILE is set.
cat <<EOF | sudo tee /etc/systemd/system/swarming_bot.service
[Unit]
Description=Swarming bot
After=network.target
[Service]
Type=simple
LimitNOFILE=50000
User=chrome-bot
Restart=on-failure
RestartSec=10
ExecStart=/usr/bin/env python /b/s/swarming_bot.zip start_bot
[Install]
WantedBy=default.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable swarming_bot.service
echo
echo "The setup script has completed!"
echo