Ver código fonte

Move installation to bash

Logically this code is quite similar to before, it's just
using the shell directly instead of going through python.

This defines a trivial dependency system with `fw_depends`.
Where possible, I have specified inherent dependencies (e.g.
siena depends on play1), but callers should declare their
dependencies in proper order to be safe.

Bugs Fixed:
- HHVM: Was forcing trusty name on all Ubuntu versions
- WT: Was checking for installs/namak
- Ruby: Removed single quotes preventing proper source
- Ruby: Was attempting to use rvm before sourcing ~/.profile
Hamilton Turner 11 anos atrás
pai
commit
d1b3da7828
48 arquivos alterados com 666 adições e 432 exclusões
  1. 55 0
      toolset/setup/linux/bash_functions.sh
  2. 7 0
      toolset/setup/linux/frameworks/grails.sh
  3. 6 0
      toolset/setup/linux/frameworks/jester.sh
  4. 6 0
      toolset/setup/linux/frameworks/nawak.sh
  5. 13 0
      toolset/setup/linux/frameworks/onion.sh
  6. 8 0
      toolset/setup/linux/frameworks/play1.sh
  7. 7 0
      toolset/setup/linux/frameworks/play2.sh
  8. 8 0
      toolset/setup/linux/frameworks/siena.sh
  9. 26 0
      toolset/setup/linux/frameworks/treefrog.sh
  10. 7 0
      toolset/setup/linux/frameworks/vertx.sh
  11. 22 0
      toolset/setup/linux/frameworks/wt.sh
  12. 4 0
      toolset/setup/linux/frameworks/yesod.sh
  13. 32 432
      toolset/setup/linux/installer.py
  14. BIN
      toolset/setup/linux/languages/._dart.sh
  15. 8 0
      toolset/setup/linux/languages/composer.sh
  16. 7 0
      toolset/setup/linux/languages/dart.sh
  17. 15 0
      toolset/setup/linux/languages/elixir.sh
  18. 13 0
      toolset/setup/linux/languages/erlang.sh
  19. 7 0
      toolset/setup/linux/languages/go.sh
  20. 7 0
      toolset/setup/linux/languages/haskell.sh
  21. 10 0
      toolset/setup/linux/languages/hhvm.sh
  22. 6 0
      toolset/setup/linux/languages/java.sh
  23. 8 0
      toolset/setup/linux/languages/jruby.sh
  24. 20 0
      toolset/setup/linux/languages/mono.sh
  25. 22 0
      toolset/setup/linux/languages/nimrod.sh
  26. 7 0
      toolset/setup/linux/languages/nodejs.sh
  27. 11 0
      toolset/setup/linux/languages/perl.sh
  28. 8 0
      toolset/setup/linux/languages/phalcon.sh
  29. 29 0
      toolset/setup/linux/languages/php.sh
  30. 13 0
      toolset/setup/linux/languages/pypy.sh
  31. 17 0
      toolset/setup/linux/languages/python2.sh
  32. 15 0
      toolset/setup/linux/languages/python3.sh
  33. 17 0
      toolset/setup/linux/languages/racket.sh
  34. 10 0
      toolset/setup/linux/languages/ringojs.sh
  35. 16 0
      toolset/setup/linux/languages/ruby.sh
  36. 11 0
      toolset/setup/linux/languages/urweb.sh
  37. 11 0
      toolset/setup/linux/languages/xsp.sh
  38. 15 0
      toolset/setup/linux/languages/yaf.sh
  39. 48 0
      toolset/setup/linux/prerequisites.sh
  40. 9 0
      toolset/setup/linux/systools/leiningen.sh
  41. 7 0
      toolset/setup/linux/systools/maven.sh
  42. 7 0
      toolset/setup/linux/webservers/lapis.sh
  43. 24 0
      toolset/setup/linux/webservers/mongrel2.sh
  44. 11 0
      toolset/setup/linux/webservers/nginx.sh
  45. 12 0
      toolset/setup/linux/webservers/openresty.sh
  46. 20 0
      toolset/setup/linux/webservers/resin.sh
  47. 13 0
      toolset/setup/linux/webservers/weber.sh
  48. 11 0
      toolset/setup/linux/webservers/zeromq.sh

+ 55 - 0
toolset/setup/linux/bash_functions.sh

@@ -0,0 +1,55 @@
+#!/bin/sh
+
+# Setting this variable will cause apt-get and wget to 
+# your proxy server. Yay!
+export http_proxy=http://10.0.1.0:3128
+
+fw_get () {
+  wget --no-check-certificate --trust-server-names "$@"
+}
+
+fw_untar() {
+  # tar xzf "$@"
+  tar xvzf "$@"
+}
+
+fw_unzip() {
+  unzip "$@"
+}
+
+# Requires dependencies to come in order e.g. Nimrod before
+# Jester, etc. Users should be know this 
+# fairly well (e.g. you can't use Yaf without PHP)
+fw_depends() {
+  for depend in "$@"
+  do
+    echo Searching for $depend
+    if [ -f ../toolset/setup/linux/systools/${depend}.sh ]; then
+      echo Installing system tool: $depend 
+      sh ../toolset/setup/linux/systools/${depend}.sh
+    fi
+    if [ -f ../toolset/setup/linux/languages/${depend}.sh ]; then
+      echo Installing language: $depend 
+      sh ../toolset/setup/linux/languages/${depend}.sh
+    fi
+    if [ -f ../toolset/setup/linux/webservers/${depend}.sh ]; then
+      echo Installing webserver: $depend 
+      sh ../toolset/setup/linux/webservers/${depend}.sh
+    fi
+    if [ -f ../toolset/setup/linux/frameworks/${depend}.sh ]; then
+      echo Installing framework: $depend
+      sh ../toolset/setup/linux/frameworks/${depend}.sh
+    fi
+  done  
+}
+
+# Exits 0 if file or directory exists
+fw_exists() {
+  if [ -f $1 ] || [ -d $1 ]; then
+    return 0
+  else
+    return 1
+  fi 
+}
+
+

+ 7 - 0
toolset/setup/linux/frameworks/grails.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists grails-2.4.2
+[ $? -ne 0 ] || { echo "Grails is installed!"; return 0; }
+
+fw_get http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.4.2.zip
+unzip -o grails-2.4.2.zip

+ 6 - 0
toolset/setup/linux/frameworks/jester.sh

@@ -0,0 +1,6 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists jester
+[ $? -ne 0 ] || { echo "Jester is installed!"; return 0; }
+
+git clone git://github.com/dom96/jester.git jester/jester

+ 6 - 0
toolset/setup/linux/frameworks/nawak.sh

@@ -0,0 +1,6 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists nawak
+[ $? -ne 0 ] || { echo "Nawak is installed!"; return 0; }
+
+git clone git://github.com/idlewan/nawak.git nawak/nawak

+ 13 - 0
toolset/setup/linux/frameworks/onion.sh

@@ -0,0 +1,13 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists onion
+[ $? -ne 0 ] || { echo "onion is installed!"; return 0; }
+
+git clone https://github.com/davidmoreno/onion.git
+
+
+cd onion
+mkdir build
+cd build
+cmake ..
+make

+ 8 - 0
toolset/setup/linux/frameworks/play1.sh

@@ -0,0 +1,8 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists play-1.2.5
+[ $? -ne 0 ] || { echo "Play version 1 is installed!"; return 0; }
+
+fw_get http://downloads.typesafe.com/releases/play-1.2.5.zip -O play-1.2.5.zip
+fw_unzip play-1.2.5.zip
+mv play-1.2.5/play play-1.2.5/play1

+ 7 - 0
toolset/setup/linux/frameworks/play2.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists play-2.2.0
+[ $? -ne 0 ] || { echo "Play version 2 is installed!"; return 0; }
+
+fw_get http://downloads.typesafe.com/play/2.2.0/play-2.2.0.zip
+fw_unzip play-2.2.0.zip

+ 8 - 0
toolset/setup/linux/frameworks/siena.sh

@@ -0,0 +1,8 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+
+fw_exists play-1.2.5/modules/siena-2.0.6
+[ $? -ne 0 ] || { echo "Siena is installed!"; return 0; }
+
+fw_depends play1
+yes | play-1.2.5/play1 install siena

+ 26 - 0
toolset/setup/linux/frameworks/treefrog.sh

@@ -0,0 +1,26 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/bin/treefrog
+ret1=$?
+fw_exists /usr/bin/tspawn
+ret2=$?
+if [ $ret1 -eq 0 ] && [ $ret2 -eq 0 ]; then 
+  echo "Treefrog is installed!"; 
+  return 0;
+fi
+
+
+sudo apt-get install -y qt4-qmake libqt4-dev libqt4-sql-mysql libqt4-sql-psql g++
+
+fw_get http://downloads.sourceforge.net/project/treefrog/src/treefrog-1.7.5.tar.gz
+fw_untar treefrog-1.7.5.tar.gz
+cd treefrog-1.7.5
+./configure
+
+cd src
+make
+sudo make install
+
+cd ../tools
+make
+sudo make install

+ 7 - 0
toolset/setup/linux/frameworks/vertx.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists vert.x-2.1.1
+[ $? -ne 0 ] || { echo "Vert.x is installed!"; return 0; }
+
+fw_get http://dl.bintray.com/vertx/downloads/vert.x-2.1.1.tar.gz?direct=true -O vert.x-2.1.1.tar.gz
+fw_untar vert.x-2.1.1.tar.gz

+ 22 - 0
toolset/setup/linux/frameworks/wt.sh

@@ -0,0 +1,22 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists wt
+[ $? -ne 0 ] || { echo "wt is installed!"; return 0; }
+
+# TODO can this be changed based on the OS we are using? This is not
+# available on 12.04 (libboost-all-dev is available, but requires some
+# apt-get cleaning before it can be installed)
+sudo apt-get install libboost1.54-all-dev
+
+fw_get http://downloads.sourceforge.net/witty/wt-3.3.3.tar.gz -O wt.tar.gz
+fw_untar wt.tar.gz
+
+mv wt-* wt
+cd wt
+mkdir build
+cd build
+cmake .. -DWT_CPP_11_MODE=-std=c++0x -DCMAKE_BUILD_TYPE=Release
+make
+sudo make install
+
+rm wt.tar.gz

+ 4 - 0
toolset/setup/linux/frameworks/yesod.sh

@@ -0,0 +1,4 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+cabal update
+cabal install yesod persistent-mysql

+ 32 - 432
toolset/setup/linux/installer.py

@@ -4,6 +4,8 @@ import os.path
 import time
 import traceback
 import sys
+import glob
+import logging
 
 class Installer:
 
@@ -29,445 +31,40 @@ class Installer:
   ############################################################
   def __install_server_software(self):
     print("\nINSTALL: Installing server software\n")
-    #######################################
-    # Prerequisites
-    #######################################
-    self.__run_command("sudo apt-get -y update")
-    self.__run_command("sudo apt-get -y upgrade")
-    self.__run_command("sudo apt-get -y install build-essential libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev python-software-properties unzip git-core libcurl4-openssl-dev libbz2-dev libmysqlclient-dev mongodb-clients libreadline6-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev libgdbm-dev ncurses-dev automake libffi-dev htop libtool bison libevent-dev libgstreamer-plugins-base0.10-0 libgstreamer0.10-0 liborc-0.4-0 libwxbase2.8-0 libwxgtk2.8-0 libgnutls-dev libjson0-dev libmcrypt-dev libicu-dev cmake gettext curl libpq-dev mercurial mlton")
-    self.__run_command("sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y")
-    self.__run_command("sudo apt-get -y update")
-    self.__run_command("sudo apt-get install -y gcc-4.8 g++-4.8")
-
-    self.__run_command("cp ../config/benchmark_profile ../../.bash_profile")
-    self.__run_command("cat ../config/benchmark_profile >> ../../.profile")
-    self.__run_command("cat ../config/benchmark_profile >> ../../.bashrc")
-    self.__run_command(". ../../.profile")
-    self.__run_command("sudo sh -c \"echo '*               -    nofile          65535' >> /etc/security/limits.conf\"")
-
-    ##############################################################
-    # System Tools
-    ##############################################################
-
-    #
-    # Leiningen
-    #
-    if not self.__path_exists("bin/lein"):
-        self.__run_command("mkdir -p bin")
-        self.__download("https://raw.github.com/technomancy/leiningen/stable/bin/lein")
-        self.__run_command("mv lein bin/lein")
-        self.__run_command("chmod +x bin/lein")
-
-    #
-    # Maven
-    #
-    if not self.__path_exists("/usr/bin/mvn"):
-        self.__run_command("sudo apt-get -y install maven -qq")
-        self.__run_command("mvn -version")
-
-    #######################################
-    # Languages
-    #######################################
-    self._install_python()
-
-    #
-    # Dart
-    #
-    if not self.__path_exists("dart-sdk"):
-        self.__download("http://storage.googleapis.com/dart-archive/channels/stable/release/latest/sdk/dartsdk-linux-x64-release.zip")
-        self.__run_command("unzip dartsdk-linux-x64-release.zip")
-
-    #
-    # Erlang
-    #
-    if not self.__path_exists("/usr/bin/erl"):
-        self.__run_command("sudo cp ../config/erlang.list /etc/apt/sources.list.d/erlang.list")
-        self.__download("http://binaries.erlang-solutions.com/debian/erlang_solutions.asc")
-        self.__run_command("sudo apt-key add erlang_solutions.asc")
-        self.__run_command("sudo apt-get -y update")
-        self.__run_command("sudo apt-get install -y esl-erlang")
-
-    #
-    # nodejs
-    #
-    if not self.__path_exists("node-v0.10.8-linux-x64"):
-        self.__download("http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x64.tar.gz")
-        self.__run_command("tar xzf node-v0.10.8-linux-x64.tar.gz")
-
-    #
-    # Java
-    #
-    self.__run_command("sudo apt-get install -y openjdk-7-jdk")
-    self.__run_command("sudo apt-get remove -y --purge openjdk-6-jre openjdk-6-jre-headless")
-
-    #
-    # Elixir
-    #
-		## Should work if you run make clean test manually
-    #if not self.__path_exists("v0.13.3.tar.gz"):
-    #  self.__run_command("wget https://github.com/elixir-lang/elixir/archive/v0.13.3.tar.gz");
-    #  self.__run_command("sudo tar -zxf v0.13.3.tar.gz");
-#      self.__run_command("bash -c -i 'sudo make install'", cwd="elixir-0.13.3");
-    #self.__run_command("sudo make clean", cwd="elixir-0.13.3");
-    #self.__run_command("sudo make test", cwd="elixir-0.13.3");
-			
-    #
-    # Ruby/JRuby
-    #
-    self.__run_command("curl -L get.rvm.io | bash -s head --auto-dotfiles")
-    self.__run_command("echo rvm_auto_reload_flag=2 >> ~/.rvmrc")
-    if not self.__path_exists("../../.rvm/rubies/ruby-2.0.0-p0/"):
-      self.__bash_from_string("source ~/.rvm/scripts/'rvm' && rvm install 2.0.0-p0")
-      self.__bash_from_string("source ~/.rvm/scripts/'rvm' && rvm 2.0.0-p0 do gem install bundler")
-    if not self.__path_exists("../../.rvm/rubies/jruby-1.7.8/"):
-      self.__bash_from_string("source ~/.rvm/scripts/'rvm' && rvm install jruby-1.7.8")
-      self.__bash_from_string("source ~/.rvm/scripts/'rvm' && rvm jruby-1.7.8 do gem install bundler")
-
-    #
-    # go
-    #
-    if not self.__path_exists("go"):
-        self.__download("https://storage.googleapis.com/golang/go1.3.linux-amd64.tar.gz");
-        self.__run_command("tar xzf go1.3.linux-amd64.tar.gz")
-
-    #
-    # Perl
-    #
-    if not self.__path_exists("perl-5.18"):
-      self.__download("https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build", "perl-build.pl")
-      self.__run_command("perl perl-build.pl -DDEBUGGING=-g 5.18.2 ~/FrameworkBenchmarks/installs/perl-5.18", retry=True)
-      self.__download("http://cpanmin.us", "cpanminus.pl")
-      self.__run_command("~/FrameworkBenchmarks/installs/perl-5.18/bin/perl cpanminus.pl --notest --no-man-page App::cpanminus", retry=True)
-      self.__run_command("~/FrameworkBenchmarks/installs/perl-5.18/bin/cpanm -f --notest --no-man-page DBI DBD::mysql Kelp Dancer Mojolicious Kelp::Module::JSON::XS Dancer::Plugin::Database Starman Plack JSON Web::Simple DBD::Pg JSON::XS EV HTTP::Parser::XS Monoceros EV IO::Socket::IP IO::Socket::SSL Memoize", retry=True)
-
-    #
-    # php
-    #
-    if not self.__path_exists("/usr/local/bin/php"):
-        self.__download("http://museum.php.net/php5/php-5.4.13.tar.gz")
-        self.__run_command("tar xzf php-5.4.13.tar.gz")
-        self.__run_command("./configure --with-pdo-mysql --with-mysql --with-mcrypt --enable-intl --enable-mbstring --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-openssl", cwd="php-5.4.13")
-        self.__run_command("make", cwd="php-5.4.13")
-        self.__run_command("sudo make install", cwd="php-5.4.13")
-
-    if not self.__path_exists("/usr/local/lib/php/extensions/no-debug-non-zts-20100525/apc.so"):
-        self.__run_command("printf \"\\n\" | sudo pecl install apc-beta", cwd="php-5.4.13", retry=True)
-
-    self.__run_command("sudo cp ../config/php.ini /usr/local/lib/php.ini")
-    self.__run_command("sudo cp ../config/php-fpm.conf /usr/local/lib/php-fpm.conf")
-
-    # Composer
-    if not self.__path_exists("bin/composer.phar"):
-        self.__download("https://getcomposer.org/installer", "composer-installer.php")
-        self.__run_command("php composer-installer.php --install-dir=bin")
-
-    # Phalcon
-    if not self.__path_exists("/usr/local/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so"):
-        self.__run_command("test -d cphalcon || git clone git://github.com/phalcon/cphalcon.git", retry=True)
-        self.__run_command("sudo ./install", cwd="cphalcon/build")
-
-    # YAF
-    if not self.__path_exists("/usr/local/lib/php/extensions/no-debug-non-zts-20100525/yaf.so"):
-        self.__run_command("sudo pecl install -f yaf")
-
-    #
-    # Haskell
-    #
-    if not self.__path_exists("/usr/bin/haskell-compiler"):       ##not sure if right
-        self.__run_command("sudo apt-get install -y ghc cabal-install")
-
-    #
-    # RingoJs
-    #
-    if not self.__path_exists("/usr/share/ringojs"):
-        self.__download("http://www.ringojs.org/downloads/ringojs_0.10-1_all.deb")
-        self.__run_command("sudo apt-get install -y jsvc")
-        self.__run_command("sudo dpkg -i ringojs_0.10-1_all.deb", True)
-        self.__run_command("rm ringojs_0.10-1_all.deb")
-
-    #
-    # Mono
-    #
-
-    if not self.__path_exists("mono-3.2.8"):
-        self.__download("http://download.mono-project.com/sources/mono/mono-3.2.8.tar.bz2", "mono-3.2.8.tar.bz2")
-        self.__run_command("tar xf mono-3.2.8.tar.bz2")
-        self.__run_command("./configure --disable-nls --prefix=/usr/local", cwd="mono-3.2.8")
-        self.__run_command("make get-monolite-latest", cwd="mono-3.2.8")
-        self.__run_command("make -j4 EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/basic.exe", cwd="mono-3.2.8")
-        self.__run_command("sudo make install", cwd="mono-3.2.8")
-        self.__run_command("mv mono-3.2.8 mono");
-
-    self.__run_command("mozroots --import --sync", retry=True)
-    
-    if not self.__path_exists("xsp"):
-        self.__run_command("git clone --depth 1 git://github.com/mono/xsp", retry=True)
-        self.__run_command("./autogen.sh --prefix=/usr/local", cwd="xsp")
-        self.__run_command("make", cwd="xsp")
-        self.__run_command("sudo make install", cwd="xsp")
-
-    #
-    # Nimrod
-    #
-    if not self.__path_exists("nimrod/bin/nimrod"):
-        self.__run_command("test -d nimrod || git clone git://github.com/Araq/Nimrod.git nimrod", retry=True)
-        self.__run_command("git checkout 987ac2439a87d74838233a7b188e4db340495ee5", cwd="nimrod")
-        self.__run_command("test -d csources || git clone git://github.com/nimrod-code/csources.git", cwd="nimrod", retry=True)
-        self.__run_command("git checkout 704015887981932c78a033dd5ede623b2ad6ae27", cwd="nimrod/csources");
-        self.__run_command("chmod +x build.sh", cwd="nimrod/csources")
-        self.__run_command("./build.sh", cwd="nimrod/csources")
-
-    if not self.__path_exists("nimrod/koch"):
-        self.__run_command("bin/nimrod c koch", cwd="nimrod")
-        self.__run_command("./koch boot -d:release", cwd="nimrod")
-
-    #
-    # Racket
-    #
-    if not self.__path_exists("racket-5.3.6/bin/racket") or not self.__path_exists("racket-5.3.6/collects/racket"):
-        self.__download("https://github.com/plt/racket/archive/v5.3.6.tar.gz", "racket-5.3.6.tar.gz")
-        self.__run_command("tar xzf racket-5.3.6.tar.gz")
-        self.__run_command("./configure", cwd="racket-5.3.6/src")
-        self.__run_command("make", cwd="racket-5.3.6/src")
-        self.__run_command("sudo make install", cwd="racket-5.3.6/src")
-
-    #
-    # Ur/Web
-    #
-    if not self.__path_exists("/usr/local/bin/urweb"):
-        self.__run_command("hg clone http://hg.impredicative.com/urweb")
-        self.__run_command("./autogen.sh", cwd="urweb")
-        self.__run_command("./configure", cwd="urweb")
-        self.__run_command("make", cwd="urweb")
-        self.__run_command("sudo make install", cwd="urweb")
     
-    #
-    # HHVM
-    #
-    if not self.__path_exists("/usr/bin/hhvm"):
-        self.__run_command("sudo add-apt-repository -y ppa:mapnik/v2.2.0")
-        self.__run_command("wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -")
-        self.__run_command("echo deb http://dl.hhvm.com/ubuntu trusty main | sudo tee /etc/apt/sources.list.d/hhvm.list")
-        self.__run_command("sudo apt-get update")
-        self.__run_command("sudo apt-get install -y hhvm")
-
-    #######################################
-    # Webservers
-    #######################################
-
-    #
-    # Nginx
-    #
-    if not self.__path_exists("/usr/local/nginx/sbin/nginx"):
-        self.__download("http://nginx.org/download/nginx-1.4.1.tar.gz")
-        self.__run_command("tar xzf nginx-1.4.1.tar.gz")
-        self.__run_command("./configure", cwd="nginx-1.4.1")
-        self.__run_command("make", cwd="nginx-1.4.1")
-        self.__run_command("sudo make install", cwd="nginx-1.4.1")
-
-    #
-    # Openresty (nginx with lua stuff)
-    #
-    if not self.__path_exists("/usr/local/openresty/nginx/sbin/nginx"):
-        self.__download("http://openresty.org/download/ngx_openresty-1.5.8.1.tar.gz")
-        self.__run_command("tar xzf ngx_openresty-1.5.8.1.tar.gz")
-        self.__run_command("./configure --with-luajit --with-http_postgres_module", cwd="ngx_openresty-1.5.8.1")
-        self.__run_command("make", cwd="ngx_openresty-1.5.8.1")
-        self.__run_command("sudo make install", cwd="ngx_openresty-1.5.8.1")
+    self.__run_command("sh ../toolset/setup/linux/prerequisites.sh")
+
+    # Pull in benchmarker include and exclude list
+    exclude = self.benchmarker.exclude
+    include = self.benchmarker.test
+    if exclude == None:
+        exclude = []
+
+    # Assume we are running from FrameworkBenchmarks
+    install_files = glob.glob('*/install.sh')
+
+    for install_file in install_files:
+        test = os.path.dirname(install_file)
+        
+        if test in exclude:
+            logging.debug("%s has been excluded", test)
+            continue
+        elif include is not None and test not in include:
+            logging.debug("%s not in include list", test)
+            continue
+        else:
+            logging.debug("Running installer for %s", test)
+            bash_functions_path="../toolset/setup/linux/bash_functions.sh"
+            self.__run_command(". %s && . ../%s" % (bash_functions_path, install_file))
+
+    self.__run_command("sudo apt-get -y autoremove");
     
-    #
-    # Lapis
-    #
-    if not self.__path_exists("/usr/local/bin/lapis"):
-        self.__run_command("sudo apt-get install -y luarocks")
-        self.__run_command("sudo luarocks install http://github.com/leafo/lapis/raw/master/lapis-dev-1.rockspec")
-
-
-    #
-    # Resin
-    #
-    if not self.__path_exists("resin-4.0.36/conf/resin.xml"):
-        self.__run_command("sudo cp -r /usr/lib/jvm/java-1.7.0-openjdk-amd64/include /usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/bin/")
-        self.__download("http://www.caucho.com/download/resin-4.0.36.tar.gz")
-        self.__run_command("tar xzf resin-4.0.36.tar.gz")
-        self.__run_command("./configure --prefix=`pwd`", cwd="resin-4.0.36")
-        self.__run_command("make", cwd="resin-4.0.36")
-        self.__run_command("make install", cwd="resin-4.0.36")
-        self.__run_command("mv conf/resin.properties conf/resin.properties.orig", cwd="resin-4.0.36")
-        self.__run_command("cat ../config/resin.properties > resin-4.0.36/conf/resin.properties")
-        self.__run_command("mv conf/resin.xml conf/resin.xml.orig", cwd="resin-4.0.36")
-        self.__run_command("cat ../config/resin.xml > resin-4.0.36/conf/resin.xml")
-
-    #
-    # Mongrel2
-    #
-    if not self.__path_exists("/usr/local/lib/libzmq.a"):
-        self.__download("http://download.zeromq.org/zeromq-4.0.3.tar.gz")
-        self.__run_command("tar xzf zeromq-4.0.3.tar.gz")
-        self.__run_command("./configure", cwd="zeromq-4.0.3")
-        self.__run_command("make", cwd="zeromq-4.0.3")
-        self.__run_command("sudo make install", cwd="zeromq-4.0.3")
-
-    self.__run_command("sudo apt-get install -y sqlite3 libsqlite3-dev uuid uuid-runtime uuid-dev")
-    self.__run_command("sudo ldconfig -v")
-
-    if not self.__path_exists("/usr/local/bin/mongrel2"):
-        self.__download("https://github.com/zedshaw/mongrel2/tarball/v1.8.1", "mongrel2.tar.gz")
-        self.__run_command("tar xvf mongrel2.tar.gz")
-        self.__run_command("mv zedshaw-mongrel2-aa2ecf8 mongrel2")
-        # for zmq4, we update the following file manually (not in v1.8.1)
-        self.__download("https://raw.github.com/zedshaw/mongrel2/9b565eeea003783c47502c2d350b99c9684ce97c/src/zmq_compat.h")
-        self.__run_command("mv -f zmq_compat.h mongrel2/src/")
-        self.__run_command("make clean all && sudo make install", cwd="mongrel2")
-
-    #
-    # Weber
-    #
-#    if not self.__path_exists("weber"):
-#        self.__run_command("git clone https://github.com/elixir-web/weber.git");
-        # To get the two make commands working, we need to hard code the path for elixir's "mix"
-        #self.__run_command("sed -i 's:$(MIX):/home/tfb/FrameworkBenchmarks/installs/elixir-0.13.3/bin/mix:' Makefile", cwd="weber")
-        #self.__run_command("bash -i -c 'make'", cwd="weber");
-#        self.__run_command("make", cwd="weber");
-        #self.__run_command("bash -i -c 'sudo make test'", cwd="weber");
-
-    ##############################################################
-    # Frameworks
-    ##############################################################
-
-    #
-    # Grails
-    #
-    if not self.__path_exists("grails-2.4.2"):
-        self.__download("http://dist.springframework.org.s3.amazonaws.com/release/GRAILS/grails-2.4.2.zip")
-        self.__run_command("unzip -o grails-2.4.2.zip")
-
-    #
-    # Play 2
-    #
-    if not self.__path_exists("play-2.2.0"):
-        self.__download("http://downloads.typesafe.com/play/2.2.0/play-2.2.0.zip")
-        self.__run_command("unzip -o play-2.2.0.zip")
-
-    #
-    # Play 1
-    #
-    if not self.__path_exists("play-1.2.5"):
-        self.__download("http://downloads.typesafe.com/releases/play-1.2.5.zip")
-        self.__run_command("unzip -o play-1.2.5.zip")
-        self.__run_command("mv play-1.2.5/play play-1.2.5/play1")
-
-    # siena
-    self.__run_command("yes | play-1.2.5/play1 install siena")
-
-    #
-    # TreeFrog Framework
-    #
-    if not self.__path_exists("/usr/bin/treefrog") or not self.__path_exists("/usr/bin/tspawn"):
-        self.__run_command("sudo apt-get install -y qt4-qmake libqt4-dev libqt4-sql-mysql libqt4-sql-psql g++")
-        self.__download("http://downloads.sourceforge.net/project/treefrog/src/treefrog-1.7.5.tar.gz")
-        self.__run_command("tar xzf treefrog-1.7.5.tar.gz")
-        self.__run_command("rm treefrog-1.7.5.tar.gz")
-        self.__run_command("./configure", cwd="treefrog-1.7.5")
-        self.__run_command("make", cwd="treefrog-1.7.5/src")
-        self.__run_command("sudo make install", cwd="treefrog-1.7.5/src")
-        self.__run_command("make", cwd="treefrog-1.7.5/tools")
-        self.__run_command("sudo make install", cwd="treefrog-1.7.5/tools")
-
-    #
-    # Vert.x
-    #
-    if not self.__path_exists("vert.x-2.1.1"):
-        self.__download("http://dl.bintray.com/vertx/downloads/vert.x-2.1.1.tar.gz?direct=true", "vert.x-2.1.1.tar.gz")
-        self.__run_command("tar xzf vert.x-2.1.1.tar.gz")
-
-    #
-    # Yesod
-    #
-    self.__run_command("cabal update", retry=True)
-    self.__run_command("cabal install yesod persistent-mysql", retry=True)
-
-    #
-    # Jester
-    #
-    if not self.__path_exists("jester"):
-        self.__run_command("git clone git://github.com/dom96/jester.git jester/jester", retry=True)
-
-    #
-    # Onion
-    #
-    if not self.__path_exists("onion"):
-        self.__run_command("git clone https://github.com/davidmoreno/onion.git")
-        self.__run_command("mkdir build", cwd="onion")
-        self.__run_command("cmake ..", cwd="onion/build")
-        self.__run_command("make", cwd="onion/build")
-
-    # nawak
-    #
-    if not self.__path_exists("nawak"):
-        self.__run_command("git clone git://github.com/idlewan/nawak.git nawak/nawak", retry=True)
-
-    self.__run_command("sudo apt-get -y autoremove || true");
-
-    #
-    # Wt
-    #
-    if not self.__path_exists("nawak"):
-      self.__run_command("sudo apt-get install libboost1.54-all-dev")
-      self.__download("http://downloads.sourceforge.net/witty/wt-3.3.3.tar.gz", filename="wt.tar.gz")
-      self.__run_command("tar xf wt.tar.gz")
-      self.__run_command("rm wt.tar.gz")
-      self.__run_command("bash -c 'mv wt-* wt'")
-      self.__run_command("mkdir build", cwd="wt")
-      self.__run_command("cmake .. -DWT_CPP_11_MODE=-std=c++0x -DCMAKE_BUILD_TYPE=Release", cwd="wt/build")
-      self.__run_command("make", cwd="wt/build")
-      self.__run_command("sudo make install", cwd="wt/build")
 
     print("\nINSTALL: Finished installing server software\n")
   ############################################################
   # End __install_server_software
   ############################################################
 
-  def _install_python(self):
-    """Install Python runtime, frameworks and libraries"""
-    # PyPy 2.3.1
-    f = "pypy-2.3.1-linux64.tar.bz2"
-    #if not os.path.exists(f):
-    if not self.__path_exists("pypy"):
-      self.__download("https://bitbucket.org/pypy/pypy/downloads/" + f, f)
-      self.__run_command("tar xf " + f)
-      self.__run_command('ln -sf pypy-2.3.1-linux64 pypy')
-
-    # CPython 2.7.7
-    f = "Python-2.7.7.tgz"
-    #if not os.path.exists("py2"):
-    if not self.__path_exists("py2"):
-      self.__download("http://www.python.org/ftp/python/2.7.7/" + f, f)
-      self.__run_command("tar xf " + f)
-      self.__run_command("./configure --prefix=$HOME/FrameworkBenchmarks/installs/py2 --disable-shared", cwd="Python-2.7.7")
-      self.__run_command("make -j4", cwd="Python-2.7.7")
-      self.__run_command("make install", cwd="Python-2.7.7")
-
-    # CPython 3.4.1
-    f = "Python-3.4.1.tar.xz"
-    if not self.__path_exists("py3"):
-    #if not os.path.exists("py3"):
-      self.__download("https://www.python.org/ftp/python/3.4.1/" + f, f)
-      self.__run_command("tar xf " + f)
-      self.__run_command("./configure --prefix=$HOME/FrameworkBenchmarks/installs/py3 --disable-shared", cwd="Python-3.4.1")
-      self.__run_command("make -j4", cwd="Python-3.4.1")
-      self.__run_command("make install", cwd="Python-3.4.1")
-
-    if not self.__path_exists("get-pip.py"):
-    #if not os.path.exists("get-pip.py"):
-      self.__download("https://bootstrap.pypa.io/get-pip.py", "get-pip.py")
-      self.__run_command("py2/bin/python get-pip.py")
-      self.__run_command("pypy/bin/pypy get-pip.py")
-    # Python 3.4.1 installs pip by default.
-
-    self.__run_command('py2/bin/pip install -r ../config/requirements.txt')
-    self.__run_command('py3/bin/pip3 install -r ../config/requirements-py3.txt')
-    self.__run_command('pypy/bin/pip install -r ../config/requirements-pypy.txt')
 
   ############################################################
   # __install_error
@@ -506,7 +103,7 @@ class Installer:
     sudo sh -c "echo mysql-server mysql-server/root_password_again select secret | debconf-set-selections"
     sudo sh -c "echo mysql-server mysql-server/root_password select secret | debconf-set-selections"
 
-    sudo apt-get -y install mysql-server-5.6
+    sudo apt-get -y install mysql-server
 
     sudo stop mysql
     # disable checking of disk size
@@ -742,6 +339,9 @@ EOF
   def __init__(self, benchmarker):
     self.benchmarker = benchmarker
     self.install_dir = "installs"
+    
+    # setup logging
+    logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
 
     try:
       os.mkdir(self.install_dir)

BIN
toolset/setup/linux/languages/._dart.sh


+ 8 - 0
toolset/setup/linux/languages/composer.sh

@@ -0,0 +1,8 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists bin/composer.phar
+[ $? -ne 0 ] || { echo "Composer is installed!"; return 0; }
+
+fw_depends php
+fw_get https://getcomposer.org/installer -O composer-installer.php
+php composer-installer.php --install-dir=bin

+ 7 - 0
toolset/setup/linux/languages/dart.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists dart-sdk
+[ $? -ne 0 ] || { echo "Dart is installed!"; return 0; }
+
+fw_get http://storage.googleapis.com/dart-archive/channels/stable/release/latest/sdk/dartsdk-linux-x64-release.zip
+fw_unzip dartsdk-linux-x64-release.zip

+ 15 - 0
toolset/setup/linux/languages/elixir.sh

@@ -0,0 +1,15 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+# TODO seems to be broken installation
+echo "WARN: Elixir does not install"
+
+# fw_exists v0.13.3.tar.gz
+# [ $? -ne 0 ] || { echo "Elixir is installed!"; return 0; }
+
+# fw_get https://github.com/elixir-lang/elixir/archive/v0.13.3.tar.gz
+# fw_untar v0.13.3.tar.gz
+
+# cd elixir-0.13.3 
+# bash -c -i 'sudo make install'
+# sudo make clean
+# sudo make test

+ 13 - 0
toolset/setup/linux/languages/erlang.sh

@@ -0,0 +1,13 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/bin/erl
+[ $? -ne 0 ] || { echo "Erlang is installed!"; return 0; }
+
+sudo cp ../config/erlang.list /etc/apt/sources.list.d/erlang.list
+
+fw_get http://binaries.erlang-solutions.com/debian/erlang_solutions.asc
+fw_untar node-v0.10.8-linux-x64.tar.gz
+
+sudo apt-key add erlang_solutions.asc
+sudo apt-get -y update
+sudo apt-get install -y esl-erlang

+ 7 - 0
toolset/setup/linux/languages/go.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists go
+[ $? -ne 0 ] || { echo "Go is installed!"; return 0; }
+
+fw_get https://storage.googleapis.com/golang/go1.3.linux-amd64.tar.gz
+fw_untar go1.3.linux-amd64.tar.gz

+ 7 - 0
toolset/setup/linux/languages/haskell.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+# TODO check this path...
+fw_exists /usr/bin/haskell-compiler
+[ $? -ne 0 ] || { echo "Haskell is installed!"; return 0; }
+
+sudo apt-get install -y ghc cabal-install

+ 10 - 0
toolset/setup/linux/languages/hhvm.sh

@@ -0,0 +1,10 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/bin/hhvm
+[ $? -ne 0 ] || { echo "hhvm is installed!"; return 0; }
+
+sudo add-apt-repository -y ppa:mapnik/v2.2.0
+wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | sudo apt-key add -
+echo deb http://dl.hhvm.com/ubuntu `lsb_release -sc` main | sudo tee /etc/apt/sources.list.d/hhvm.list
+sudo apt-get update
+sudo apt-get install -y hhvm

+ 6 - 0
toolset/setup/linux/languages/java.sh

@@ -0,0 +1,6 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+# TODO include a check before we do all this, because it's 
+# annoyingly slow to run apt-get if we don't need to
+sudo apt-get install -y openjdk-7-jdk
+sudo apt-get remove -y --purge openjdk-6-jre openjdk-6-jre-headless

+ 8 - 0
toolset/setup/linux/languages/jruby.sh

@@ -0,0 +1,8 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists ~/.rvm/rubies/jruby-1.7.8/
+[ $? -ne 0 ] || { echo "JRuby is installed!"; return 0; }
+
+# Instead of installing separately, we install JRuby 
+# whenever we install Ruby
+fw_depends ruby

+ 20 - 0
toolset/setup/linux/languages/mono.sh

@@ -0,0 +1,20 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists mono-3.2.8
+[ $? -ne 0 ] || { \
+  echo "Mono is installed, installing RootCAs from Mozilla..."; 
+  mozroots --import --sync;
+  echo "Mono is installed!"
+  return 0; }
+
+fw_get http://download.mono-project.com/sources/mono/mono-3.2.8.tar.bz2 -O mono-3.2.8.tar.bz2
+tar vxf mono-3.2.8.tar.bz2
+cd mono-3.2.8 
+./configure --disable-nls --prefix=/usr/local
+make get-monolite-latest
+make -j4 EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/basic.exe
+sudo make install
+
+mv mono-3.2.8 mono
+
+mozroots --import --sync;

+ 22 - 0
toolset/setup/linux/languages/nimrod.sh

@@ -0,0 +1,22 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists nimrod/bin/nimrod
+[ $? -ne 0 ] || { echo "Nimrod is installed!"; return 0; }
+
+test -d nimrod || git clone git://github.com/Araq/Nimrod.git nimrod
+cd nimrod 
+git checkout 987ac2439a87d74838233a7b188e4db340495ee5
+test -d csources || git clone git://github.com/nimrod-code/csources.git
+
+cd csources
+git checkout 704015887981932c78a033dd5ede623b2ad6ae27
+chmod +x build.sh
+./build.sh
+
+cd ../..
+fw_exists nimrod/koch
+[ $? -ne 0 ] || { echo "Nimrod Koch is installed!"; return 0; }
+
+cd nimrod
+bin/nimrod c koch
+./koch boot -d:release

+ 7 - 0
toolset/setup/linux/languages/nodejs.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists node-v0.10.8-linux-x64
+[ $? -ne 0 ] || { echo "NodeJS is installed!"; return 0; }
+
+fw_get http://nodejs.org/dist/v0.10.8/node-v0.10.8-linux-x64.tar.gz
+fw_untar node-v0.10.8-linux-x64.tar.gz

+ 11 - 0
toolset/setup/linux/languages/perl.sh

@@ -0,0 +1,11 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists perl-5.18
+[ $? -ne 0 ] || { echo "Perl is installed!"; return 0; }
+
+fw_get https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build -O perl-build.pl
+perl perl-build.pl -DDEBUGGING=-g 5.18.2 perl-5.18
+
+fw_get http://cpanmin.us -O cpanminus.pl
+perl-5.18/bin/perl cpanminus.pl --notest --no-man-page App::cpanminus
+perl-5.18/bin/cpanm -f --notest --no-man-page DBI DBD::mysql Kelp Dancer Mojolicious Kelp::Module::JSON::XS Dancer::Plugin::Database Starman Plack JSON Web::Simple DBD::Pg JSON::XS EV HTTP::Parser::XS Monoceros EV IO::Socket::IP IO::Socket::SSL Memoize

+ 8 - 0
toolset/setup/linux/languages/phalcon.sh

@@ -0,0 +1,8 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_depends php
+fw_exists /usr/local/lib/php/extensions/no-debug-non-zts-20100525/phalcon.so
+[ $? -ne 0 ] || { echo "Phalcon is installed!"; return 0; }
+
+test -d cphalcon || git clone git://github.com/phalcon/cphalcon.git
+cd cphalcon/build && sudo ./install

+ 29 - 0
toolset/setup/linux/languages/php.sh

@@ -0,0 +1,29 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+# TODO double check this, it's logically different from original python code.
+# Two path checks would both always run in python. In this code the check 
+# for apc.so only happens if the check for php fails. Is that ok? 
+
+fw_exists /usr/local/bin/php
+[ $? -ne 0 ] || { \
+  echo "PHP is installed!"; 
+  sudo cp ../config/php.ini /usr/local/lib/php.ini
+  sudo cp ../config/php-fpm.conf /usr/local/lib/php-fpm.conf
+  return 0; }
+
+fw_get http://museum.php.net/php5/php-5.4.13.tar.gz
+fw_untar php-5.4.13.tar.gz
+cd php-5.4.13
+./configure --with-pdo-mysql --with-mysql --with-mcrypt --enable-intl --enable-mbstring --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-openssl
+make
+sudo make install
+
+cd ..
+fw_exists /usr/local/lib/php/extensions/no-debug-non-zts-20100525/apc.so
+[ $? -ne 0 ] || { echo "PHP is installed!"; return 0; }
+
+cd php-5.4.13
+printf "\n" | sudo pecl install apc-beta
+
+sudo cp ../config/php.ini /usr/local/lib/php.ini
+sudo cp ../config/php-fpm.conf /usr/local/lib/php-fpm.conf

+ 13 - 0
toolset/setup/linux/languages/pypy.sh

@@ -0,0 +1,13 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists pypy
+[ $? -ne 0 ] || { echo "pypy is installed!"; return 0; }
+
+fw_get https://bitbucket.org/pypy/pypy/downloads/pypy-2.3.1-linux64.tar.bz2 -O pypy-2.3.1-linux64.tar.bz2
+tar vxf pypy-2.3.1-linux64.tar.bz2
+ln -sf pypy-2.3.1-linux64 pypy
+
+fw_get https://bootstrap.pypa.io/get-pip.py
+pypy/bin/pypy get-pip.py
+
+pypy/bin/pip install -r ../config/requirements-pypy.txt

+ 17 - 0
toolset/setup/linux/languages/python2.sh

@@ -0,0 +1,17 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists py2
+[ $? -ne 0 ] || { echo "Python2 is installed!"; return 0; }
+
+# fw_get http://www.python.org/ftp/python/2.7.7/Python-2.7.7.tgz
+# tar vxf Python-2.7.7.tgz
+pre=$(pwd)
+cd Python-2.7.7
+./configure --prefix=${pre}/py2 --disable-shared
+make -j4
+make install
+
+cd ..
+fw_get https://bootstrap.pypa.io/get-pip.py -O get-pip2.py
+py2/bin/python get-pip2.py
+py2/bin/pip install -r ../config/requirements.txt

+ 15 - 0
toolset/setup/linux/languages/python3.sh

@@ -0,0 +1,15 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists py3
+[ $? -ne 0 ] || { echo "Python3 is installed!"; return 0; }
+
+fw_get http://www.python.org/ftp/python/3.4.1/Python-3.4.1.tar.xz
+tar vxf Python-3.4.1.tar.xz
+pre=$(pwd)
+cd Python-3.4.1
+./configure --prefix=${pre}/py3 --disable-shared
+make -j4
+make install
+
+cd ..
+py3/bin/pip3 install -r ../config/requirements-py3.txt

+ 17 - 0
toolset/setup/linux/languages/racket.sh

@@ -0,0 +1,17 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists racket-5.3.6/bin/racket
+ret1=$?
+fw_exists racket-5.3.6/collects/racket
+ret2=$?
+if [ $ret1 -eq 0 ] && [$ret2 -eq 0 ]; then 
+  echo "Racket is installed!"; 
+  return 0;
+fi
+
+fw_get https://github.com/plt/racket/archive/v5.3.6.tar.gz -O racket-5.3.6.tar.gz
+fw_untar racket-5.3.6.tar.gz
+cd racket-5.3.6/src 
+./configure
+make
+sudo make install

+ 10 - 0
toolset/setup/linux/languages/ringojs.sh

@@ -0,0 +1,10 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/share/ringojs
+[ $? -ne 0 ] || { echo "RingoJS is installed!"; return 0; }
+
+fw_get http://www.ringojs.org/downloads/ringojs_0.10-1_all.deb
+sudo apt-get install -y jsvc
+sudo dpkg -i ringojs_0.10-1_all.deb
+
+rm ringojs_0.10-1_all.deb

+ 16 - 0
toolset/setup/linux/languages/ruby.sh

@@ -0,0 +1,16 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+curl -L get.rvm.io | bash -s head --auto-dotfiles
+echo rvm_auto_reload_flag=2 >> ~/.rvmrc
+
+fw_exists ~/.rvm/rubies/ruby-2.0.0-p0/
+[ $? -ne 0 ] || { echo "Ruby is installed!"; return 0; }
+
+. ~/.rvm/scripts/rvm
+. ~/.profile
+rvm install 2.0.0-p0
+rvm 2.0.0-p0 do gem install bundler
+
+# Install JRuby 
+rvm install jruby-1.7.8
+rvm jruby-1.7.8 do gem install bundler

+ 11 - 0
toolset/setup/linux/languages/urweb.sh

@@ -0,0 +1,11 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/bin/urweb
+[ $? -ne 0 ] || { echo "urweb is installed!"; return 0; }
+
+hg clone http://hg.impredicative.com/urweb
+cd urweb
+./autogen.sh
+./configure
+make
+sudo make install

+ 11 - 0
toolset/setup/linux/languages/xsp.sh

@@ -0,0 +1,11 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists xsp
+[ $? -ne 0 ] || { echo "XSP is installed!"; return 0; }
+
+fw_depends mono
+git clone --depth 1 git://github.com/mono/xsp
+cd xsp
+./autogen.sh --prefix=/usr/local
+make
+sudo make install

+ 15 - 0
toolset/setup/linux/languages/yaf.sh

@@ -0,0 +1,15 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/lib/php/extensions/no-debug-non-zts-20100525/yaf.so
+[ $? -ne 0 ] || { \
+  echo "yaf is installed, enabling in configuration...";
+  sudo cp ../config/php.ini /usr/local/lib/php.ini
+  sudo cp ../config/php-fpm.conf /usr/local/lib/php-fpm.conf
+  echo "yaf is installed!"
+  return 0; }
+
+fw_depends php
+sudo pecl install -f yaf
+sudo cp ../config/php.ini /usr/local/lib/php.ini
+sudo cp ../config/php-fpm.conf /usr/local/lib/php-fpm.conf
+

+ 48 - 0
toolset/setup/linux/prerequisites.sh

@@ -0,0 +1,48 @@
+#!/bin/sh
+
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists fwbm_prereqs_installed
+[ $? -ne 0 ] || { \
+  echo "Prerequisites installed!"; 
+  # Source files to be sure
+  . ~/.profile
+  return 0; 
+}
+
+sudo apt-get -y update
+sudo apt-get -y upgrade
+sudo apt-get -y install build-essential \
+  libpcre3 libpcre3-dev libpcrecpp0 \
+  libssl-dev zlib1g-dev python-software-properties \
+  unzip git-core libcurl4-openssl-dev libbz2-dev \
+  libmysqlclient-dev mongodb-clients libreadline6-dev \
+  libyaml-dev libsqlite3-dev sqlite3 libxml2-dev \
+  libxslt-dev libgdbm-dev ncurses-dev automake \
+  libffi-dev htop libtool bison libevent-dev \
+  libgstreamer-plugins-base0.10-0 libgstreamer0.10-0 \
+  liborc-0.4-0 libwxbase2.8-0 libwxgtk2.8-0 libgnutls-dev \
+  libjson0-dev libmcrypt-dev libicu-dev cmake gettext \
+  curl libpq-dev mercurial mlton
+
+sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y
+sudo apt-get -y update
+sudo apt-get install -y gcc-4.8 g++-4.8
+
+# Stop permanently overwriting people's files just for 
+# trying out our software!
+fw_exists ~/.bash_profile.bak
+[ $? -eq 0 ] || { \
+  echo "Backing up your original ~/.bash_profile, ~/.profile, ~/.bashrc"
+  mv ~/.bash_profile ~/.bash_profile.bak
+  mv ~/.bash_profile ~/.bash_profile.bak
+  mv ~/.bash_profile ~/.bash_profile.bak
+}
+
+cp ../config/benchmark_profile ~/.bash_profile
+cat ../config/benchmark_profile >> ~/.profile
+cat ../config/benchmark_profile >> ~/.bashrc
+. ../../.profile
+sudo sh -c "echo '*               -    nofile          65535' >> /etc/security/limits.conf"
+
+touch fwbm_prereqs_installed

+ 9 - 0
toolset/setup/linux/systools/leiningen.sh

@@ -0,0 +1,9 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists bin/lein
+[ $? -ne 0 ] || { echo "Leiningen is installed!"; return 0; }
+
+mkdir -p bin
+fw_get https://raw.github.com/technomancy/leiningen/stable/bin/lein
+mv lein bin/lein
+chmod +x bin/lein

+ 7 - 0
toolset/setup/linux/systools/maven.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/bin/mvn
+[ $? -ne 0 ] || { echo "Maven is installed!"; return 0; }
+
+sudo apt-get -y install maven -qq
+mvn -version

+ 7 - 0
toolset/setup/linux/webservers/lapis.sh

@@ -0,0 +1,7 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/bin/lapis
+[ $? -ne 0 ] || { echo "lapis is installed!"; return 0; }
+
+sudo apt-get install -y luarocks
+sudo luarocks install http://github.com/leafo/lapis/raw/master/lapis-dev-1.rockspec

+ 24 - 0
toolset/setup/linux/webservers/mongrel2.sh

@@ -0,0 +1,24 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/bin/mongrel2
+[ $? -ne 0 ] || { echo "Mongrel2 is installed!"; return 0; }
+
+# Dependencies
+sudo apt-get install -y sqlite3 libsqlite3-dev uuid uuid-runtime uuid-dev
+
+fw_get https://github.com/zedshaw/mongrel2/tarball/v1.8.1 -O mongrel2.tar.gz
+fw_untar mongrel2.tar.gz
+
+# mongrel2 untars into this folder 
+mv zedshaw-mongrel2-aa2ecf8 mongrel2
+
+# for zmq4, we update the following file manually (not in v1.8.1)
+fw_get https://raw.github.com/zedshaw/mongrel2/9b565eeea003783c47502c2d350b99c9684ce97c/src/zmq_compat.h
+mv -f zmq_compat.h mongrel2/src/
+
+cd mongrel2
+make clean all
+sudo make install
+
+# Update linker cache
+sudo ldconfig -v

+ 11 - 0
toolset/setup/linux/webservers/nginx.sh

@@ -0,0 +1,11 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/nginx/sbin/nginx
+[ $? -ne 0 ] || { echo "Nginx is installed!"; return 0; }
+
+fw_get http://nginx.org/download/nginx-1.4.1.tar.gz
+fw_untar nginx-1.4.1.tar.gz
+cd nginx-1.4.1
+./configure
+make
+sudo make install

+ 12 - 0
toolset/setup/linux/webservers/openresty.sh

@@ -0,0 +1,12 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/openresty/nginx/sbin/nginx
+[ $? -ne 0 ] || { echo "OpenResty is installed!"; return 0; }
+
+fw_depends nginx
+fw_get http://openresty.org/download/ngx_openresty-1.5.8.1.tar.gz
+fw_untar ngx_openresty-1.5.8.1.tar.gz
+cd ngx_openresty-1.5.8.1
+./configure --with-luajit --with-http_postgres_module
+make
+sudo make install

+ 20 - 0
toolset/setup/linux/webservers/resin.sh

@@ -0,0 +1,20 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists resin-4.0.36/conf/resin.xml
+[ $? -ne 0 ] || { echo "resin is installed!"; return 0; }
+
+fw_depends java
+sudo cp -r /usr/lib/jvm/java-1.7.0-openjdk-amd64/include /usr/lib/jvm/java-1.7.0-openjdk-amd64/jre/bin/
+
+fw_get http://www.caucho.com/download/resin-4.0.36.tar.gz
+fw_untar resin-4.0.36.tar.gz
+cd resin-4.0.36
+./configure --prefix=`pwd`
+make
+make install
+
+mv conf/resin.properties conf/resin.properties.orig
+cat ../../config/resin.properties > conf/resin.properties
+
+mv conf/resin.xml conf/resin.xml.orig
+cat ../../config/resin.xml > conf/resin.xml

+ 13 - 0
toolset/setup/linux/webservers/weber.sh

@@ -0,0 +1,13 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+echo "WARN: Weber is not working"
+#fw_exists weber
+#[ $? -ne 0 ] || { echo "weber is installed!"; return 0; }
+
+#git clone https://github.com/elixir-web/weber.git
+
+# To get the two make commands working, we need to hard code the path for elixir's "mix"
+#cd weber
+#sed -i 's:$(MIX):/home/tfb/FrameworkBenchmarks/installs/elixir-0.13.3/bin/mix:' Makefile
+#make
+#bash -i -c 'sudo make test'

+ 11 - 0
toolset/setup/linux/webservers/zeromq.sh

@@ -0,0 +1,11 @@
+. ../toolset/setup/linux/bash_functions.sh
+
+fw_exists /usr/local/lib/libzmq.a
+[ $? -ne 0 ] || { echo "ZeroMQ is installed!"; return 0; }
+
+fw_get http://download.zeromq.org/zeromq-4.0.3.tar.gz
+fw_untar zeromq-4.0.3.tar.gz
+cd zeromq-4.0.3
+./configure
+make
+sudo make install