Files
pezkuwi-sdk/vendor/pezkuwi-zombienet-sdk/crates/provider/src/shared/scripts/zombie-wrapper.sh
T
pezkuwichain 70ddb6516f feat: Vendor pezkuwi-subxt and pezkuwi-zombienet-sdk into monorepo
- Add pezkuwi-subxt crates to vendor/pezkuwi-subxt
- Add pezkuwi-zombienet-sdk crates to vendor/pezkuwi-zombienet-sdk
- Convert git dependencies to path dependencies
- Add vendor crates to workspace members
- Remove test/example crates from vendor (not needed for SDK)
- Fix feature propagation issues detected by zepter
- Fix workspace inheritance for internal dependencies
- All 606 crates now in workspace
- All 6919 internal dependency links verified correct
- No git dependencies remaining
2025-12-23 09:37:11 +03:00

179 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
set -uxo pipefail
if [ -f /cfg/coreutils ]; then
RM="/cfg/coreutils rm"
MKFIFO="/cfg/coreutils mkfifo"
MKNOD="/cfg/coreutils mknod"
LS="/cfg/coreutils ls"
KILL="/cfg/coreutils kill"
SLEEP="/cfg/coreutils sleep"
ECHO="/cfg/coreutils echo"
elif [ -f /helpers/coreutils ]; then
# used for docker/podman to have a single volume sharing helper binaries
# across nodes independent from the /cfg where some files are stored
# by the node itself
RM="/helpers/coreutils rm"
MKFIFO="/helpers/coreutils mkfifo"
MKNOD="/helpers/coreutils mknod"
LS="/helpers/coreutils ls"
KILL="/helpers/coreutils kill"
SLEEP="/helpers/coreutils sleep"
ECHO="/helpers/coreutils echo"
else
RM="rm"
MKFIFO="mkfifo"
MKNOD="mknod"
LS="ls"
KILL="kill"
SLEEP="sleep"
ECHO="echo"
fi
echo "COMMANDS DEFINED"
# add /cfg as first `looking dir` to allow to overrides commands.
export PATH="/cfg":$PATH
echo "EXPORT PATH"
# setup pipe
pipe=/tmp/zombiepipe
trap "$RM -f $pipe" EXIT
# try mkfifo first and allow to fail
if [[ ! -p $pipe ]]; then
$MKFIFO $pipe
fi
# set immediately exit on any non 0 exit code
set -e
# if fails try mknod
if [[ ! -p $pipe ]]; then
$MKNOD $pipe p
fi
echo "PIPE CREATED"
# init empty
child_pid=""
# get the command to exec
CMD=($@)
# File to store CMD (and update from there)
ZOMBIE_CMD_FILE=/tmp/zombie.cmd
ZOMBIE_CMD_PID=/tmp/zombie.pid
# Store the cmd and make it available to later usage
# NOTE: echo without new line to allow to customize the cmd later
$ECHO -n "${CMD[@]}" > $ZOMBIE_CMD_FILE
echo "COMMAND TO RUN IS: $CMD"
start() {
# redirect the output to be expored to loki
"${CMD[@]}" >> /proc/1/fd/1 2>> /proc/1/fd/2 &
if [[ "$CMD" != "cat" ]]; then
child_pid="$!"
$ECHO $(cat $ZOMBIE_CMD_FILE)
# store pid
$ECHO ${child_pid} > $ZOMBIE_CMD_PID
# sleep a few secs to detect errors bootstraping the node
sleep 3
# check if the process is running
if ! $LS /proc/$child_pid > /dev/null 2>&1 ; then
echo "child process doesn't exist, quiting...";
exit 1;
else
echo "PID: $child_pid alive";
fi;
else
echo "Process not started, PID not stored, since was 'cat'";
fi;
}
restart() {
if [ ! -z "${child_pid}" ]; then
$KILL -9 "$child_pid"
fi
# check if we have timeout
if [[ "$1" ]]; then
$SLEEP "$1"
fi
start
}
pause() {
if [ ! -z "${child_pid}" ]; then
echo "send -STOP to process $child_pid"
$KILL -STOP "$child_pid"
echo "result $?"
# Wait until the process is actually stopped (state 'T')
for i in {1..10}; do
local state
state=$(awk '{print $3}' /proc/$child_pid/stat 2>/dev/null)
if [ "$state" = "T" ]; then
echo "Process $child_pid is paused (state: $state)"
return
fi
$SLEEP 0.2
done
echo "Warning: Process $child_pid not paused after SIGSTOP"
fi
}
resume() {
if [ ! -z "${child_pid}" ]; then
echo "send -CONT to process $child_pid"
$KILL -CONT "$child_pid"
echo "result $?"
# Wait until the process is actually resumed (state not 'T')
for i in {1..10}; do
local state
state=$(awk '{print $3}' /proc/$child_pid/stat 2>/dev/null)
if [ "$state" != "T" ] && [ -n "$state" ]; then
echo "Process $child_pid is resumed (state: $state)"
return
fi
$SLEEP 0.2
done
echo "Warning: Process $child_pid not resumed after SIGCONT"
fi
}
# keep listening from the pipe
while read line <$pipe
echo "read line: ${line}"
do
if [[ "$line" == "start" ]]; then
start
elif [[ "$line" == "quit" ]]; then
break
elif [[ "$line" =~ "restart" ]]; then
# check if we have timeout between restart
if [[ $line =~ [^0-9]+([0-9]+) ]]; then
restart "${BASH_REMATCH[1]}"
else
restart 0
fi;
elif [[ "$line" == "pause" ]]; then
pause
elif [[ "$line" == "resume" ]]; then
resume
fi
done
exit 0