#!/bin/bash
#chroot  and /tmp
MVHOSTNAME=mvi
. /etc/profile
TEMP_TEMPLATES=/tmp/templates
disk=$2
rootfs=$3
rootsize=$4
datafs=$5
datasize=$6
swapsize=$7
mountpoint="/new_boot"
run=$MV_ROOT/bin/install_functions.sh
. /etc/systemconfig 2>/dev/null
. $MV_ROOT/bin/networkconfig.sh
CMDLINE=$(cat /proc/cmdline)

#TEMPNET="Hostip"$default_interface
#eval MYTHIP=\$${TEMPNET}


progress () {
mypercent=`echo "$1" | cut -d. -f1`
if [  x$mypercent = x ]
then
echo "" > /tmp/.install_percent
else
echo "${mypercent}% complete" > /tmp/.install_percent
fi


}




full_install () {
    if [ -f /tmp/.this_is_upgrade ]
    then
        rm /tmp/.this_is_upgrade
    fi
    echo "Partitioning $disk" > /tmp/.install_state
    progress 1
    sleep 1
    $run partition_it $disk $rootsize $datasize $swapsize

    echo "Formating $disk" > /tmp/.install_state
        progress 2
    sleep 1
    $run format_it $disk $rootfs $datafs

    echo "Preparing $disk" > /tmp/.install_state
    progress 3
    sleep 1
    $run mount_it $disk

    startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`

    echo "STARTSIZE=$startsize">/tmp/.startsize.io
    echo "Installing data" > /tmp/.install_state

    sleep 1
        $run copy_it $disk ALL
        rm $mountpoint/etc/fstab
        $run fstab_fix_it $disk $rootfs $datafs FULL_INSTALL

    progress 99
    sleep 1
    $run grub_it $disk


    echo "Configuring system" > /tmp/.install_state
        progress 100
        sleep 1
        cp -f /etc/systemconfig "$mountpoint"/etc
    #run save syssettings to save settings, then copy to new mountpoint
        $MV_ROOT/bin/restore_default_settings.sh  -c save -t syssettings -h $MVHOSTNAME -d 127.0.0.1
        SE=$TEMPLATES/settings/syssettings
        mkdir -p ${mountpoint}$SE
        cp -rp $SE/*  ${mountpoint}$SE/
        chown root:mythtv "$mountpoint"/etc/systemconfig
        chown -R mythtv:mythtv ${mountpoint}$SE

        chmod -R 775   ${mountpoint}$SE
        chmod 775 "$mountpoint"/etc/systemconfig
        #copy over any updates that might have occured
        cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
        chmod -R 755 ${mountpoint}/root
        cp /etc/mtab "$mountpoint"/etc/mtab
      

    if  [ $SystemType = "Master_backend" -o $SystemType = "Standalone"  ]
    then
            #installing DB to local machine
                #turn off old live database, so the chroot one can start
            /etc/rc.d/mysqld stop
            mount --bind /dev "$mountpoint/dev"
            chroot "$mountpoint"   "$MV_ROOT/bin/install_db_chroot.sh"  >  /tmp/chrootdb.out
            chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
            echo "stopping mysql in chroot"
            chroot "$mountpoint" /etc/rc.d/mysqld stop
            umount "$mountpoint/dev"
            
            #/etc/rc.d/mysqld start
    else
            #update remotedb with this host settings
            chroot "$mountpoint" DISPLAY=127.0.0.1:0  /usr/local/bin/MythVantage -t  restore,default_1
            chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
            if [ !  $? = 0 ]
            then
                touch $mountpoint/tmp/.dbsysfailed
                chmod 777 $mountpoint/tmp/.dbsysfailed
            else
            #Run second time
            chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
            chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c  ACCESSCONTROL
            fi
    fi
    chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced
    echo "Done" > /tmp/.install_state
    cp /tmp/mythvantage_install.log  $mountpoint/var/log/
    $run unmount_it $disk
}

function createsquashlist(){
if [ -f $1 ]
then
    rm -f 
$1
fi
for i in bin boot etc home lib opt root sbin usr var
do
echo $i >> $1
done


}




function upgrade () {
    touch /tmp/.this_is_upgrade

    if [ ! x$rootfs = "xDo_not_format" ]
    then
        echo "Formating $disk" > /tmp/.install_state
            progress 2
            sleep 1
            $run format_it $disk $rootfs NO
    fi
    echo "Preparing $disk" > /tmp/.install_state
        progress 3
        sleep 1
        $run mount_it $disk
        startsize=`statgrab -M disk.|grep $disk.write_bytes|cut -d= -f 2|tr -d " "`
        echo "STARTSIZE=$startsize">/tmp/.startsize.io
        echo "Installing data" > /tmp/.install_state
        sleep 1
        cp -rf /tmp/etc /new_boot/etc.old
        cp -rf  /tmp/oss /new_boot/var/lib/oss.old
        #$run copy_it $disk bin.lzm,boot.lzm,etc.lzm,home.lzm,lib.lzm,opt.lzm,root.lzm,sbin.lzm,usr.lzm,var.lzm
        SQUASHLIST="/tmp/.squashlist"
        createsquashlist $SQUASHLIST
        $run copy_it $disk $SQUASHLIST
        #copy back ssh keys

        cp -rp /data/var/cache/pacman/pkg/* /new_boot/data/var/cache/pacman/pkg/
        cp -fp /new_boot/etc.old/ssh/*.pub   /new_boot/etc/ssh/
        cp -fp /new_boot/etc.old/ssh/*.key   /new_boot/etc/ssh/
        cp -fp /new_boot/etc.old/ssh/*key   /new_boot/etc/ssh/
        
        #funckeys
        cadir=/etc/pki/func/ca
        mv /new_boot/etc/pki  /new_boot/etc/pki.new
        cp -rp /new_boot/etc.old/pki  /new_boot/etc/
        #passwd/shadow/group
        cp -fp /new_boot/etc.old/passwd /new_boot/etc/
        cp -fp /new_boot/etc.old/shadow /new_boot/etc/
        cp -fp /new_boot/etc.old/group   /new_boot/etc/

        if [  x$rootfs = "xDo_not_format" ]
        then
            #rootfs=`grep ${disk}1 /tmp/etc/fstab |awk ' { print $3 } '`
            rootfs=`grep \/\  /tmp/etc/fstab |awk ' { print $3 } '`
        fi
            #datafs=`grep ${disk}3 /tmp/etc/fstab |awk ' { print $3 } '`
            datafs=`grep \/data /tmp/etc/fstab |awk ' { print $3 } '`
            $run fstab_fix_it $disk $rootfs $datafs UPGRADE

    echo "Writing boot sector" > /tmp/.install_state
        progress 99
        sleep 1
        $run grub_it $disk


    echo "Configuring system" > /tmp/.install_state
        progress
        sleep 1
        cp /etc/mtab "$mountpoint"/etc/mtab
        cp -f /etc/systemconfig "$mountpoint"/etc
        cp -f $MV_ROOT/bin/*.sh "$mountpoint"$MV_ROOT/bin/
        chmod -R 755 ${mountpoint}/root
        chown root:mythtv "$mountpoint"/etc/systemconfig
        chmod 775 "$mountpoint"/etc/systemconfig
        chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
        #wrap this in a network check_network, no need to update the db if the import worked.
#####  do I need to start mysql?
        chroot "$mountpoint" DISPLAY=127.0.0.1:0  /usr/local/bin/MythVantage -t  restore,default_1
        chroot "$mountpoint" $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings
        #
    #Run second time
        chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh misc,hostype,network,advanced,this_is_install
        chroot "$mountpoint" $MV_ROOT/bin/systemconfig.sh advanced,this_is_install

    #  fi

    echo "Done" > /tmp/.install_state
    cp /tmp/mythvantage_install.log  $mountpoint/var/log/
    $run unmount_it $disk
}

function netboot-full_install () {
    TEMPVAR=${CMDLINE#*nfsroot=}
    NFSROOT=${TEMPVAR%% *}
    NFSROOT=`echo $NFSROOT|cut -d: -f1`
    MAC=`/sbin/ifconfig eth0|grep HWaddr| cut -d: -f2-|awk '{ print $3}'|tr : -`
    URL="http://$NFSROOT:1337/diskless.py?HOSTNAME=$hostname&MAC=$MAC"
    echo "calling $URL"
    echo "Starting" > /tmp/.install_state
    curl $URL
    ${MV_ROOT}/bin/xconfig.sh
}

function killdhcp () {
if [ -f /etc/dhcpc/dhcpcd-eth0.pid ]
        then
            pid=`cat /etc/dhcpc/dhcpcd-eth0.pid`
            kill -9 $pid
            rm -f /etc/dhcpc/dhcpcd-eth0.pid
            rm -f /var/run/dhcpcd*
        fi
if [ -f /var/run/dhcpcd-eth0.pid ]
        then
            pid=`cat /var/run/dhcpcd-eth0.pid`
            kill -9 $pid
            rm -f /var/run/dhcpcd-eth0.pid*
        fi
ip address flush dev eth0
}


# function vnc_check() {
#     CMDLINE=$(cat /proc/cmdline)
#     echo $CMDLINE |grep -q vnc
#     USEVNC=$?
#     echo $CMDLINE |grep -q nfsroot
#      NETBOOT=$?
#     echo $USEVNC
# 	if [ !  x$USEVNC = x0  ]
# 	then
# 	    echo "not using vnc"
#         if [ !  x$NETBOOT = x0  ]
#         then
#             echo "not using netboot"
#         else
#             echo "using netboot"
#             USEVNC=0
#         fi
# 
#     else
#         echo " using vnc"
#     fi
# }


# function network_setup () {
# DEVICE=eth0
#     if [ ! -f /etc/systemconfig ]
#     then
#         exit 1
#     fi
# 
# if [ ! x$USEVNC = x0  ]
# then
#     echo "Resetting  the network"
#     killdhcp
#     if [ $UseDHCP = 0 ]
#     then
#          /sbin/dhcpcd $DEVICE
#             if [ ! $? = 0 ]
#             then
#                 exit 2
#             fi
#         fi
# else
#   echo "using vnc/netboot, will not reset network"
#   echo "nameserver $nameserver" > /etc/resolv.conf
#   return 0
# fi
# 
# if [ $UseDHCP = 1 ]
# then
# 
#         /sbin/ifconfig $DEVICE $ip
#         /sbin/route add default gw $route
#         echo "nameserver $nameserver" > /etc/resolv.conf
# 
# fi
# 
# 
# }

function SANE_SYSETTINGS () {
sed -e '/HOSTrootfstype/d' \
        -e '/HOSTrootfstype/d' \
        -e '/HOSTdatafstype/d' \
        -e '/HOSTOSsize/d'  \
        -e '/HostUseALLdata/d'  \
        -e '/HOSTDATAsize/d'    \
        -e '/HOSTuprootfstype/d'    \
        -e '/HostUseSWAP/d' \
        -e '/HOSTSWAPsize/d  ' /tmp/templates/settings/syssettings/settings.txt  >  /tmp/settings.new
    mv  /tmp/settings.new /tmp/templates/settings/syssettings/settings.txt
}

case $1 in
        full_install_it )         full_install       ;;

        NETBOOT)
echo "-----------------------------------------------------------------------3-----"
         netboot-full_install   ;;

        find_update)
            #TRY TO mount first partition of drive
            #copy /etc/systemconfig to live,  import settings into db
            #umount drive
            $run mount_it $disk
                if [ -f /new_boot/etc/systemconfig ]
                then
                ###########ADD templates
                mkdir -p $TEMP_TEMPLATES
                cp -pr /new_boot/$TEMPLATES  $TEMP_TEMPLATES
                SANE_SYSETTINGS
                cp -rp $TEMP_TEMPLATES/settings $TEMPLATES/


                cp /new_boot/etc/systemconfig /etc/systemconfig
                cp -rf  /new_boot/etc /tmp/etc
                cp -rf /new_boot/var/lib/oss  /tmp/oss

                $MV_ROOT/bin/restore_default_settings.sh -c restore -t syssettings -h $MVHOSTNAME  -d 127.0.0.1
                fi
            $run umount_it $disk
            ;;

        upgrade_it)
                #"$MV_ROOT/bin/install_proxy.sh upgrade_it " + install_drive + " " + rootfs +  "&"
                upgrade

            ;;
        disk_model_it)
                        model="unknown"
                            size="xxx"
                        case $2 in

                            h* )
                                    model=`cat /proc/ide/$2/model`
                                    ;;
                            s*)     model=`sginfo /dev/$2|grep Product|awk ' { print $2 } '`
                                    ;;
                        esac
                                size=`parted /dev/$2  print |grep Disk|awk  ' { print $3 } '  `


                                echo ""$model" $size " >/tmp/model

            ;;
        network_check_it)
                        #Should never return from check_network
                        case $2 in
                                setup_network)
                                         vnc_check
                                         install_network_setup
                                ;;

                                check_self)
                                            myipdefault=`ifconfig  | grep -C1 $default_interface| grep -v $default_interface | cut -d: -f2 | awk '{ print $1}'`
                                            ping -c 1 $myipdefault
                                                    if [ ! $? = 0 ]
                                                    then
                                                        exit 3
                                                        #can't ping yourself
                                                    fi
                                ;;
                                check_gw)
                                            #check gateway
                                            mygwdefault=`/sbin/route |grep $default_interface|grep UG|awk '{ print $2}'`
					                        if  [ !  x$mygwdefault = x ]
					                        then
	                                            ping -c 1 $mygwdefault
        	                                    if [ ! $? = 0 ]
                	                            then
                        	                        exit 4
                                	      	    fi
				                            fi
                                ;;
                                check_ns)
                                            #check nameserver
                                                    mydns=`cat /etc/resolv.conf|grep nameserver|head -1|awk '{ print $2}'`
                                                    ping -c 1 $mydns
                                                    if [ ! $? = 0 ]
                                                    then
                                                        exit 5
                                                    fi
                                ;;
                                check_names)
                                            host google.com
                                            if [ ! $? = 0 ]
                                            then
                                                exit 6
                                            fi
                                ;;
                                host_names)
                                            host $hostname
                                            if [  $? = 0 ]
                                            then
                                                exit 7
                                            fi
                                ;;

                            esac
                        exit 0
            ;;


        * )
            state=`cat /tmp/.install_state`
            if  [  x"${state}" =  "xConfiguring system" ]
            then
                progress ""
            else

                if [ -f /tmp/.startsize.io ]
                then
                     . /tmp/.startsize.io
                    #finding the drive
                    ddrive=`df |  grep $mountpoint | head -n1 | awk -F/ ' { print $3 } ' | cut -d" " -f 1|cut -b1,2,3 `
                    used=`statgrab -M disk.|grep ${ddrive}.write_bytes|cut -d= -f 2|tr -d " "`
                    used=`echo $used-$STARTSIZE|bc`
                        #echo $used
                fi

        if [ ! x$used = x ]
            then
                .  /root/.install_size
                #somehow find if it's an install or update
                if [ -f /tmp/.this_is_upgrade ]
                then
                    total=$UPGRADESIZE
                else
                    total=$TOTALSIZE
                fi
            percent=`echo "scale=2 ;  ($used/$total) * 100 " |bc `
            cond2=$(echo "$percent > 100" |bc  )
            if [ $cond2 -eq 1  ]
            then
            percent=100
            fi
            cond3=$(echo "$percent < 3" |bc )
            if [ $cond3 -eq 0   ]
                then
                    progress $percent
                fi
            fi
        fi
        ;;
esac