#!/usr/bin/env bash # Disposable network-isolated container only. All PKI is owned by this fresh task root. set -euo pipefail mkdir -p /task/data /task/server export XDG_DATA_HOME=/task/data export OPCUA_LIFECYCLE_SERVER_SECONDS=$((LIFECYCLE_SECONDS + 300)) dotnet /app/Lifecycle.dll prepare /task > /task/prepare.log 2>&1 mkdir -p /task/server/server-pki/trusted/certs for pki in /task/data/shared-pki /task/data/OtOpcUa/pki /task/data/OtOpcUa/adminui-browse-pki; do cp "$pki"/own/certs/* /task/server/server-pki/trusted/certs/ done dotnet /app/Lifecycle.dll server /task/server > /task/server.log 2>&1 & server_pid=$! cleanup() { touch /task/server/stop for attempt in $(seq 1 150); do kill -0 "$server_pid" 2>/dev/null || break sleep 0.1 done kill "$server_pid" 2>/dev/null || true wait "$server_pid" || true } trap cleanup EXIT for attempt in $(seq 1 600); do test ! -f /task/server/ready.json || break kill -0 "$server_pid" || exit 1 sleep 0.1 done test -f /task/server/ready.json for pki in /task/data/shared-pki /task/data/OtOpcUa/pki /task/data/OtOpcUa/adminui-browse-pki; do mkdir -p "$pki/trusted/certs" cp /task/server/server-pki/own/certs/* "$pki/trusted/certs/" done endpoint=$(cat /task/server/endpoint.txt) dotnet /app/Lifecycle.dll run /task "$endpoint" "$LIFECYCLE_SECONDS" "$LIFECYCLE_MODE" > /task/client.log 2>&1