#!/usr/bin/bash

checkerror() {
	if [ "$?" != "0" ]; then
		if [ "$1" != "" ]; then
			echo "$1"
		else
			echo "ERROR: Building kernel modules failed!"
		fi
		exit 1
	fi
}

os=`uname`
cd /quadstor/src/export
make clean && make 
checkerror

kvers=`uname -r`
mkdir -p /quadstor/lib/modules/$kvers

rm -f /quadstor/lib/modules/$kvers/coredev.ko
cp -f coredev.ko /quadstor/lib/modules/$kvers/

rm -f /quadstor/lib/modules/$kvers/ldev.ko
cp -f ldev.ko /quadstor/lib/modules/$kvers/

cd /quadstor/src/target-mode/iscsi/kernel/
make clean && make 
checkerror

rm -f /quadstor/lib/modules/$kvers/iscsit.ko
cp -f iscsit.ko /quadstor/lib/modules/$kvers/

cd /quadstor/src/target-mode/iscsi/usr/
make clean && make 
checkerror

mkdir -p /quadstor/bin
rm -f /quadstor/bin/ietadm
cp -f ietadm /quadstor/bin

mkdir -p /quadstor/sbin
rm -f /quadstor/sbin/ietd
cp -f ietd /quadstor/sbin

if [ ! -L /quadstor/src/target-mode/fc/qla2xxx ]; then
	if [ -f /etc/debian_version ]; then
		vers=`cat /etc/debian_version | cut -f 1 -d '.'`
		if [ $vers -eq 10 ]; then
			cd /quadstor/src/target-mode/fc && ln -s qla2xxx.515 qla2xxx
		else
			cd /quadstor/src/target-mode/fc && ln -s qla2xxx.66 qla2xxx
		fi
	elif [ -f /etc/SUSE-brand ]; then
		cd /quadstor/src/target-mode/fc && ln -s qla2xxx.66 qla2xxx
	elif [ -f /etc/redhat-release ]; then
		grep -qE "release 8|release 9|release 10" /etc/redhat-release
		if [ "$?" = "0" ]; then
			cd /quadstor/src/target-mode/fc && ln -s qla2xxx.66 qla2xxx
		else
			cd /quadstor/src/target-mode/fc && ln -s qla2xxx.515 qla2xxx
		fi
	else
		cd /quadstor/src/target-mode/fc && ln -s qla2xxx.66 qla2xxx
	fi
fi
cd /quadstor/src/target-mode/fc/qla2xxx
make clean && make 
checkerror

rm -f /quadstor/lib/modules/$kvers/qla2xxx.ko
cp -f qla2xxx.ko /quadstor/lib/modules/$kvers/

cd /quadstor/src/target-mode/fc/fcint
make clean
make 
checkerror

rm -f /quadstor/lib/modules/$kvers/fcint.ko
cp -f fcint.ko /quadstor/lib/modules/$kvers/

if [ -f /quadstor/certs/virtcert.der ]; then
	echo "/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/ldev.ko"
	/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/ldev.ko
	checkerror "Cannot sign ldev.ko"
	echo "/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/coredev.ko"
	/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/coredev.ko
	checkerror "Cannot sign coredev.ko"
	if [ -f /quadstor/lib/modules/$kvers/fcint.ko ]; then
		echo "/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/qla2xxx.ko"
		/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/qla2xxx.ko
		checkerror "Cannot sign qla2xxx.ko"
		echo "/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/fcint.ko"
		/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/fcint.ko
		checkerror "Cannot sign fcint.ko"
	fi
	/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/iscsit.ko
	echo "/usr/src/kernels/$(uname -r)/scripts/sign-file sha512 /quadstor/certs/virtpriv.key /quadstor/certs/virtcert.der /quadstor/lib/modules/$kvers/iscsit.ko"
	checkerror "Cannot sign iscsit.ko"
fi

chcon -R -t modules_object_t /quadstor/lib/modules/$kvers/*.ko > /dev/null 2>&1

#Install the newly build qla2xxx driver
/quadstor/bin/qlainst
