diff --git a/home/salahx/Downloads/run-with-simulator b/home/salahx/Downloads/run-with-simulator new file mode 100755 index 000000000000..e29b591f8d8b --- /dev/null +++ b/test/run-with-simulator @@ -0,0 +1,126 @@ +#!/bin/bash +# SPDX-License-Identifier: BSD-3-Clause + +SIM_PORT_DATA=2321 +SIM_PORT_CMD=$((SIM_PORT_DATA+1)) + +# Run from top dir of this repository +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +TOP_DIR="$(realpath "$SCRIPT_DIR/..")" +cd "$TOP_DIR" || { echo "Error: cd to cd $TOP_DIR failed"; exit 1; } + + +verify_simulator_is_running() { + local pid_tpm=$1 + + sleep 1 + ss -lntp4 2> /dev/null | grep "${pid_tpm}" | grep -q "${SIM_PORT_DATA}" + ret_data=$? + ss -lntp4 2> /dev/null | grep "${pid_tpm}" | grep -q "${SIM_PORT_CMD}" + ret_cmd=$? + if [ $ret_data -eq 0 ] && [ $ret_cmd -eq 0 ]; then + echo "Simulator with PID ${pid_tpm} bound to port ${SIM_PORT_DATA} and ${SIM_PORT_CMD} successfully." + return 0 + else + echo "Error: Port conflict? Cleaning up PID: ${pid_tpm}" + return 1 + fi +} + +build_tpm2_simulator_ibm() ( + test -d ibmtpm && return + echo "---> compiling IBM tpm simulator" + mkdir ibmtpm + curl -Ls https://downloads.sourceforge.net/project/ibmswtpm2/ibmtpm1682.tar.gz | tar xz -C ibmtpm + cd ibmtpm/src && make +) + +start_tpm2_simulator_ibm () { + build_tpm2_simulator_ibm || return 1 + + echo "---> starting IBM tpm simulator" + ibmtpm/src/tpm_server & + pid_tpm=$! + verify_simulator_is_running $pid_tpm +} + +start_tpm2_simulator_swtpm () { + echo "---> starting swtpm simulator" + swtpm socket --tpm2 \ + --server port=$SIM_PORT_DATA \ + --ctrl type=tcp,port=$SIM_PORT_CMD \ + --flags not-need-init \ + --tpmstate dir="$PWD" \ + --seccomp action=none & + pid_tpm=$! + verify_simulator_is_running $pid_tpm +} + +start_dbusd () { + echo "---> starting dbus daemon" + dbus-daemon --session --print-address > /tmp/bus-socket-path.txt & + sleep 1 + DBUS_SESSION_BUS_ADDRESS="$(tail -n1 /tmp/bus-socket-path.txt)" + export DBUS_SESSION_BUS_ADDRESS +} + +start_tpm2_abrmd() { + local tabrmd_tcti=$1 + + echo "---> starting abrmd" + local tabrmd_name="com.intel.tss2.Tabrmd${SIM_PORT_DATA}" + tpm2-abrmd --session --dbus-name="${tabrmd_name}" --tcti "${tabrmd_tcti}:host=localhost,port=${SIM_PORT_DATA}" & + TCTI_ADDRESS="tabrmd:bus_name=${tabrmd_name},bus_type=session" + TPM2TOOLS_TCTI="$TCTI_ADDRESS" + TPM2OPENSSL_TCTI="$TCTI_ADDRESS" + export TPM2TOOLS_TCTI + export TPM2OPENSSL_TCTI + sleep 1 +# busctl --address="${DBUS_SESSION_BUS_ADDRESS}" list | grep "$tabrmd_name" +} + +start_tpm2_sim_env() { + local sim_type=$1 + + start_dbusd + + if [ "$sim_type" = "swtpm" ]; then + start_tpm2_simulator_swtpm || return 1 + start_tpm2_abrmd swtpm || return 1 + elif [ "$sim_type" = "ibm" ]; then + start_tpm2_simulator_ibm || return 1 + start_tpm2_abrmd mssim || return 1 + else + echo "invalid tpm simulator typ" + return 1 + fi +} + +make_check () { + echo "Running make check" + openssl version + tpm2_getcap properties-fixed | head -n 20 + make check +} + +function cleanup() +{ + pkill -P $$ +} +trap cleanup EXIT + +build_tpm2_openssl() { + ./bootstrap + ./configure CC=gcc --enable-op-digest --enable-op-cipher + make +} + +SIM_TYPE=${1:-swtpm} +SKIP_BUILD=${2:-build} +if [ "$SKIP_BUILD" = "skip-build" ]; then + echo "Skipping the build" +else + build_tpm2_openssl || { echo "Compiling tpm2-openssl failed"; exit 1; } +fi +start_tpm2_sim_env "${SIM_TYPE}" || { echo "Starting tpm2 simulator failed ($SIM_TYPE)"; exit 1; } +make_check || { echo "tpm2-openssl make check failed"; exit 1; }