| #!/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 |
| sudo pip install -U crcmod mock psutil |
| |
| # 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 |
| |
| # Create /b if it does not already exist. |
| if [[ ! -d /b ]]; then |
| sudo mkdir /b |
| sudo chown chrome-bot:chrome-bot /b |
| fi |
| |
| # 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 |
| |
| cat <<EOF | sudo tee /etc/systemd/system/swarming_bot.service |
| [Unit] |
| Description=Swarming bot |
| After=network.target |
| |
| [Service] |
| Type=simple |
| 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 |