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
- code-server is installed to the ec2-user home directory:
export HOME=/home/ec2-user && curl -fsSL https://code-server.dev/install.sh | sh - 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" - 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 - 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 - 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