#!/usr/bin/env bash #Exit if any commands return a non-zero status set -e # posix compliant sanity check if [ -z $BASH ] || [ $BASH = "/bin/sh" ]; then echo "Please use the bash interpreter to run this script" exit 1 fi trap "ouch" ERR ouch() { printf '\E[31m' cat< >(tee $LOG) exec 2>&1 # Install basic system requirements mkdir -p $BASE case `uname -s` in [Ll]inux) command -v lsb_release &>/dev/null || { error "Please install lsb-release." exit 1 } distro=`lsb_release -cs` case $distro in wheezy|jessie|maya|olivia|nadia|precise|quantal) sudo apt-get install git ;; squeeze|lisa|katya|oneiric|natty|raring) warning "It seems like you're using $distro which has been deprecated. While we don't technically support this release, the install script will probably still work. Raring requires an install of rvm to work correctly as the raring package manager does not yet include a package for rvm Press return to continue or control-C to abort" read dummy sudo apt-get install git ;; *) error "Unsupported distribution - $distro" exit 1 ;; esac ;; Darwin) if [[ ! -w /usr/local ]]; then cat</dev/null || { output "Installing brew" /usr/bin/ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go) } command -v git &>/dev/null || { output "Installing git" brew install git } ;; *) error "Unsupported platform. Try switching to either Mac or a Debian-based linux distribution (Ubuntu, Debian, or Mint)" exit 1 ;; esac # Clone MITx repositories clone_repos # Sanity check to make sure the repo layout hasn't changed if [[ -d $BASE/edx-platform/scripts ]]; then output "Installing system-level dependencies" bash $BASE/edx-platform/scripts/install-system-req.sh else error "It appears that our directory structure has changed and somebody failed to update this script. raise an issue on Github and someone should fix it." exit 1 fi # Install system-level dependencies output "Installing RVM, Ruby, and required gems" # If we're not installing RVM in the default location, then we'll do some # funky stuff to make sure that we load in the RVM stuff properly on login. if [ "$HOME/.rvm" != $RUBY_DIR ]; then if ! grep -q "export rvm_path=$RUBY_DIR" ~/.rvmrc; then if [[ -f $HOME/.rvmrc ]]; then output "Copying existing .rvmrc to .rvmrc.bak" cp $HOME/.rvmrc $HOME/.rvmrc.bak fi output "Creating $HOME/.rvmrc so rvm uses $RUBY_DIR" echo "export rvm_path=$RUBY_DIR" > $HOME/.rvmrc fi fi # rvm has issues in debian family, this is taken from stack overflow case `uname -s` in Darwin) curl -sL get.rvm.io | bash -s -- --version 1.15.7 ;; squeeze|wheezy|jessie|maya|lisa|olivia|nadia|natty|oneiric|precise|quantal|raring) warning "Setting up rvm on linux. This is a known pain point. If the script fails here refer to the following stack overflow question: http://stackoverflow.com/questions/9056008/installed-ruby-1-9-3-with-rvm-but-command-line-doesnt-show-ruby-v/9056395#9056395" sudo apt-get --purge remove ruby-rvm sudo rm -rf /usr/share/ruby-rvm /etc/rvmrc /etc/profile.d/rvm.sh curl -sL https://get.rvm.io | bash -s stable --ruby --autolibs=enable --autodotfiles ;; esac # Ensure we have RVM available as a shell function so that it can mess # with the environment and set everything up properly. The RVM install # process adds this line to login scripts, so this shouldn't be necessary # for the user to do each time. if [[ `type -t rvm` != "function" ]]; then source $RUBY_DIR/scripts/rvm fi # Ruby doesn't like to build with clang, which is the default on OS X, so # use gcc instead. This may not work, since if your gcc was installed with # XCode 4.2 or greater, you have an LLVM-based gcc, which also doesn't # always play nicely with Ruby, though it seems to be better than clang. # You may have to install apple-gcc42 using Homebrew if this doesn't work. # See `rvm requirements` for more information. case `uname -s` in Darwin) export CC=gcc ;; esac # Let the repo override the version of Ruby to install if [[ -r $BASE/edx-platform/.ruby-version ]]; then RUBY_VER=`cat $BASE/edx-platform/.ruby-version` fi # Current stable version of RVM (1.19.0) requires the following to build Ruby: # # autoconf automake libtool pkg-config libyaml libxml2 libxslt libksba openssl # # If we decide to upgrade from the current version (1.15.7), can run # # LESS="-E" rvm install $RUBY_VER --autolibs=3 --with-readline # # to have RVM look for a package manager like Homebrew and install any missing # libs automatically. RVM's --autolibs flag defaults to 2, which will fail if # any required libs are missing. LESS="-E" rvm install $RUBY_VER --with-readline # Create the "edx" gemset rvm use "$RUBY_VER" --create rvm rubygems latest output "Installing gem bundler" gem install bundler output "Installing ruby packages" bundle install --gemfile $BASE/edx-platform/Gemfile # Install Python virtualenv output "Installing python virtualenv" case `uname -s` in Darwin) # Add brew's path PATH=/usr/local/share/python:/usr/local/bin:$PATH ;; esac # virtualenvwrapper uses the $WORKON_HOME env var to determine where to place # virtualenv directories. Make sure it matches the selected $PYTHON_DIR. export WORKON_HOME=$PYTHON_DIR # Load in the mkvirtualenv function if needed if [[ `type -t mkvirtualenv` != "function" ]]; then case `uname -s` in Darwin) source `which virtualenvwrapper.sh` ;; *) source /etc/bash_completion.d/virtualenvwrapper ;; esac fi # Create edX virtualenv and link it to repo # virtualenvwrapper automatically sources the activation script if [[ $systempkgs ]]; then mkvirtualenv -a "$BASE/edx-platform" --system-site-packages edx-platform || { error "mkvirtualenv exited with a non-zero error" return 1 } else # default behavior for virtualenv>1.7 is # --no-site-packages mkvirtualenv -a "$BASE/edx-platform" edx-platform || { error "mkvirtualenv exited with a non-zero error" return 1 } fi # compile numpy and scipy if requested NUMPY_VER="1.6.2" SCIPY_VER="0.10.1" if [[ -n $compile ]]; then output "Downloading numpy and scipy" curl -sL -o numpy.tar.gz http://downloads.sourceforge.net/project/numpy/NumPy/${NUMPY_VER}/numpy-${NUMPY_VER}.tar.gz #curl -sL -o scipy.tar.gz http://downloads.sourceforge.net/project/scipy/scipy/${SCIPY_VER}/scipy-${SCIPY_VER}.tar.gz tar xf numpy.tar.gz #tar xf scipy.tar.gz rm -f numpy.tar.gz #scipy.tar.gz output "Compiling numpy" cd "$BASE/numpy-${NUMPY_VER}" python setup.py install #output "Compiling scipy" #cd "$BASE/scipy-${SCIPY_VER}" #python setup.py install cd "$BASE" rm -rf numpy-${NUMPY_VER} #scipy-${SCIPY_VER} fi # building correct version of distribute from source DISTRIBUTE_VER="0.6.28" output "Building Distribute" SITE_PACKAGES="$HOME/.virtualenvs/edx-platform/lib/python2.7/site-packages" cd "$SITE_PACKAGES" curl -O http://pypi.python.org/packages/source/d/distribute/distribute-${DISTRIBUTE_VER}.tar.gz tar -xzvf distribute-${DISTRIBUTE_VER}.tar.gz cd distribute-${DISTRIBUTE_VER} python setup.py install cd .. rm distribute-${DISTRIBUTE_VER}.tar.gz DISTRIBUTE_VERSION=`pip freeze | grep distribute` if [[ "$DISTRIBUTE_VERSION" == "distribute==0.6.28" ]]; then output "Distribute successfully installed" else error "Distribute failed to build correctly. This script requires a working version of Distribute 0.6.28 in your virtualenv's python installation" fi case `uname -s` in Darwin) # on mac os x get the latest distribute and pip pip install -U pip # need latest pytz before compiling numpy and scipy pip install -U pytz pip install numpy # scipy needs cython pip install cython # fixes problem with scipy on 10.8 pip install -e git+https://github.com/scipy/scipy#egg=scipy-dev ;; esac output "Installing edX pre-requirements" pip install -r $BASE/edx-platform/requirements/edx/pre.txt output "Installing edX requirements" # Install prereqs cd $BASE/edx-platform rvm use $RUBY_VER rake install_prereqs # Final dependecy output "Finishing Touches" cd $BASE pip install argcomplete cd $BASE/edx-platform bundle install mkdir "$BASE/log" || true mkdir "$BASE/db" || true mkdir "$BASE/data" || true rake django-admin[syncdb] rake django-admin[migrate] rake django-admin[update-templates] # Configure Git output "Fixing your git default settings" git config --global push.default current ### DONE cat< $ rake django-admin[runserver,lms,dev,] If the Django development server starts properly you should see: Development server is running at http://127.0.0.1:/ Quit the server with CONTROL-C. Connect your browser to http://127.0.0.1: to view the Django site. END exit 0