#!/bin/bash

## Enable kvm and virtual-network kernel
[ -c /dev/kvm ] || mknod /dev/kvm c 10 232
[ -d /dev/net ] || mkdir /dev/net
[ -c /dev/net/tun ] || mknod /dev/net/tun c 10 200
[ -f /etc/mtab ] || ln -s /proc/mounts /etc/mtab

iptables -t nat -A POSTROUTING -s 172.18.0.0/24 -o eth0 -j MASQUERADE
socat TCP-LISTEN:6667,fork,reuseaddr TCP:172.18.0.2:6667 &
socat TCP-LISTEN:22,fork,reuseaddr TCP:172.18.0.2:6667 &

## Custom init script
INIT_CMD="$@"
if [ "$#" -eq 0 ]; then
    INIT_CMD="/bin/bash"
fi
cat > /sbin/init_inside_kvm <<EOF
#!/bin/sh

mount -o rw,remount /
hostname \$(cat /etc/hostname)
ip addr add 172.18.0.2/24 dev eth0
ip link set lo up
ip link set eth0 up
ip route add default via 172.18.0.1

exec $INIT_CMD
EOF
chmod +x /sbin/init_inside_kvm

## Custom KVM network script
mkdir -p /etc/kvm
cat > /etc/kvm/kvm-ifup <<EOF
#!/bin/sh
ip addr add 172.18.0.1/24 dev "\$1"
ip link set "\$1" up
EOF
chmod +x /etc/kvm/kvm-ifup

ROOTFS=/
KERNEL=$(echo /boot/vmlinuz* | tr ' ' '\n' | head -n 1)
INITRD=$(echo /boot/initrd* | tr ' ' '\n' | head -n 1)
echo $KERNEL
echo $INITRD

CMDLINE="root=guestroot rootfstype=9p rootflags=trans=virtio,version=9p2000.L rw"
CMDLINE="console=ttyS0 quiet panic=0 $CMDLINE"
CMDLINE="init=/sbin/init_inside_kvm $CMDLINE"

echo $CMDLINE
echo "+++ Starting kvm."
kvm -cpu host -nographic -no-reboot -m 256 \
    -append "$CMDLINE" -kernel "$KERNEL" -initrd "$INITRD" \
    -fsdev local,id=fsdev0,path="$ROOTFS",security_model=none \
    -device virtio-9p-pci,fsdev=fsdev0,mount_tag=guestroot \
    -device virtio-net,netdev=net0 -netdev tap,id=net0,script=/etc/kvm/kvm-ifup,downscript=no
echo ""
echo "+++ Exited kvm."
