diff --git a/.travis.yml b/.travis.yml
index d29d0e8ab8742e0335fec13b3711e44a44b008a6..82d8316dda3c727c534f8dcf425dcbc0d503345d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,6 +14,7 @@ env:
   global:
     - RUBY_VERSION=2.1
     - COVERALLS_PARALLEL=true
+    - CPPFLAGS=-I/tmp/prebuilt/include
     - NUGET="mono nuget.exe"
   matrix:
     - CONFIG=opt TEST=sanity
@@ -29,6 +30,7 @@ env:
 script:
   - rvm use $RUBY_VERSION
   - gem install bundler
+  - ./tools/run_tests/prepare_travis.sh
   - if [ ! -z "$USE_GCC" ] ; then export CC=gcc-$USE_GCC ; export CXX=g++-$USE_GCC ; fi
   - ./tools/run_tests/run_tests.py -l $TEST -t -j 16 -c $CONFIG -s 4.0
 after_success:
diff --git a/tools/run_tests/prepare_travis.sh b/tools/run_tests/prepare_travis.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a8ddc578d5fdde4cc1e5a2066d968a0d41378bc5
--- /dev/null
+++ b/tools/run_tests/prepare_travis.sh
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+cd `dirname $0`/../..
+grpc_dir=`pwd`
+
+distrib=`md5sum /etc/issue | cut -f1 -d\ `
+echo "Configuring for disbribution $distrib"
+git submodule | while read sha path extra ; do
+  cd /tmp
+  name=`basename $path`
+  file=$name-$sha-$CONFIG-prebuilt-$distrib.tar.gz
+  echo -n "$file ..."
+  url=http://storage.googleapis.com/grpc-prebuilt-packages/$file
+  wget -q $url && (
+    echo " Found."
+    tar xfz $file
+  ) || true
+done
+
+mkdir -p bins/$CONFIG/protobuf
+mkdir -p libs/$CONFIG/protobuf
+mkdir -p libs/$CONFIG/openssl
+
+function cpt {
+  cp /tmp/prebuilt/$1 $2/$CONFIG/$3
+  touch $2/$CONFIG/$3/`basename $1`
+}
+
+if [ -e /tmp/prebuilt/bin/protoc ] ; then
+  touch third_party/protobuf/configure
+  cpt bin/protoc bins protobuf
+  cpt lib/libprotoc.a libs protobuf
+  cpt lib/libprotobuf.a libs protobuf
+fi
+
+if [ -e /tmp/prebuilt/lib/libssl.a ] ; then
+  cpt lib/libcrypto.a libs openssl
+  cpt lib/libssl.a libs openssl
+fi