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