sandcastle-run (4471B)
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 # Ports where individual services are published to the host 8 SANDCASTLE_PORT_MERCHANT=${SANDCASTLE_PORT_MERCHANT:-127.0.0.1:16000} 9 SANDCASTLE_PORT_EXCHANGE=${SANDCASTLE_PORT_EXCHANGE:-127.0.0.1:16001} 10 SANDCASTLE_PORT_BLOG=${SANDCASTLE_PORT_BLOG:-127.0.0.1:16002} 11 SANDCASTLE_PORT_DONATIONS=${SANDCASTLE_PORT_DONATIONS:-127.0.0.1:16003} 12 SANDCASTLE_PORT_PROVISION=${SANDCASTLE_PORT_PROVISION:-127.0.0.1:16004} 13 SANDCASTLE_PORT_LANDING=${SANDCASTLE_PORT_LANDING:-127.0.0.1:16005} 14 SANDCASTLE_PORT_LIBEUFIN_BANK=${SANDCASTLE_PORT_LIBEUFIN_BANK:-127.0.0.1:16007} 15 SANDCASTLE_PORT_BANK_SPA=${SANDCASTLE_PORT_BANK_SPA:-127.0.0.1:16009} 16 SANDCASTLE_PORT_CHALLENGER=${SANDCASTLE_PORT_CHALLENGER:-127.0.0.1:16010} 17 SANDCASTLE_PORT_AUDITOR=${SANDCASTLE_PORT_AUDITOR:-127.0.0.1:16011} 18 SANDCASTLE_PORT_DONAU=${SANDCASTLE_PORT_DONAU:-127.0.0.1:16012} 19 SANDCASTLE_PORT_DRUPAL=${SANDCASTLE_PORT_DRUPAL:-127.0.0.1:16013} 20 SANDCASTLE_PORT_PAIVANA=${SANDCASTLE_PORT_PAIVANA:-127.0.0.1:16014} 21 22 # Container-internal ports, should by synced with scripts/setup-sandcastle.sh 23 PORT_INTERNAL_EXCHANGE=8201 24 PORT_INTERNAL_MERCHANT=8301 25 PORT_INTERNAL_LIBEUFIN_BANK=8080 26 PORT_INTERNAL_LANDING=8501 27 PORT_INTERNAL_BLOG=8502 28 PORT_INTERNAL_DONATIONS=8503 29 PORT_INTERNAL_PROVISION=8504 30 PORT_INTERNAL_BANK_SPA=8505 31 PORT_INTERNAL_CHALLENGER=8506 32 PORT_INTERNAL_AUDITOR=8507 33 PORT_INTERNAL_DONAU=8508 34 PORT_INTERNAL_DRUPAL=8509 35 PORT_INTERNAL_PAIVANA=8510 36 37 SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd) 38 cd $SCRIPT_DIR 39 40 existing_id=$(podman ps -q -a -f=name=taler-sandcastle) 41 42 if [[ -n $existing_id ]]; then 43 echo "removing existing taler-sandcastle container $existing_id" 44 podman rm "$existing_id" 45 fi 46 47 # We need to be careful with SELinux when using volume mounts, relabel! 48 49 EXTERNAL_IP4= 50 EXTERNAL_IP6= 51 52 SETUP_NAME=${SANDCASTLE_SETUP_NAME:-demo} 53 if [[ -n ${SANDCASTLE_OVERRIDE_NAME:-} ]]; then 54 OVERRIDES="-v $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}:/overrides:Z" 55 EXTERNAL_PORT=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_PORT:-}) 56 EXTERNAL_IP4=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_IP:-127.0.0.1}) 57 EXTERNAL_IP6=$(source $PWD/overrides/${SANDCASTLE_OVERRIDE_NAME}; echo ${EXTERNAL_IP:-[::1]}) 58 if [[ $EXTERNAL_PORT =~ ^[0-9]+$ ]]; then 59 echo Serving via port $EXTERNAL_PORT 60 PUBLISH_EXTERNAL_PORT4="-p=${EXTERNAL_IP4}${EXTERNAL_IP4:+:}${EXTERNAL_PORT}:${EXTERNAL_PORT}" 61 PUBLISH_EXTERNAL_PORT6="-p=${EXTERNAL_IP6}${EXTERNAL_IP6:+:}${EXTERNAL_PORT}:${EXTERNAL_PORT}" 62 fi 63 else 64 OVERRIDES="" 65 fi 66 67 # Will be mounted inside the container 68 mkdir -p credentials 69 mkdir -p exported 70 71 # Beware: It is futile to pass environment variables to the container here, 72 # as they will not be available in the systemd unit that provisions the 73 # services in the container. 74 # That's why we mount the right start-up script and override 75 # to a well-known location. 76 77 # We use slirp4netns because pasta does not allow us to bind ipv4 and ipv6 78 # localhost 79 # FIXME: Pasta *should* work with binding to ipv6 [::1] due to dual stack 80 # support, as long as /proc/sys/net/ipv6/bindv6only is 0. 81 NETWORK="--network slirp4netns" 82 83 exec podman run \ 84 -d \ 85 -p=$SANDCASTLE_PORT_MERCHANT:$PORT_INTERNAL_MERCHANT \ 86 -p=$SANDCASTLE_PORT_EXCHANGE:$PORT_INTERNAL_EXCHANGE \ 87 -p=$SANDCASTLE_PORT_LIBEUFIN_BANK:$PORT_INTERNAL_LIBEUFIN_BANK \ 88 -p=$SANDCASTLE_PORT_LANDING:$PORT_INTERNAL_LANDING \ 89 -p=$SANDCASTLE_PORT_BLOG:$PORT_INTERNAL_BLOG \ 90 -p=$SANDCASTLE_PORT_DONATIONS:$PORT_INTERNAL_DONATIONS \ 91 -p=$SANDCASTLE_PORT_PROVISION:$PORT_INTERNAL_PROVISION \ 92 -p=$SANDCASTLE_PORT_BANK_SPA:$PORT_INTERNAL_BANK_SPA \ 93 -p=$SANDCASTLE_PORT_CHALLENGER:$PORT_INTERNAL_CHALLENGER \ 94 -p=$SANDCASTLE_PORT_AUDITOR:$PORT_INTERNAL_AUDITOR \ 95 -p=$SANDCASTLE_PORT_DONAU:$PORT_INTERNAL_DONAU \ 96 -p=$SANDCASTLE_PORT_DRUPAL:$PORT_INTERNAL_DRUPAL \ 97 -p=$SANDCASTLE_PORT_PAIVANA:$PORT_INTERNAL_PAIVANA \ 98 --privileged \ 99 --name taler-sandcastle \ 100 --systemd=always \ 101 $NETWORK \ 102 -v talerdata:/talerdata:Z \ 103 -v talerdata_persistent:/talerdata_persistent:Z \ 104 $OVERRIDES \ 105 ${PUBLISH_EXTERNAL_PORT4:-} \ 106 -v $PWD/credentials:/credentials:Z \ 107 -v $PWD/data:/data:Z \ 108 -v $PWD/scripts:/scripts:Z \ 109 -v $PWD/scripts/$SETUP_NAME:/provision:Z \ 110 -v $PWD/exported:/exported:z \ 111 --entrypoint /sbin/init \ 112 --sdnotify=conmon \ 113 "$@" \ 114 taler-base-all