#!/bin/sh
#DESCRIPTION = This script mod. by gutosie
#NeoBoot INIT Version: NEOBOOT VIP all stb MIPSEL with boot manager
#Scrypt Unix Shell - init for neoboot
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
MODPROBE=/sbin/modprobe
NEODEVICE=`cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`
IMAGEKATALOG=ImageBoot
UPLOAD=ImagesUpload
HOSTNAME=`cat /etc/hostname` 
neoLOG=$NEODEVICE$IMAGEKATALOG/initneo.log

if [ -e /tmp/.init_reboot ]; then
        rm /tmp/.init_reboot > /dev/null 2>&1
        break;        
elif [ -e `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/.neonextboot ]  ; then
                    CELBOOT=`cat $NEODEVICE$IMAGEKATALOG/.neonextboot`
	    if [ $CELBOOT = "Flash" ]; then
	                echo "Escape from initneoboot - boot Flash"
	                break;
        fi
else
    echo " "
	echo "====================================================> "
    echo "	    -=*[ NEOBOOT - BOOT UP ]*=-     "
    echo "     NEO BOOT INIT Version: gutosie   "
    echo "	             q(-_-)p                "
    echo "====================================================> "
    echo " "
	mknod /dev/sda b  8 0
	mknod /dev/sda1 b 8 1
	mknod /dev/sda2 b 8 2
	mknod /dev/sdb b  8 16
	mknod /dev/sdb1 b 8 17
	mknod /dev/sdb2 b 8 18
	mknod /dev/sdc b  8 32
	mknod /dev/sdc1 b 8 33
	mknod /dev/sdc2 b 8 34
	mknod /dev/sdd b  8 48
	mknod /dev/sdd1 b 8 49
	mknod /dev/sdd2 b 8 50
	mkdir /dev/input
	mknod /dev/input/event0 c 13 64
	mknod /dev/fb0 c 29 0
	mkdir /dev/fb
	ln -s ../fb0 /dev/fb/0
	echo " "
	echo "====================================================> "
	sleep 1
	LIBDIR=/lib/modules/`uname -r`
	if [ ! -d $LIBDIR ]; then
		LIBDIR=/lib/modules/`ls /lib/modules | tail -n 1`
	fi
	if [ `mount | grep /proc | wc -l` -lt 1 ]; then
 	       /bin/mount -a
		/bin/mount -t proc proc /proc > /dev/null 2>&1
		/bin/mount -t sysfs sysfs /sys > /dev/null 2>&1
		/sbin/depmod -Ae > /dev/null 2>&1
	fi
	echo "NeoBoot is starting mdev"
	echo "/sbin/mdev" > /proc/sys/kernel/hotplug
	/etc/init.d/mdev > /dev/null 2>&1
	echo "NEOBOOT is starting mdev"
        echo " "
	echo "/sbin/mdev" > /proc/sys/kernel/hotplug
	/etc/init.d/mdev > /dev/null 2>&1
	sleep 1
        echo " "
        echo "Search NEOBOOT... "	
	if [ ! -e `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`  ]; then
	        mkdir `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` > /dev/null 2>&1
	        echo " "
		    echo "_______________________NeoBoot created location media_______________________"
	fi
	
    if [ -e /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh  ]; then
                /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neo.sh > /dev/null 2>&1
                echo " "
                echo "_______________________NeoBoot mount by MOUNTPOINT_______________________" 
   	fi	             	
    if [ -e $NEODEVICE$IMAGEKATALOG/.neonextboot  ]; then
                break;    
    else
	    mnttest="nolocation"	
	    if [ -e /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install  ]; then
        	    orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
		    selectinstall=`cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install`
		    for item in $orgimag1; do        				 			
                selectmnt=`blkid | find "$selectinstall"  | cut -d" " -f1`                        
			    if [ $selectmnt = $selectinstall ]; then
				        echo "selectmnt="$selectmnt
                        mnttest="location"
				        mount $selectmnt `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` > /dev/null 2>&1		
                        echo "Neoboot location detected." 				
			    fi

			    if [ ! -e `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`ImageBoot  ]; then
				        echo "NeoBoot hasn't been installed on: " $selectinstall
				        umount `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` > /dev/null 2>&1
				        echo " "
                        echo "_______________________ NeoBoot not mounted by LOCATION_______________________ " 
			    else
				        echo "NEOBOOT has been installed on: " $selectmnt
				        echo " "
					    echo "_______________________ NeoBoot mount by LOCATION_______________________ "
				        break;
			    fi 			
		    done                    
	    fi	

	    if [ $mnttest == "location" ] ; then
                break;
	    else
	        echo "NeoBoot mount by Device"
		    DEVICES1=`find /dev/sd??`
		    for DEVICE in $DEVICES1;
		    do
			    if [ -e `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`  ]; then
				        echo "neoboot checking installation on: " $DEVICE
				        mount $DEVICE `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` > /dev/null 2>&1 
			    fi
			    if [ ! -e `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`ImageBoot  ]; then
				        echo "NeoBoot hasn't been installed on: " $DEVICE
				        umount `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` > /dev/null 2>&1 
			    else
				        echo "NeoBoot has been installed on: " $DEVICE
					    echo "_______________________ NeoBoot mount by DEVICE_______________________"
				        break;
			    fi 
		    done                
        fi
    fi					
	if [ ! -e $NEODEVICE$IMAGEKATALOG/.neonextboot  ]; then
	        if [ -e /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh  ]; then
                    /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neo.sh
                    echo " "
                    echo "_______________________NeoBoot mount by MOUNTPOINT_______________________" 
	        fi
    fi
	if [ ! -e $NEODEVICE$IMAGEKATALOG/.neonextboot ]; then 	
	    if [ -e /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh  ]; then
                /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh > /dev/null 2>&1
                echo " "
                echo "_______________________NeoBoot mount by MOUNTPOINT_______________________" 
	    fi
	fi
    if [ -f $neoLOG ]; then
            rm -f $neoLOG
		    touch $neoLOG
            echo "                  >>> START NEXT LOG...            >>> "  >> $neoLOG
            echo "..............-=*[ NEOBOOT - BOOT UP ]*=-.............."  >> $neoLOG
            echo "    ____q(-_-)p____START NEXT Image...____q(-_-)p____  "  >> $neoLOG
            echo "......................................................."  >> $neoLOG
            echo "Tuner name: " `cat /etc/hostname` >> $neoLOG
            echo "Boot image: " `cat $NEODEVICE$IMAGEKATALOG/.neonextboot` >> $neoLOG
            echo "Init image, base kernel: " `cat $NEODEVICE$IMAGEKATALOG/.neonextboot` >> $neoLOG
    fi        
        
        echo "NEOBOOT is loading modules."
        for mod in dvb; do
                  echo "=======================> NeoBoot is loading modules"
              $MODPROBE $mod
        done
	/etc/init.d/sysfs.sh
	/etc/init.d/modutils.sh
	if [ -e /etc/videomode ]; then
	    cat /etc/videomode > /proc/stb/video/videomode
	fi
	if [ -e /etc/videomode2 ]; then
	    cat /etc/videomode2 > /proc/stb/video/videomode
	fi
	(
	if [ -d /proc/stb ]; then
		while true; do
			if [ -e /dev/dvb/adapter0/video0 ]; then
				break;
			fi;
		done;
	fi;
	[ -e /etc/dropbear/dropbear_rsa_host_key ] && /usr/bin/showiframe $NEOBOOT/neowait.mvi;
	) &
	if [ -f $LIBDIR/kernel/fs/autofs4/autofs4.ko ]; then
		/sbin/insmod $LIBDIR/kernel/fs/autofs4/autofs4.ko > /dev/null 2>&1
	fi
        sleep 5
	if [ -e $NEOBOOT/bin/neobm ]; then
	        echo " "
            echo "  Neo-Boot start  boot manager  "
            echo "  Waiting to change image - 20s "
            echo " "
	    chmod 0755 $NEOBOOT/bin/neobm
	    /usr/bin/showiframe $NEOBOOT/neologo.mvi > /dev/null 2>&1
	    $NEOBOOT/bin/neobm > /dev/null 2>&1
	fi
	if [ -e $NEOBOOT/bin/fbclear ]; then
	        $NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear; $NEOBOOT/bin/fbclear > /dev/null 2>&1
        fi
	if [ ! -e $NEODEVICE$IMAGEKATALOG/.neonextboot ]; then
		          /usr/bin/showiframe /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/error.mvi > /dev/null 2>&1
		          echo " "
                  echo "Error mounting, Return to image Flash..."
		          ln -sfn /sbin/init.sysvinit /sbin/init
		          echo "====================================================> "
                  /bin/umount /media/usb > /dev/null 2>&1
                  /bin/umount /media/hdd > /dev/null 2>&1
                  sleep 2
		          break;
	fi
	TARGET=Flash
	if [ $NEODEVICE = "/media/hdd/" ]; then
	        /bin/mount /dev/sda1 /media/hdd > /dev/null 2>&1
	fi
	if [ -f $NEODEVICE$IMAGEKATALOG/.neonextboot ]; then
	  TARGET=`cat $NEODEVICE$IMAGEKATALOG/.neonextboot`
	fi
	if [ $TARGET = "Flash" ]; then
	        echo " "
		    echo "NEOBOOT is booting image from " $TARGET
            echo "     BOOT UP IMAGE FROM FLASH     " >> $neoLOG
		    /bin/umount /media/usb > /dev/null 2>&1
		    /bin/umount /media/hdd > /dev/null 2>&1
            /usr/bin/showiframe /usr/share/bootlogo.mvi > /dev/null 2>&1
            echo "----------------------------------"
	        echo "     BOOT UP IMAGE FROM FLASH     "
            echo "----------------------------------";
		    ln -sfn /sbin/init.sysvinit /sbin/init
	else
        ######### test boot new imaga>>>>
        if [ -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/.control_ok ]; then
                    echo " "
	                echo "No Error - Booting image normal..."
                    echo "No Error - Booting image normal... " >> $neoLOG
		else
		    if [ -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/.control_boot_new_image ]; then
		                echo " "
                        echo " First start image - The first attempt to launch a new image..." >> $neoLOG
                        echo "First start image - The first attempt to launch a new image... "
						echo "====================================================> "
                        rm -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/.control_boot_new_image > /dev/null 2>&1
		    else
                        if [ ! -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/.control_ok ] ; then
                                /usr/bin/showiframe /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/error.mvi > /dev/null 2>&1
                                echo " "
                                echo " Wrong kernel. FATAL ERROR - Back to image Flash..." >> $neoLOG
                                echo "Wrong kernel. Press number 3"  > `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$UPLOAD/.kernel/used_flash_kernel
                                ln -sfn /sbin/init.sysvinit /sbin/init
                                echo "Flash "  > `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/.neonextboot
		                        /bin/umount /media/usb > /dev/null 2>&1
		                        /bin/umount /media/hdd > /dev/null 2>&1
                                echo -n "<<<END INIT INFO Rebooting...>>>"
		                        break;
                        fi
		    fi
		fi
		echo " "
		echo "NeoBoot is booting" $TARGET " from " `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`
        if [ -d $NEODEVICE$IMAGEKATALOG/$TARGET ]; then
			if [ -f $NEODEVICE$IMAGEKATALOG/$TARGET/etc/init.d/udev ]; then
				    sed -ie "s#\$4#\$3#g" $NEODEVICE$IMAGEKATALOG/$TARGET/etc/init.d/udev
			fi
            if [ -f $NEODEVICE$IMAGEKATALOG/$TARGET/usr/share/bootlogo.mvi ]; then
				            /usr/bin/showiframe $NEODEVICE$IMAGEKATALOG/$TARGET/usr/share/bootlogo.mvi
            else
			                /usr/bin/showiframe $NEOBOOT/neowait.mvi
			fi
			sleep 1
			/bin/mount -o bind /dev $NEODEVICE$IMAGEKATALOG/$TARGET/dev
			/bin/mount -o bind /proc $NEODEVICE$IMAGEKATALOG/$TARGET/proc
			/bin/mount -o bind /sys $NEODEVICE$IMAGEKATALOG/$TARGET/sys
			rm $NEODEVICE$IMAGEKATALOG/$TARGET$NEODEVICE > /dev/null 2>&1
			mkdir $NEODEVICE$IMAGEKATALOG/$TARGET$NEODEVICE > /dev/null 2>&1
                        orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
                        rm -f $NEODEVICE$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh
                           for item in $orgimag; do
                                    ohdd=`echo  $item | cut -d"/" -f3`
                                    nhdd=`mount | sed "/\$ohdd/!d" | grep '' | cut -d' ' -f3`
                                        echo "Copied mount to run image." $nhdd >> $neoLOG
                                        echo $nhdd
                                        echo "mkdir "$nhdd  >> $NEODEVICE$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh
                                        echo "mount "$item $nhdd  >> $NEODEVICE$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh
                            done
                            chmod 755 `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh
                            echo " "
                            echo "NeoBOOT created the file enigma2_pre_start.sh "
                            echo "====================================================> "
                        if [ ! -e $NEODEVICE$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh ]; then
                                cp -f /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh $NEODEVICE$IMAGEKATALOG/$TARGET/usr/bin/enigma2_pre_start.sh  #nie powinno sie zdarzyc
                        fi
            echo " [NEOBOOT] Use chroot ... exec /usr/sbin/chroot..."
            echo "====================================================> "
            cp -f -r /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh $NEODEVICE$IMAGEKATALOG/$TARGET/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/mountpoint.sh
            #/bin/mount /dev/sda1 `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$TARGET/media/hdd
			if [ -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/sbin/init ]; then
                    echo "----------------------------------------"
	                echo "   -=*[ BOOT UP IMAGE FROM DISK ]*=-    "
                    echo "----------------------------------------"
                    echo " -=*[ BOOT UP IMAGE FROM DISK ]*=- " >> $neoLOG
                    echo "Boot from " `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location` >> $neoLOG
                    echo "start file - init >" $TARGET  >> $neoLOG
					echo "====================================================> "
					echo " "
            	    exec /usr/sbin/chroot `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET /sbin/init.sysvinit
			elif [ -f `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET/sbin/init.sysvinit ]; then
                    echo " start file - init.sysvinit" >> $neoLOG
            	    exec /usr/sbin/chroot `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/$TARGET /sbin/init
					echo "====================================================> "
			else
                    echo "                       NEOBOOT - ERROR !!!                                 "
                    echo "Not found correctly unpacked image "$TARGET" z partycji " $DEVICE
                    echo "Check the correctness of unpacked catalogs in the selected one image.      "
                    echo "                      Back to image Flash...                               "
                    /usr/bin/showiframe /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/error.mvi > /dev/null 2>&1
                    echo "Flash "  > `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$IMAGEKATALOG/.neonextboot
                    echo "Used Kernel: Reinstall kernel !"  > `cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location`$UPLOAD/.kernel/used_flash_kernel
		            /bin/umount /media/usb > /dev/null 2>&1
	                /bin/umount /media/hdd > /dev/null 2>&1
				    echo -n " FATAL ERROR - Back to image Flash...\nEND INIT INFO Rebooting..." >> $neoLOG
                    echo -n "END INIT INFO Rebooting..."
				    ln -sfn /sbin/init.sysvinit /sbin/init
				    echo "====================================================> "
		            reboot -f
			fi
			exit 0
		fi
	fi
fi
# boot Flash
if [ -f /sbin/init.sysvinit ]; then
        ln -sfn /sbin/init.sysvinit /sbin/init
		echo "Running /sbin/init.sysvinit - boot Flash"
		exec /sbin/init.sysvinit $1
fi
exit 0
;;
esac
exit
