Arvbox fixes: use 'postgres' database when testing if a user exists. Copy
[arvados.git] / lib / arvbox / docker / service / gitolite / run-service
1 #!/bin/bash
2
3 exec 2>&1
4 set -eux -o pipefail
5
6 . /usr/local/lib/arvbox/common.sh
7
8 mkdir -p /var/lib/arvados/git
9
10 export ARVADOS_API_HOST=$localip:${services[api]}
11 export ARVADOS_API_HOST_INSECURE=1
12 export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token)
13
14 export USER=git
15 export USERNAME=git
16 export LOGNAME=git
17 export HOME=/var/lib/arvados/git
18
19 cd ~arvbox
20
21 mkdir -p ~arvbox/.ssh ~git/.ssh
22 chmod 0700 ~arvbox/.ssh ~git/.ssh
23
24 if ! test -s ~arvbox/.ssh/id_rsa ; then
25     ssh-keygen -t rsa -P '' -f .ssh/id_rsa
26     cp ~arvbox/.ssh/id_rsa ~arvbox/.ssh/id_rsa.pub ~git/.ssh
27 fi
28
29 if test -s ~arvbox/.ssh/known_hosts ; then
30     ssh-keygen -f ".ssh/known_hosts" -R localhost
31 fi
32
33 if ! test -f /var/lib/arvados/gitolite-setup ; then
34     cd ~git
35
36     # Do a no-op login to populate known_hosts
37     # with the hostkey, so it won't try to ask
38     # about it later.
39     cp .ssh/id_rsa.pub .ssh/authorized_keys
40     ssh -o stricthostkeychecking=no git@localhost true
41     rm .ssh/authorized_keys
42
43     cp /usr/local/lib/arvbox/gitolite.rc .gitolite.rc
44
45     gitolite setup -pk .ssh/id_rsa.pub
46
47     if ! test -d gitolite-admin ; then
48         git clone git@localhost:gitolite-admin
49     fi
50
51     cd gitolite-admin
52     git config user.email arvados
53     git config user.name arvados
54     git config push.default simple
55     git push
56
57     touch /var/lib/arvados/gitolite-setup
58 else
59     # Do a no-op login to populate known_hosts
60     # with the hostkey, so it won't try to ask
61     # about it later.  Don't run anything,
62     # get the default gitolite behavior.
63     ssh -o stricthostkeychecking=no git@localhost
64 fi
65
66 prefix=$(arv --format=uuid user current | cut -d- -f1)
67
68 if ! test -s /var/lib/arvados/arvados-git-uuid ; then
69     repo_uuid=$(arv --format=uuid repository create --repository "{\"owner_uuid\":\"$prefix-tpzed-000000000000000\", \"name\":\"arvados\"}")
70     echo $repo_uuid > /var/lib/arvados/arvados-git-uuid
71 fi
72
73 repo_uuid=$(cat /var/lib/arvados/arvados-git-uuid)
74
75 if ! test -s /var/lib/arvados/arvados-git-link-uuid ; then
76     all_users_group_uuid="$prefix-j7d0g-fffffffffffffff"
77
78     set +e
79     read -rd $'\000' newlink <<EOF
80 {
81  "tail_uuid":"$all_users_group_uuid",
82  "head_uuid":"$repo_uuid",
83  "link_class":"permission",
84  "name":"can_read"
85 }
86 EOF
87     set -e
88     link_uuid=$(arv --format=uuid link create --link "$newlink")
89     echo $link_uuid > /var/lib/arvados/arvados-git-link-uuid
90 fi
91
92 if ! test -d /var/lib/arvados/git/repositories/$repo_uuid.git ; then
93     git clone --bare /usr/src/arvados /var/lib/arvados/git/repositories/$repo_uuid.git
94 else
95     git --git-dir=/var/lib/arvados/git/repositories/$repo_uuid.git fetch -f /usr/src/arvados master:master
96 fi
97
98 cd /usr/src/arvados/services/api
99 export RAILS_ENV=development
100
101 git_user_key=$(cat ~git/.ssh/id_rsa.pub)
102
103 cat > config/arvados-clients.yml <<EOF
104 development:
105   gitolite_url: /var/lib/arvados/git/repositories/gitolite-admin.git
106   gitolite_tmp: /var/lib/arvados/git
107   arvados_api_host: $localip:${services[api]}
108   arvados_api_token: "$ARVADOS_API_TOKEN"
109   arvados_api_host_insecure: true
110   gitolite_arvados_git_user_key: "$git_user_key"
111 EOF
112
113 while true ; do
114     bundle exec script/arvados-git-sync.rb development
115     sleep 120
116 done