#!/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|natty|precise|quantal|raring) sudo apt-get install git ;; squeeze|lisa|katya|oneiric|natty) 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. 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 curl -sL get.rvm.io | bash -s -- --version 1.15.7 # 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