#!/bin/bash set -e INSTALL_PATH=/var/www/arvados-sso RELEASE_PATH=$INSTALL_PATH/current SHARED_PATH=$INSTALL_PATH/shared CONFIG_PATH=/etc/arvados/sso PACKAGE_NAME=arvados-sso-server DOC_URL="http://doc.arvados.org/install/install-sso.html#configure" DATABASE_READY=1 APPLICATION_READY=1 report_not_ready() { local ready_flag=$1; shift local config_file=$1; shift if [ "1" != "$ready_flag" ]; then cat >&2 < for more details. When $(basename "$config_file") has been modified, reconfigure or reinstall this package. EOF fi } setup_ruby_environment() { if [ -s "$HOME/.rvm/scripts/rvm" ] ; then using_rvm="true" elif [ -s "/usr/local/rvm/scripts/rvm" ] ; then using_rvm="true" else using_rvm="false" fi if [ "$using_rvm" = "true" ]; then COMMAND_PREFIX="/usr/local/rvm/bin/rvm-exec default" else COMMAND_PREFIX= fi } configure_version() { WEB_SERVICE=${WEB_SERVICE:-$(service --status-all 2>/dev/null \ | grep -Eo '\bnginx|httpd[^[:space:]]*' || true)} if [ -z "$WEB_SERVICE" ]; then cat >&2 <&2 < /dev/null if [[ "$?" != "0" ]]; then $COMMAND_PREFIX gem install bundle fi set -e echo "... done." echo -n "Running bundle install ..." $COMMAND_PREFIX bundle install --path $SHARED_PATH/vendor_bundle --quiet || exit $? echo "... done." echo -n "Ensuring directory and file permissions ..." # Ensure correct ownership of a few files chown "$WWW_OWNER" $RELEASE_PATH/config/environment.rb chown "$WWW_OWNER" $RELEASE_PATH/config.ru chown "$WWW_OWNER" $RELEASE_PATH/config/database.yml chown "$WWW_OWNER" $RELEASE_PATH/Gemfile.lock chown -R "$WWW_OWNER" $RELEASE_PATH/tmp chown -R "$WWW_OWNER" $SHARED_PATH/log chown "$WWW_OWNER" $RELEASE_PATH/db/schema.rb chmod 644 $SHARED_PATH/log/* echo "... done." set +e DB_MIGRATE_STATUS=`$COMMAND_PREFIX bundle exec rake db:migrate:status 2>&1` DB_MIGRATE_STATUS_CODE=$? set -e if echo $DB_MIGRATE_STATUS | grep 'Schema migrations table does not exist yet.' >/dev/null; then # The database exists, but the migrations table doesn't. echo -n "Setting up database ..." $COMMAND_PREFIX bundle exec rake db:schema:load db:seed || exit $? echo "... done." elif echo $DB_MIGRATE_STATUS | grep '^database: ' >/dev/null; then echo -n "Running db:migrate ..." $COMMAND_PREFIX bundle exec rake db:migrate || exit $? echo "... done." elif echo $DB_MIGRATE_STATUS | grep 'database .* does not exist' >/dev/null; then echo -n "Running db:setup ..." set +e $COMMAND_PREFIX bundle exec rake db:setup 2>/dev/null if [ "$?" = "0" ]; then echo "... done." else echo "... failed." echo "Warning: unable to set up database." >&2 DATABASE_READY=0 fi set -e else echo "Warning: Database is not ready to set up. Skipping database setup." >&2 DATABASE_READY=0 fi echo -n "Precompiling assets ..." # precompile assets; thankfully this does not take long if [ "$APPLICATION_READY" = "1" ]; then set +e $COMMAND_PREFIX bundle exec rake assets:precompile -q -s 2>/dev/null if [ "$?" = "0" ]; then echo "... done." else echo "... failed." APPLICATION_READY=0 fi set -e else echo "... skipped." fi chown -R "$WWW_OWNER" $RELEASE_PATH/tmp if [ ! -z "$WEB_SERVICE" ]; then echo -n "Restarting $WEB_SERVICE ..." service "$WEB_SERVICE" restart >/dev/null || exit $? echo "... done." fi } if [ "$1" = configure ]; then # This is a debian-based system setup_ruby_environment configure_version elif [ "$1" = "0" ] || [ "$1" = "1" ] || [ "$1" = "2" ]; then # This is an rpm-based system setup_ruby_environment configure_version fi report_not_ready "$DATABASE_READY" "$CONFIG_PATH/database.yml" report_not_ready "$APPLICATION_READY" "$CONFIG_PATH/application.yml"