#!/bin/sh # # Installs Opentox Webservices. # Author: Christoph Helma, Andreas Maunz. SELF=$(basename $0 -install) OT_PREFIX="$HOME/opentox-ruby" OT_CONFIG="$HOME/.opentox" RUBY_VER="1.9.3-p125" RUBY_DWL="http://ftp.ruby-lang.org/pub/ruby/1.9" RUBY_DIR="$HOME/.rbenv/versions/$RUBY_VER" FMINER_BRANCH="development" [ "`id -u`" = "0" ] && echo "This script must be run as non-root." 1>&2 && exit 1 # check wd is root of service DIR=`pwd` if echo $DIR | grep "algorithm/bin" >/dev/null 2>&1 ; then cd ..; fi # check main directories present ([ -d $OT_PREFIX ] && [ -d $OT_CONFIG ]) || (echo "Main directories missing." 1>&2 && exit 1) [ -d $OT_PREFIX/opentox-server ] || (echo "Warning: opentox-server missing." 1>&2) # load main config ! [ -f $OT_CONFIG/opentox-ui.sh ] && echo "Main config file missing." 1>&2 && exit 1 || . $OT_CONFIG/opentox-ui.sh # check utils utils="git rbenv curl gem make" for u in $utils; do eval `echo $u | tr "[:lower:]" "[:upper:]"`=`which $u` || (echo "'$u' missing. Install '$u' first." 1>&2 && exit 1) done # util functions run_cmd () { local cmd="$1"; local title="$2" printf "%50s" "'$title'" if ! eval $cmd >>$LOG 2>&1 ; then printf "%30s\n" "FAIL" echo "Last 10 lines of log:" tail -10 "$LOG" exit 1 fi printf "%30s\n" "DONE" } install_ruby() { printf "\n%50s\n" "RUBY" local DIR=`pwd` if ! $RBENV versions $RUBY_VER | grep $RUBY_VER>/dev/null 2>&1; then [ -d $DIR/tmp ] || mkdir -p $DIR/tmp && cd $DIR/tmp ([ -d $DIR/tmp/ruby-$RUBY_VER ] || $CURL $RUBY_DWL/ruby-$RUBY_VER.tar.gz 2>/dev/null | tar xz) && cd ruby-$RUBY_VER cmd="./configure --prefix=$RUBY_DIR" && run_cmd "$cmd" "Configure" cmd="make -j2" && run_cmd "$cmd" "Make" [ -d $RUBY_DIR ] && rm -rf $RUBY_DIR cmd="make install" && run_cmd "$cmd" "Install" fi cd $DIR cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash" cmd="$RBENV local $RUBY_VER" && run_cmd "$cmd" "rbenv set ruby" } install_ob_ruby() { printf "\n%50s\n" "OB RUBY BINDINGS" local DIR=`pwd` SRC_DIR=$(dirname $(find $OT_PREFIX -name openbabel-ruby.cpp)) [ -d "$SRC_DIR" ] || (echo "Sources not found." 1>&2 && exit 1) cd $SRC_DIR sed -i 's/Init_OpenBabel/Init_openbabel/g' openbabel-ruby.cpp # apply fix RUBY=`which ruby` cmd="$RUBY extconf.rb --with-openbabel-include=../../include --with-openbabel-lib=../../src/.libs" && run_cmd "$cmd" "Extconf ruby bindings" cmd="$MAKE" && run_cmd "$cmd" "Make OB ruby bindings" cmd="$MAKE install" && run_cmd "$cmd" "Install OB ruby bindings" cd $DIR cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash" } install_fminer() { printf "\n%50s\n" "FMINER" local DIR=`pwd` eval RUBY_INC="-I`dirname $RUBY_DIR/include/ruby*/*linux/ruby`\ -I`dirname $RUBY_DIR/include/ruby*/ruby`" eval OPBB_INC="-I`dirname $OT_PREFIX/openbabel*/include/openbabel*/openbabel`" cmd="$GIT submodule init" && run_cmd "$cmd" "Fminer Init" cmd="$GIT submodule update" && run_cmd "$cmd" "Fminer Update" cd "libfminer/libbbrc">>$LOG 2>&1 $GIT checkout $FMINER_BRANCH>>$LOG 2>&1 $GIT pull >>$LOG 2>&1 cd - >>$LOG 2>&1 cd "libfminer/liblast">>$LOG 2>&1 $GIT checkout $FMINER_BRANCH>>$LOG 2>&1 $GIT pull >>$LOG 2>&1 cd - >>$LOG 2>&1 for mylib in bbrc last; do cmd="sed -i 's,^INCLUDE_OB.*,INCLUDE_OB\ =\ $OPBB_INC,g' `pwd`/libfminer/lib$mylib/Makefile" && run_cmd "$cmd" "Makefile $mylib (OB)" cmd="sed -i 's,^INCLUDE_RB.*,INCLUDE_RB\ =\ $RUBY_INC,g' `pwd`/libfminer/lib$mylib/Makefile" && run_cmd "$cmd" "Makefile $mylib (RB)" done cd "libfminer/libbbrc">>$LOG 2>&1 cmd="make ruby" && run_cmd "$cmd" "Make BBRC" cd - >>$LOG 2>&1 cd "libfminer/liblast">>$LOG 2>&1 cmd="make ruby" && run_cmd "$cmd" "Make LAST" cd - >>$LOG 2>&1 cd "last-utils">>$LOG 2>&1 $GIT checkout $FMINER_BRANCH>>$LOG 2>&1 $GIT pull >>$LOG 2>&1 cd $DIR } install_bundler() { $GEM list | grep bundler >/dev/null 2>&1 || (cmd="$GEM install bundler" && run_cmd "$cmd" "Install bundler") cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash" BUNDLER=`which bundle` cmd="$BUNDLER install" && run_cmd "$cmd" "Bundle install" } # # # Install LOG="$OT_PREFIX/tmp/`basename $0`.log" echo echo "Installation ('$LOG'):" echo [ -d $OT_CONFIG/log ] || cmd="mkdir -p $OT_CONFIG/log" && run_cmd "$cmd" "Main log directory" [ -d $OT_CONFIG/config/$SELF ] || cmd="mkdir -p $OT_CONFIG/config/$SELF" && run_cmd "$cmd" "$SELF config directory" [ "`$RBENV local 2>/dev/null`" = "$RUBY_VER" ] || install_ruby [ -n "`find $RUBY_DIR -name openbabel.so 2>/dev/null`" ] || install_ob_ruby ( [ -n "`find libfminer/ -name bbrc.so 2>/dev/null`" ] && [ -n "`find libfminer/ -name last.so 2>/dev/null`" ] ) || install_fminer echo install_bundler # return to wd cd "$DIR"