| OLD | NEW |
| (Empty) |
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 # Script executed at instance startup. It installs the required dependencies, | |
| 6 # downloads the source code, and starts a web server. | |
| 7 | |
| 8 set -v | |
| 9 | |
| 10 get_instance_metadata() { | |
| 11 curl -fs http://metadata/computeMetadata/v1/instance/attributes/$1 \ | |
| 12 -H "Metadata-Flavor: Google" | |
| 13 } | |
| 14 | |
| 15 # Talk to the metadata server to get the project id | |
| 16 PROJECTID=$(curl -s \ | |
| 17 "http://metadata.google.internal/computeMetadata/v1/project/project-id" \ | |
| 18 -H "Metadata-Flavor: Google") | |
| 19 | |
| 20 # Install dependencies from apt | |
| 21 apt-get update | |
| 22 # Basic dependencies | |
| 23 apt-get install -yq git supervisor python-pip python-dev unzip | |
| 24 # Web server dependencies | |
| 25 apt-get install -yq libffi-dev libssl-dev | |
| 26 # Chrome dependencies | |
| 27 apt-get install -yq libpangocairo-1.0-0 libXcomposite1 libXcursor1 libXdamage1 \ | |
| 28 libXi6 libXtst6 libnss3 libcups2 libgconf2-4 libXss1 libXrandr2 \ | |
| 29 libatk1.0-0 libasound2 libgtk2.0-0 | |
| 30 # Trace collection dependencies | |
| 31 apt-get install -yq xvfb | |
| 32 | |
| 33 # Create a pythonapp user. The application will run as this user. | |
| 34 useradd -m -d /home/pythonapp pythonapp | |
| 35 | |
| 36 # pip from apt is out of date, so make it update itself and install virtualenv. | |
| 37 pip install --upgrade pip virtualenv | |
| 38 | |
| 39 # Download the Clovis deployment from Google Cloud Storage and unzip it. | |
| 40 # It is expected that the contents of the deployment have been generated using | |
| 41 # the tools/android/loading/gce/deploy.sh script. | |
| 42 CLOUD_STORAGE_PATH=`get_instance_metadata cloud-storage-path` | |
| 43 DEPLOYMENT_PATH=$CLOUD_STORAGE_PATH/deployment | |
| 44 | |
| 45 mkdir -p /opt/app/clovis | |
| 46 gsutil cp gs://$DEPLOYMENT_PATH/source/source.tgz /opt/app/clovis/source.tgz | |
| 47 tar xvf /opt/app/clovis/source.tgz -C /opt/app/clovis | |
| 48 rm /opt/app/clovis/source.tgz | |
| 49 | |
| 50 # Install app dependencies | |
| 51 virtualenv /opt/app/clovis/env | |
| 52 /opt/app/clovis/env/bin/pip install \ | |
| 53 -r /opt/app/clovis/src/tools/android/loading/gce/pip_requirements.txt | |
| 54 | |
| 55 mkdir /opt/app/clovis/binaries | |
| 56 gsutil cp gs://$DEPLOYMENT_PATH/binaries/* /opt/app/clovis/binaries/ | |
| 57 unzip /opt/app/clovis/binaries/linux.zip -d /opt/app/clovis/binaries/ | |
| 58 | |
| 59 # Install the Chrome sandbox | |
| 60 cp /opt/app/clovis/binaries/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox | |
| 61 chown root:root /usr/local/sbin/chrome-devel-sandbox | |
| 62 chmod 4755 /usr/local/sbin/chrome-devel-sandbox | |
| 63 | |
| 64 # Make sure the pythonapp user owns the application code | |
| 65 chown -R pythonapp:pythonapp /opt/app | |
| 66 | |
| 67 # Create the configuration file for this deployment. | |
| 68 DEPLOYMENT_CONFIG_PATH=/opt/app/clovis/deployment_config.json | |
| 69 cat >$DEPLOYMENT_CONFIG_PATH << EOF | |
| 70 { | |
| 71 "project_name" : "$PROJECTID", | |
| 72 "cloud_storage_path" : "$CLOUD_STORAGE_PATH", | |
| 73 "chrome_path" : "/opt/app/clovis/binaries/chrome", | |
| 74 "src_path" : "/opt/app/clovis/src" | |
| 75 } | |
| 76 EOF | |
| 77 | |
| 78 # Check if auto-start is enabled | |
| 79 AUTO_START=`get_instance_metadata auto-start` | |
| 80 | |
| 81 # Exit early if auto start is not enabled. | |
| 82 if [ "$AUTO_START" != "true" ]; then | |
| 83 exit 1 | |
| 84 fi | |
| 85 | |
| 86 # Configure supervisor to start gunicorn inside of our virtualenv and run the | |
| 87 # applicaiton. | |
| 88 cat >/etc/supervisor/conf.d/python-app.conf << EOF | |
| 89 [program:pythonapp] | |
| 90 directory=/opt/app/clovis/src/tools/android/loading/gce | |
| 91 command=/opt/app/clovis/env/bin/gunicorn --workers=1 --bind 0.0.0.0:8080 \ | |
| 92 'main:StartApp('\"$DEPLOYMENT_CONFIG_PATH\"')' | |
| 93 autostart=true | |
| 94 autorestart=true | |
| 95 user=pythonapp | |
| 96 # Environment variables ensure that the application runs inside of the | |
| 97 # configured virtualenv. | |
| 98 environment=VIRTUAL_ENV="/opt/app/clovis/env", \ | |
| 99 PATH="/opt/app/clovis/env/bin:/usr/bin", \ | |
| 100 HOME="/home/pythonapp",USER="pythonapp", \ | |
| 101 CHROME_DEVEL_SANDBOX="/usr/local/sbin/chrome-devel-sandbox" | |
| 102 stdout_logfile=syslog | |
| 103 stderr_logfile=syslog | |
| 104 EOF | |
| 105 | |
| 106 supervisorctl reread | |
| 107 supervisorctl update | |
| 108 | |
| OLD | NEW |