#!/bin/sh
#
#  Configure the controller so that on next boot, the "backup" partition
#  set will be used.
#  -- properly configure /etc/fstab on the "backup" root file system.
#  -- write to the next u-boot environment to mount the "backup" partition set.
#
export PATH="$PATH:/usr/bin:/bin:/sbin:/usr/sbin:/mnt/apps/bin"
APPSBAK=ubi0:apps2
ROOTBAK=ubi0:rootfs2
SIDE=2
if [ `mount|grep rootfs2|wc -l` -eq 1 ]
then
    APPSBAK=ubi0:apps1
    ROOTBAK=ubi0:rootfs1
    SIDE=1
fi

mkdir -p /mnt/backup
mount -t ubifs $APPSBAK /mnt/backup
if [ $? -ne 0 ]
then
   logger "changeover: aborted - could not mount backup apps filesystem."
   echo "changeover: aborted - could not mount backup apps filesystem."
   exit 1
fi
mkdir -p /mnt/backuproot
mount -t ubifs $ROOTBAK /mnt/backuproot
if [ $? -ne 0 ]
then
    umount /mnt/backup
    logger "changeover: aborted - could not mount backup root filesystem."
    echo "changeover: aborted - could not mount backup root filesystem."
    exit 1
fi

# Copy all user data
# -- If "creb" make VertX-specific links
# -- except for the InternalID file, which we allow to update.
if [ -d /mnt/backup/data ]
then
    cd /mnt/backup/data
    # Test for VertX
    if [ -f config/InternalID ]
    then
        # Always copy over HEX files
        cp InterfaceConfig/*.hex /tmp
        cp config/InternalID /tmp

        logger "Copying current configs"
        cp -R /mnt/apps/data/* .
        echo "Done, Copying current configs"

        # keep current password related files though we requie the new group/gshadow
        # as boa relies on the correct group permissions.
        cp /etc/shadow /mnt/backuproot/etc
        cp /etc/passwd /mnt/backuproot/etc
        # keep lighty password file
        cp /etc/sysconfig/.htpasswd /mnt/backuproot/etc/sysconfig/.htpasswd

        logger "Done, copying current configs, restoring new InternalID file"
        echo "Done, copying current configs, restoring new InternalID file"
        cp /tmp/InternalID /mnt/backup/data/config/InternalID
        logger "Adding interface hex files"
        echo "Adding interface hex files"
        cp /tmp/*.hex /mnt/backup/data/InterfaceConfig/.
        if [ -f /mnt/backup/wpa/wpa_supplicant.conf ]
        then
            logger "Saving certificate and configuations including ntp-server"
            echo "Saving certificate and configuations including ntp-server"
            cp /mnt/apps/wpa/date /mnt/backup/wpa/
            cp /mnt/apps/wpa/cacert.pem /mnt/backup/wpa/
            cp /mnt/apps/wpa/wpa_supplicant.conf /mnt/backup/wpa/
            cp /etc/init.d/ntp /mnt/backuproot/etc/init.d/
            logger "Done, Saving certificate and configuations including ntp-server"
            echo "Done, Saving certificate and configuations including ntp-server"
        fi
        # Retain Network Settings and HostName
     #    logger "Retaining current network settings"
    	# echo "Retaining current network settings"
     #    cp /etc/sysconfig/network-scripts/ifcfg-eth0 /mnt/backuproot/etc/sysconfig/network-scripts/ifcfg-eth0
     #    cp /etc/sysconfig/network /mnt/backuproot/etc/sysconfig/network
     #    cp /etc/resolv.conf /mnt/backuproot/etc/resolv.conf
     #    logger "Done, retaining network settings"
     #    echo "Done, retaining network settings"
    # Not VertX - copy data wholesale
    else
        if [ -f db/vdb ] && [ -f db/carddb ]
        then
            version=$(sqlite3 '/mnt/apps/data/db/vdb' 'SELECT value FROM Parameters WHERE name="edgeSoloVersion"')
            echo "Edge Solo Version : $version detected"
            logger "Edge Solo Version : $version detected"
            use_ssl=$(sqlite3 '/mnt/apps/data/db/vdb' 'SELECT value FROM Parameters WHERE name="encryptTLS"')
            echo "encryptTLS : $use_ssl"
            logger "encryptTLS : $use_ssl"

            if [ -f /sbin/migrate_databases ]
            then
                logger "migrating ehs400 data"
                if [ ! -x /sbin/migrate_databases ]
                then
                    chmod a+x /sbin/migrate_databases
                fi
                sh /sbin/migrate_databases
                result=$?
                logger "/sbin/migrate_databases return value: $result"

                if [ $result -eq 0 ]
                then
                    if [ ${version:0:1} == "1" ]
                    then
                        # copy everything in mnt/apps/data except for the databases and IOLinkerRules
                        logger "Copy /mnt/apps/data except for databases and IOLinkerRules"
                        tar cf - -C /mnt/apps/data --exclude=db --exclude=config/IOLinkerRules . | (cd /mnt/backup/data && tar xvf - )
                    else
                        # copy everything in mnt/apps/data except for the databases
                        logger "Copy /mnt/apps/data except for databases"
                        tar cf - -C /mnt/apps/data --exclude=db . | (cd /mnt/backup/data && tar xvf - )
                    fi

                    # keep current password related files though we require the new group/gshadow
                    # as boa relies on the correct group permissions.
                    cp /etc/shadow /mnt/backuproot/etc
                    cp /etc/passwd /mnt/backuproot/etc

                    ps | grep [l]ighttpd
                    if [ $? -ne 0 ]
                    then
                        # check to see if boa is running
                        ps | grep [b]oa
                        if [ $? -eq 0 ]
                        then
                            logger "ehs400 data migration boa detected, configuring lighttpd files from boa settings..."
                            echo "ehs400 data migration boa detected, configuring lighttpd files from boa settings..."

                            boa_http_port=$(grep "Port" /etc/httpd/conf/boa.conf | grep -v "SSLPort")
                            boa_ssl_port=$(grep "SSLPort" /etc/httpd/conf/boa.conf)
                            # boa_use_ssl=$(grep "EnableSSL" /etc/httpd/conf/boa.conf)

                            logger "boa_http_port $boa_http_port"
                            logger "boa_ssl_port $boa_ssl_port"
                            echo "boa_http_port $boa_http_port"
                            echo "boa_ssl_port $boa_ssl_port"
                            #logger "boa_use_ssl $boa_use_ssl"

                            boa_http=${boa_http_port//[^0-9]/}
                            boa_ssl=${boa_ssl_port//[^0-9]/}
                            # use_ssl=${boa_use_ssl//[^0-9]/}

                            logger "boa_http_port $boa_http"
                            logger "boa_ssl_port $boa_ssl"
                            echo "boa_http_port $boa_http"
                            echo "boa_ssl_port $boa_ssl"
                            #logger "boa_use_ssl $use_ssl"

                            # copy into new /etc/sysconfig/lighttpd.conf.ssl
                            sed -i "/var.http_port =/c\\var.http_port =$boa_http" /mnt/backuproot/etc/sysconfig/lighttpd.conf.ssl
                            # copy into new /etc/sysconfig/lighttpd.conf.nossl
                            sed -i "/server.port =/c\\server.port =$boa_http" /mnt/backuproot/etc/sysconfig/lighttpd.conf.nossl

                            echo "configuring lighttpd, encryptTLS: $use_ssl";

                            if [ $use_ssl -eq 1 ]
                            then
                                logger "Using SSL"
                                sed -i "/server.port =/c\\server.port =$boa_ssl" /mnt/backuproot/etc/sysconfig/lighttpd.conf.ssl
                                ln -sf /etc/sysconfig/lighttpd.conf.ssl /mnt/backuproot/etc/sysconfig/lighttpd.conf
                            else
                                logger "Not using SSL"
                                ln -sf /etc/sysconfig/lighttpd.conf.nossl /mnt/backuproot/etc/sysconfig/lighttpd.conf
                            fi

                            link=$(readlink -f /mnt/backuproot/etc/sysconfig/lighttpd.conf)
                            logger "lighttpd link: $link"
                            echo "lighttpd link: $link"
                        fi
                    else
                        logger "ehs400 data migration lighttpd detected, configuring lighttpd files..."
                        # keep lighty password file
                        cp /etc/sysconfig/.htpasswd /mnt/backuproot/etc/sysconfig/.htpasswd
                        # copy ntp settings
                        cp /etc/ntp.conf /mnt/backuproot/etc/ntp.conf
                        # copy the ports from lighttpd.conf into new locations
                        http_port=$(grep "var.http_port =" /etc/sysconfig/lighttpd.conf.ssl)
                        if [ $? -eq 0 ]
                        then
                            # copy into new /etc/sysconfig/lighttpd.conf.ssl
                            sed -i "/var.http_port =/c\\$http_port" /mnt/backuproot/etc/sysconfig/lighttpd.conf.ssl
                            # copy into new /etc/sysconfig/lighttpd.conf.nossl
                            sed -i "/server.port =/c\\$http_port" /mnt/backuproot/etc/sysconfig/lighttpd.conf.nossl
                        fi

                        ssl_port=$(grep "server.port =" /etc/sysconfig/lighttpd.conf.ssl)
                        if [ $? -eq 0 ]
                        then
                            # copy into new /etc/sysconfig/lighttpd.conf.ssl
                            sed -i "/server.port =/c\\$ssl_port" /mnt/backuproot/etc/sysconfig/lighttpd.conf.ssl
                        fi
                        # overwrite the lighttpd conf file link
                        ln -sf $(readlink -f /etc/sysconfig/lighttpd.conf) /mnt/backuproot/etc/sysconfig/lighttpd.conf
                    fi

                    logger "ehs400 data migration successful"
                    echo "ehs400 data migration successful"

                    # Retain Network Settings and HostName
                    # logger "Retaining current network settings"
                    # echo "Retaining current network settings"
                    # cp /etc/sysconfig/network-scripts/ifcfg-eth0 /mnt/backuproot/etc/sysconfig/network-scripts/ifcfg-eth0
                    # cp /etc/sysconfig/network /mnt/backuproot/etc/sysconfig/network
                    # cp /etc/resolv.conf /mnt/backuproot/etc/resolv.conf
                    # logger "Done, retaining network settings"
                    # echo "Done, retaining network settings"
                else
                    # error coccured
                    umount /mnt/backup
                    umount /mnt/backuproot
                    logger "ehs400 data migration failed, changeover aborted"
                    echo "ehs400 data migration failed, changeover aborted"
                    exit 1
                fi
            else
                logger "Error failed to find migrate_databases script"
            fi
        else
            # neither a VertX or an EHS400 copy the data wholesale
            rm -rf /mnt/backup/data/*
            cp -R /mnt/apps/data/* .
        fi
    fi
    # Retain Network Settings and HostName
    logger "Retaining current network settings"
    echo "Retaining current network settings"

    cp /etc/sysconfig/network-scripts/ifcfg-eth0 /mnt/backuproot/etc/sysconfig/network-scripts/ifcfg-eth0

    if [ -e /etc/sysconfig/network ]; then
        sed -n 's/^HOSTNAME=//p' /etc/sysconfig/network > /mnt/backuproot/etc/hostname
        # strip any double quotes
        sed -i 's/\"//g' /mnt/backuproot/etc/hostname
    else
        cp /etc/hostname /mnt/backuproot/etc/hostname
    fi

    cp /etc/resolv.conf /mnt/backuproot/etc/resolv.conf

    #Use Latest rollback
    cp /mnt/backuproot/sbin/rollback /sbin/rollback
    cp /mnt/backuproot/sbin/rollback_opin /sbin/rollback_opin

    logger "Done, retaining network settings"
    echo "Done, retaining network settings"
else
    umount /mnt/backup
    umount /mnt/backuproot
    logger "changeover: aborted - no data area on backup filesystem."
    echo "changeover: aborted - no data area on backup filesystem."
    exit 1
fi

cd
sync; sync; sync; sync; sync
cd /
umount /mnt/backup
umount /mnt/backuproot

# remove the sql scripts before exiting
rm -rf /tmp/sql

sync
# Force a partition change on next boot
/sbin/rollback_opin

