3 # Copyright (C) The Arvados Authors. All rights reserved.
5 # SPDX-License-Identifier: CC-BY-SA-3.0
7 # If you want to test arvados in a single host, you can run this script, which
8 # will install it using salt masterless
9 # This script is run by the Vagrant file when you run it with
13 ##########################################################
14 # This section are the basic parameters to configure the installation
16 # The 5 letters name you want to give your cluster
22 # If not specified, the initial user email will be composed as
23 # INITIAL_USER@CLUSTER.DOMAIN
24 INITIAL_USER_EMAIL="${INITIAL_USER}@${CLUSTER}.${DOMAIN}"
25 INITIAL_USER_PASSWORD="password"
27 # The example config you want to use. Currently, only "single_host" is
29 CONFIG_DIR="single_host"
31 # Which release of Arvados repo you want to use
33 # Which version of Arvados you want to install. Defaults to 'latest'
37 # Host SSL port where you want to point your browser to access Arvados
38 # Defaults to 443 for regular runs, and to 8443 when called in Vagrant.
39 # You can point it to another port if desired
40 # In Vagrant, make sure it matches what you set in the Vagrantfile
43 # This is a arvados-formula setting.
44 # If branch is set, the script will switch to it before running salt
45 # Usually not needed, only used for testing
48 ##########################################################
49 # Usually there's no need to modify things below this line
53 POSTGRES_TAG="v0.41.3"
60 # capture the directory that the script is running from
61 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
65 echo >&2 "Usage: ${0} [-h] [-h]"
67 echo >&2 "${0} options:"
68 echo >&2 " -d, --debug Run salt installation in debug mode"
69 echo >&2 " -p <N>, --ssl-port <N> SSL port to use for the web applications"
70 echo >&2 " -t, --test Test installation running a CWL workflow"
71 echo >&2 " -h, --help Display this help and exit"
72 echo >&2 " -v, --vagrant Run in vagrant and use the /vagrant shared dir"
77 # NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros).
78 TEMP=$(getopt -o dhp:tv \
79 --long debug,help,ssl-port:,test,vagrant \
82 if [ ${?} != 0 ] ; then echo "GNU getopt missing? Use -h for help"; exit 1 ; fi
83 # Note the quotes around `$TEMP': they are essential!
86 while [ ${#} -ge 1 ]; do
126 F_DIR="/srv/formulas"
131 apt-get install -y curl git jq
133 dpkg -l |grep salt-minion
134 if [ ${?} -eq 0 ]; then
135 echo "Salt already installed"
137 curl -L https://bootstrap.saltstack.com -o /tmp/bootstrap_salt.sh
138 sh /tmp/bootstrap_salt.sh -XUdfP -x python3
139 /bin/systemctl disable salt-minion.service
142 # Set salt to masterless mode
143 cat > /etc/salt/minion << EOFSM
149 - ${F_DIR}/*/test/salt/states/examples
161 cat > ${S_DIR}/top.sls << EOFTSLS
164 - single_host.host_entries
165 - single_host.snakeoil_certs
174 cat > ${P_DIR}/top.sls << EOFPSLS
180 - nginx_api_configuration
181 - nginx_controller_configuration
182 - nginx_keepproxy_configuration
183 - nginx_keepweb_configuration
185 - nginx_websocket_configuration
186 - nginx_webshell_configuration
187 - nginx_workbench2_configuration
188 - nginx_workbench_configuration
192 # Get the formula and dependencies
193 cd ${F_DIR} || exit 1
194 git clone --branch "${ARVADOS_TAG}" https://github.com/saltstack-formulas/arvados-formula.git
195 git clone --branch "${DOCKER_TAG}" https://github.com/saltstack-formulas/docker-formula.git
196 git clone --branch "${LOCALE_TAG}" https://github.com/saltstack-formulas/locale-formula.git
197 git clone --branch "${NGINX_TAG}" https://github.com/saltstack-formulas/nginx-formula.git
198 git clone --branch "${POSTGRES_TAG}" https://github.com/saltstack-formulas/postgres-formula.git
200 if [ "x${BRANCH}" != "x" ]; then
201 cd ${F_DIR}/arvados-formula || exit 1
202 git checkout -t origin/"${BRANCH}"
206 if [ "x${VAGRANT}" = "xyes" ]; then
207 SOURCE_PILLARS_DIR="/vagrant/${CONFIG_DIR}"
208 TESTS_DIR="/vagrant/${TESTS_DIR}"
210 SOURCE_PILLARS_DIR="${SCRIPT_DIR}/${CONFIG_DIR}"
211 TESTS_DIR="${SCRIPT_DIR}/${TESTS_DIR}"
214 # Replace cluster and domain name in the example pillars and test files
215 for f in "${SOURCE_PILLARS_DIR}"/*; do
216 sed "s/__CLUSTER__/${CLUSTER}/g;
217 s/__DOMAIN__/${DOMAIN}/g;
218 s/__RELEASE__/${RELEASE}/g;
219 s/__HOST_SSL_PORT__/${HOST_SSL_PORT}/g;
220 s/__GUEST_SSL_PORT__/${GUEST_SSL_PORT}/g;
221 s/__INITIAL_USER__/${INITIAL_USER}/g;
222 s/__INITIAL_USER_EMAIL__/${INITIAL_USER_EMAIL}/g;
223 s/__INITIAL_USER_PASSWORD__/${INITIAL_USER_PASSWORD}/g;
224 s/__VERSION__/${VERSION}/g" \
225 "${f}" > "${P_DIR}"/$(basename "${f}")
228 mkdir -p /tmp/cluster_tests
229 # Replace cluster and domain name in the example pillars and test files
230 for f in "${TESTS_DIR}"/*; do
231 sed "s/__CLUSTER__/${CLUSTER}/g;
232 s/__DOMAIN__/${DOMAIN}/g;
233 s/__HOST_SSL_PORT__/${HOST_SSL_PORT}/g;
234 s/__INITIAL_USER__/${INITIAL_USER}/g;
235 s/__INITIAL_USER_EMAIL__/${INITIAL_USER_EMAIL}/g;
236 s/__INITIAL_USER_PASSWORD__/${INITIAL_USER_PASSWORD}/g" \
237 ${f} > /tmp/cluster_tests/$(basename ${f})
239 chmod 755 /tmp/cluster_tests/run-test.sh
241 # FIXME! #16992 Temporary fix for psql call in arvados-api-server
242 if [ -e /root/.psqlrc ]; then
243 if ! ( grep 'pset pager off' /root/.psqlrc ); then
245 cp /root/.psqlrc /root/.psqlrc.provision.backup
251 echo '\pset pager off' >> /root/.psqlrc
252 # END FIXME! #16992 Temporary fix for psql call in arvados-api-server
254 # Now run the install
255 salt-call --local state.apply -l ${LOG_LEVEL}
257 # FIXME! #16992 Temporary fix for psql call in arvados-api-server
258 if [ "x${DELETE_PSQL}" = "xyes" ]; then
259 echo "Removing .psql file"
263 if [ "x${RESTORE_PSQL}" = "xyes" ]; then
264 echo "Restoring .psql file"
265 mv -v /root/.psqlrc.provision.backup /root/.psqlrc
267 # END FIXME! #16992 Temporary fix for psql call in arvados-api-server
269 # Leave a copy of the Arvados CA so the user can copy it where it's required
270 echo "Copying the Arvados CA certificate to the installer dir, so you can import it"
271 # If running in a vagrant VM, also add default user to docker group
272 if [ "x${VAGRANT}" = "xyes" ]; then
273 cp /etc/ssl/certs/arvados-snakeoil-ca.pem /vagrant
275 echo "Adding the vagrant user to the docker group"
276 usermod -a -G docker vagrant
278 cp /etc/ssl/certs/arvados-snakeoil-ca.pem ${SCRIPT_DIR}
281 # Test that the installation finished correctly
282 if [ "x${TEST}" = "xyes" ]; then
283 cd /tmp/cluster_tests