cirandas.net

ref: master

script/quick-start


#!/bin/sh

set -e

say() {
  msg="$@"
  if [ -t 1 ]; then
    printf "\033[1;34;49m%s\033[m\n" "$msg"
  else
    echo "$msg"
  fi
}

complain() {
  msg="$@"
  if [ -t 1 ]; then
    printf "\033[1;31;49m%s\033[m\n" "$msg"
  else
    echo "$msg"
  fi
}

run() {
  say "\$ $@"
  local rc=0
  "$@" || rc=$?
  if [ $rc -ne 0 ]; then
    complain "E: The command \"$@\" failed with status code $status, we cannot proceed."
    complain "I: If you have no idea of what went wrong, please feel free to ask for help in the Noosfero community. Check the contact information in the project website (http://noosfero.org/)."
    exit 1
  fi
}

quiet() {
  local tmpfile=$(mktemp)
  local rc=0
  "$@" > "$tmpfile" 2>&1 || rc=$?
  if [ $rc -ne 0 ]; then
    cat "$tmpfile"
  fi
  rm -f "$tmpfile"
  return $rc
}

gem_install() {
  if [ -w "$(ruby -rubygems -e 'puts Gem.dir')" ]; then
    run gem install --no-ri --no-rdoc $@
  else
    run gem install --user-install --no-ri --no-rdoc $@
  fi
}

setup_rubygems_path() {
  local dir="$(ruby -rubygems -e 'puts Gem.dir')/bin"
  if [ -d "$dir" ]; then
    export PATH="$dir:$PATH"
  fi
  local dir="$(ruby -rubygems -e 'puts Gem.user_dir')/bin"
  if [ -d "$dir" ]; then
    export PATH="$dir:$PATH"
  fi
}

_usage() {
  echo "$program_name: basic setup for Noosfero"
  echo
  echo "Options:"
  echo "  --force-install|-f"
  echo "    Force installation"
  echo "  --db-setup|-d"
  echo "    Setup the database"
  echo "  --install-dependencies|-i"
  echo "    Install all Noosfero's dependecies"
  echo
}

# change current directory to the noosfero's root
cd "$(dirname $0)/../"

force_install=false
db_setup=false
install_dependencies=false
program_name=$(basename $0)

while [ ! -z "$1" ]; do
  opt="$1"
  shift
  case "$opt" in
    -f|--force-install)
      force_install=true
      ;;
    -d|--db-setup)
      db_setup=true
      ;;
    -i|--install-dependencies)
      install_dependencies=true
      ;;
    -h|--help)
      _usage
      exit 0
      ;;
    *)
      echo "Unknown option: $opt"
      _usage
      exit 1
      ;;
  esac
done

if [ "$install_dependencies" = 'true' ] || [ "$db_setup" = 'false' ]; then
  if gem which system_timer >/dev/null 2>&1 && which xvfb-run >/dev/null 2>&1 && test "$force_install" = 'false'; then
    say "Assuming dependencies are already installed. Pass --force-install to force their installation"
  else
    if ! which lsb_release >/dev/null 2>&1; then
      # special case Debian-based systems; in others people will have to install
      # lsb-release by themselves
      if which apt-get >/dev/null 2>&1; then
        sudo apt-get update
        sudo apt-get -y install lsb-release
      else
        complain "E: lsb_release not available! (Try installing the lsb-release package)"
        exit 1
      fi
    fi
    system=$(echo $(lsb_release -sic) | awk '{print(tolower($1) "-" tolower($2))}')
    install_script="$(dirname $0)/install-dependencies/${system}.sh"
    if test -f "$install_script"; then
      . $install_script
      say "I: All dependecies were installed."
    else
      # FIXME the Ruby stuff could be installed with Rubygems
      # FIXME but there is not generic way to install the non-Ruby stuff
      complain "E: $install_script not found, cannot install dependencies."
      exit 1
    fi
  fi
fi

if [ "$db_setup" = 'true' ] || [ "$install_dependencies" = 'false' ]; then
  # Ensure database is running
  sudo service postgresql start
  while ! sudo -u postgres psql < /dev/null >/dev/null 2>&1; do
    sleep 5s
  done

  if test -e config/database.yml && test "$force_install" = 'false'; then
    say 'Not updating existent database.yml.'
    say 'If you wish to automatic reconfigure your database connection and'
    say 'recreate the database, you can delete config/database.yml and run'
    say 'this script again.'
  else
    # create the database with sample data
    say 'Configuring Noosfero to use PostgreSQL, with your user.'
    run cp config/database.yml.pgsql config/database.yml
    if [ -z "$USER" ]; then
      USER=$(whoami)
    fi
    sed -ri "s/username: noosfero/username: $USER/" config/database.yml

    # Create database and users
    sudo su - postgres -c "createuser $USER --no-superuser --createdb --no-createrole" || true
    sudo su - postgres -c "createdb noosfero_development -O $USER" || true
    sudo su - postgres -c "createdb noosfero_test -O $USER" || true

    # Create table and sample data
    run rake db:schema:load
    run rake db:schema:load RAILS_ENV=test

    if [ "$RAILS_ENV" != 'test' ]; then
      run rake db:data:minimal
      rails runner 'Environment.default.enable("skip_new_user_email_confirmation")'
    fi

    say "I: Database setup finished."
  fi

  if [ ! -d locale ]; then
    run quiet rake noosfero:translations:compile
  fi
fi

if [ "$db_setup" = 'false' ] && [ "$install_dependencies" = 'false' ]; then
  # create needed directory
  mkdir -p tmp/pids
  mkdir -p tmp/cache
  mkdir -p cache

  # use default gitignore rules
  if [ ! -f .gitignore ]; then
    ln -s gitignore.example .gitignore
  fi

  # remove obsolete symbolic link added by old versions
  rm -f vendor/rails

  # you can now start the server
  say "I: Congratulations, you are ready to run Noosfero."
  say "I: To execute Noosfero in development mode, run \`./script/development\` and browse to http://localhost:3000"
  say "I: To execute Noosfero tests, run \`rake\`."
fi