#!/bin/bash
# migrate from hybrid channel to normal channel
#
# Functions
HYBRID_VERSION="3.10.0"
log=/var/log/hybrid-to-normal.log

check_exit_code()   { if [ $? -ne $1 ]; then echo "Error performing last operation. Exiting."; exit 1; fi; }

# CL7h -> CL7
if [[ "$(uname -r)" == *".el7h."* ]]; then
	if [ -f /etc/yum.repos.d/cl7h.repo ] ; then
		echo "Remove CloudLinux 7 hybrid repositories..." | tee -a $log
		rm /etc/yum.repos.d/*cl7h*.repo 2>&1 | tee -a $log
		yum clean all 2>&1 | tee -a $log
	fi

	yum -y downgrade kernel-"$(cat /etc/sysconfig/kernel-version.pre-hybrid)" 2>&1 | tee -a $log
	yum -y downgrade kmod 2>&1 | tee -a $log
	rpm --nodeps -e `rpm -qa kernel* kmod-lve | grep 7h` 2>&1 | tee -a $log

	exit 0
fi

/usr/sbin/rhn-channel -l | grep -q "hybrid"
if [ "$?" -eq "0" ] ; then
	echo "Switching to normal channel..." | tee -a $log
	/usr/sbin/cln-channel normal 2>&1 | tee -a $log
	check_exit_code 0
fi

if [ -f /etc/yum.repos.d/cloudlinux-hybrid-testing.repo ] ; then
	echo "Remove hybrid-testing repositories..." | tee -a $log
	rm /etc/yum.repos.d/cloudlinux-hybrid-testing.repo
	check_exit_code 0
fi

if [ "$(acpid -v)" \> "acpid-2" ]; then
	echo "Recovery acpid for normal version..." | tee -a $log
	yum -y downgrade $(cat /etc/sysconfig/acpid-version.pre-hybrid) 2>&1 | tee -a $log
	check_exit_code 0
fi

rpm --quiet -q linux-firmware
if [ "$?" -eq "0" ] ; then
	echo "Removing linux-firmware packages..." | tee -a $log
	yum -y remove linux-firmware 2>&1 | tee -a $log
	check_exit_code 0
fi

rpm --quiet -q kernel-firmware
if [ "$?" -ne "0" ] ; then
	echo "Recovering kernel-firmware and 'normal' kernel packages..." | tee -a $log
	yum --disableexcludes=all -y install kernel-firmware-$(cat /etc/sysconfig/kernel-version.pre-hybrid) 2>&1 | tee -a $log
	check_exit_code 0
	# install original kernel, because client might have removed it after hybridization
	yum --disableexcludes=all -y install kernel-$(cat /etc/sysconfig/kernel-version.pre-hybrid) 2>&1 | tee -a $log
	check_exit_code 0
fi

listpkg=$(rpm -qa kernel* kmod* | grep "$HYBRID_VERSION")
if [ "$?" -eq "0" ] ; then
	echo "Remove ${listpkg}..." | tee -a $log
	rpm --nodeps -e $listpkg
	check_exit_code 0
fi

if [ -f /etc/sysconfig/kernel-version.pre-hybrid ] ; then
	echo "Remove /etc/sysconfig/kernel-version.pre-hybrid..." | tee -a $log
	rm /etc/sysconfig/kernel-version.pre-hybrid
	check_exit_code 0
fi

. /etc/sysconfig/kernel

echo "Migration to normal channel completed" | tee -a "${log}"
