18657: Can't symlink to binstubs, need to invoke them in place
[arvados.git] / tools / arvbox / lib / arvbox / docker / createusers.sh
1 #!/bin/bash
2 # Copyright (C) The Arvados Authors. All rights reserved.
3 #
4 # SPDX-License-Identifier: AGPL-3.0
5
6 set -e -o pipefail
7
8 export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox
9
10 if ! grep "^arvbox:" /etc/passwd >/dev/null 2>/dev/null ; then
11     HOSTUID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f4)
12     HOSTGID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f5)
13
14     mkdir -p $ARVADOS_CONTAINER_PATH/git \
15           /var/lib/passenger /var/lib/gopath \
16           /var/lib/pip /var/lib/npm
17
18     if test -z "$ARVBOX_HOME" ; then
19         ARVBOX_HOME=$ARVADOS_CONTAINER_PATH
20     fi
21
22     groupadd --gid $HOSTGID --non-unique arvbox
23     groupadd --gid $HOSTGID --non-unique git
24     useradd --home-dir $ARVBOX_HOME \
25             --uid $HOSTUID --gid $HOSTGID \
26             --non-unique \
27             --groups docker \
28             --shell /bin/bash \
29             arvbox
30     useradd --home-dir $ARVADOS_CONTAINER_PATH/git --uid $HOSTUID --gid $HOSTGID --non-unique git
31     useradd --groups docker crunch
32
33     if [[ "$1" != --no-chown ]] ; then
34         chown arvbox:arvbox -R /usr/local $ARVADOS_CONTAINER_PATH \
35               /var/lib/passenger /var/lib/postgresql \
36               /var/lib/nginx /var/log/nginx /etc/ssl/private \
37               /var/lib/gopath /var/lib/pip /var/lib/npm \
38               /var/lib/arvados
39     fi
40
41     mkdir -p /tmp/crunch0 /tmp/crunch1
42     chown crunch:crunch -R /tmp/crunch0 /tmp/crunch1
43
44     # singularity needs to be owned by root and suid
45     chown root /var/lib/arvados/bin/singularity \
46           /var/lib/arvados/etc/singularity/singularity.conf \
47           /var/lib/arvados/etc/singularity/capability.json \
48           /var/lib/arvados/etc/singularity/ecl.toml
49     chmod u+s /var/lib/arvados/bin/singularity
50
51     echo "arvbox    ALL=(crunch) NOPASSWD: ALL" >> /etc/sudoers
52
53     cat <<EOF > /etc/profile.d/paths.sh
54 export PATH=/var/lib/arvados/bin:/usr/local/bin:/usr/bin:/bin:/usr/src/arvados/sdk/cli/binstubs
55 export npm_config_cache=/var/lib/npm
56 export npm_config_cache_min=Infinity
57 export R_LIBS=/var/lib/Rlibs
58 export GOPATH=/var/lib/gopath
59 EOF
60
61     mkdir -p /etc/arvados
62     chown -R arvbox:arvbox /etc/arvados
63 fi
64
65 if ! grep "^fuse:" /etc/group >/dev/null 2>/dev/null ; then
66     if test -c /dev/fuse ; then
67         FUSEGID=$(ls -nd /dev/fuse | sed 's/ */ /' | cut -d' ' -f5)
68         groupadd --gid $FUSEGID --non-unique fuse
69         adduser arvbox fuse
70         adduser crunch fuse
71     fi
72 fi