530a039079dc07f91a9b5b8fbeb511c14fc4e1df
[arvados.git] / lib / arvbox / docker / service / api / run-service
1 #!/bin/bash
2
3 exec 2>&1
4 set -ex -o pipefail
5
6 . /usr/local/lib/arvbox/common.sh
7
8 cd /usr/src/arvados/services/api
9 export RAILS_ENV=development
10
11 run_bundler --without=development
12 bundle exec passenger start --runtime-check-only --runtime-dir=/var/lib/passenger
13
14 if test "$1" = "--only-deps" ; then
15     exit
16 fi
17
18 set -u
19
20 if ! test -s /var/lib/arvados/api_uuid_prefix ; then
21     ruby -e 'puts "#{rand(2**64).to_s(36)[0,5]}"' > /var/lib/arvados/api_uuid_prefix
22 fi
23 uuid_prefix=$(cat /var/lib/arvados/api_uuid_prefix)
24
25 if ! test -s /var/lib/arvados/api_secret_token ; then
26     ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/api_secret_token
27 fi
28 secret_token=$(cat /var/lib/arvados/api_secret_token)
29
30 if ! test -s /var/lib/arvados/blob_signing_key ; then
31     ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/blob_signing_key
32 fi
33 blob_signing_key=$(cat /var/lib/arvados/blob_signing_key)
34
35 # self signed key will be created by SSO server script.
36 test -s /var/lib/arvados/self-signed.key
37
38 sso_app_secret=$(cat /var/lib/arvados/sso_app_secret)
39
40 if test -s /var/lib/arvados/vm-uuid ; then
41     vm_uuid=$(cat /var/lib/arvados/vm-uuid)
42 else
43     vm_uuid=$uuid_prefix-2x53u-$(ruby -e 'puts rand(2**400).to_s(36)[0,15]')
44     echo $vm_uuid > /var/lib/arvados/vm-uuid
45 fi
46
47 cat >config/application.yml <<EOF
48 development:
49   uuid_prefix: $uuid_prefix
50   secret_token: $secret_token
51   blob_signing_key: $blob_signing_key
52   sso_app_secret: $sso_app_secret
53   sso_app_id: arvados-server
54   sso_provider_url: "https://$localip:${services[sso]}"
55   sso_insecure: true
56   workbench_address: "http://$localip/"
57   git_repo_ssh_base: "git@$localip:"
58   git_repo_https_base: "http://$localip:${services[arv-git-httpd]}/"
59   new_users_are_active: true
60   auto_admin_first_user: true
61   auto_setup_new_users: true
62   auto_setup_new_users_with_vm_uuid: $vm_uuid
63   auto_setup_new_users_with_repository: true
64   default_collection_replication: 1
65 EOF
66
67 if ! test -f /var/lib/arvados/api_database_pw ; then
68     ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/api_database_pw
69 fi
70 database_pw=$(cat /var/lib/arvados/api_database_pw)
71
72 if ! (psql postgres -c "\du" | grep "^ arvados ") >/dev/null ; then
73     psql postgres -c "create user arvados with password '$database_pw'"
74     psql postgres -c "ALTER USER arvados CREATEDB;"
75 fi
76
77 sed "s/password:.*/password: $database_pw/" <config/database.yml.example >config/database.yml
78
79 if ! test -f /var/lib/arvados/api_database_setup ; then
80    bundle exec rake db:setup
81    touch /var/lib/arvados/api_database_setup
82 fi
83
84 if ! test -s /var/lib/arvados/superuser_token ; then
85     bundle exec ./script/create_superuser_token.rb > /var/lib/arvados/superuser_token
86 fi
87
88 rm -rf tmp
89
90 bundle exec rake db:migrate
91
92 set +u
93 if test "$1" = "--only-setup" ; then
94     exit
95 fi
96
97 ARVADOS_WEBSOCKETS=1 exec bundle exec passenger start --port=${services[api]} \
98                   --runtime-dir=/var/lib/passenger \
99                   --ssl --ssl-certificate=/var/lib/arvados/self-signed.pem \
100                   --ssl-certificate-key=/var/lib/arvados/self-signed.key