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