4.1 Testbed Specifications


Hardware Specifications

The testbed is available in three configurations to accommodate different workload requirements:

Specification Small Testbed Medium Testbed Large Testbed
OS RHEL9 RHEL9 RHEL9
CPU 2 cores / 4 threads 4 cores / 8 threads 8 cores / 16 threads
Memory 16 GiB 32 GiB 128 GiB
Storage* 64 GiB 64 GiB 64 GiB
AWS Instance Type m7i.xlarge m7i.2xlarge r7i.4xlarge
Cost (USD) $0.31/h ($7.44/day) $0.62/h ($14.88/day) $1.44/h ($34.56/day)

*Storage capacity is configurable based on user requirements

Pre-installed Software

Each testbed deployment includes the following software packages, essential for hosting and developing dataspace components:

Software Package Version Purpose
code-server latest The backend application to host IDE for web access
Postman CLI latest The CLI for running Postman Scripts
Postman GUI latest The GUI for running Postman Scripts
Docker latest Docker to host Dataspace containers, the key to deploy a Dataspace Testbed
Chromium latest The lightweight open-sourced browser to fit most requirements

Note: Where ’latest’ is specified, the installed version corresponds to the most recent stable release available at image build time.

Software Installation Procedures

Custom installation procedures ensure all software is configured for immediate use, eliminating the need for manual first-time setup of individual applications.

code-server
  1. code-server is installed to the ec2-user home directory:
    export HOME=/home/ec2-user && curl -fsSL https://code-server.dev/install.sh | sh
  2. A self-signed certificate is generated to enable HTTPS connections and satisfy browser security requirements:
    openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /home/ec2-user/.config/code-server/certs/key.pem -out /home/ec2-user/.config/code-server/certs/cert.pem -subj "/CN=RACE"
  3. The configuration file is created to bind code-server to port 8000 with the self-signed certificate, preventing port conflicts with dataspace components:
    cat <<EOF > /home/ec2-user/.config/code-server/config.yaml
    bind-addr: 0.0.0.0:8000
    auth: none
    cert: /home/ec2-user/.config/code-server/certs/cert.pem
    cert-key: /home/ec2-user/.config/code-server/certs/key.pem
    EOF
  4. Post-installation configuration enables direct network access:
    # Change ownership of code-server folder
    chown -R ec2-user:ec2-user /usr/bin/code-server /home/ec2-user/.config/code-server
    
    # Open firewall for port 8000
    firewall-cmd --permanent --add-port=8000/tcp
    firewall-cmd --reload
  5. A systemd service is configured to ensure code-server starts automatically and persists across reboots:
    # Create system service file
    cat <<EOF > /etc/systemd/system/code-server.service
    [Unit]
    Description=code-server
    After=network.target
    
    [Service]
    Type=simple
    User=ec2-user
    ExecStart=/usr/bin/code-server --config /home/ec2-user/.config/code-server/config.yaml /home/ec2-user/IDS-testbed
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    # Reload and enable the service
    systemctl daemon-reload
    systemctl enable code-server
Postman CLI

A custom installation script is used to install the Postman CLI binary as postman-cli rather than postman, preventing naming conflicts with the Postman GUI application.

#!/bin/sh

set -o errexit
set -o nounset

PREFIX='/usr/local'

if [ "$(uname -m)" != "x86_64" ]
then
  echo "Only x64 is supported at this time" 1>&2
  exit 1
fi

URL='https://dl-cli.pstmn.io/download/latest/linux64'

# We should always make use a temporary directory
# to not risk leaving a trail of files behind in the user's system
TMP="$(mktemp -d)"
clean() { rm -rf "$TMP"; }
trap clean EXIT

if command -v curl > /dev/null
then
  curl --location --retry 10 --output "$TMP/postman-cli.tar.gz" "$URL"
elif command -v wget > /dev/null
then
  wget --output-document "$TMP/postman-cli.tar.gz" "$URL"
else
  echo "You need either cURL or wget installed on your system" 1>&2
  exit 1
fi

tar --directory "$TMP" --extract --file "$TMP/postman-cli.tar.gz"

# Don't use sudo(8) if we don't seem to need it
RUN='sudo'
if test -d "$PREFIX/bin" && test -w "$PREFIX/bin"
then
  RUN='eval'
elif test -d "$PREFIX" && test -w "$PREFIX"
then
  RUN='eval'
fi

if [ "$RUN" = "sudo" ] && ! command -v "$RUN" > /dev/null
then
  echo "You do not have enough permissions to write to $PREFIX and you do not have sudo(8) installed" 1>&2
  exit 1
fi

mkdir -p "$PREFIX/bin"

# Use install(1) rather than cp
"$RUN" install -m 0755 "$TMP/postman-cli" "$PREFIX/bin/postman-cli"

echo "The Postman CLI has been installed" 1>&2