| #!/bin/bash |
| # |
| # Setup the Skia buildbot image on a GCE instance. |
| # |
| # The instance must be called "skia-buildbot-image". Create it with: |
| # gcutil --project=google.com:skia-buildbots addinstance skia-buildbot-image \ |
| # --zone=us-central1-b --service_account=default \ |
| # --service_account_scopes="https://www.googleapis.com/auth/devstorage.full_control" \ |
| # --network=default --external_ip_address=173.255.114.239 --print_json \ |
| # --machine_type=n1-standard-2-d \ |
| # --image=projects/debian-cloud/global/images/debian-7-wheezy-v20130723 \ |
| # --nopersistent_boot_disk |
| # |
| # Copyright 2013 Google Inc. All Rights Reserved. |
| # Author: rmistry@google.com (Ravi Mistry) |
| |
| source vm_config.sh |
| |
| for REQUIRED_FILE in ${REQUIRED_FILES_FOR_SLAVES[@]}; do |
| if [ ! -f $REQUIRED_FILE ]; |
| then |
| echo "Please create $REQUIRED_FILE!" |
| exit 1 |
| fi |
| done |
| |
| VM_COMPLETE_NAME="skia-buildbot-image" |
| |
| echo """ |
| |
| ================================================ |
| Starting setup of ${VM_COMPLETE_NAME}..... |
| ================================================ |
| |
| """ |
| |
| FAILED="" |
| |
| echo |
| echo "===== Add i386 architecture. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo dpkg --add-architecture i386 && sudo apt-get update" \ |
| || FAILED="$FAILED InstallPackages1" |
| echo |
| |
| echo |
| echo "===== Install packages, Part 1. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo apt-get install --assume-yes libfreetype6 libfreetype6-dev" \ |
| || FAILED="$FAILED InstallPackages1" |
| echo |
| |
| echo |
| echo "===== Install packages, Part 2. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo apt-get install --assume-yes libgd2-xpm libgd2-xpm:i386" \ |
| || FAILED="$FAILED InstallPackages2" |
| echo |
| |
| echo |
| echo "===== Install packages, Part 3. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo apt-get install --assume-yes ia32-libs libgif4 libgif-dev openjdk-7-jdk " \ |
| "gcc-multilib g++-multilib lib32z1 && " \ |
| "sudo mv /usr/lib/libgif.* /usr/lib/x86_64-linux-gnu/ && " \ |
| "sudo mv /usr/lib/jvm/java-7-openjdk-amd64 /tmp/java-7-openjdk-amd64" \ |
| || FAILED="$FAILED InstallPackages3" |
| echo |
| |
| echo |
| echo "===== Install packages, Part 4. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo apt-get install --assume-yes libpng12-0 libpng12-dev libgl1-mesa-dev " \ |
| "libgl1-mesa-dri subversion postfix libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev mesa-common-dev " \ |
| "libosmesa6 libosmesa6-dev doxygen clang libQt4-dev git vim make python-dev g++ python-epydoc " \ |
| "libfontconfig-dev unzip ant ccache realpath python-setuptools bzip2 libgif4:i386 libgif-dev:i386 && " \ |
| "sudo easy_install --upgrade google-api-python-client && " \ |
| "sudo easy_install --upgrade pyOpenSSL" \ |
| || FAILED="$FAILED InstallPackages4" |
| echo |
| |
| echo |
| echo "===== Setup symlinks. =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libfreetype.so.6.8.1 /usr/lib32/libfreetype.so && " \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libfontconfig.so.1 /usr/lib32/libfontconfig.so && " \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libGL.so.1 /usr/lib32/libGL.so && " \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libGLU.so.1 /usr/lib32/libGLU.so && " \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libX11.so.6.3.0 /usr/lib32/libX11.so && " \ |
| "sudo ln -s -f /usr/lib32/libz.so.1 /usr/lib32/libz.so && " \ |
| "sudo ln -s -f /lib/i386-linux-gnu/libpng12.so.0 /usr/lib32/libpng.so && " \ |
| "sudo ln -s -f /usr/lib/i386-linux-gnu/libgif.so.4.1.6 /usr/lib/i386-linux-gnu/libgif.so && " \ |
| "sudo ln -s -f /usr/bin/ccache /usr/local/bin/cc && " \ |
| "sudo ln -s -f /usr/bin/ccache /usr/local/bin/c++ && " \ |
| "sudo ln -s -f /usr/bin/ccache /usr/local/bin/gcc && " \ |
| "sudo ln -s -f /usr/bin/ccache /usr/local/bin/g++ && " \ |
| "sudo mv /tmp/java-7-openjdk-amd64 /usr/lib/jvm/java-7-openjdk-amd64 && " \ |
| "sudo update-alternatives --set java /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java && " \ |
| "sudo ln -s /usr/lib/jvm/java-7-openjdk-amd64/bin/javac /usr/bin/javac && " \ |
| "sudo ln -s -f /home/default/skia-repo /home/chrome-bot" \ |
| || FAILED="$FAILED SetupSymlinks" |
| echo |
| |
| echo |
| echo "===== Setup automount scripts. =====" |
| $GCOMPUTE_CMD push --ssh_user=root $VM_COMPLETE_NAME \ |
| image-files/automount-sdb /etc/init.d/ |
| $GCOMPUTE_CMD push --ssh_user=root $VM_COMPLETE_NAME \ |
| image-files/automount-swap /etc/init.d/ |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "sudo chmod 755 /etc/init.d/automount-sdb && " \ |
| "sudo update-rc.d automount-sdb defaults && " \ |
| "sudo /etc/init.d/automount-sdb start && " \ |
| "sudo chmod 755 /etc/init.d/automount-swap && " \ |
| "sudo update-rc.d automount-swap defaults && " \ |
| "sudo /etc/init.d/automount-swap start" \ |
| || FAILED="$FAILED SetupAutomountScript" |
| echo |
| |
| echo |
| echo "===== Setup .bashrc =====" |
| $GCOMPUTE_CMD ssh --ssh_user=$PROJECT_USER $VM_COMPLETE_NAME \ |
| "if [[ ! -f /home/$PROJECT_USER/.bashrc.bak ]]; then cp /home/$PROJECT_USER/.bashrc /home/$PROJECT_USER/.bashrc.bak; fi && " \ |
| "echo 'export PATH=\"/home/$PROJECT_USER/$SKIA_REPO_DIR/depot_tools:/usr/local/sbin:/usr/sbin:/sbin:$PATH\"' >> /home/$PROJECT_USER/.bashrc && " \ |
| "echo 'alias m=\"cd /home/$PROJECT_USER/$SKIA_REPO_DIR/buildbot/master\"' >> /home/$PROJECT_USER/.bashrc && " \ |
| "echo 'alias s=\"cd /home/$PROJECT_USER/$SKIA_REPO_DIR/buildbot/slave\"' >> /home/$PROJECT_USER/.bashrc && " \ |
| "echo 'alias ll=\"ls -l\"' >> /home/$PROJECT_USER/.bashrc && " \ |
| "echo 'export ANDROID_SDK_ROOT=/home/$PROJECT_USER/$SKIA_REPO_DIR/android-sdk-linux' >> /home/$PROJECT_USER/.bashrc &&" \ |
| "echo 'source /home/$PROJECT_USER/.bashrc' >> /home/$PROJECT_USER/.bash_profile" \ |
| || FAILED="$FAILED SetupBashrc" |
| echo |
| |
| if [[ $FAILED ]]; then |
| echo |
| echo "FAILURES: $FAILED" |
| echo "Please manually fix these errors." |
| echo |
| fi |
| |
| echo |
| echo "===== Setup ssh keys. =====" |
| echo """ |
| Please manually ssh into ${VM_COMPLETE_NAME} and: |
| * Generate SSH keys (ssh-keygen -t dsa). |
| * Add the public key to the machine's /home/$PROJECT_USER/.ssh/authorized_keys |
| |
| ssh cmd: ${GCOMPUTE_CMD} ssh --ssh_user=default ${VM_COMPLETE_NAME} |
| """ |
| |
| echo |
| echo "===== Setup emailing. =====" |
| echo """ |
| Follow the instructions in |
| https://developers.google.com/compute/docs/networking#mailserver using skia.buildbots@gmail.com |
| |
| ssh cmd: ${GCOMPUTE_CMD} ssh --ssh_user=$PROJECT_USER ${VM_COMPLETE_NAME} |
| """ |
| echo |
| |
| echo |
| echo "Capture an image of this machine:" |
| echo "sudo python /usr/share/imagebundle/image_bundle.py -r / -o /home/default/skia-repo/ --log_file=/tmp/image.log" |
| echo "Copy the image to Google Storage:" |
| echo "* gsutil config" |
| echo "* gsutil cp /home/default/skia-repo/*.image.tar.gz gs://skia-images/skia-buildbot.image.tar.gz" |
| echo "Register the image with GCE:" |
| echo "* $GCOMPUTE_CMD deleteimage skia-buildbot-image" |
| echo "* $GCOMPUTE_CMD addimage skia-buildbot-image gs://skia-images/skia-buildbot.image.tar.gz --preferred_kernel=projects/google/global/kernels/gce-v20130603" |
| echo |
| |