blob: 4b340f497ea3600a82a01cc707e803def7a2f443 [file] [log] [blame]
#!/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