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