#!/bin/sh
VK=/usr/obj/usr/src/sys/VKERNEL64/kernel.debug
pkill -9 -f kernel.debug 2>/dev/null; sleep 1
rm -f /tmp/vkin /tmp/vkconsole.log
mkfifo /tmp/vkin
(sleep 900 > /tmp/vkin) &
HOLDER=$!
(
  exec 3> /tmp/vkin
  echo "ufs:vkd0" >&3
  for i in $(seq 1 120); do
      grep -q "Mounting root from ufs:vkd0$" /tmp/vkconsole.log 2>/dev/null && break
      sleep 1
  done
  sleep 20
  echo "/root/vkmem 0x454780; echo TEXT_RC=\$?; sleep 2" >&3
  sleep 6
  echo "/root/vkmem control; echo CTL_RC=\$?; sleep 2" >&3
  sleep 6
  echo "echo VKDONE" >&3
) &
PUMP=$!
cd /usr/obj/usr/src/sys/VKERNEL64
./kernel.debug -m 512m -r /vkroot.img -n 1 -e init_path=/bin/vkinit -s < /tmp/vkin > /tmp/vkconsole.log 2>&1 &
VKPID=$!
i=0
while [ $i -lt 500 ]; do
  grep -q "VKDONE" /tmp/vkconsole.log 2>/dev/null && break
  kill -0 $VKPID 2>/dev/null || break
  sleep 2
  i=$((i+2))
done
sleep 3
echo "=== vkernel alive? ==="
if kill -0 $VKPID 2>/dev/null; then echo "ALIVE"; else echo "DEAD"; fi
echo "=== console (from root mount) ==="
N=$(grep -an "Mounting root from ufs:vkd0$" /tmp/vkconsole.log | tail -1 | cut -d: -f1)
if [ -z "$N" ]; then N=1; fi
awk -v n="$N" 'NR>=n' /tmp/vkconsole.log | tr -d "\000" | head -80
kill $PUMP $HOLDER 2>/dev/null
pkill -9 -f kernel.debug 2>/dev/null
exit 0
