#!/bin/sh
# Copyright (c) 2017-2022 Virtuozzo International GmbH, All rights reserved.
MOUNTDIR=`dirname $0`
cd $MOUNTDIR

get_os_id()
{
        local id="unknown"
        local src="/etc/os-release"
        if [ -e "$src" ]; then
                id=`. $src 2>/dev/null && echo $ID`
        fi
        echo $id
}

get_os_version()
{
        local ver="0"
        local src="/etc/os-release"
        if [ -e "$src" ]; then
                ver=`. $src 2>/dev/null && echo $VERSION_ID`
        fi
        echo $ver
}

install_version()
{
        mkdir -p /usr/share/qemu-ga
        install -m 644 $MOUNTDIR/VERSION /usr/share/qemu-ga/
        ERR=$?
        if [ $ERR -ne 0 ]; then
                echo "Failed to install the version file"
                if [ $ERROR_CODE -eq 0 ]; then
                        ERROR_CODE=$ERR
                fi
        else
                echo "Successfully installed the version file"
        fi
}

echo "make sure that we are running on FreeBSD"

bsd=$(get_os_id)

if [ $(uname -o) = "FreeBSD" ]; then
	if echo "$(uname -r)" | grep -qE "9|10|11"; then
        	echo "copying qemuga service to the rc.d dir..."
		mkdir -p /usr/local/etc/rc.d/
        	cp -fv guest_pkgs/freebsd-9/freebsd/qemuga-9 /usr/local/etc/rc.d/qemuga
        	echo "make rc.d/qemuga executable..."
        	chmod +x /usr/local/etc/rc.d/qemuga
        	echo "copying QEMU Guest Agent to the target dir..."
		mkdir -p /usr/local/bin/
        	cp -fv guest_pkgs/freebsd-9/qemu-guest-agent-vz/qemu-ga /usr/local/bin/
		if [ -f "/boot/kernel/virtio_console.ko" ]; then
			echo "kernel module virtio_console exist."
		else
        		cp -fv guest_pkgs/freebsd-9/virtio_console.ko /boot/kernel
	       	fi
        	cp -fv guest_pkgs/freebsd-9/freebsd/qga.conf /etc
		# unload module
		# lets load module
		kldload /boot/kernel/virtio_console.ko > /dev/null 2>&1
        	echo "make bin/qemuga executable..."
        	chmod +x /usr/local/bin/qemu-ga
        	install_version
		# add kernel module to boot
        	if grep -q "virtio_console_load" /boot/defaults/loader.conf; then
        	    echo 'seems to be virtio_console module already added, skipping'
        	else
        	    echo 'virtio_console_load="YES"' >> /boot/defaults/loader.conf
        	fi
		# autoload service
        	if grep -q "qemuga_enable" /etc/rc.conf; then
        	    echo 'seems to be qemuga service already enabled, skipping'
        	else
        	    echo 'qemuga_enable="YES"' >> /etc/rc.conf
        	fi
		/usr/local/etc/rc.d/qemuga stop
		/usr/local/etc/rc.d/qemuga start
	fi
	if echo "$(uname -r)" | grep -q "13"; then
        	echo "copying qemuga service to the rc.d dir..."
		mkdir -p /usr/local/etc/rc.d/
        	cp -fv guest_pkgs/freebsd-13/freebsd/qemuga-13 /usr/local/etc/rc.d/qemuga
        	echo "make rc.d/qemuga executable..."
        	chmod +x /usr/local/etc/rc.d/qemuga
        	echo "copying QEMU Guest Agent to the target dir..."
		mkdir -p /usr/local/bin/
        	cp -fv guest_pkgs/freebsd-13/qemu-guest-agent-vz/qemu-ga /usr/local/bin/
        	echo "make bin/qemuga executable..."
        	chmod +x /usr/local/bin/qemu-ga
        	install_version
        	if grep -q "qemuga_enable" /etc/rc.conf; then
        	    echo 'seems to be qemuga service already enabled, skipping'
        	else
        	    echo 'qemuga_enable="YES"' >> /etc/rc.conf
        	fi
		/usr/local/etc/rc.d/qemuga stop
		/usr/local/etc/rc.d/qemuga start
	fi
	if echo "$(uname -r)" | grep -q "12"; then
        	echo "copying qemuga service to the rc.d dir..."
		mkdir -p /usr/local/etc/rc.d/
        	cp -fv guest_pkgs/freebsd-13/freebsd/qemuga-13 /usr/local/etc/rc.d/qemuga
        	echo "make rc.d/qemuga executable..."
        	chmod +x /usr/local/etc/rc.d/qemuga
        	echo "copying QEMU Guest Agent to the target dir..."
		mkdir -p /usr/local/bin/
        	cp -fv guest_pkgs/freebsd-12/qemu-guest-agent-vz/qemu-ga /usr/local/bin/
        	echo "make bin/qemuga executable..."
        	chmod +x /usr/local/bin/qemu-ga
        	install_version
		# load kernel module
		kldload virtio_console > /dev/null 2>&1
		# add kernel module to boot
        	if grep -q "virtio_console_load" /boot/defaults/loader.conf; then
        	    echo 'seems to be virtio_console module already added, skipping'
        	else
        	    echo 'virtio_console_load="YES"' >> /boot/defaults/loader.conf
        	fi

        	if grep -q "qemuga_enable" /etc/rc.conf; then
        	    echo 'seems to be qemuga service already enabled, skipping'
        	else
        	    echo 'qemuga_enable="YES"' >> /etc/rc.conf
        	fi
		/usr/local/etc/rc.d/qemuga stop
		/usr/local/etc/rc.d/qemuga start
	fi
else
        echo "not freeBSD, exiting..."
        exit 1
fi
