Merge branch 'master' into 12355-make-cwl-conformance-tests-faster
[arvados.git] / tools / arvbox / lib / arvbox / docker / service / sso / run-service
1 #!/bin/bash
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5
6 exec 2>&1
7 set -ex -o pipefail
8
9 . /usr/local/lib/arvbox/common.sh
10
11 cd /usr/src/sso
12 if test -s /var/lib/arvados/sso_rails_env ; then
13   export RAILS_ENV=$(cat /var/lib/arvados/sso_rails_env)
14 else
15   export RAILS_ENV=development
16 fi
17
18 run_bundler --without=development
19 bundle exec passenger start --runtime-check-only --runtime-dir=/var/lib/passenger
20
21 if test "$1" = "--only-deps" ; then
22     exit
23 fi
24
25 set -u
26
27 if ! test -s /var/lib/arvados/sso_uuid_prefix ; then
28   ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"' > /var/lib/arvados/sso_uuid_prefix
29 fi
30 uuid_prefix=$(cat /var/lib/arvados/sso_uuid_prefix)
31
32 if ! test -s /var/lib/arvados/sso_secret_token ; then
33   ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/sso_secret_token
34 fi
35 secret_token=$(cat /var/lib/arvados/sso_secret_token)
36
37 if ! test -s /var/lib/arvados/self-signed.key ; then
38   openssl req -new -x509 -nodes -out /var/lib/arvados/self-signed.pem -keyout /var/lib/arvados/self-signed.key -days 365 -subj '/CN=localhost'
39 fi
40
41 cat >config/application.yml <<EOF
42 $RAILS_ENV:
43   uuid_prefix: $uuid_prefix
44   secret_token: $secret_token
45   default_link_url: "http://$localip"
46   allow_account_registration: true
47 EOF
48
49 (cd config && /usr/local/lib/arvbox/application_yml_override.py)
50
51 if ! test -f /var/lib/arvados/sso_database_pw ; then
52     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/sso_database_pw
53 fi
54 database_pw=$(cat /var/lib/arvados/sso_database_pw)
55
56 if ! (psql postgres -c "\du" | grep "^ arvados_sso ") >/dev/null ; then
57     psql postgres -c "create user arvados_sso with password '$database_pw'"
58     psql postgres -c "ALTER USER arvados_sso CREATEDB;"
59 fi
60
61 sed "s/password:.*/password: $database_pw/" <config/database.yml.example >config/database.yml
62
63 if ! test -f /var/lib/arvados/sso_database_setup ; then
64    bundle exec rake db:setup
65
66    if ! test -s /var/lib/arvados/sso_app_secret ; then
67        ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/sso_app_secret
68    fi
69    app_secret=$(cat /var/lib/arvados/sso_app_secret)
70
71    bundle exec rails console <<EOF
72 c = Client.new
73 c.name = "joshid"
74 c.app_id = "arvados-server"
75 c.app_secret = "$app_secret"
76 c.save!
77 EOF
78
79    touch /var/lib/arvados/sso_database_setup
80 fi
81
82 rm -rf tmp
83 mkdir -p tmp/cache
84
85 bundle exec rake db:migrate
86
87 set +u
88 if test "$1" = "--only-setup" ; then
89     exit
90 fi
91
92 exec bundle exec passenger start --port=${services[sso]} \
93      --runtime-dir=/var/lib/passenger \
94      --ssl --ssl-certificate=/var/lib/arvados/self-signed.pem \
95      --ssl-certificate-key=/var/lib/arvados/self-signed.key