virtual-dsm/src/serial.sh

78 lines
2.0 KiB
Bash
Raw Normal View History

2023-03-28 06:45:24 +02:00
#!/bin/bash
2023-05-03 19:01:08 +02:00
set -Eeuo pipefail
2023-03-28 06:45:24 +02:00
2023-04-23 01:46:17 +02:00
# Docker environment variables
2023-04-08 01:15:41 +02:00
2023-04-14 15:17:24 +02:00
: ${HOST_CPU:=''}
2023-05-29 02:10:10 +02:00
: ${HOST_MAC:=''}
2023-05-02 01:31:29 +02:00
: ${HOST_DEBUG:=''}
2023-04-26 18:33:52 +02:00
: ${HOST_SERIAL:=''}
2023-05-29 02:56:47 +02:00
: ${HOST_MODEL:=''}
2023-11-11 15:56:34 +01:00
: ${GUEST_SERIAL:=''}
2023-04-02 21:38:34 +02:00
2023-12-16 04:44:15 +01:00
if [ -z "$HOST_CPU" ] && [ "$CPU_MODEL" == "host"* ]; then
2023-05-19 18:30:50 +02:00
HOST_CPU=$(lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1' | sed 's# @.*##g' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g')
2023-04-14 15:17:24 +02:00
fi
2023-04-08 02:22:28 +02:00
2023-04-14 15:17:24 +02:00
if [ -n "$HOST_CPU" ]; then
2023-12-16 01:00:42 +01:00
HOST_CPU="${HOST_CPU%%,*},,"
2023-04-08 02:22:28 +02:00
else
2023-12-16 04:44:15 +01:00
if [ "$CPU_MODEL" == "host"* ] || [ "$CPU_MODEL" == "qemu"* ]; then
2023-12-16 01:00:42 +01:00
HOST_CPU="QEMU"
else
HOST_CPU="${CPU_MODEL%%,*}"
fi
2023-05-24 23:21:30 +02:00
if [ "$ARCH" == "amd64" ]; then
2023-12-16 01:00:42 +01:00
HOST_CPU="${HOST_CPU%%,*}, Virtual CPU, X86_64"
2023-05-24 23:21:30 +02:00
else
2023-12-16 01:00:42 +01:00
HOST_CPU="${HOST_CPU%%,*}, Virtual CPU, $ARCH"
2023-05-24 23:21:30 +02:00
fi
2023-04-08 02:22:28 +02:00
fi
2023-04-08 01:30:25 +02:00
2023-04-26 20:55:53 +02:00
HOST_ARGS=()
HOST_ARGS+=("-cpu=$CPU_CORES")
HOST_ARGS+=("-cpu_arch=$HOST_CPU")
2023-04-26 18:45:12 +02:00
[ -n "$HOST_MAC" ] && HOST_ARGS+=("-mac=$HOST_MAC")
[ -n "$HOST_MODEL" ] && HOST_ARGS+=("-model=$HOST_MODEL")
[ -n "$HOST_SERIAL" ] && HOST_ARGS+=("-hostsn=$HOST_SERIAL")
[ -n "$GUEST_SERIAL" ] && HOST_ARGS+=("-guestsn=$GUEST_SERIAL")
2023-04-26 18:45:12 +02:00
if [[ "$HOST_DEBUG" == [Yy1]* ]]; then
2023-05-01 23:22:06 +02:00
set -x
2023-11-15 21:52:03 +01:00
./host.bin "${HOST_ARGS[@]}" &
2023-05-01 23:22:06 +02:00
{ set +x; } 2>/dev/null
echo
else
2023-11-15 21:52:03 +01:00
./host.bin "${HOST_ARGS[@]}" >/dev/null &
2023-05-01 23:22:06 +02:00
fi
2023-04-02 21:38:34 +02:00
2023-11-15 21:52:03 +01:00
cnt=0
sleep 0.2
while ! nc -z -w2 127.0.0.1 2210 > /dev/null 2>&1; do
2023-11-15 21:52:03 +01:00
sleep 0.1
cnt=$((cnt + 1))
(( cnt > 50 )) && error "Failed to connect to qemu-host.." && exit 58
2023-11-15 21:52:03 +01:00
done
cnt=0
while ! nc -z -w2 127.0.0.1 12345 > /dev/null 2>&1; do
2023-11-15 21:52:03 +01:00
sleep 0.1
cnt=$((cnt + 1))
(( cnt > 50 )) && error "Failed to connect to qemu-host.." && exit 59
2023-11-15 21:52:03 +01:00
done
2023-04-26 20:38:51 +02:00
# Configure serial ports
2023-04-19 16:12:57 +02:00
SERIAL_OPTS="\
2023-11-15 21:52:03 +01:00
-serial mon:stdio \
2023-10-09 18:35:04 +02:00
-device virtio-serial-pci,id=virtio-serial0,bus=pcie.0,addr=0x3 \
-chardev pty,id=charserial0 \
-device isa-serial,chardev=charserial0,id=serial0 \
-chardev socket,id=charchannel0,host=127.0.0.1,port=12345,reconnect=10 \
-device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=vchannel"
return 0