sandcastle-ng

Scripts for the deployment of Sandcastle (GNU Taler)
Log | Files | Refs | README

sandcastle-run (2617B)


      1 #!/usr/bin/env bash
      2 
      3 # Run the Taler container with all the right mounts and preset parameters
      4 
      5 set -exou
      6 
      7 SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)
      8 cd "$SCRIPT_DIR"
      9 
     10 SANDCASTLE_SOCKET_DIR=${SANDCASTLE_SOCKET_DIR:-$PWD/sockets}
     11 if [[ ! -d $SANDCASTLE_SOCKET_DIR ]]; then
     12   mkdir -p "$SANDCASTLE_SOCKET_DIR"
     13   chmod 1777 "$SANDCASTLE_SOCKET_DIR"
     14 fi
     15 SANDCASTLE_SOCKET_DIR=$(realpath "$SANDCASTLE_SOCKET_DIR")
     16 
     17 existing_id=$(podman ps -q -a -f=name=taler-sandcastle)
     18 
     19 if [[ -n $existing_id ]]; then
     20   echo "removing existing taler-sandcastle container $existing_id"
     21   podman rm "$existing_id"
     22 fi
     23 
     24 # We need to be careful with SELinux when using volume mounts, relabel!
     25 
     26 EXTERNAL_IP4=
     27 EXTERNAL_IP6=
     28 
     29 SETUP_NAME=${SANDCASTLE_SETUP_NAME:-demo}
     30 if [[ -n ${SANDCASTLE_OVERRIDE_NAME:-} ]]; then
     31   OVERRIDES="-v $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}:/overrides:Z"
     32   EXTERNAL_PORT=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_PORT:-})
     33   EXTERNAL_IP4=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_IP:-127.0.0.1})
     34   EXTERNAL_IP6=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_IP:-[::1]})
     35   if [[ $EXTERNAL_PORT =~ ^[0-9]+$ ]]; then
     36     echo Serving via port $EXTERNAL_PORT
     37     PUBLISH_EXTERNAL_PORT4="-p=${EXTERNAL_IP4}${EXTERNAL_IP4:+:}${EXTERNAL_PORT}:${EXTERNAL_PORT}"
     38     PUBLISH_EXTERNAL_PORT6="-p=${EXTERNAL_IP6}${EXTERNAL_IP6:+:}${EXTERNAL_PORT}:${EXTERNAL_PORT}"
     39   fi
     40 else
     41   OVERRIDES=""
     42 fi
     43 
     44 # Will be mounted inside the container
     45 mkdir -p credentials
     46 mkdir -p exported
     47 
     48 # Beware: It is futile to pass environment variables to the container here,
     49 # as they will not be available in the systemd unit that provisions the
     50 # services in the container.
     51 # That's why we mount the right start-up script and override
     52 # to a well-known location.
     53 
     54 # We use slirp4netns because pasta does not allow us to bind ipv4 and ipv6
     55 # localhost
     56 # FIXME: Pasta *should* work with binding to ipv6 [::1] due to dual stack
     57 # support, as long as /proc/sys/net/ipv6/bindv6only is 0.
     58 NETWORK="--network slirp4netns"
     59 
     60 exec podman run \
     61   -d \
     62   --privileged \
     63   --name taler-sandcastle \
     64   --systemd=always \
     65   $NETWORK \
     66   -v talerdata:/talerdata:Z \
     67   -v talerdata_persistent:/talerdata_persistent:Z \
     68   -v "$SANDCASTLE_SOCKET_DIR:/sockets:z" \
     69   $OVERRIDES \
     70   ${PUBLISH_EXTERNAL_PORT4:-} \
     71   -v $PWD/credentials:/credentials:Z \
     72   -v $PWD/data:/data:Z \
     73   -v $PWD/scripts:/scripts:Z \
     74   -v $PWD/scripts/$SETUP_NAME:/provision:Z \
     75   -v $PWD/exported:/exported:z \
     76   --entrypoint /sbin/init \
     77   --sdnotify=conmon \
     78   "$@" \
     79   taler-base-all