| #!/bin/bash |
| |
| set -e -x |
| |
| # Fix some problems with GPG keys. |
| sudo apt update 2>&1 1>/dev/null \ |
| | sed -ne 's/.*NO_PUBKEY //p' \ |
| | while read key; do if ! [[ ${keys[*]} =~ "$key" ]]; then sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys "$key"; keys+=("$key"); fi; done |
| |
| # A new Debian version was released since the base image was created, so we need |
| # to apt-get update with --allow-releaseinfo-change. |
| sudo apt-get update --allow-releaseinfo-change |
| |
| # Install packages. |
| |
| sudo apt-get --assume-yes install build-essential mercurial libosmesa-dev libexpat1-dev clang llvm \ |
| poppler-utils netpbm gcc-multilib g++-multilib libxi-dev python-django python3-distutils \ |
| libc++-dev libc++abi-dev gperf bison usbutils libncurses5 locales libxss1 libxcb-shm0-dev |
| |
| # Catapult requires a lsb-release file even if it's empty. |
| # TODO(rmistry): Remove this after https://github.com/catapult-project/catapult/issues/3705 |
| # is resolved. |
| sudo touch /etc/lsb-release |
| |
| # gcc-4.8 is only available in jessie. gcc-4.8 is required to compile for Ubuntu-14.04. |
| cat <<EOF | sudo tee --append /etc/apt/sources.list |
| deb http://cdn-fastly.deb.debian.org/debian/ jessie main |
| deb-src http://cdn-fastly.deb.debian.org/debian/ jessie main |
| deb http://security.debian.org/ jessie/updates main |
| deb-src http://security.debian.org/ jessie/updates main |
| EOF |
| sudo apt-get update |
| sudo apt-get --assume-yes install gcc-4.8 g++-4.8 |
| |
| # Buster locales need to be configured and set to avoid spurious bash |
| # complaints. |
| echo 'LC_ALL=en_US.UTF-8' | sudo tee --append /etc/environment |
| echo 'en_US.UTF-8 UTF-8' | sudo tee --append /etc/locale.gen |
| echo 'LANG=en_US.UTF-8' | sudo tee --append /etc/locale.conf |
| sudo locale-gen en_US.UTF-8 |
| |
| # Obtain and symlink i386 libs. |
| sudo dpkg --add-architecture i386 |
| sudo apt-get update |
| sudo apt-get --assume-yes install libfreetype6:i386 libfontconfig1:i386 libgl1-mesa-glx:i386 \ |
| libglu1-mesa:i386 libx11-6:i386 libxext-dev:i386 |
| # -sfn is --symbolic --force --no-dereference |
| sudo ln -sfn /usr/lib/i386-linux-gnu/libfreetype.so.6 /usr/lib/i386-linux-gnu/libfreetype.so |
| sudo ln -sfn /usr/lib/i386-linux-gnu/libfontconfig.so.1 /usr/lib/i386-linux-gnu/libfontconfig.so |
| sudo ln -sfn /usr/lib/i386-linux-gnu/libGLU.so.1 /usr/lib/i386-linux-gnu/libGLU.so |
| sudo ln -sfn /usr/lib/i386-linux-gnu/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so |
| sudo ln -sfn /usr/lib/i386-linux-gnu/libX11.so.6.3.0 /usr/lib/i386-linux-gnu/libX11.so |
| |
| # NodeJS / NPM. |
| curl --header "Metadata-Flavor: Google" -o /tmp/node-setup.sh http://metadata/computeMetadata/v1/instance/attributes/node-setup-script |
| sudo bash /tmp/node-setup.sh |
| sudo apt-get --assume-yes install nodejs npm |
| sudo npm install --global npm@3.10.9 |
| |
| # Install Python packages. |
| cat <<EOF > /tmp/swarming-requirements.txt |
| # |
| # This file is autogenerated by pip-compile with python 3.9 |
| # To update, run: |
| # |
| # pip-compile --generate-hashes requirements.in |
| # |
| coverage==6.4.1 \ |
| --hash=sha256:01c5615d13f3dd3aa8543afc069e5319cfa0c7d712f6e04b920431e5c564a749 \ |
| --hash=sha256:106c16dfe494de3193ec55cac9640dd039b66e196e4641fa8ac396181578b982 \ |
| --hash=sha256:129cd05ba6f0d08a766d942a9ed4b29283aff7b2cccf5b7ce279d50796860bb3 \ |
| --hash=sha256:145f296d00441ca703a659e8f3eb48ae39fb083baba2d7ce4482fb2723e050d9 \ |
| --hash=sha256:1480ff858b4113db2718848d7b2d1b75bc79895a9c22e76a221b9d8d62496428 \ |
| --hash=sha256:269eaa2c20a13a5bf17558d4dc91a8d078c4fa1872f25303dddcbba3a813085e \ |
| --hash=sha256:26dff09fb0d82693ba9e6231248641d60ba606150d02ed45110f9ec26404ed1c \ |
| --hash=sha256:2bd9a6fc18aab8d2e18f89b7ff91c0f34ff4d5e0ba0b33e989b3cd4194c81fd9 \ |
| --hash=sha256:309ce4a522ed5fca432af4ebe0f32b21d6d7ccbb0f5fcc99290e71feba67c264 \ |
| --hash=sha256:3384f2a3652cef289e38100f2d037956194a837221edd520a7ee5b42d00cc605 \ |
| --hash=sha256:342d4aefd1c3e7f620a13f4fe563154d808b69cccef415415aece4c786665397 \ |
| --hash=sha256:39ee53946bf009788108b4dd2894bf1349b4e0ca18c2016ffa7d26ce46b8f10d \ |
| --hash=sha256:4321f075095a096e70aff1d002030ee612b65a205a0a0f5b815280d5dc58100c \ |
| --hash=sha256:4803e7ccf93230accb928f3a68f00ffa80a88213af98ed338a57ad021ef06815 \ |
| --hash=sha256:4ce1b258493cbf8aec43e9b50d89982346b98e9ffdfaae8ae5793bc112fb0068 \ |
| --hash=sha256:664a47ce62fe4bef9e2d2c430306e1428ecea207ffd68649e3b942fa8ea83b0b \ |
| --hash=sha256:75ab269400706fab15981fd4bd5080c56bd5cc07c3bccb86aab5e1d5a88dc8f4 \ |
| --hash=sha256:83c4e737f60c6936460c5be330d296dd5b48b3963f48634c53b3f7deb0f34ec4 \ |
| --hash=sha256:84631e81dd053e8a0d4967cedab6db94345f1c36107c71698f746cb2636c63e3 \ |
| --hash=sha256:84e65ef149028516c6d64461b95a8dbcfce95cfd5b9eb634320596173332ea84 \ |
| --hash=sha256:865d69ae811a392f4d06bde506d531f6a28a00af36f5c8649684a9e5e4a85c83 \ |
| --hash=sha256:87f4f3df85aa39da00fd3ec4b5abeb7407e82b68c7c5ad181308b0e2526da5d4 \ |
| --hash=sha256:8c08da0bd238f2970230c2a0d28ff0e99961598cb2e810245d7fc5afcf1254e8 \ |
| --hash=sha256:961e2fb0680b4f5ad63234e0bf55dfb90d302740ae9c7ed0120677a94a1590cb \ |
| --hash=sha256:9b3e07152b4563722be523e8cd0b209e0d1a373022cfbde395ebb6575bf6790d \ |
| --hash=sha256:a7f3049243783df2e6cc6deafc49ea123522b59f464831476d3d1448e30d72df \ |
| --hash=sha256:bf5601c33213d3cb19d17a796f8a14a9eaa5e87629a53979a5981e3e3ae166f6 \ |
| --hash=sha256:cec3a0f75c8f1031825e19cd86ee787e87cf03e4fd2865c79c057092e69e3a3b \ |
| --hash=sha256:d42c549a8f41dc103a8004b9f0c433e2086add8a719da00e246e17cbe4056f72 \ |
| --hash=sha256:d67d44996140af8b84284e5e7d398e589574b376fb4de8ccd28d82ad8e3bea13 \ |
| --hash=sha256:d9c80df769f5ec05ad21ea34be7458d1dc51ff1fb4b2219e77fe24edf462d6df \ |
| --hash=sha256:e57816f8ffe46b1df8f12e1b348f06d164fd5219beba7d9433ba79608ef011cc \ |
| --hash=sha256:ee2ddcac99b2d2aec413e36d7a429ae9ebcadf912946b13ffa88e7d4c9b712d6 \ |
| --hash=sha256:f02cbbf8119db68455b9d763f2f8737bb7db7e43720afa07d8eb1604e5c5ae28 \ |
| --hash=sha256:f1d5aa2703e1dab4ae6cf416eb0095304f49d004c39e9db1d86f57924f43006b \ |
| --hash=sha256:f5b66caa62922531059bc5ac04f836860412f7f88d38a476eda0a6f11d4724f4 \ |
| --hash=sha256:f69718750eaae75efe506406c490d6fc5a6161d047206cc63ce25527e8a3adad \ |
| --hash=sha256:fb73e0011b8793c053bfa85e53129ba5f0250fdc0392c1591fd35d915ec75c46 \ |
| --hash=sha256:fd180ed867e289964404051a958f7cccabdeed423f91a899829264bb7974d3d3 \ |
| --hash=sha256:fdb6f7bd51c2d1714cea40718f6149ad9be6a2ee7d93b19e9f00934c0f2a74d9 \ |
| --hash=sha256:ffa9297c3a453fba4717d06df579af42ab9a28022444cae7fa605af4df612d54 |
| # via -r requirements.in |
| psutil==5.9.1 \ |
| --hash=sha256:068935df39055bf27a29824b95c801c7a5130f118b806eee663cad28dca97685 \ |
| --hash=sha256:0904727e0b0a038830b019551cf3204dd48ef5c6868adc776e06e93d615fc5fc \ |
| --hash=sha256:0f15a19a05f39a09327345bc279c1ba4a8cfb0172cc0d3c7f7d16c813b2e7d36 \ |
| --hash=sha256:19f36c16012ba9cfc742604df189f2f28d2720e23ff7d1e81602dbe066be9fd1 \ |
| --hash=sha256:20b27771b077dcaa0de1de3ad52d22538fe101f9946d6dc7869e6f694f079329 \ |
| --hash=sha256:28976df6c64ddd6320d281128817f32c29b539a52bdae5e192537bc338a9ec81 \ |
| --hash=sha256:29a442e25fab1f4d05e2655bb1b8ab6887981838d22effa2396d584b740194de \ |
| --hash=sha256:3054e923204b8e9c23a55b23b6df73a8089ae1d075cb0bf711d3e9da1724ded4 \ |
| --hash=sha256:32c52611756096ae91f5d1499fe6c53b86f4a9ada147ee42db4991ba1520e574 \ |
| --hash=sha256:3a76ad658641172d9c6e593de6fe248ddde825b5866464c3b2ee26c35da9d237 \ |
| --hash=sha256:44d1826150d49ffd62035785a9e2c56afcea66e55b43b8b630d7706276e87f22 \ |
| --hash=sha256:4b6750a73a9c4a4e689490ccb862d53c7b976a2a35c4e1846d049dcc3f17d83b \ |
| --hash=sha256:56960b9e8edcca1456f8c86a196f0c3d8e3e361320071c93378d41445ffd28b0 \ |
| --hash=sha256:57f1819b5d9e95cdfb0c881a8a5b7d542ed0b7c522d575706a80bedc848c8954 \ |
| --hash=sha256:58678bbadae12e0db55186dc58f2888839228ac9f41cc7848853539b70490021 \ |
| --hash=sha256:645bd4f7bb5b8633803e0b6746ff1628724668681a434482546887d22c7a9537 \ |
| --hash=sha256:799759d809c31aab5fe4579e50addf84565e71c1dc9f1c31258f159ff70d3f87 \ |
| --hash=sha256:79c9108d9aa7fa6fba6e668b61b82facc067a6b81517cab34d07a84aa89f3df0 \ |
| --hash=sha256:91c7ff2a40c373d0cc9121d54bc5f31c4fa09c346528e6a08d1845bce5771ffc \ |
| --hash=sha256:9272167b5f5fbfe16945be3db475b3ce8d792386907e673a209da686176552af \ |
| --hash=sha256:944c4b4b82dc4a1b805329c980f270f170fdc9945464223f2ec8e57563139cf4 \ |
| --hash=sha256:a6a11e48cb93a5fa606306493f439b4aa7c56cb03fc9ace7f6bfa21aaf07c453 \ |
| --hash=sha256:a8746bfe4e8f659528c5c7e9af5090c5a7d252f32b2e859c584ef7d8efb1e689 \ |
| --hash=sha256:abd9246e4cdd5b554a2ddd97c157e292ac11ef3e7af25ac56b08b455c829dca8 \ |
| --hash=sha256:b14ee12da9338f5e5b3a3ef7ca58b3cba30f5b66f7662159762932e6d0b8f680 \ |
| --hash=sha256:b88f75005586131276634027f4219d06e0561292be8bd6bc7f2f00bdabd63c4e \ |
| --hash=sha256:c7be9d7f5b0d206f0bbc3794b8e16fb7dbc53ec9e40bbe8787c6f2d38efcf6c9 \ |
| --hash=sha256:d2d006286fbcb60f0b391741f520862e9b69f4019b4d738a2a45728c7e952f1b \ |
| --hash=sha256:db417f0865f90bdc07fa30e1aadc69b6f4cad7f86324b02aa842034efe8d8c4d \ |
| --hash=sha256:e7e10454cb1ab62cc6ce776e1c135a64045a11ec4c6d254d3f7689c16eb3efd2 \ |
| --hash=sha256:f65f9a46d984b8cd9b3750c2bdb419b2996895b005aefa6cbaba9a143b1ce2c5 \ |
| --hash=sha256:fea896b54f3a4ae6f790ac1d017101252c93f6fe075d0e7571543510f11d2676 |
| # via -r requirements.in |
| EOF |
| sudo pip install --require-hashes -r /tmp/swarming-requirements.txt |
| |
| # Increase nofile limit. |
| echo '* - nofile 500000' | sudo tee --append /etc/security/limits.conf |
| |
| # Install Chrome (for JS tests). |
| wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb |
| mkdir --parents ~/.config/google-chrome |
| touch ~/.config/google-chrome/First\\ Run |
| sudo dpkg --install google-chrome-stable_current_amd64.deb || \ |
| sudo apt-get --fix-broken --assume-yes install |
| rm google-chrome-stable_current_amd64.deb |
| |
| # Fix depot_tools. |
| if [ ! -d depot_tools/.git ]; then |
| rm -rf depot_tools |
| git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
| fi |
| |
| # Fix file ownership (necessary for disks created from snapshot due to |
| # mismatched numerical user IDs and group IDs; harmless in other cases). |
| pushd /mnt/pd0/ |
| ls | grep --invert-match 'lost+found' | \ |
| xargs --no-run-if-empty sudo chown --recursive chrome-bot:chrome-bot |
| popd |
| |
| # Install docker |
| pushd /tmp |
| # gittiles makes it hard to download the raw file, so just download it from github. |
| wget https://raw.githubusercontent.com/google/skia-buildbot/master/scripts/run_on_swarming_bots/install_docker.py |
| # The script returns exit code 1 on success, because it's intended to reboot the swarming bot |
| set +e |
| python -u /tmp/install_docker.py |
| set -e |
| popd |
| |
| # Get access token from metadata. |
| TOKEN_URL="http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" |
| TOKEN="$(curl "${TOKEN_URL}" --header "Metadata-Flavor: Google" | \ |
| python -c "import sys, json; print json.load(sys.stdin)['access_token']")" |
| # Bootstrap Swarming. |
| sudo ln --symbolic /mnt/pd0 /b |
| mkdir --parents /b/s |
| SWARMING=https://chromium-swarm.appspot.com |
| if [[ $(hostname) == *"-i-"* ]]; then |
| SWARMING=https://chrome-swarming.appspot.com |
| elif [[ $(hostname) == *"-d-"* ]]; then |
| SWARMING=https://chromium-swarm-dev.appspot.com |
| fi |
| HOSTNAME=`hostname` |
| curl "${SWARMING}/bot_code?bot_id=${HOSTNAME}" --header "Authorization":"Bearer $TOKEN" \ |
| --location --output /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 python3 /b/s/swarming_bot.zip start_bot |
| |
| [Install] |
| WantedBy=default.target |
| EOF |
| |
| sudo systemctl daemon-reload |
| sudo systemctl enable swarming_bot.service |