POSIX compatible Installer for OpenTox IST/ALU Services ======================================================= A) It is assumed that your system is configured for sudo to gain root privileges. B) It is assumed that your system is configured for using non-free packages. This is a POSIX-compliant (not limited to a particular shell) Opentox installer. Please report bugs always via GitHub. Here are some of my goals when writing the installer: - Safe (existence of all the binaries will be checked before running, apart from GNU Core Utils) - Idempotent (multiple execution does not change a thing) - Atomic (return value of each non-elemtary action is asserted to be TRUE) - Encapsulated (everything is installed in a sub-directory in $HOME) - Logged (all non-elemtary actions are logged) Even if we officially support only *one* distro (currently Debian 6.0.1), I tested the installer successfully on various Ubuntus. In the README at the top are the requirements of the installer. By default, everything is installed to $HOME/opentox-ruby (=OT_PREFIX). The configs go to OT_PREFIX/.sh__ot.sh for each package. After running the installer, configure the system by editing the startup file of your favorite shell (in my case, BASH with the file ~ /. bashrc) to include ~/.opentox-ui.sh (in my case with 'source ...'). This file is the only one that the installer creates outside OT_PREFIX. Thus, the system is fully configured: If you now open a new shell, all environment variables will be adjusted. To start the system I run the following (but that is not part of the installer): sudo nohup $HOME/opentox-ruby/redis-2.2.2/src/redis-server $HOME/opentox-ruby/redis-2.2.2/redis.conf & sudo nohup $HOME/opentox-ruby/nginx/sbin/nginx -c $HOME/opentox-ruby/nginx/conf/nginx.conf & To uninstall the system simply delete the link from the startup file: Done. To save disc space delete directory OT_PREFIX. Anyone can run multiple Opentox versions on the same machine: Just install again, but to a different OT_PREFIX. The switch works manually: Include the sh__ot.sh files from the desired OT_PREFIX in $HOME/opentox-ui.sh (only one installation may be activated at any time). Some useful scripts to put in your ~/.bashrc in case you are using bash (assuming OT_PREFIX is '~/opentox-ruby'): # Load server config otconfig() { source $HOME/.opentox-ui.sh } # Update the development version otupdate() { START_DIR=`pwd` otconfig cd $HOME/opentox-ruby/www/opentox for d in `find -not -name "." -type d -maxdepth 1 2>/dev/null`; do echo $d ; cd $d ; git pull ; echo ; cd - ; done cd $HOME/opentox-ruby/www/opentox/algorithm/libfminer mv libbbrc/Makefile libbbrc/Makefile~ mv liblast/Makefile liblast/Makefile~ if ! git pull; then echo "Error! Pull for Fminer failed." return 1 fi mv libbbrc/Makefile~ libbbrc/Makefile mv liblast/Makefile~ liblast/Makefile make -C libbbrc/ clean make -C libbbrc/ ruby make -C liblast/ clean make -C liblast/ ruby cd - cd $HOME/opentox-ruby/www/opentox/algorithm/last-utils if ! git pull; then echo "Error! Pull for Last-Utils failed." return 1 fi cd - cd opentox-ruby LINK_DIR=`gem which opentox-ruby | sed 's/\/opentox-ruby.rb//'` if [ -h $LINK_DIR ]; then rm -f $LINK_DIR fi rake install if ! [ -h $LINK_DIR ]; then echo "Warning! Your lib $LINK_DIR is no symlink. Linking back for you..." rm -rf "$LINK_DIR~" mv "$LINK_DIR" "$LINK_DIR~" ln -sf $HOME/opentox-ruby/www/opentox/opentox-ruby/lib `echo ${LINK_DIR::${#LINK_DIR}-4}` fi echo "Please execute 'otstart' to restart." cd "$START_DIR" } # Start the server otstart() { otkill sudo bash -c "source $HOME/.opentox-ui.sh; nohup redis-server $HOME/opentox-ruby/redis-2.2.2/redis.conf >/dev/null 2>&1 &" sudo bash -c "source $HOME/.opentox-ui.sh; nohup nginx -c $HOME/opentox-ruby/nginx/conf/nginx.conf >/dev/null 2>&1 &" sleep 2 if ! pgrep nginx>/dev/null 2>&1; then echo "Failed to start nginx."; fi if ! pgrep redis-server>/dev/null 2>&1; then echo "Failed to start redis."; fi } # Display log alias otless='less $HOME/.opentox/log/production.log' # Tail log alias ottail='tail -f $HOME/.opentox/log/production.log' # Reload the server otreload() { sudo bash -c "source $HOME/.opentox-ui.sh; nginx -s reload" } # Kill the server otkill() { sudo killall nginx >/dev/null 2>&1 sudo bash -c "source $HOME/.opentox-ui.sh; redis-cli shutdown >/dev/null 2>&1" while ps ax | grep PassengerWatchdog | grep -v grep >/dev/null 2>&1; do sleep 1; done while ps ax | grep Rack | grep -v grep >/dev/null 2>&1; do sleep 1; done for p in `pgrep R 2>/dev/null`; do sudo kill -9 $p; done }