| # |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License |
| # |
| |
| # -*- mode: ruby -*- |
| # vi: set ft=ruby : |
| |
| $script = <<-SCRIPT |
| mkdir -p /var/lib/vagrant_dev_install_flags |
| function flag_is_set() { |
| if [ -e /var/lib/vagrant_dev_install_flags/$1 ]; then |
| return 0 |
| else |
| return 1 |
| fi |
| } |
| |
| function set_flag() { |
| touch /var/lib/vagrant_dev_install_flags/$1 |
| } |
| |
| function unset_flag() { |
| rm -f /var/lib/vagrant_dev_install_flags/$1 |
| } |
| |
| function unset_all_flags() { |
| rm -f /var/lib/vagrant_dev_install_flags/* |
| } |
| |
| # Set vagrant user pw |
| printf "vagrant:vagrant\n" | chpasswd |
| |
| # Update before we go |
| apt-get update |
| |
| # Install Java and other dependencies |
| if ! flag_is_set CORE_DEPS; then |
| apt-get -y install openjdk-7-jdk maven wget build-essential git uuid-dev && \ |
| set_flag CORE_DEPS |
| fi |
| |
| # Install IPython and ZeroMQ |
| IPYTHON_VERSION=3.2.1 |
| |
| if ! flag_is_set IPYTHON; then |
| apt-get -f -y install && \ |
| apt-get -y install python3-pip python-dev libzmq-dev build-essential && \ |
| cd /src && \ |
| pip3 install ipython[notebook]==${IPYTHON_VERSION} && \ |
| ipython profile create && \ |
| set_flag IPYTHON |
| fi |
| |
| if [ -z `which docker` ]; then |
| sudo apt-get update -y |
| sudo apt-get -y install apt-transport-https linux-image-extra-`uname -r` |
| printf "deb https://get.docker.com/ubuntu docker main\n" > /etc/apt/sources.list.d/docker.list |
| sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9 |
| sudo apt-get update -y |
| sudo apt-get install -y lxc-docker-1.4.1 |
| sudo chown vagrant:vagrant /var/run/docker.sock |
| fi |
| |
| # Installing R |
| if ! flag_is_set R; then |
| sudo sh -c 'printf "deb http://cran.cnr.Berkeley.edu/bin/linux/ubuntu trusty/" >> /etc/apt/sources.list' && \ |
| sudo apt-get update -y && \ |
| sudo apt-get install r-base r-base-dev && \ |
| sudo chmod 777 /usr/local/lib/R/site-library && \ |
| set_flag R |
| fi |
| |
| # Install scala and sbt (if not already installed) |
| cd /tmp |
| |
| # If Scala is not installed, install it |
| if ! flag_is_set SCALA; then |
| apt-get install -f -y && \ |
| apt-get install -y libjansi-java && \ |
| apt-get install -f -y && \ |
| wget --progress=bar:force http://www.scala-lang.org/files/archive/scala-2.10.4.deb && \ |
| dpkg -i scala-2.10.4.deb && \ |
| rm scala-2.10.4.deb && \ |
| set_flag SCALA |
| fi |
| |
| # If sbt is not installed, install it |
| if ! flag_is_set SBT; then |
| wget --progress=bar:force http://dl.bintray.com/sbt/debian/sbt-0.13.9.deb && \ |
| dpkg -i sbt-0.13.9.deb && \ |
| rm sbt-0.13.9.deb && \ |
| set_flag SBT |
| fi |
| |
| # Downloading Spark |
| SPARK_VERSION=1.5.1 |
| if ! flag_is_set SPARK; then |
| cd /opt && \ |
| wget http://apache.arvixe.com/spark/spark-${SPARK_VERSION}/spark-${SPARK_VERSION}-bin-hadoop2.3.tgz && \ |
| tar xvzf spark-${SPARK_VERSION}-bin-hadoop2.3.tgz && \ |
| ln -s spark-${SPARK_VERSION}-bin-hadoop2.3 spark && \ |
| export SPARK_HOME=/opt/spark && \ |
| set_flag SPARK |
| fi |
| |
| # Add Spark Kernel json to IPython configuration |
| echo "Adding kernel.json" |
| mkdir -p /home/vagrant/.ipython/kernels/toree-kernel |
| cat << EOF > /home/vagrant/.ipython/kernels/toree-kernel/kernel.json |
| { |
| "display_name": "Toree", |
| "language_info": { "name": "scala" }, |
| "argv": [ |
| "/src/toree-kernel/dist/toree/bin/run.sh", |
| "--profile", |
| "{connection_file}" |
| ], |
| "codemirror_mode": "scala", |
| "env": { |
| "SPARK_OPTS": "--conf=spark.cores.max=4 --driver-java-options='-Xms1024M -Xmx4096M -Dlog4j.logLevel=trace'", |
| "MAX_INTERPRETER_THREADS": "16", |
| "CAPTURE_STANDARD_OUT": "true", |
| "CAPTURE_STANDARD_ERR": "true", |
| "SEND_EMPTY_OUTPUT": "false", |
| "SPARK_HOME": "/opt/spark", |
| "PYTHONPATH": "/opt/spark/python:/opt/spark/python/lib/py4j-0.8.2.1-src.zip" |
| } |
| } |
| EOF |
| |
| # Add Scala syntax highlighting support to custom.js of default profile |
| printf "Appending to profile_default custom.js\n" |
| (su vagrant |
| mkdir -p /home/vagrant/.ipython/profile_default/static/custom/ |
| cat << EOF >> /home/vagrant/.ipython/profile_default/static/custom/custom.js |
| CodeMirror.requireMode('clike',function(){ |
| "use strict"; |
| |
| CodeMirror.defineMode("scala", function(conf, parserConf) { |
| var scalaConf = {}; |
| for (var prop in parserConf) { |
| if (parserConf.hasOwnProperty(prop)) { |
| scalaConf[prop] = parserConf[prop]; |
| } |
| } |
| |
| scalaConf.name = 'text/x-scala'; |
| |
| var mode = CodeMirror.getMode(conf, scalaConf); |
| |
| return mode; |
| }, 'scala'); |
| |
| CodeMirror.defineMIME("text/x-spark", "spark", "scala"); |
| }) |
| EOF |
| ) |
| |
| chown -R vagrant.vagrant /home/vagrant/.ipython |
| |
| SCRIPT |
| |
| Vagrant.configure("2") do |config| |
| # Have the script install docker |
| config.vm.provision :shell, :inline => $script |
| |
| # Every Vagrant virtual environment requires a box to build off of. |
| config.vm.box = "trusty_ubuntu" |
| config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box" |
| config.vm.hostname = "host-box" |
| |
| # Mount the directory containing this file as /vagrant in the VM. |
| # Since this file is copied around we need to figure out where the docker files are |
| config.vm.synced_folder "./" , "/src/toree-kernel" |
| |
| # Create a private network, which allows host-only access to the machine |
| # using a specific IP. Make sure this IP doesn't exist on your local network. |
| config.vm.network :private_network, ip: "192.168.44.44" |
| config.vm.network :forwarded_port, guest: 22, host: 2223 |
| |
| # Configure memory and cpus |
| config.vm.provider :virtualbox do |vb| |
| vb.customize ["modifyvm", :id, "--memory", "2048"] |
| vb.customize ["modifyvm", :id, "--cpus", "2"] |
| vb.name = "toree-kernel-vm" |
| |
| end |
| end |