#!/bin/sh
# Fixed-run driver for DF-3222: does NOT revert anything.
# Current /usr/src vfsops.c must already carry BOTH fixes.
VK=/usr/obj/usr/src/sys/VKDIRFS/kernel.debug
pkill -9 -f kernel.debug 2>/dev/null; sleep 1; rm -f /var/vkernel/.memimg.*

rm -f /tmp/vkin2 /tmp/vkconsole2.log
mkfifo /tmp/vkin2
rm -rf /dirfs-host; mkdir -p /dirfs-host

(
  exec 3> /tmp/vkin2
  for i in $(seq 1 120); do
      grep -q "Mounting devfs" /tmp/vkconsole2.log 2>/dev/null && break
      sleep 1
  done
  sleep 3
  echo "echo VK-SHELL-READY"          >&3
  sleep 2
  echo "/bin/vkmount2 /hostroot"      >&3
  sleep 3
  echo "echo STILL-ALIVE"             >&3
  sleep 8
) &

cd /usr/obj/usr/src/sys/VKDIRFS
./kernel.debug -m 512m -r /vkroot.img \
    -e vfs.root.mountfrom=ufs:vkd0s1a \
    -e init_path=/sbin/vkinit \
    < /tmp/vkin2 > /tmp/vkconsole2.log 2>&1 &
VKPID=$!
echo "vkernel pid=$VKPID"
for i in $(seq 1 25); do
    kill -0 $VKPID 2>/dev/null || break
    sleep 2
done
sleep 3
echo "=== console (fixed) ==="
grep -A1 "vkmount2\|STILL-ALIVE" /tmp/vkconsole2.log | tail -6
tail -3 /tmp/vkconsole2.log
if kill -0 $VKPID 2>/dev/null; then
    echo "RESULT: vkernel alive (fixed)"
    pkill -9 -f kernel.debug
else
    echo "RESULT: vkernel died"
fi
