#!/bin/bash
. /etc/profile
disk=$2
mountpoint=new_boot

#-------------------------------------------
MYTHDBUSER=mythtv
MYTHTVPASSWD=mythtv
CMDLINE=$(cat /proc/cmdline)
hostname=`hostname`
MYSQLCMD_C="mysql -u$MYTHDBUSER  -p$MYTHTVPASSWD mythconverg -B --exec"
BASE=""

function update_db_settings () {

 $MYSQLCMD_C "delete from settings where value='${1}' and hostname=\"$hostname\";"
 $MYSQLCMD_C "REPLACE INTO  settings set value='${1}', data='${2}' , hostname=\"$hostname\";"
}

function random_theme () {
THEMES="basic-blue
basic-green
basic-red
basic-purple
basic-amber"

theme=($THEMES)                # Read into array variable.

num_themes=${#theme[*]}        # Count how many elements.

pick=${theme[$((RANDOM%num_themes))]}
echo "Selected $pick as the theme"
update_db_settings Theme "$pick"
}


function setupremote {
    mv $BASE/etc/lircd.conf $BASE/etc/lircd.conf.`date +%Y-%m-%d-%H-%M`
    if [ -d $TEMPLATES/remotes/$Remotetype ]
    then
            cd $TEMPLATES/remotes/$Remotetype
            for i in lircd*
            do
                    cat $i >> $BASE/etc/lircd.conf
            done
            cp lircrc $BASE/etc/lircrc
            chmod 755 /etc/lircrc
            update_db_settings HostRemoteType  "$Remotetype"
            /usr/sbin/lircd  -d /dev/lirc0
        mkdir /root/.mythtv
        ln -s /etc/lircrc /root/.mythtv/lircrc
    fi
}

function scan_for_usb_remote () {
echo "Scanning for usb receiver/remote"
while read line
do
    USBID=`echo "$line"|cut -f1`
    lsusb -d "$USBID" > /dev/null 2>/dev/null
    if [ $? = 0 ]
    then
        Remotetype=`echo "$line"|cut -f2`
        echo "found $Remotetype"
        setupremote
        break
    fi
done <$BASE/$TEMPLATES/remotes/receiver_usb.id
}

function rest_of_network () {
    #netmask
    echo $CMDLINE | grep -q netmask
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*netmask=}
        NETMASK=${TEMPVAR%% *}
        /sbin/ifconfig eth0 $IP netmask $NETMASK
        nm=`/usr/bin/nmconv.py -obits  $NETMASK`
        NETMASK="/$nm $NETMASK"
        echo $NETMASK
        update_db_settings HostNETMASK${MYTHDEFAULT} "$NETMASK"
    else
        echo "netmask not found"
    fi
    #gateway
    echo $CMDLINE | grep -q gateway
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*gateway=}
        GATEWAY=${TEMPVAR%% *}
        /sbin/route add default  gw $GATEWAY
        update_db_settings HostGW${MYTHDEFAULT} "$GATEWAY"

        else
        echo "gateway not found"
    fi

    #dns
    echo $CMDLINE | grep -q dns
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*dns=}
        DNS=${TEMPVAR%% *}
        echo "nameserver $DNS" >> /etc/resolv.conf
        update_db_settings HostDNS${MYTHDEFAULT} "$DNS"
        else
        echo "DNS not found"
    fi
}

function init_network {
    echo $CMDLINE |grep -q netdev
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*netdev=}
        MYTHDEFAULT=${TEMPVAR%% *}
    else
        MYTHDEFAULT="eth0"
    fi



    echo $CMDLINE | grep -q ip
    if [ $? = 0 ]
    then
        update_db_settings HostDefaulteth0 0
        update_db_settings HostDefault${MYTHDEFAULT} 1

        update_db_settings HostActiveonbooteth0 0
        update_db_settings HostActiveonboot${MYTHDEFAULT} 1
        update_db_settings HostNetDevice ${MYTHDEFAULT}

        TEMPVAR=${CMDLINE#*ip=}
        IP=${TEMPVAR%% *}
        if [ x$IP = xdhcp ]
        then
            /sbin/dhcpcd $MYTHDEFAULT
            update_db_settings HostUseDHCP${MYTHDEFAULT} 0
        else
            /sbin/ifconfig ${MYTHDEFAULT} $IP
            update_db_settings HostUseDHCP${MYTHDEFAULT} 1
            update_db_settings HostIP${MYTHDEFAULT} "$IP"
            rest_of_network
        fi
    fi
}

function init_remote {
    echo $CMDLINE | grep -q remoteport
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*remoteport=}
        REMOTEPORT=${TEMPVAR%% *}
    if [ x"$ReceiverType" = "xSerial" ]
    then
        if [ -e /dev/$REMOTEPORT ]
        then
            /usr/bin/setserial /dev/$REMOTEPORT uart none
            /sbin/modprobe lirc_serial
            update_db_settings HostReceiverType Serial
            update_db_settings HostSerialPortlirc "$REMOTEPORT"
        fi
    fi

    fi

    echo $CMDLINE | grep -q remote
    if [ $? = 0 ]
    then
        TEMPVAR=${CMDLINE#*remote=}
        Remotetype=${TEMPVAR%% *}
        setupremote
    else
        scan_for_usb_remote
    fi
}

#-----------------------

#set -x

partition_it () {
ROOT=$1
DATA=$2
SWAP=$3

if [ ! x$SWAP = xNO ]
	then
		SWAPLINE=",$SWAP,S"
        MKSWAPCMD="mkswap /dev/${disk}2"
	else
		SWAPLINE=",0,0"
       MKSWAPCMD=""
	fi

if [ x$DATA = xALL ]
then
	DATALINE=",,,"
	EXTRALINE=""
else
	DATALINE=",$DATA,,"
	EXTRALINE=",0,,"
fi
sfdisk /dev/$disk -uM << EOF
,$1,,*
$SWAPLINE
$DATALINE
$EXTRALINE
;
EOF

$MKSWAPCMD
#sfdisk -l /dev/$disk
}


function fscmd () {

case $1 in
       reiserfs) FSCMDC="mkreiserfs -q -l ROOT"
                ;;

        xfs)    FSCMDC="mkfs -t $1 -f"
                ;;
        ext3)   FSCMDC="mkfs.ext3"
                ;;
        jfs)    FSCMDC="mkfs.jfs -q "
                                ;;
        *)  FSCMDC="echo $1"
        ;;

esac
}

format_it ()  {
    fscmd $1
    $FSCMDC /dev/${disk}1|  tr -s [:cntrl:]  \\n
    fscmd $2
    $FSCMDC /dev/${disk}3|  tr -s [:cntrl:]  \\n
}

mount_it () {
        if [ ! -d \/$mountpoint ]
        then
        mkdir \/$mountpoint
        fi
        mount /dev/${disk}1  \/$mountpoint
        mkdir \/$mountpoint/data
        mount /dev/${disk}3 \/$mountpoint/data
}

unmount_it () {
        umount /dev/${disk}1
        umount /dev/${disk}3
}

#linux-live version of copy_it
# copy_it () {
#         #rsync -rvp --exclude=/mnt --exclude=\/$mountpoint  / \/$mountpoint
#         lzmdir=`find /mnt/live/mnt -name  data.lzm -execdir pwd \;| tail -1`
#          cd $lzmdir
#         if [ x$1 = xALL ]
#         then
#             LIST=`ls *.lzm`
#             else
#             LIST=`echo $1 | tr , " " `
#         fi
# 
#         for i in  $LIST
#         do
#              echo "Transferring $i"
#             lzm2dir $i \/$mountpoint
#         done
#         for i in sys proc dev tmp
#         do
#         mkdir /$mountpoint/$i
# 
#         done
#         chmod 777 /$mountpoint/tmp
# 	    mknod /$mountpoint/dev/null c 1 3
#         mknod /$mountpoint/dev/null c 1 5
#         mknod /$mountpoint/dev/console c 5 1
#         chmod +s /$mountpoint/usr/bin/Xorg
#         chmod +s /$mountpoint/usr/bin/crontab
#         chmod +s /$mountpoint/usr/bin/sudo
#         chmod +s /$mountpoint/bin/mount
# 
# }

copy_it () {
        
        if [ x$1 = xALL ]
        then
            echo "Transferring system"
            unsquashfs -f -d /$mountpoint /.livesys/medium/system.sqf
        else
             echo "Upgrading system"
            unsquashfs -e $1 -f -d /$mountpoint /.livesys/medium/system.sqf
        fi

        for i in sys proc dev tmp
        do
        mkdir /$mountpoint/$i

        done
        chmod 777 /$mountpoint/tmp
        mknod /$mountpoint/dev/null c 1 3
        mknod /$mountpoint/dev/null c 1 5
        mknod /$mountpoint/dev/console c 5 1
        chmod +s /$mountpoint/usr/bin/Xorg
        chmod +s /$mountpoint/usr/bin/crontab
        chmod +s /$mountpoint/usr/bin/sudo
        chmod +s /$mountpoint/bin/mount

}


device_node () {
                cd /dev
                mknod hda b 3 0
                mknod hda1 b 3 1
                mknod hda2 b 3 2
                mknod hda3 b 3 3
                mknod hda4 b 3 4
                mknod hda5 b 3 5
                mknod hda6 b 3 6
                mknod hda7 b 3 7
                mknod hda8 b 3 8
                mknod sda b 8 0
                mknod sda1 b 8 1
                mknod sda2 b 8 2
                mknod sda3 b 8 3
                mknod sda4 b 8 4
                mknod sda5 b 8 5
                mknod sda6 b 8 6
                mknod sda7 b 8 7
                mknod sda8 b 8 8
                mknod sdb b 8 16
                mknod sdb1 b 8 17
                mknod sdb2 b 8 18
                mknod sdb3 b 8 19
                mknod sdb4 b 8 20
                mknod sdb5 b 8 21
                mknod sdb6 b 8 22
                mknod sdb7 b 8 23
                mknod sdb8 b 8 24
                cd -
                }


function create_fstab()
{
echo "creating fstab"
cat > /$mountpoint/etc/fstab << EOF
# <file system>        <dir>         <type>    <options>          <dump> <pass>
none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0
/dev/cdrom /media/cdrom   auto    ro,user,noauto,unhide   0      0
/dev/dvd /media/dvd   auto    ro,user,noauto,unhide   0      0
UUID=ROOTUID / auto defaults 0 1
UUID=DATAUID /data auto defaults 0 1
UUID=SWAPUID swap swap defaults 0 0
EOF


}


function find_uuid() {
    uuid=`blkid -s UUID /dev/$1 |cut -d= -f2|cut -d\" -f2`
    echo $uuid for $1
    FOUNDUUID=$uuid
    
}


case $1 in
        partition_it )
	#drive  ROOT DATA(ALL) SWAP(NO)
                for i in `mount | grep $disk | awk ' { print $1 } '`
                do
                umount $i
                done
		swap=`cat /etc/fstab |grep $disk|grep swap|awk ' { print $1 } '`
		swapoff $swap
                partition_it $3 $4 $5
                exit 0

        ;;
        format_it )
                device_node

                format_it $3 $4
                exit 0
        ;;
        mount_it )
                mount_it
        ;;
        copy_it )
                copy_it $3

        ;;


        fstab_fix_it)
                    echo $@ >> /tmp/fstab.input
                    if [  ! -f  /$mountpoint/etc/fstab ]
                    then
                        create_fstab
                    fi
                    if [ x$5 = xUPGRADE ]
                    then
                       cp -f /tmp/etc/fstab /$mountpoint/etc/fstab
                    fi

#                    if  [ x$5 =  xFULL_INSTALL ] 
#                    then
                     #search for UUID
                      FOUNDUUID=""
                      find_uuid ${2}1
                      ROOTUUID=$FOUNDUUID
                        echo "--"
                        echo $ROOTUUID
                        echo "--"
                      FOUNDUUID=""
                      find_uuid ${2}2
                      SWAPUUID=$FOUNDUUID

                      FOUNDUUID=""
                      find_uuid ${2}3
                      DATAUUID=$FOUNDUUID
#                    fi



                    
                        
                     sed -i -e "s/.*\/\ .*$/UUID=$ROOTUUID \/  auto defaults,noatime 0 1/g"  /$mountpoint/etc/fstab 
                     sed -i -e "s/.*\/data\ .*$/UUID=$DATAUUID \/data  auto defaults,noatime 0 1/g" /$mountpoint/etc/fstab
                     sed -i -e "s/.*swap\ .*$/UUID=$SWAPUUID swap swap defaults  0/g" /$mountpoint/etc/fstab

#                     sed -e "s/\ \/\ .*$/\ \/ $3 defaults 0 1/g"\
#                         -e "s/\ \/data .*$/\ \/data $4 defaults 0 1/g" /$mountpoint/etc/fstab   > /tmp/fstab
# 
# 
#                     cp /tmp/fstab /$mountpoint/etc/fstab
        ;;

        grub_it )
                #linux-live
                #grub-install  --recheck --no-floppy  --root-directory=/$mountpoint /dev/$disk
                grub-install  --recheck --no-floppy  --root-directory=/$mountpoint "(hd0)"
		 

        #fixing fstab
#                     if [  ! -f  /$mountpoint/etc/fstab ]
#                     then
#                         cp  -f /$mountpoint/etc/fstab.install  /$mountpoint/etc/fstab
#                     fi
# 		sed -e s/hda/$disk/g /$mountpoint/etc/fstab > /tmp/newfstab
# 		cp -f /tmp/newfstab /$mountpoint/etc/fstab

		#fixing grub/menu.1st
        FOUNDUUID=""
        find_uuid ${disk}1
        ROOTUUID=$FOUNDUUID
#		sed -e s/hda/$disk/g /$mountpoint/boot/grub/menu.lst > /tmp/menu.lst
       
		sed -i -e "s/root=.\S*/root=\/dev\/disk\/by-uuid\/$ROOTUUID/g"   /$mountpoint/boot/grub/menu.lst


#cp -f /tmp/menu.lst /$mountpoint/boot/grub/menu.lst
		#cp /etc/X11/xorg.conf /$mountpoint/etc/X11/xorg.conf
        mkinitcpio -g /$mountpoint/boot/kernel26.img
                ;;
        umount_it)

                umount \/$mountpoint/data
                umount \/$mountpoint
esac