cc23396d6d6e2cf0b70eb4c959621c26be0f224a
[arvados-dev.git] / jenkins / arvados-sso-server-extras / arvados-sso-server.postinst
1 #!/bin/sh
2
3 set -e
4
5 INSTALL_PATH=/var/www/arvados-sso
6 RELEASE_PATH=$INSTALL_PATH/current
7 SHARED_PATH=$INSTALL_PATH/shared
8 CONFIG_PATH=/etc/arvados/sso
9
10 VERSION=`cat $RELEASE_PATH/git-commit.version`
11
12 setup_ruby_environment() {
13   if [ -s "$HOME/.rvm/scripts/rvm" ] ; then
14     using_rvm="true"
15   elif [ -s "/usr/local/rvm/scripts/rvm" ] ; then
16     using_rvm="true"
17   else
18     using_rvm="false"
19   fi
20
21   if [ "$using_rvm" = "true" ]; then
22     COMMAND_PREFIX="/usr/local/rvm/bin/rvm-exec default"
23   else
24     COMMAND_PREFIX=
25   fi
26 }
27
28 # arguments: <major version> <most recently configured package version>
29 configure_version() {
30   VERSION="$1"
31
32   [ "$VERSION" ] || { echo "Error: configure_version: need version parameter" >&2; exit 1; }
33
34   if [ -e /etc/redhat-release ]; then
35       WWW_OWNER=nginx:nginx
36   else
37       # Assume we're on a Debian-based system for now.
38       WWW_OWNER=www-data:www-data
39   fi
40
41   NGINX_SERVICE=${NGINX_SERVICE:-$(service --status-all 2>/dev/null \
42       | grep -Eo '\bnginx[^[:space:]]*' || true)}
43   if [ -z "$NGINX_SERVICE" ]; then
44       cat >&2 <<EOF
45 Error: nginx service not found. Aborting.
46
47 Set NGINX_SERVICE to the name of the service hosting the Rails server
48 and reconfigure this package with dpkg-reconfigure.
49
50 EOF
51       exit 0
52   elif [ "$NGINX_SERVICE" != "$(echo "$NGINX_SERVICE" | head -n 1)" ]; then
53       cat >&2 <<EOF
54 Error: multiple nginx services found. Aborting.
55
56 Set NGINX_SERVICE to the name of the service hosting the Rails server
57 and reconfigure this package with dpkg-reconfigure.
58
59 EOF
60       exit 0
61   fi
62
63   echo
64   echo "Assumption: $NGINX_SERVICE is configured to serve your SSO server URL from"
65   echo "            /var/www/arvados-sso/current"
66   echo "Assumption: configuration files are in /etc/arvados/sso/"
67   echo "Assumption: $NGINX_SERVICE and passenger run as $WWW_OWNER"
68   echo
69
70   echo -n "Symlinking files from $CONFIG_PATH ..."
71
72   if [ ! -h $RELEASE_PATH/config/database.yml ]; then
73     ln -s $CONFIG_PATH/database.yml $RELEASE_PATH/config/database.yml
74   fi
75   if [ ! -h $RELEASE_PATH/config/environments/production.rb ]; then
76     if [ ! -f $CONFIG_PATH/production.rb ]; then
77       cp $RELEASE_PATH/config/environments/production.rb.example $CONFIG_PATH/production.rb
78     fi
79     ln -s $CONFIG_PATH/production.rb $RELEASE_PATH/config/environments/production.rb
80   fi
81   if [ ! -h $RELEASE_PATH/config/application.yml ]; then
82     ln -s $CONFIG_PATH/application.yml $RELEASE_PATH/config/application.yml
83   fi
84   echo "... done."
85
86   # Before we do anything else, make sure some directories and files are in place
87   if [ ! -e $SHARED_PATH/log ]; then mkdir -p $SHARED_PATH/log; fi
88   if [ ! -e $RELEASE_PATH/tmp ]; then mkdir -p $RELEASE_PATH/tmp; fi
89   if [ ! -e $RELEASE_PATH/log ]; then ln -s $SHARED_PATH/log $RELEASE_PATH/log; fi
90   if [ ! -e $SHARED_PATH/log/production.log ]; then touch $SHARED_PATH/log/production.log; fi
91
92   cd "$RELEASE_PATH"
93   export RAILS_ENV=production
94
95   echo -n "Running bundle install ..."
96   $COMMAND_PREFIX bundle install --path $SHARED_PATH/vendor_bundle --quiet || exit $?
97   echo "... done."
98
99   echo -n "Ensuring directory and file permissions ..."
100   # Ensure correct ownership of a few files
101   chown "$WWW_OWNER" $RELEASE_PATH/config/environment.rb
102   chown "$WWW_OWNER" $RELEASE_PATH/config.ru
103   chown "$WWW_OWNER" $RELEASE_PATH/config/database.yml
104   chown "$WWW_OWNER" $RELEASE_PATH/Gemfile.lock
105   chown -R "$WWW_OWNER" $RELEASE_PATH/tmp
106   chown -R "$WWW_OWNER" $SHARED_PATH/log
107   chown "$WWW_OWNER" $RELEASE_PATH/db/schema.rb
108   chmod 644 $SHARED_PATH/log/*
109   echo "... done."
110
111   set +e
112   DB_MIGRATE_STATUS=`$COMMAND_PREFIX bundle exec rake db:migrate:status 2>/dev/null`
113   DB_MIGRATE_STATUS_CODE=$?
114   set -e
115
116   if echo $DB_MIGRATE_STATUS | grep 'Schema migrations table does not exist yet.' >/dev/null; then
117     # The database exists, but the migrations table doesn't.
118     echo -n "Setting up database ..."
119     $COMMAND_PREFIX bundle exec rake db:schema:load db:seed || exit $?
120   elif echo $DB_MIGRATE_STATUS | grep '^database: ' >/dev/null; then
121     echo -n "Running db:migrate ..."
122     $COMMAND_PREFIX bundle exec rake db:migrate || exit $?
123   else
124     echo "Error: Database is not ready to set up. Aborting." >&2
125     exit 1
126   fi
127   echo "... done."
128
129   echo -n "Precompiling assets ..."
130   # precompile assets; thankfully this does not take long
131   $COMMAND_PREFIX bundle exec rake assets:precompile -q -s || exit $?
132   chown -R "$WWW_OWNER" $RELEASE_PATH/tmp
133   echo "... done."
134
135   echo -n "Restarting nginx ..."
136   service "$NGINX_SERVICE" restart || exit $?
137   echo "... done."
138   echo
139 }
140
141 if [ "$1" = configure ]; then
142   setup_ruby_environment
143   configure_version $VERSION "$2"
144 fi
145
146