This commit is contained in:
gutosie
2019-02-11 20:38:27 +02:00
committed by GitHub
parent f180ca3df9
commit 51f4ca6a63
100 changed files with 6420 additions and 0 deletions

Binary file not shown.

BIN
NeoBoot/bin/libpngneo Normal file

Binary file not shown.

BIN
NeoBoot/bin/nanddump_arm Normal file

Binary file not shown.

BIN
NeoBoot/bin/nanddump_mips Normal file

Binary file not shown.

BIN
NeoBoot/bin/neobm Normal file

Binary file not shown.

BIN
NeoBoot/bin/neoinitarm Normal file

Binary file not shown.

181
NeoBoot/bin/neoinitarmvu Normal file
View File

@@ -0,0 +1,181 @@
#!/bin/sh
#script mod by gutosie
#neo init arm
IMAGE=/media/neoboot/ImageBoot
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
NEO=/media/neoboot
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
MODPROBE=/sbin/modprobe
BOXNAME=`cat /etc/hostname`
FINDBOOT=/media/*/ImageBoot/.neonextboot
CELBOOT=`cat $FINDBOOT`
if [ $CELBOOT = "Flash" ] || [ -e /tmp/.init_reboot ] ; then
exec /sbin/init.sysvinit $1
else
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 -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
sleep 2
mnttest="nouuid"
if [ -e $NEOBOOT/bin/install ]; then
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
selectinstall=`cat $NEOBOOT/bin/install`
for item in $orgimag1; do
selectmnt=`blkid | sed "/$selectinstall/!d" | cut -d":" -f1`
if [ $selectmnt == $item ]; then
echo "selectmnt=" $selectmnt
mnttest="uuid"
mount $selectmnt $NEO > /dev/null 2>&1
fi
if [ ! -e $NEO/ImageBoot ]; then
echo "NEOBOOT hasn't been installed on: " $selectmnt
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOT has been installed on: " $selectmnt
break;
fi
done
fi
if [ -e $NEOBOOT/bin/install2 ]; then
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
selectinstall2=`cat $NEOBOOT/bin/install2`
for item in $orgimag1; do
selectmnt=`blkid | sed "/$selectinstall/!d" | cut -d":" -f1`
if [ $selectmnt == $item ]; then
echo "selectmnt=" $selectmnt
mnttest="uuid"
mount $selectmnt $NEO > /dev/null 2>&1
fi
if [ ! -e $NEO/ImageBoot ]; then
echo "NEOBOOT hasn't been installed on: " $selectmnt
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOT has been installed on: " $selectmnt
break;
fi
done
fi
if [ ! -e $NEO ]; then
mkdir $NEO > /dev/null 2>&1
fi
if [ $mnttest="nouuid" ] ; then
echo "NeoBoot mount by Device"
DEVICES1=`find /dev/sd??`
for DEVICE in $DEVICES1;
do
if [ -e $NEO ]; then
echo "neoboot checking installation on: " $DEVICE
mount $DEVICE $NEO > /dev/null 2>&1
fi
if [ ! -e $NEO/ImageBoot ]; then
echo "NeoBoot hasn't been installed on: " $DEVICE
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOTt has been installed on: " $DEVICE
break;
fi
done
elif [ $mnttest="uuid" ]; then
echo "NEOBOOT mount by UUID"
fi
if [ ! -e $IMAGEBOOT ]; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > $IMAGEBOOT
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
reboot -f
fi
cat /etc/videomode > /proc/stb/video/videomode
TARGET=Flash
if [ -f $IMAGEBOOT ]; then
TARGET=`cat $IMAGEBOOT`
fi
if [ $TARGET = "Flash" ]; then
echo "NEOBOOT is booting image from " $TARGET
/bin/umount $NEO > /dev/null 2>&1
/bin/umount /media/usb > /dev/null 2>&1
/bin/umount /media/hdd > /dev/null 2>&1
else
#echo 3 > /proc/sys/vm/drop_caches
if [ -d $NEO/ImageBoot/$TARGET ]; then
if [ -f $NEO/ImageBoot/$TARGET/etc/init.d/udev ]; then
sed -ie s!"\$4"!"\$3"!g $NEO/ImageBoot/$TARGET/etc/init.d/udev
fi
sleep 1
/bin/mount -o bind /dev $NEO/ImageBoot/$TARGET/dev
/bin/mount -o bind /proc $NEO/ImageBoot/$TARGET/proc
/bin/mount -o bind /sys $NEO/ImageBoot/$TARGET/sys
rm $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
mkdir $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
for item in $orgimag; do
ohdd=`echo $item | cut -d"/" -f3`
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
if [ $nhdd == '$NEO' ]; then
echo $nhdd
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
else
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo ok
fi
done
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
#/bin/mount /dev/sda1 /media/neoboot/ImageBoot/$TARGET/media/hdd
######### test boot new imaga>>>>
if [ -e $IMAGE/$TARGET/.control_ok ]; then
echo "No Error - Booting image normal ... "; sleep 2
sync
else
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
sync
else
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
sync
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
echo "Restart STB - Back to Flash... "
sleep 7; reboot -f
fi
fi
fi
######### test boot new image<<<<<
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init.sysvinit
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init
else
echo " "
echo " NEOBOOT - ERROR !!! "
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
echo " Powrot do image Flash... "
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " > $IMAGEBOOT
/usr/bin/showiframe $NEOBOOT/error.mvi > /dev/null 2>&1
sync; sleep 10; exec /sbin/init.sysvinit $1
fi
exit 0
fi
fi
fi
if [ -f /sbin/init.sysvinit ]; then
exec /sbin/init.sysvinit $1
fi
exit 0

350
NeoBoot/bin/neoinitmips Normal file
View File

@@ -0,0 +1,350 @@
#!/bin/sh
#DESCRIPTION = This script mod. by gutosie
#NeoBoot INIT Version: 6.00
#Scrypt Unix Shell - init for neoboot
IMAGE=/media/neoboot/ImageBoot
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
NEO=/media/neoboot
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
MODPROBE=/sbin/modprobe
BOXNAME=`cat /etc/hostname`
FINDBOOT=/media/*/ImageBoot/.neonextboot
if [ -e /tmp/.init_reboot ]; then
rm /tmp/.init_reboot
break;
else
if [ -e $FINDBOOT ] ; then
CELBOOT=`cat $FINDBOOT`
if [ $CELBOOT = "Flash" ]; then
exec /sbin/init.sysvinit $*
exit 0
else
echo " "
break;
fi
fi
echo "====================================================> "
echo " "
echo " -=*[ NEOBOOT - BOOT UP ]*=- "
echo " NEO BOOT INIT Version: 6.00 Update 6.15 16-11-2017 "
echo " q(-_-)p "
echo " "
echo "====================================================> "
/etc/init.d/sysfs.sh
/etc/init.d/modutils.sh
echo "NEOBOOT is starting mdev"
echo " "
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
/etc/init.d/mdev > /dev/null 2>&1
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
sleep 1
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;
) &
DEVICES1=`find /dev/sd??`
for DEVICE in $DEVICES1;
do
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
mount $DEVICE /media/neoboot > /dev/null 2>&1
fi
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
umount /media/neoboot > /dev/null 2>&1
fi
done
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
sleep 1
echo " "
echo "Search NEOBOOT... "
#sed=grep
mnttest="nouuid"
if [ -e $NEOBOOT/bin/install ]; then
orgimag1=`mount | grep '/sd/!d' | cut -d" " -f1`
selectinstall=`cat $NEOBOOT/bin/install`
for item in $orgimag1; do
selectmnt=`blkid | grep "/$selectinstall/!d" | cut -d":" -f1`
if [ $selectmnt == $item ]; then
echo "selectmnt=" $selectmnt
mnttest="uuid"
mount $selectmnt $NEO > /dev/null 2>&1
fi
if [ ! -e $IMAGE ]; then
echo "NEOBOOT hasn't been installed on: " $selectmnt
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOT has been installed on: " $selectmnt
break;
fi
done
fi
if [ ! -e $NEO ]; then
mkdir $NEO > /dev/null 2>&1
fi
if [ $mnttest == "nouuid" ]; then
echo "NEOBOOT mount by Device"
DEVICES1=`find /dev/sd??`
for DEVICE in $DEVICES1;
do
if [ -e $NEO ]; then
echo "NEOBOOT checking installation on: " $DEVICE
mount $DEVICE $NEO > /dev/null 2>&1
fi
if [ ! -e $IMAGE ]; then
echo "NEOBOOT hasn't been installed on:" $DEVICE
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOT has been installed on: " $DEVICE
break;
fi
done
elif [ $mnttest == "uuid" ]; then
echo "NEOBOOT mount by UUID"
fi
#dodatkowe szukanie neoboota
#mount /dev/sdb1 $NEO > /dev/null 2>&1 # <<< tu mozesz zmienic sdb1 i wpisac Twoje montowanie dysku dla neoboot
echo "NEOBOOT is loading modules."
for mod in dvb; do
echo "=======================> NeoBoot is loading modules"
$MODPROBE $mod
done
if [ -f $LIBDIR/kernel/fs/autofs4/autofs4.ko ]; then
/sbin/insmod $LIBDIR/kernel/fs/autofs4/autofs4.ko > /dev/null 2>&1
fi
sleep 1
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 $NEOBOOT/bin/neobm ]; then
echo " Neo-Boot start boot manager "
echo " Waiting to change image - 20s "
echo " "
chmod 0755 $NEOBOOT/bin/neobm
$NEOBOOT/neologo.mvi > /dev/null 2>&1
sleep 1
$NEOBOOT/bin/neobm > /dev/null 2>&1
fi
if [ ! -e $IMAGEBOOT ]; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > $IMAGEBOOT
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
reboot -f
fi
TARGETIMAGE=`cat $IMAGEBOOT`
if [ $TARGETIMAGE = "BlackHoleVU" ] || [ $TARGETIMAGE = "BlackHoleVU+" ] ; then
if ! [ -e $NEO/ImagesUpload/.kernel/used_bh_kernel ]; then
rm -f $IMAGEBOOT
echo "Flash " >> $IMAGEBOOT
echo "Halt init image - " $TARGETIMAGE
echo "Start image Flash... "
$NEOBOOT/bh.mvi > /dev/null 2>&1
sync; sleep 1
exec /sbin/init.sysvinit $*
exit 0
else
break;
fi
fi
sync
TARGET=Flash
if [ -f $IMAGEBOOT ]; then
TARGET=`cat $IMAGEBOOT`
fi
if [ $TARGET = "Flash" ]; then
echo "____________________________________"
echo "____________________________________"
echo " "
echo "NEOBOOT is booting image from " $TARGET
echo "____________________________________"
echo "____________________________________"
/bin/umount $NEO > /dev/null 2>&1
/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 "----------------------------------"
else
echo " "
echo "NEOBOOT is booting image" $TARGET " from " $DEVICE
echo " "
if [ -d $IMAGE/$TARGET ]; then
if [ -f $IMAGE/$TARGET/etc/init.d/udev ]; then
sed -ei s!"\$4"!"\$3"!g $IMAGE/$TARGET/etc/init.d/udev
fi
if [ -f $IMAGE/$TARGET/usr/share/bootlogo.mvi ]; then
/usr/bin/showiframe $IMAGE/$TARGET/usr/share/bootlogo.mvi > /dev/null 2>&1
fi
sleep 1
/bin/mount -o bind /dev $IMAGE/$TARGET/dev
/bin/mount -o bind /proc $IMAGE/$TARGET/proc
/bin/mount -o bind /sys $IMAGE/$TARGET/sys
rm $IMAGE/$TARGET/media/neoboot > /dev/null 2>&1
mkdir $IMAGE/$TARGET/media/neoboot > /dev/null 2>&1
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
for item in $orgimag; do
ohdd=`echo $item | cut -d"/" -f3`
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
if [ $nhdd == '$NEO' ]; then
echo $nhdd
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
else
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
fi
done
if [ -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh ]; then
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
fi
echo "----------------------------------------"
echo " -=*[ BOOT UP IMAGE FROM DISK ]*=- "
echo "----------------------------------------"
if [ ! -f /media/neoboot/ImageBoot/$TARGET/media/neoboot/ImageBoot/.neonextboot ]; then
/bin/mount -o bind /media/neoboot /media/neoboot/ImageBoot/$TARGET/media/neoboot
fi
DEVICES1=`ls /media`
for DEVICE in $DEVICES1;
do
if [ -f /media/$DEVICE/ImageBoot/.neonextboot ]; then
/bin/mount -o bind /media/neoboot /media/neoboot/ImageBoot/$TARGET/media/$DEVICE
fi
done
cd /media/neoboot/ImageBoot/$TARGET;
######### test boot new imaga>>>>
if [ -e $IMAGE/$TARGET/.control_ok ]; then
echo "No Error - Booting image normal ... "; sleep 2
sync
else
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
sync
else
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
sync
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
echo "Restart STB - Back to Flash... "
sleep 7; reboot -f
fi
fi
fi
######### test boot new image<<<<<
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
exec /usr/sbin/chroot . /sbin/init.sysvinit $*
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
exec /usr/sbin/chroot . /sbin/init $*
else
echo " "
echo " NEOBOOT - ERROR !!! "
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
echo " Powrot do image Flash... "
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " >> $IMAGEBOOT
/usr/bin/showiframe $NEOBOOT/error.mvi > /dev/null 2>&1
sync; sleep 10; exec /sbin/init.sysvinit $*
fi
exit 0
fi
fi
fi
if [ -f /sbin/init.sysvinit ]; then
exec /sbin/init.sysvinit $*
fi
exit 0
;;
esac
exit

160
NeoBoot/bin/neoinitmipsvu Normal file
View File

@@ -0,0 +1,160 @@
#!/bin/sh
#script mod by gutosie
IMAGE=/media/neoboot/ImageBoot
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
NEO=/media/neoboot
NEOBOOT=/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot
MODPROBE=/sbin/modprobe
BOXNAME=`cat /etc/hostname`
FINDBOOT=/media/*/ImageBoot/.neonextboot
CELBOOT=`cat $FINDBOOT`
if [ $CELBOOT = "Flash" ] || [ -e /tmp/.init_reboot ] ; then
exec /sbin/init.sysvinit $1
else
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
sleep 2
mnttest="nouuid"
if [ -e $NEOBOOT/bin/install ]; then
orgimag1=`mount | sed '/sd/!d' | cut -d" " -f1`
selectinstall=`cat $NEOBOOT/bin/install`
for item in $orgimag1; do
selectmnt=`blkid | sed '/$selectinstall/!d' | cut -d":" -f1`
if [ $selectmnt == $item ]; then
echo "selectmnt=" $selectmnt
mnttest="uuid"
mount $selectmnt $NEO > /dev/null 2>&1
fi
if [ ! -e $NEO/ImageBoot ]; then
echo "NEOBOOT hasn't been installed on: " $selectmnt
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOT has been installed on: " $selectmnt
break;
fi
done
fi
if [ ! -e $NEO ]; then
mkdir $NEO > /dev/null 2>&1
fi
if [ $mnttest == "nouuid" ] ; then
echo "NeoBoot mount by Device"
DEVICES1=`find /dev/sd??`
for DEVICE in $DEVICES1;
do
if [ -e $NEO ]; then
echo "neoboot checking installation on: " $DEVICE
mount $DEVICE $NEO > /dev/null 2>&1
fi
if [ ! -e $NEO/ImageBoot ]; then
echo "NeoBoot hasn't been installed on: " $DEVICE
umount $NEO > /dev/null 2>&1
else
echo "NEOBOOTt has been installed on: " $DEVICE
break;
fi
done
elif [ $mnttest == "uuid" ]; then
echo "NEOBOOT mount by UUID"
fi
if [ ! -e $IMAGEBOOT ]; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > $IMAGEBOOT
echo "Used Kernel: Reinstall kernel !" > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
reboot -f
fi
TARGET=Flash
if [ -f $IMAGEBOOT ]; then
TARGET=`cat $IMAGEBOOT`
fi
if [ $TARGET = "Flash" ]; then
echo "NEOBOOT is booting image from " $TARGET
/bin/umount $NEO > /dev/null 2>&1
/bin/umount /media/usb > /dev/null 2>&1
/bin/umount /media/hdd > /dev/null 2>&1
else
echo "NEOBOOT is booting" $TARGET " from " $DEVICE
echo 3 > /proc/sys/vm/drop_caches
if [ -d $NEO/ImageBoot/$TARGET ]; then
if [ -f $NEO/ImageBoot/$TARGET/etc/init.d/udev ]; then
sed -ie s!"\$4"!"\$3"!g $NEO/ImageBoot/$TARGET/etc/init.d/udev
fi
sleep 1
/bin/mount -o bind /dev $NEO/ImageBoot/$TARGET/dev
/bin/mount -o bind /proc $NEO/ImageBoot/$TARGET/proc
/bin/mount -o bind /sys $NEO/ImageBoot/$TARGET/sys
rm $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
mkdir $NEO/ImageBoot/$TARGET$NEO > /dev/null 2>&1
orgimag=`mount | sed '/sd/!d' | cut -d" " -f1`
rm -f $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
for item in $orgimag; do
ohdd=`echo $item | cut -d"/" -f3`
nhdd=`mount | sed "/\$ohdd/!d" | sed q | cut -d" " -f3`
if [ $nhdd == '$NEO' ]; then
echo $nhdd
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
else
echo "umount "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mkdir "$nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo "mount "$item $nhdd >> $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
echo ok
fi
done
chmod 755 $IMAGE/$TARGET/usr/bin/enigma2_pre_start.sh
######### test boot new imaga>>>>
if [ -e $IMAGE/$TARGET/.control_ok ]; then
echo "No Error - Booting image normal ... "; sleep 2
sync
else
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
sync
else
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
sync
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
echo "Restart STB - Back to Flash... "
sleep 7; reboot -f
fi
fi
fi
######### test boot new image<<<<
if [ -f $IMAGE/$TARGET/sbin/init.sysvinit ]; then
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init.sysvinit
elif [ -f $IMAGE/$TARGET/sbin/init ]; then
exec /usr/sbin/chroot $IMAGE/$TARGET /sbin/init
else
echo " "
echo " NEOBOOT - ERROR !!! "
echo "Nie odnaleziono poprawnie rozpakowanego image "$TARGET" z partycji " $DEVICE
echo " Sprawdz poprawnosc rozpakowanych katalogow w wybranym image. "
echo " Powrot do image Flash... "
rm -f $IMAGEBOOT; touch $IMAGEBOOT; echo "Flash " >> $IMAGEBOOT
sync; sleep 10; exec /sbin/init.sysvinit $1
fi
exit 0
fi
fi
fi
if [ -f /sbin/init.sysvinit ]; then
exec /sbin/init.sysvinit $1
fi
exit 0

BIN
NeoBoot/bin/nfidump Normal file

Binary file not shown.

38
NeoBoot/bin/rebootbot Normal file
View File

@@ -0,0 +1,38 @@
#!/bin/sh
echo " ***** gutosie _(*_*)_ TEST FIRST BOOT IMAGE - rebootbot ***** "
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ]; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
sync
echo "Error - Back to Flash... "
sleep 5; reboot -f
fi
IMAGE=/media/neoboot/ImageBoot
IMAGEBOOT=/media/neoboot/ImageBoot/.neonextboot
TARGET=Flash
if [ -f $IMAGEBOOT ]; then
TARGET=`cat $IMAGEBOOT`
fi
$IMAGE/$TARGET
if [ -e $IMAGE/$TARGET/.control_ok ]; then
echo "No Error - Booting image normal ... "; sleep 2
sync
else
if [ -e $IMAGE/$TARGET/.control_boot_new_image ]; then
echo "First start image - Proba uruchomienia nowego image... "; sleep 5; rm -r -f $IMAGE/$TARGET/.control_boot_new_image
sync
else
if [ ! -e $IMAGE/$TARGET/.control_ok ] ; then
ln -sfn /sbin/init.sysvinit /sbin/init
echo "Flash " > /media/neoboot/ImageBoot/.neonextboot
sync
echo "Error - NeoBoot nie potrafi uruchomic tego image !!! "
echo "Restart STB - Back to Flash... "
sleep 7; reboot -f
fi
fi
fi
return 1

189
NeoBoot/bin/utilsbh Normal file
View File

@@ -0,0 +1,189 @@
from re import sub
from Tools.Directories import fileExists, resolveFilename, SCOPE_CURRENT_SKIN
import xml.etree.cElementTree
entities = [('&#228;', u'\xe4'),
('&auml;', u'\xe4'),
('&#252;', u'\xfc'),
('&uuml;', u'\xfc'),
('&#246;', u'\xf6'),
('&ouml;', u'\xf6'),
('&#196;', u'\xc4'),
('&Auml;', u'\xc4'),
('&#220;', u'\xdc'),
('&Uuml;', u'\xdc'),
('&#214;', u'\xd6'),
('&Ouml;', u'\xd6'),
('&#223;', u'\xdf'),
('&szlig;', u'\xdf'),
('&#8230;', u'...'),
('&#8211;', u'-'),
('&#160;', u' '),
('&#34;', u'"'),
('&#38;', u'&'),
('&#39;', u"'"),
('&#60;', u'<'),
('&#62;', u'>'),
('&lt;', u'<'),
('&gt;', u'>'),
('&nbsp;', u' '),
('&amp;', u'&'),
('&quot;', u'"'),
('&apos;', u"'")]
def nab_strip_html(html):
html = html.replace('\n', ' ')
html = sub('\\s\\s+', ' ', html)
html = sub('<br(\\s+/)?>', '\n', html)
html = sub('</?(p|ul|ol)(\\s+.*?)?>', '\n', html)
html = sub('<li(\\s+.*?)?>', '-', html)
html = html.replace('</li>', '\n')
return nab_strip_pass1(html)
def nab_strip_pass1(html):
html = sub('<(.*?)>', '', html)
html.replace('&#196;', '\xc3\x84')
html.replace('&#228;', '\xc3\xa4')
html.replace('&auml;', '\xc3\xa4')
html.replace('&#252;', '\xc3\xbc')
html.replace('&uuml;', '\xc3\xbc')
html.replace('&#246;', '\xc3\xb6')
html.replace('&ouml;', '\xc3\xb6')
html.replace('&#196;', '\xc3\x84')
html.replace('&Auml;', '\xc3\x84')
html.replace('&#220;', '\xc3\x9c')
html.replace('&Uuml;', '\xc3\x9c')
html.replace('&#214;', '\xc3\x96')
html.replace('&Ouml;', '\xc3\x96')
html.replace('&#223;', '\xc3\x9f')
html.replace('&szlig;', '\xc3\x9f')
html.replace('&lt;', '<')
html.replace('&gt;', '>')
html.replace('&nbsp;', ' ')
html.replace('&amp;', '&')
html.replace('&quot;', '"')
html.replace('&apos;', "'")
return html
def nab_Read_CCCinfoCfg():
myhost = '127.0.0.1'
myuser = mypass = ''
myport = '16001'
if fileExists('/etc/delcccaminfo'):
f = open('/etc/delcccaminfo', 'r')
for line in f.readlines():
line = line.strip()
if line.find('HOST ADDRESS:') != -1:
myhost = line[13:]
elif line.find('WEBINFO USERNAME:') != -1:
myuser = line[17:]
elif line.find('WEBINFO PASSWORD:') != -1:
mypass = line[17:]
elif line.find('WEBINFO LISTEN PORT:') != -1:
myport = line[20:]
f.close()
myurl = 'http://' + myhost + ':' + myport
if myuser and mypass:
myurl = 'http://' + myuser + ':' + mypass + '@' + myhost + ':' + myport
return [myhost,
myuser,
mypass,
myport,
myurl]
def nab_Write_CCCinfoCfg(mycfg):
out = open('/etc/delcccaminfo', 'w')
strview = 'HOST ADDRESS:' + mycfg[0] + '\n'
out.write(strview)
strview = 'WEBINFO USERNAME:' + mycfg[1] + '\n'
out.write(strview)
strview = 'WEBINFO PASSWORD:' + mycfg[2] + '\n'
out.write(strview)
strview = 'WEBINFO LISTEN PORT:' + mycfg[3] + '\n'
out.write(strview)
out.close()
def DeliteGetSkinPath():
myskinpath = resolveFilename(SCOPE_CURRENT_SKIN, '')
if myskinpath == '/usr/share/enigma2/':
myskinpath = '/usr/share/enigma2/skin_default/'
return myskinpath
def nab_Detect_Machine():
machine = 'dm8000'
if fileExists('/etc/bhmachine'):
f = open('/etc/bhmachine', 'r')
machine = f.readline().strip()
f.close()
return machine
def BhU_get_Version():
ver = ''
if fileExists('/boot/blackhole/version'):
f = open('/boot/blackhole/version', 'r')
ver = f.readline().strip()
f.close()
return ver
def BhU_check_proc_version():
ver = ''
if fileExists('/boot/blackhole/version'):
f = open('/boot/blackhole/version', 'r')
ver = f.readline().strip()
f.close()
return ver
def BhU_checkSkinVersion(skinfile):
version = '2.0.0'
authors = ['Army', 'Matrix10', 'capa']
ret = 'Sorry this skin is not compatible with the current Black Hole image version.'
curversion = int(version.replace('.', ''))
fullfile = '/usr/share/enigma2/' + skinfile
checkver = False
checkauth = False
if fileExists(fullfile):
f = open(fullfile)
for line in f.readlines():
if line.find('black hole version:') != -1:
parts = line.strip().split(':')
ver = int(parts[1].strip().replace('.', ''))
if ver >= curversion:
checkver = True
elif line.find('skin author:') != -1:
parts = line.strip().split(':')
auth = parts[1].strip()
for a in authors:
if a == auth:
checkauth = True
f.close()
if checkver == True:
if checkauth == True:
ret = 'passed'
return ret
def BhU_find_hdd():
hdd = ''
hdds = ['sda',
'sdb',
'sdc',
'sdd',
'sde',
'sdf']
for device in hdds:
filename = '/sys/block/%s/removable' % device
if fileExists(filename):
if file(filename).read().strip() == '0':
hdd = device
break
return hdd

1
NeoBoot/bin/version Normal file
View File

@@ -0,0 +1 @@
1.4.1

6
NeoBoot/ex_init.py Normal file
View File

@@ -0,0 +1,6 @@
import sys, extract
if len(sys.argv) < 14:
pass
else:
extract.NEOBootMainEx(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5], sys.argv[6], sys.argv[7], sys.argv[8], sys.argv[9], sys.argv[10], sys.argv[11], sys.argv[12], sys.argv[13], sys.argv[14])

1074
NeoBoot/extract.py Normal file

File diff suppressed because it is too large Load Diff

966
NeoBoot/files/Harddisk.py Normal file
View File

@@ -0,0 +1,966 @@
# -*- coding: utf-8 -*-
#from __future__ import print_function
#from Plugins.Extensions.NeoBoot.__init__ import _
import os
import time
from Tools.Directories import fileExists, fileCheck, pathExists
from Tools.CList import CList
from Components.SystemInfo import SystemInfo
from Components.Console import Console
from Task import LoggingTask
import Task
def readFile(filename):
file = open(filename)
data = file.read().strip()
file.close()
return data
def getProcMounts():
try:
mounts = open('/proc/mounts', 'r')
except IOError as ex:
print '[Harddisk] Failed to open /proc/mounts', ex
return []
result = [ line.strip().split(' ') for line in mounts ]
for item in result:
item[1] = item[1].replace('\\040', ' ')
return result
def getNonNetworkMediaMounts():
return [ x[1] for x in getProcMounts() if x[1].startswith('/media/') and not x[0].startswith('//') ]
def isFileSystemSupported(filesystem):
try:
for fs in open('/proc/filesystems', 'r'):
if fs.strip().endswith(filesystem):
return True
return False
except Exception as ex:
print '[Harddisk] Failed to read /proc/filesystems:', ex
def findMountPoint(path):
path = os.path.abspath(path)
while not os.path.ismount(path):
path = os.path.dirname(path)
return path
DEVTYPE_UDEV = 0
DEVTYPE_DEVFS = 1
class Harddisk():
def __init__(self, device, removable = False):
self.device = device
if os.access('/dev/.udev', 0):
self.type = DEVTYPE_UDEV
elif os.access('/dev/.devfsd', 0):
self.type = DEVTYPE_DEVFS
else:
print '[Harddisk] Unable to determine structure of /dev'
self.type = -1
self.card = False
self.max_idle_time = 0
self.idle_running = False
self.last_access = time.time()
self.last_stat = 0
self.timer = None
self.is_sleeping = False
self.dev_path = ''
self.disk_path = ''
self.mount_path = None
self.mount_device = None
self.phys_path = os.path.realpath(self.sysfsPath('device'))
self.removable = removable
self.internal = 'pci' in self.phys_path or 'ahci' in self.phys_path or 'sata' in self.phys_path
try:
data = open('/sys/block/%s/queue/rotational' % device, 'r').read().strip()
self.rotational = int(data)
except:
self.rotational = True
if self.type == DEVTYPE_UDEV:
self.dev_path = '/dev/' + self.device
self.disk_path = self.dev_path
self.card = 'sdhci' in self.phys_path
elif self.type == DEVTYPE_DEVFS:
tmp = readFile(self.sysfsPath('dev')).split(':')
s_major = int(tmp[0])
s_minor = int(tmp[1])
for disc in os.listdir('/dev/discs'):
dev_path = os.path.realpath('/dev/discs/' + disc)
disk_path = dev_path + '/disc'
try:
rdev = os.stat(disk_path).st_rdev
except OSError:
continue
if s_major == os.major(rdev) and s_minor == os.minor(rdev):
self.dev_path = dev_path
self.disk_path = disk_path
break
self.card = self.device[:2] == 'hd' and 'host0' not in self.dev_path
print '[Harddisk] new device', self.device, '->', self.dev_path, '->', self.disk_path
if not removable and not self.card:
self.startIdle()
return
def __lt__(self, ob):
return self.device < ob.device
def partitionPath(self, n):
if self.type == DEVTYPE_UDEV:
if self.dev_path.startswith('/dev/mmcblk0'):
return self.dev_path + 'p' + n
else:
return self.dev_path + n
elif self.type == DEVTYPE_DEVFS:
return self.dev_path + '/part' + n
def sysfsPath(self, filename):
return os.path.join('/sys/block/', self.device, filename)
def stop(self):
if self.timer:
self.timer.stop()
self.timer.callback.remove(self.runIdle)
def bus(self):
ret = _('External')
if self.type == DEVTYPE_UDEV:
type_name = ' (SD/MMC)'
elif self.type == DEVTYPE_DEVFS:
type_name = ' (CF)'
if self.card:
ret += type_name
else:
if self.internal:
ret = _('Internal')
if not self.rotational:
ret += ' (SSD)'
return ret
def diskSize(self):
cap = 0
try:
line = readFile(self.sysfsPath('size'))
cap = int(line)
return cap / 1000 * 512 / 1000
except:
dev = self.findMount()
if dev:
try:
stat = os.statvfs(dev)
cap = int(stat.f_blocks * stat.f_bsize)
return cap / 1000 / 1000
except:
pass
return cap
def capacity(self):
cap = self.diskSize()
if cap == 0:
return ''
if cap < 1000:
return _('%03d MB') % cap
return _('%d.%03d GB') % (cap / 1000, cap % 1000)
def model(self):
try:
if self.device[:2] == 'hd':
return readFile('/proc/ide/' + self.device + '/model')
if self.device[:2] == 'sd':
vendor = readFile(self.sysfsPath('device/vendor'))
model = readFile(self.sysfsPath('device/model'))
return vendor + '(' + model + ')'
if self.device.startswith('mmcblk0'):
return readFile(self.sysfsPath('device/name'))
raise Exception, '[Harddisk] no hdX or sdX or mmcX'
except Exception as e:
print '[Harddisk] Failed to get model:', e
return '-?-'
def free(self):
dev = self.findMount()
if dev:
try:
stat = os.statvfs(dev)
return stat.f_bfree / 1000 * (stat.f_bsize / 1024)
except:
pass
return -1
def numPartitions(self):
numPart = -1
if self.type == DEVTYPE_UDEV:
try:
devdir = os.listdir('/dev')
except OSError:
return -1
for filename in devdir:
if filename.startswith(self.device):
numPart += 1
elif self.type == DEVTYPE_DEVFS:
try:
idedir = os.listdir(self.dev_path)
except OSError:
return -1
for filename in idedir:
if filename.startswith('disc'):
numPart += 1
if filename.startswith('part'):
numPart += 1
return numPart
def mountDevice(self):
for parts in getProcMounts():
if os.path.realpath(parts[0]).startswith(self.dev_path):
self.mount_device = parts[0]
self.mount_path = parts[1]
return parts[1]
return None
def enumMountDevices(self):
for parts in getProcMounts():
if os.path.realpath(parts[0]).startswith(self.dev_path):
yield parts[1]
def findMount(self):
if self.mount_path is None:
return self.mountDevice()
else:
return self.mount_path
def unmount(self):
dev = self.mountDevice()
if dev is None:
return 0
else:
cmd = 'umount ' + dev
print '[Harddisk]', cmd
res = os.system(cmd)
return res >> 8
def createPartition(self):
cmd = 'printf "8,\n;0,0\n;0,0\n;0,0\ny\n" | sfdisk -f -uS ' + self.disk_path
res = os.system(cmd)
return res >> 8
def mkfs(self):
return 1
def mount(self):
if self.mount_device is None:
dev = self.partitionPath('1')
else:
dev = self.mount_device
try:
fstab = open('/etc/fstab')
lines = fstab.readlines()
fstab.close()
except IOError:
return -1
for line in lines:
parts = line.strip().split(' ')
fspath = os.path.realpath(parts[0])
if fspath == dev:
print '[Harddisk] mounting:', fspath
cmd = 'mount -t auto ' + fspath
res = os.system(cmd)
return res >> 8
res = -1
if self.type == DEVTYPE_UDEV:
res = os.system('hdparm -z ' + self.disk_path)
from time import sleep
sleep(3)
return res >> 8
def fsck(self):
return 1
def killPartitionTable(self):
zero = 512 * '\x00'
h = open(self.dev_path, 'wb')
for i in range(9):
h.write(zero)
h.close()
def killPartition(self, n):
zero = 512 * '\x00'
part = self.partitionPath(n)
h = open(part, 'wb')
for i in range(3):
h.write(zero)
h.close()
def createInitializeJob(self):
job = Task.Job(_('Initializing storage device...'))
size = self.diskSize()
print '[HD] size: %s MB' % size
task = UnmountTask(job, self)
task = Task.PythonTask(job, _('Removing partition table'))
task.work = self.killPartitionTable
task.weighting = 1
task = Task.LoggingTask(job, _('Rereading partition table'))
task.weighting = 1
task.setTool('hdparm')
task.args.append('-z')
task.args.append(self.disk_path)
task = Task.ConditionTask(job, _('Waiting for partition'), timeoutCount=20)
task.check = lambda : not os.path.exists(self.partitionPath('1'))
task.weighting = 1
if os.path.exists('/usr/sbin/parted'):
use_parted = True
elif size > 2097151:
addInstallTask(job, 'parted')
use_parted = True
else:
use_parted = False
task = Task.LoggingTask(job, _('Creating partition'))
task.weighting = 5
if use_parted:
task.setTool('parted')
if size < 1024:
alignment = 'min'
else:
alignment = 'opt'
if size > 2097151:
parttype = 'gpt'
else:
parttype = 'msdos'
task.args += ['-a',
alignment,
'-s',
self.disk_path,
'mklabel',
parttype,
'mkpart',
'primary',
'0%',
'100%']
else:
task.setTool('sfdisk')
task.args.append('-f')
task.args.append('-uS')
task.args.append(self.disk_path)
if size > 128000:
print '[HD] Detected >128GB disk, using 4k alignment'
task.initial_input = '8,,L\n;0,0\n;0,0\n;0,0\ny\n'
else:
task.initial_input = ',,L\n;\n;\n;\ny\n'
task = Task.ConditionTask(job, _('Waiting for partition'))
task.check = lambda : os.path.exists(self.partitionPath('1'))
task.weighting = 1
task = MkfsTask(job, _('Creating filesystem'))
big_o_options = ['dir_index']
if isFileSystemSupported('ext4'):
task.setTool('mkfs.ext4')
if size > 20000:
try:
version = map(int, open('/proc/version', 'r').read().split(' ', 4)[2].split('.', 2)[:2])
if version[0] > 3 or version[0] > 2 and version[1] >= 2:
task.args += ['-C', '262144']
big_o_options.append('bigalloc')
except Exception as ex:
print 'Failed to detect Linux version:', ex
else:
task.setTool('mkfs.ext3')
if size > 250000:
task.args += ['-T',
'largefile',
'-N',
'262144']
big_o_options.append('sparse_super')
elif size > 16384:
task.args += ['-T', 'largefile']
big_o_options.append('sparse_super')
elif size > 2048:
task.args += ['-T',
'largefile',
'-N',
str(size * 32)]
task.args += ['-m0',
'-O',
','.join(big_o_options),
self.partitionPath('1')]
task = MountTask(job, self)
task.weighting = 3
task = Task.ConditionTask(job, _('Waiting for mount'), timeoutCount=20)
task.check = self.mountDevice
task.weighting = 1
return job
def initialize(self):
return -5
def check(self):
return -5
def createCheckJob(self):
job = Task.Job(_('Checking filesystem...'))
if self.findMount():
UnmountTask(job, self)
dev = self.mount_device
else:
dev = self.partitionPath('1')
task = Task.LoggingTask(job, 'fsck')
task.setTool('fsck.ext3')
task.args.append('-f')
task.args.append('-p')
task.args.append(dev)
MountTask(job, self)
task = Task.ConditionTask(job, _('Waiting for mount'))
task.check = self.mountDevice
return job
def getDeviceDir(self):
return self.dev_path
def getDeviceName(self):
return self.disk_path
def readStats(self):
try:
l = open('/sys/block/%s/stat' % self.device).read()
except IOError:
return (-1, -1)
data = l.split(None, 5)
return (int(data[0]), int(data[4]))
def startIdle(self):
from enigma import eTimer
if self.bus() == _('External'):
Console().ePopen(('sdparm',
'sdparm',
'--set=SCT=0',
self.disk_path))
else:
Console().ePopen(('hdparm',
'hdparm',
'-S0',
self.disk_path))
self.timer = eTimer()
self.timer.callback.append(self.runIdle)
self.idle_running = True
self.setIdleTime(self.max_idle_time)
def runIdle(self):
if not self.max_idle_time:
return
t = time.time()
idle_time = t - self.last_access
stats = self.readStats()
l = sum(stats)
if l != self.last_stat and l >= 0:
self.last_stat = l
self.last_access = t
idle_time = 0
self.is_sleeping = False
if idle_time >= self.max_idle_time and not self.is_sleeping:
self.setSleep()
self.is_sleeping = True
def setSleep(self):
if self.bus() == _('External'):
Console().ePopen(('sdparm',
'sdparm',
'--flexible',
'--readonly',
'--command=stop',
self.disk_path))
else:
Console().ePopen(('hdparm',
'hdparm',
'-y',
self.disk_path))
def setIdleTime(self, idle):
self.max_idle_time = idle
if self.idle_running:
if not idle:
self.timer.stop()
else:
self.timer.start(idle * 100, False)
def isSleeping(self):
return self.is_sleeping
class Partition():
def __init__(self, mountpoint, device = None, description = '', force_mounted = False):
self.mountpoint = mountpoint
self.description = description
self.force_mounted = mountpoint and force_mounted
self.is_hotplug = force_mounted
self.device = device
def __str__(self):
return 'Partition(mountpoint=%s,description=%s,device=%s)' % (self.mountpoint, self.description, self.device)
def stat(self):
if self.mountpoint:
return os.statvfs(self.mountpoint)
raise OSError, 'Device %s is not mounted' % self.device
def free(self):
try:
s = self.stat()
return s.f_bavail * s.f_bsize
except OSError:
return None
return None
def total(self):
try:
s = self.stat()
return s.f_blocks * s.f_bsize
except OSError:
return None
return None
def tabbedDescription(self):
if self.mountpoint.startswith('/media/net') or self.mountpoint.startswith('/media/autofs'):
return self.description
return self.description + '\t' + self.mountpoint
def mounted(self, mounts = None):
if self.force_mounted:
return True
else:
if self.mountpoint:
if mounts is None:
mounts = getProcMounts()
for parts in mounts:
if self.mountpoint.startswith(parts[1]):
return True
return False
def filesystem(self, mounts = None):
if self.mountpoint:
if mounts is None:
mounts = getProcMounts()
for fields in mounts:
if self.mountpoint.endswith('/') and not self.mountpoint == '/':
if fields[1] + '/' == self.mountpoint:
return fields[2]
elif fields[1] == self.mountpoint:
return fields[2]
return ''
def addInstallTask(job, package):
task = Task.LoggingTask(job, 'update packages')
task.setTool('opkg')
task.args.append('update')
task = Task.LoggingTask(job, 'Install ' + package)
task.setTool('opkg')
task.args.append('install')
task.args.append(package)
class HarddiskManager():
def __init__(self):
self.hdd = []
self.cd = ''
self.partitions = []
self.devices_scanned_on_init = []
self.on_partition_list_change = CList()
self.enumerateBlockDevices()
p = (('/media/hdd', _('Hard disk')),
('/media/card', _('Card')),
('/media/cf', _('Compact flash')),
('/media/mmc1', _('MMC card')),
('/media/net', _('Network mount')),
('/media/net1', _('Network mount %s') % '1'),
('/media/net2', _('Network mount %s') % '2'),
('/media/net3', _('Network mount %s') % '3'),
('/media/ram', _('Ram disk')),
('/media/usb', _('USB stick')),
('/', _('Internal flash')))
known = set([ os.path.normpath(a.mountpoint) for a in self.partitions if a.mountpoint ])
for m, d in p:
if m not in known and os.path.ismount(m):
self.partitions.append(Partition(mountpoint=m, description=d))
def getBlockDevInfo(self, blockdev):
HasMMC = fileExists('/proc/cmdline') and 'root=/dev/mmcblk' in open('/proc/cmdline', 'r').read()
devpath = '/sys/block/' + blockdev
error = False
removable = False
blacklisted = False
is_cdrom = False
partitions = []
try:
if os.path.exists(devpath + '/removable'):
removable = bool(int(readFile(devpath + '/removable')))
if os.path.exists(devpath + '/dev'):
dev = int(readFile(devpath + '/dev').split(':')[0])
else:
dev = None
blacklisted = dev in [1,
7,
31,
253,
254] + (['HasMMC'] and [179] or [])
if blockdev[0:2] == 'sr':
is_cdrom = True
if blockdev[0:2] == 'hd':
try:
media = readFile('/proc/ide/%s/media' % blockdev)
if 'cdrom' in media:
is_cdrom = True
except IOError:
error = True
if not is_cdrom and os.path.exists(devpath):
for partition in os.listdir(devpath):
if partition[0:len(blockdev)] != blockdev:
continue
partitions.append(partition)
else:
self.cd = blockdev
except IOError:
error = True
medium_found = True
try:
open('/dev/' + blockdev).close()
except IOError as err:
if err.errno == 159:
medium_found = False
return (error,
blacklisted,
removable,
is_cdrom,
partitions,
medium_found)
def enumerateBlockDevices(self):
print '[Harddisk] enumerating block devices...'
for blockdev in os.listdir('/sys/block'):
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.addHotplugPartition(blockdev)
if not error and not blacklisted and medium_found:
for part in partitions:
self.addHotplugPartition(part)
self.devices_scanned_on_init.append((blockdev,
removable,
is_cdrom,
medium_found))
def getAutofsMountpoint(self, device):
r = self.getMountpoint(device)
if r is None:
return '/media/' + device
else:
return r
def getMountpoint(self, device):
dev = '/dev/%s' % device
for item in getProcMounts():
if item[0] == dev:
return item[1]
return None
def addHotplugPartition(self, device, physdev = None):
if not physdev:
dev, part = self.splitDeviceName(device)
try:
physdev = os.path.realpath('/sys/block/' + dev + '/device')[4:]
except OSError:
physdev = dev
print "couldn't determine blockdev physdev for device", device
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
if not blacklisted and medium_found:
description = self.getUserfriendlyDeviceName(device, physdev)
p = Partition(mountpoint=self.getMountpoint(device), description=description, force_mounted=True, device=device)
self.partitions.append(p)
if p.mountpoint:
self.on_partition_list_change('add', p)
l = len(device)
if l and (not device[l - 1].isdigit() or device == 'mmcblk0'):
self.hdd.append(Harddisk(device, removable))
self.hdd.sort()
SystemInfo['Harddisk'] = True
return (error,
blacklisted,
removable,
is_cdrom,
partitions,
medium_found)
def addHotplugAudiocd(self, device, physdev = None):
if not physdev:
dev, part = self.splitDeviceName(device)
try:
physdev = os.path.realpath('/sys/block/' + dev + '/device')[4:]
except OSError:
physdev = dev
print "couldn't determine blockdev physdev for device", device
error, blacklisted, removable, is_cdrom, partitions, medium_found = self.getBlockDevInfo(device)
if not blacklisted and medium_found:
description = self.getUserfriendlyDeviceName(device, physdev)
p = Partition(mountpoint='/media/audiocd', description=description, force_mounted=True, device=device)
self.partitions.append(p)
self.on_partition_list_change('add', p)
SystemInfo['Harddisk'] = False
return (error,
blacklisted,
removable,
is_cdrom,
partitions,
medium_found)
def removeHotplugPartition(self, device):
for x in self.partitions[:]:
if x.device == device:
self.partitions.remove(x)
if x.mountpoint:
self.on_partition_list_change('remove', x)
l = len(device)
if l and not device[l - 1].isdigit():
for hdd in self.hdd:
if hdd.device == device:
hdd.stop()
self.hdd.remove(hdd)
break
SystemInfo['Harddisk'] = len(self.hdd) > 0
def HDDCount(self):
return len(self.hdd)
def HDDList(self):
list = []
for hd in self.hdd:
hdd = hd.model() + ' - ' + hd.bus()
cap = hd.capacity()
if cap != '':
hdd += ' (' + cap + ')'
list.append((hdd, hd))
return list
def getCD(self):
return self.cd
def getMountedPartitions(self, onlyhotplug = False, mounts = None):
if mounts is None:
mounts = getProcMounts()
parts = [ x for x in self.partitions if (x.is_hotplug or not onlyhotplug) and x.mounted(mounts) ]
devs = set([ x.device for x in parts ])
for devname in devs.copy():
if not devname:
continue
dev, part = self.splitDeviceName(devname)
if part and dev in devs:
devs.remove(dev)
return [ x for x in parts if not x.device or x.device in devs ]
def splitDeviceName(self, devname):
dev = devname[:3]
part = devname[3:]
for p in part:
if not p.isdigit():
return (devname, 0)
return (dev, part and int(part) or 0)
def getUserfriendlyDeviceName(self, dev, phys):
dev, part = self.splitDeviceName(dev)
description = _('External Storage %s') % dev
try:
description = readFile('/sys' + phys + '/model')
except IOError as s:
print "couldn't read model: ", s
if part and part != 1:
description += _(' (Partition %d)') % part
return description
def addMountedPartition(self, device, desc):
for x in self.partitions:
if x.mountpoint == device:
return
self.partitions.append(Partition(mountpoint=device, description=desc))
def removeMountedPartition(self, mountpoint):
for x in self.partitions[:]:
if x.mountpoint == mountpoint:
self.partitions.remove(x)
self.on_partition_list_change('remove', x)
def setDVDSpeed(self, device, speed = 0):
ioctl_flag = int(21282)
if not device.startswith('/'):
device = '/dev/' + device
try:
from fcntl import ioctl
cd = open(device)
ioctl(cd.fileno(), ioctl_flag, speed)
cd.close()
except Exception as ex:
print '[Harddisk] Failed to set %s speed to %s' % (device, speed), ex
class UnmountTask(Task.LoggingTask):
def __init__(self, job, hdd):
Task.LoggingTask.__init__(self, job, _('Unmount'))
self.hdd = hdd
self.mountpoints = []
def prepare(self):
try:
dev = self.hdd.disk_path.split('/')[-1]
open('/dev/nomount.%s' % dev, 'wb').close()
except Exception as e:
print 'ERROR: Failed to create /dev/nomount file:', e
self.setTool('umount')
self.args.append('-f')
for dev in self.hdd.enumMountDevices():
self.args.append(dev)
self.postconditions.append(Task.ReturncodePostcondition())
self.mountpoints.append(dev)
if not self.mountpoints:
print 'UnmountTask: No mountpoints found?'
self.cmd = 'true'
self.args = [self.cmd]
def afterRun(self):
for path in self.mountpoints:
try:
os.rmdir(path)
except Exception as ex:
print "Failed to remove path '%s':" % path, ex
class MountTask(Task.LoggingTask):
def __init__(self, job, hdd):
Task.LoggingTask.__init__(self, job, _('Mount'))
self.hdd = hdd
def prepare(self):
try:
dev = self.hdd.disk_path.split('/')[-1]
os.unlink('/dev/nomount.%s' % dev)
except Exception as e:
print 'ERROR: Failed to remove /dev/nomount file:', e
if self.hdd.mount_device is None:
dev = self.hdd.partitionPath('1')
else:
dev = self.hdd.mount_device
fstab = open('/etc/fstab')
lines = fstab.readlines()
fstab.close()
for line in lines:
parts = line.strip().split(' ')
fspath = os.path.realpath(parts[0])
if os.path.realpath(fspath) == dev:
self.setCmdline('mount -t auto ' + fspath)
self.postconditions.append(Task.ReturncodePostcondition())
return
if self.hdd.type == DEVTYPE_UDEV:
self.setCmdline('sleep 2; hdparm -z ' + self.hdd.disk_path)
self.postconditions.append(Task.ReturncodePostcondition())
return
class MkfsTask(Task.LoggingTask):
def prepare(self):
self.fsck_state = None
return
def processOutput(self, data):
print '[Mkfs]', data
if 'Writing inode tables:' in data:
self.fsck_state = 'inode'
elif 'Creating journal' in data:
self.fsck_state = 'journal'
self.setProgress(80)
elif 'Writing superblocks ' in data:
self.setProgress(95)
elif self.fsck_state == 'inode':
if '/' in data:
try:
d = data.strip(' \x08\r\n').split('/', 1)
if '\x08' in d[1]:
d[1] = d[1].split('\x08', 1)[0]
self.setProgress(80 * int(d[0]) / int(d[1]))
except Exception as e:
print '[Mkfs] E:', e
return
self.log.append(data)
harddiskmanager = HarddiskManager()
def isSleepStateDevice(device):
ret = os.popen('hdparm -C %s' % device).read()
if 'SG_IO' in ret or 'HDIO_DRIVE_CMD' in ret:
return None
elif 'drive state is: standby' in ret or 'drive state is: idle' in ret:
return True
elif 'drive state is: active/idle' in ret:
return False
else:
return None
def internalHDDNotSleeping(external = False):
state = False
if harddiskmanager.HDDCount():
for hdd in harddiskmanager.HDDList():
if hdd[1].internal or external:
if hdd[1].idle_running and hdd[1].max_idle_time and not hdd[1].isSleeping():
state = True
return state
harddiskmanager = HarddiskManager()
SystemInfo['ext4'] = isFileSystemSupported('ext4')

17
NeoBoot/files/NeoBoot.sh Normal file
View File

@@ -0,0 +1,17 @@
#!/bin/sh
if [ -f /media/neoboot/NeoBoot_Backup.tar.gz ] ; then
rm -R /media/neoboot/NeoBoot_Backupt.tar.gz
/bin/tar -czf /media/neoboot/NeoBoot_Backup.tar.gz /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot*/
echo " "
echo "Kopia o nazwie NeoBoot_Backup.tar.gz zostala utworzona w lokalizacji: /media/neoboot . "
echo " "
else
/bin/tar -czf /media/neoboot/NeoBoot_Backup.tar.gz /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot*/
echo " "
echo "Kopia o nazwie NeoBoot_Backup.tar.gz zostala utworzona w lokalizacji: /media/neoboot/ . "
echo " "
fi
exit 0

50
NeoBoot/files/S50fat.sh Normal file
View File

@@ -0,0 +1,50 @@
#!/bin/sh
# script gutosie
if [ ! -e /usr/bin/ipkg ]; then
ln -sfn /usr/bin/opkg /usr/bin/ipkg
fi
if [ ! -e /usr/bin/ipkg-cl ]; then
ln -sfn /usr/bin/opkg-cl /usr/bin/ipkg-cl
fi
if [ -f /etc/vtiversion.info ] || [ -f /etc/bhversion ] || [ ! -e /boot/zImage.* ]; then
/etc/init.d/networking stop; sync; /etc/init.d/networking start
fi
if [ -f /etc/init.d/inadyn-mt ] ; then
/etc/init.d/inadyn-mt start
fi
if [ -f /home/root/*.tar.gz ] ; then
/bin/tar -xzvf /home/root/*.tar.gz -C /; rm /home/root/*.tar.gz
fi
if [ ! -e /media/usb ] ; then
mkdir -p /media/usb
fi
if [ ! -e /media/hdd ] ; then
mkdir -p /media/hdd
fi
if [ ! -e /media//media/neoboot ] ; then
mkdir -p /media/media/neoboot
fi
mount -a -t auto
rdate -s ntp.task.gda.pl
if [ ! -e /media/neoboot/ImageBoot/.neonextboot ] ; then
/usr/bin/enigma2_pre_start.sh
fi
if [ -f /etc/rcS.d/S50fat.sh ] ; then
ln -s /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/S50fat.sh /etc/rcS.d/S50neo.sh
telnetd on
echo ok
rm -f /etc/rcS.d/S50fat.sh
echo "file S50fat.sh delete"
fi
wget -O /dev/null -q "http://localhost/web/message?text=UWAGA!!!...+Uruchom+NeoBoot+by+potwierdzic+start+image...%0AOperacja+w+toku...&type=2&timeout=08"
echo ok

523
NeoBoot/files/Task.py Normal file
View File

@@ -0,0 +1,523 @@
# -*- coding: utf-8 -*-
#from __future__ import print_function
#from Plugins.Extensions.NeoBoot.__init__ import _
from Tools.CList import CList
class Job(object):
NOT_STARTED, IN_PROGRESS, FINISHED, FAILED = range(4)
def __init__(self, name):
self.tasks = []
self.resident_tasks = []
self.workspace = '/tmp'
self.current_task = 0
self.callback = None
self.name = name
self.finished = False
self.end = 100
self.__progress = 0
self.weightScale = 1
self.afterEvent = None
self.state_changed = CList()
self.status = self.NOT_STARTED
self.onSuccess = None
return
def fromDescription(self, description):
pass
def createDescription(self):
return None
def getProgress(self):
if self.current_task == len(self.tasks):
return self.end
t = self.tasks[self.current_task]
jobprogress = t.weighting * t.progress / float(t.end) + sum([ task.weighting for task in self.tasks[:self.current_task] ])
return int(jobprogress * self.weightScale)
progress = property(getProgress)
def getStatustext(self):
return {self.NOT_STARTED: _('Waiting'),
self.IN_PROGRESS: _('In progress'),
self.FINISHED: _('Finished'),
self.FAILED: _('Failed')}[self.status]
def task_progress_changed_CB(self):
self.state_changed()
def addTask(self, task):
task.job = self
task.task_progress_changed = self.task_progress_changed_CB
self.tasks.append(task)
def start(self, callback):
self.callback = callback
self.restart()
def restart(self):
self.status = self.IN_PROGRESS
self.state_changed()
self.runNext()
sumTaskWeightings = sum([ t.weighting for t in self.tasks ]) or 1
self.weightScale = self.end / float(sumTaskWeightings)
def runNext(self):
if self.current_task == len(self.tasks):
if len(self.resident_tasks) == 0:
self.status = self.FINISHED
self.state_changed()
self.callback(self, None, [])
self.callback = None
else:
print 'still waiting for %d resident task(s) %s to finish' % (len(self.resident_tasks), str(self.resident_tasks))
else:
self.tasks[self.current_task].run(self.taskCallback)
self.state_changed()
return
def taskCallback(self, task, res, stay_resident = False):
cb_idx = self.tasks.index(task)
if stay_resident:
if cb_idx not in self.resident_tasks:
self.resident_tasks.append(self.current_task)
print 'task going resident:', task
else:
print 'task keeps staying resident:', task
return
if len(res):
print '>>> Error:', res
self.status = self.FAILED
self.state_changed()
self.callback(self, task, res)
if cb_idx != self.current_task:
if cb_idx in self.resident_tasks:
print 'resident task finished:', task
self.resident_tasks.remove(cb_idx)
if res == []:
self.state_changed()
self.current_task += 1
self.runNext()
def retry(self):
self.restart()
def abort(self):
if self.current_task < len(self.tasks):
self.tasks[self.current_task].abort()
for i in self.resident_tasks:
self.tasks[i].abort()
def cancel(self):
self.abort()
def __str__(self):
return 'Components.Task.Job name=%s #tasks=%s' % (self.name, len(self.tasks))
class Task(object):
def __init__(self, job, name):
self.name = name
self.immediate_preconditions = []
self.global_preconditions = []
self.postconditions = []
self.returncode = None
self.initial_input = None
self.job = None
self.end = 100
self.weighting = 100
self.__progress = 0
self.cmd = None
self.cwd = '/tmp'
self.args = []
self.cmdline = None
self.task_progress_changed = None
self.output_line = ''
job.addTask(self)
self.container = None
return
def setCommandline(self, cmd, args):
self.cmd = cmd
self.args = args
def setTool(self, tool):
self.cmd = tool
self.args = [tool]
self.global_preconditions.append(ToolExistsPrecondition())
self.postconditions.append(ReturncodePostcondition())
def setCmdline(self, cmdline):
self.cmdline = cmdline
def checkPreconditions(self, immediate = False):
not_met = []
if immediate:
preconditions = self.immediate_preconditions
else:
preconditions = self.global_preconditions
for precondition in preconditions:
if not precondition.check(self):
not_met.append(precondition)
return not_met
def _run(self):
if self.cmd is None and self.cmdline is None:
self.finish()
return
else:
from enigma import eConsoleAppContainer
self.container = eConsoleAppContainer()
self.container.appClosed.append(self.processFinished)
self.container.stdoutAvail.append(self.processStdout)
self.container.stderrAvail.append(self.processStderr)
if self.cwd is not None:
self.container.setCWD(self.cwd)
if not self.cmd and self.cmdline:
print 'execute:', self.container.execute(self.cmdline), self.cmdline
else:
print 'execute:', self.container.execute(self.cmd, *self.args), ' '.join(self.args)
if self.initial_input:
self.writeInput(self.initial_input)
return
return
def run(self, callback):
failed_preconditions = self.checkPreconditions(True) + self.checkPreconditions(False)
if failed_preconditions:
print '[Task] preconditions failed'
callback(self, failed_preconditions)
return
self.callback = callback
try:
self.prepare()
self._run()
except Exception as ex:
print '[Task] exception:', ex
self.postconditions = [FailedPostcondition(ex)]
self.finish()
def prepare(self):
pass
def cleanup(self, failed):
pass
def processStdout(self, data):
self.processOutput(data)
def processStderr(self, data):
self.processOutput(data)
def processOutput(self, data):
self.output_line += data
while True:
i = self.output_line.find('\n')
if i == -1:
break
self.processOutputLine(self.output_line[:i + 1])
self.output_line = self.output_line[i + 1:]
def processOutputLine(self, line):
print '[Task %s]' % self.name, line[:-1]
def processFinished(self, returncode):
self.returncode = returncode
self.finish()
def abort(self):
if self.container:
self.container.kill()
self.finish(aborted=True)
def finish(self, aborted = False):
self.afterRun()
not_met = []
if aborted:
not_met.append(AbortedPostcondition())
else:
for postcondition in self.postconditions:
if not postcondition.check(self):
not_met.append(postcondition)
self.cleanup(not_met)
self.callback(self, not_met)
def afterRun(self):
pass
def writeInput(self, input):
self.container.write(input)
def getProgress(self):
return self.__progress
def setProgress(self, progress):
if progress > self.end:
progress = self.end
if progress < 0:
progress = 0
self.__progress = progress
if self.task_progress_changed:
self.task_progress_changed()
progress = property(getProgress, setProgress)
def __str__(self):
return 'Components.Task.Task name=%s' % self.name
class LoggingTask(Task):
def __init__(self, job, name):
Task.__init__(self, job, name)
self.log = []
def processOutput(self, data):
print '[%s]' % self.name, data,
self.log.append(data)
class PythonTask(Task):
def _run(self):
from twisted.internet import threads
from enigma import eTimer
self.aborted = False
self.pos = 0
threads.deferToThread(self.work).addBoth(self.onComplete)
self.timer = eTimer()
self.timer.callback.append(self.onTimer)
self.timer.start(5)
def work(self):
raise NotImplemented, 'work'
def abort(self):
self.aborted = True
if self.callback is None:
self.finish(aborted=True)
return
def onTimer(self):
self.setProgress(self.pos)
def onComplete(self, result):
self.postconditions.append(FailedPostcondition(result))
self.timer.stop()
del self.timer
self.finish()
class ConditionTask(Task):
def __init__(self, job, name, timeoutCount = None):
Task.__init__(self, job, name)
self.timeoutCount = timeoutCount
def _run(self):
self.triggerCount = 0
def prepare(self):
from enigma import eTimer
self.timer = eTimer()
self.timer.callback.append(self.trigger)
self.timer.start(1000)
def cleanup(self, failed):
if hasattr(self, 'timer'):
self.timer.stop()
del self.timer
def check(self):
return True
def trigger(self):
self.triggerCount += 1
try:
if self.timeoutCount is not None and self.triggerCount > self.timeoutCount:
raise Exception, 'Timeout elapsed, sorry'
res = self.check()
except Exception as e:
self.postconditions.append(FailedPostcondition(e))
res = True
if res:
self.finish()
return
class JobManager:
def __init__(self):
self.active_jobs = []
self.failed_jobs = []
self.job_classes = []
self.in_background = False
self.visible = False
self.active_job = None
return
def AddJob(self, job, onSuccess = None, onFail = None):
job.onSuccess = onSuccess
if onFail is None:
job.onFail = self.notifyFailed
else:
job.onFail = onFail
self.active_jobs.append(job)
self.kick()
return
def kick(self):
if self.active_job is None:
if self.active_jobs:
self.active_job = self.active_jobs.pop(0)
self.active_job.start(self.jobDone)
return
def notifyFailed(self, job, task, problems):
from Tools import Notifications
from Screens.MessageBox import MessageBox
if problems[0].RECOVERABLE:
Notifications.AddNotificationWithCallback(self.errorCB, MessageBox, _('Error: %s\nRetry?') % problems[0].getErrorMessage(task))
return True
else:
Notifications.AddNotification(MessageBox, job.name + '\n' + _('Error') + ': %s' % problems[0].getErrorMessage(task), type=MessageBox.TYPE_ERROR)
return False
def jobDone(self, job, task, problems):
print 'job', job, 'completed with', problems, 'in', task
if problems:
if not job.onFail(job, task, problems):
self.errorCB(False)
else:
self.active_job = None
if job.onSuccess:
job.onSuccess(job)
self.kick()
return
def popupTaskView(self, job):
if not self.visible:
from Tools import Notifications
from Screens.TaskView import JobView
self.visible = True
Notifications.AddNotification(JobView, job)
def errorCB(self, answer):
if answer:
print 'retrying job'
self.active_job.retry()
else:
print 'not retrying job.'
self.failed_jobs.append(self.active_job)
self.active_job = None
self.kick()
return
def getPendingJobs(self):
list = []
if self.active_job:
list.append(self.active_job)
list += self.active_jobs
return list
class Condition:
RECOVERABLE = False
def getErrorMessage(self, task):
return _('An unknown error occurred!') + ' (%s @ task %s)' % (self.__class__.__name__, task.__class__.__name__)
class WorkspaceExistsPrecondition(Condition):
def check(self, task):
return os.access(task.job.workspace, os.W_OK)
class DiskspacePrecondition(Condition):
def __init__(self, diskspace_required):
self.diskspace_required = diskspace_required
self.diskspace_available = 0
def check(self, task):
import os
try:
s = os.statvfs(task.job.workspace)
self.diskspace_available = s.f_bsize * s.f_bavail
return self.diskspace_available >= self.diskspace_required
except OSError:
return False
def getErrorMessage(self, task):
return _('Not enough disk space. Please free up some disk space and try again. (%d MB required, %d MB available)') % (self.diskspace_required / 1024 / 1024, self.diskspace_available / 1024 / 1024)
class ToolExistsPrecondition(Condition):
def check(self, task):
import os
if task.cmd[0] == '/':
self.realpath = task.cmd
print '[Task.py][ToolExistsPrecondition] WARNING: usage of absolute paths for tasks should be avoided!'
return os.access(self.realpath, os.X_OK)
self.realpath = task.cmd
path = os.environ.get('PATH', '').split(os.pathsep)
path.append(task.cwd + '/')
absolutes = filter(lambda file: os.access(file, os.X_OK), map(lambda directory, file = task.cmd: os.path.join(directory, file), path))
if absolutes:
self.realpath = absolutes[0]
return True
return False
def getErrorMessage(self, task):
return _('A required tool (%s) was not found.') % self.realpath
class AbortedPostcondition(Condition):
def getErrorMessage(self, task):
return 'Cancelled upon user request'
class ReturncodePostcondition(Condition):
def check(self, task):
return task.returncode == 0
def getErrorMessage(self, task):
if hasattr(task, 'log') and task.log:
log = ''.join(task.log).strip()
log = log.split('\n')[-3:]
log = '\n'.join(log)
return log
else:
return _('Error code') + ': %s' % task.returncode
class FailedPostcondition(Condition):
def __init__(self, exception):
self.exception = exception
def getErrorMessage(self, task):
if isinstance(self.exception, int):
if hasattr(task, 'log'):
log = ''.join(task.log).strip()
log = log.split('\n')[-4:]
log = '\n'.join(log)
return log
else:
return _('Error code') + ' %s' % self.exception
return str(self.exception)
def check(self, task):
return self.exception is None or self.exception == 0
job_manager = JobManager()

23
NeoBoot/files/__init__.py Normal file
View File

@@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
from Components.Language import language
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_LANGUAGE
import os, gettext
PluginLanguageDomain = 'NeoBoot'
PluginLanguagePath = 'Extensions/NeoBoot/locale'
def localeInit():
lang = language.getLanguage()[:2]
os.environ['LANGUAGE'] = lang
print '[NeoBoot] set language to ', lang
gettext.bindtextdomain(PluginLanguageDomain, resolveFilename(SCOPE_PLUGINS, PluginLanguagePath))
def _(txt):
t = gettext.dgettext(PluginLanguageDomain, txt)
if t == txt:
print '[NeoBoot] fallback to default translation for', txt
t = gettext.dgettext('enigma2', txt)
return t
localeInit()
language.addCallback(localeInit)

BIN
NeoBoot/files/__init__.pyo Normal file

Binary file not shown.

449
NeoBoot/files/devices.py Normal file
View File

@@ -0,0 +1,449 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __init__ import _
from enigma import getDesktop
from Plugins.Plugin import PluginDescriptor
from Screens.ChoiceBox import ChoiceBox
from Screens.InputBox import InputBox
from Screens.Screen import Screen
from enigma import eTimer
from Screens.MessageBox import MessageBox
from Screens.Standby import TryQuitMainloop
from Components.ActionMap import ActionMap
from Components.Label import Label
from Components.Pixmap import Pixmap
from Components.ConfigList import ConfigListScreen
from Components.config import getConfigListEntry, config, ConfigSelection, NoSave, configfile
from Components.Console import Console
from Components.Sources.List import List
from Components.Sources.StaticText import StaticText
from Plugins.Extensions.NeoBoot.files.Harddisk import Harddisk
from Tools.LoadPixmap import LoadPixmap
from Tools.Directories import fileExists, resolveFilename, SCOPE_CURRENT_SKIN
from os import system, rename, path, mkdir, remove, listdir
from time import sleep
import fileinput
import re
import os
class ManagerDevice(Screen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen name="ManagerDevice" position="center,center" size="1235,748">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="35,16" size="253,52" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="315,15" size="279,50" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="647,18" size="263,48" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="965,19" size="269,51" alphatest="on" />\n\t\t<widget name="key_red" position="14,17" zPosition="1" size="258,48" font="Regular;30" halign="center" valign="center" backgroundColor="un9f1313" transparent="1" />\n\t\t<widget name="key_green" position="297,17" zPosition="1" size="298,48" font="Regular;30" halign="center" valign="center" backgroundColor="un1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="631,18" zPosition="1" size="268,48" font="Regular;30" halign="center" valign="center" backgroundColor="una08500" transparent="1" />\n\t\t<widget name="key_blue" position="940,21" zPosition="1" size="266,45" font="Regular;30" halign="center" valign="center" backgroundColor="un18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="12,76" size="1212,651" scrollbarMode="showOnDemand">\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 5), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 60), size = (900, 100), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (160, 160,), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 33),gFont("Regular", 33)],\n\t\t\t\t"itemHeight": 140\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="32,92" size="1182,69" font="Regular;30" halign="center" transparent="1" />\n\t</screen>'
else:
skin = '<screen position="center,center" size="640,460">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/yellow.png" position="325,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/blue.png" position="475,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="key_yellow" position="325,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#a08500" transparent="1" />\n\t\t <widget name="key_blue" position="475,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#18188b" transparent="1" />\n\t\t<widget source="list" render="Listbox" position="10,50" size="620,450" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n\t\t\t\t{"template": [\n\t\t\t\t MultiContentEntryText(pos = (90, 0), size = (600, 30), font=0, text = 0),\n\t\t\t\t MultiContentEntryText(pos = (110, 30), size = (600, 50), font=1, flags = RT_VALIGN_TOP, text = 1),\n\t\t\t\t MultiContentEntryPixmapAlphaBlend(pos = (0, 0), size = (80, 80), png = 2),\n\t\t\t\t],\n\t\t\t\t"fonts": [gFont("Regular", 24),gFont("Regular", 20)],\n\t\t\t\t"itemHeight": 85\n\t\t\t\t}\n\t\t\t</convert>\n\t\t</widget>\n\t\t<widget name="lab1" zPosition="2" position="50,90" size="600,40" font="Regular;22" halign="center" transparent="1"/>\n\t</screen>'
def __init__(self, session):
Screen.__init__(self, session)
Screen.setTitle(self, _('Mount Manager'))
self['key_red'] = Label(_('Initialize'))
self['key_green'] = Label(_('SetupMounts'))
self['key_yellow'] = Label(_('Unmount'))
self['key_blue'] = Label(_('Exit'))
self['lab1'] = Label()
self.onChangedEntry = []
self.list = []
self['list'] = List(self.list)
self['list'].onSelectionChanged.append(self.selectionChanged)
self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'MenuActions'], {'back': self.close,
'red': self.Format,
'green': self.SetupMounts,
'yellow': self.Unmount,
'blue': self.Mount})
self.activityTimer = eTimer()
self.activityTimer.timeout.get().append(self.updateList2)
self.updateList()
self.onShown.append(self.setWindowTitle)
def setWindowTitle(self):
self.setTitle(_('Mount Manager'))
def createSummary(self):
return DeviceManagerSummary
def selectionChanged(self):
if len(self.list) == 0:
return
self.sel = self['list'].getCurrent()
seldev = self.sel
if self.sel:
try:
name = str(self.sel[0])
desc = str(self.sel[1].replace('\t', ' '))
except:
name = ''
desc = ''
else:
name = ''
desc = ''
for cb in self.onChangedEntry:
cb(name, desc)
def updateList(self, result = None, retval = None, extra_args = None):
scanning = _('Wait please while scanning for devices...')
self['lab1'].setText(scanning)
self.activityTimer.start(10)
def updateList2(self):
self.activityTimer.stop()
self.list = []
list2 = []
f = open('/proc/partitions', 'r')
for line in f.readlines():
parts = line.strip().split()
if not parts:
continue
device = parts[3]
if not re.search('sd[a-z][1-9]', device):
continue
if device in list2:
continue
self.buildMy_rec(device)
list2.append(device)
f.close()
self['list'].list = self.list
self['lab1'].hide()
def buildMy_rec(self, device):
mypath = SkinPath()
device2 = re.sub('[0-9]', '', device)
devicetype = path.realpath('/sys/block/' + device2 + '/device')
d2 = device
name = _('HARD DISK: ')
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
model = file('/sys/block/' + device2 + '/device/model').read()
model = str(model).replace('\n', '')
des = ''
if devicetype.find('usb') != -1:
name = _('USB: ')
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
name = name + model
self.Console = Console()
self.Console.ePopen("sfdisk -l /dev/sd? | grep swap | awk '{print $(NF-9)}' >/tmp/devices.tmp")
sleep(0.5)
f = open('/tmp/devices.tmp', 'r')
swapdevices = f.read()
f.close()
if path.exists('/tmp/devices.tmp'):
remove('/tmp/devices.tmp')
swapdevices = swapdevices.replace('\n', '')
swapdevices = swapdevices.split('/')
f = open('/proc/mounts', 'r')
for line in f.readlines():
if line.find(device) != -1:
parts = line.strip().split()
d1 = parts[1]
dtype = parts[2]
rw = parts[3]
break
continue
elif device in swapdevices:
parts = line.strip().split()
d1 = _('None')
dtype = 'swap'
rw = _('None')
break
continue
else:
d1 = _('None')
dtype = _('unavailable')
rw = _('None')
f.close()
size = Harddisk(device).diskSize()
if float(size) / 1024 / 1024 >= 1:
des = _('Size: ') + str(round(float(size) / 1024 / 1024, 2)) + _('TB')
elif size / 1024 >= 1:
des = _('Size: ') + str(round(float(size) / 1024, 2)) + _('GB')
elif size >= 1:
des = _('Size: ') + str(size) + _('MB')
else:
des = _('Size: ') + _('unavailable')
if des != '':
if rw.startswith('rw'):
rw = ' R/W'
elif rw.startswith('ro'):
rw = ' R/O'
else:
rw = ''
des += '\t' + _('Mount: ') + d1 + '\n' + _('Device: ') + '/dev/' + device + '\t' + _('Type: ') + dtype + rw
png = LoadPixmap(mypixmap)
res = (name, des, png)
self.list.append(res)
def SetupMounts(self):
self.session.openWithCallback(self.updateList, DevicesConf)
def Format(self):
from Screens.HarddiskSetup import HarddiskSelection
self.session.openWithCallback(self.updateList, HarddiskSelection)
def Mount(self):
self.close()
def Unmount(self):
sel = self['list'].getCurrent()
if sel:
des = sel[1]
des = des.replace('\n', '\t')
parts = des.strip().split('\t')
mountp = parts[1].replace(_('Mount: '), '')
device = parts[2].replace(_('Device: '), '')
system('umount ' + mountp)
try:
mounts = open('/proc/mounts')
mountcheck = mounts.readlines()
mounts.close()
for line in mountcheck:
parts = line.strip().split(' ')
if path.realpath(parts[0]).startswith(device):
self.session.open(MessageBox, _("Can't unmount partition, make sure it is not being used for swap or record/timeshift paths"), MessageBox.TYPE_INFO, timeout=10)
except IOError:
return -1
self.updateList()
def saveMypoints(self):
sel = self['list'].getCurrent()
if sel:
parts = sel[1].split()
self.device = parts[5]
self.mountp = parts[3]
self.Console.ePopen('umount ' + self.device)
if self.mountp.find('/media/hdd') < 0:
self.Console.ePopen('umount /media/hdd')
self.Console.ePopen('/sbin/blkid | grep ' + self.device, self.add_fstab, [self.device, self.mountp])
else:
self.session.open(MessageBox, _('This Device is already mounted as HDD.'), MessageBox.TYPE_INFO, timeout=10, close_on_any_key=True)
def add_fstab(self, result = None, retval = None, extra_args = None):
self.device = extra_args[0]
self.mountp = extra_args[1]
self.device_uuid = 'UUID=' + result.split('UUID=')[1].split(' ')[0].replace('"', '')
if not path.exists(self.mountp):
mkdir(self.mountp, 493)
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if '/media/hdd' not in l ])
rename('/etc/fstab.tmp', '/etc/fstab')
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device not in l ])
rename('/etc/fstab.tmp', '/etc/fstab')
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device_uuid not in l ])
rename('/etc/fstab.tmp', '/etc/fstab')
out = open('/etc/fstab', 'a')
line = self.device_uuid + '\t/media/hdd\tauto\tdefaults\t0 0\n'
out.write(line)
out.close()
self.Console.ePopen('mount -a', self.updateList)
def restBo(self, answer):
if answer is True:
self.session.open(TryQuitMainloop, 2)
else:
self.updateList()
self.selectionChanged()
class DevicesConf(Screen, ConfigListScreen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen name="DevicesConf" position="center,center" size="976,728" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="109,16" size="251,63" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="551,15" size="257,63" alphatest="on" />\n\t\t<widget name="key_red" position="110,13" zPosition="1" size="252,67" font="Regular;35" halign="center" valign="center" backgroundColor="#FF0000" transparent="1" />\n\t\t<widget name="key_green" position="549,15" zPosition="1" size="262,65" font="Regular;35" halign="center" valign="center" backgroundColor="#008000" transparent="1" />\n\t\t<widget name="config" position="31,113" size="898,489" font="Regular;25" scrollbarMode="showOnDemand" />\n\t\t<widget name="Linconn" position="34,621" size="904,32" font="Regular;33" halign="center" valign="center" backgroundColor="#FF0000" />\n\t</screen>'
else:
skin = '<screen position="center,center" size="640,460" title="Choose where to mount your devices to:">\n\t\t<ePixmap pixmap="skin_default/buttons/red.png" position="25,0" size="140,40" alphatest="on" />\n\t\t<ePixmap pixmap="skin_default/buttons/green.png" position="175,0" size="140,40" alphatest="on" />\n\t\t<widget name="key_red" position="25,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />\n\t\t<widget name="key_green" position="175,0" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />\n\t\t<widget name="config" position="30,60" size="580,275" scrollbarMode="showOnDemand"/>\n\t\t<widget name="Linconn" position="30,375" size="580,20" font="Regular;18" halign="center" valign="center" backgroundColor="#9f1313"/>\n\t</screen>'
def __init__(self, session):
Screen.__init__(self, session)
self.list = []
ConfigListScreen.__init__(self, self.list)
Screen.setTitle(self, _('Choose where to mount your devices to:'))
self['key_green'] = Label(_('Save'))
self['key_red'] = Label(_('Cancel'))
self['Linconn'] = Label(_('Wait please while scanning your %s %s devices...n\\ Szukam dysku...'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'green': self.saveMypoints,
'red': self.close,
'back': self.close})
self.updateList()
def updateList(self):
self.list = []
list2 = []
self.Console = Console()
self.Console.ePopen("sfdisk -l /dev/sd? | grep swap | awk '{print $(NF-9)}' >/tmp/devices.tmp")
sleep(0.5)
f = open('/tmp/devices.tmp', 'r')
swapdevices = f.read()
f.close()
if path.exists('/tmp/devices.tmp'):
remove('/tmp/devices.tmp')
swapdevices = swapdevices.replace('\n', '')
swapdevices = swapdevices.split('/')
f = open('/proc/partitions', 'r')
for line in f.readlines():
parts = line.strip().split()
if not parts:
continue
device = parts[3]
if not re.search('sd[a-z][1-9]', device):
continue
if device in list2:
continue
if device in swapdevices:
continue
self.buildMy_rec(device)
list2.append(device)
f.close()
self['config'].list = self.list
self['config'].l.setList(self.list)
self['Linconn'].hide()
def buildMy_rec(self, device):
mypath = SkinPath()
device2 = re.sub('[0-9]', '', device)
devicetype = path.realpath('/sys/block/' + device2 + '/device')
d2 = device
name = _('HARD DISK: ')
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_hdd.png'
model = file('/sys/block/' + device2 + '/device/model').read()
model = str(model).replace('\n', '')
des = ''
if devicetype.find('usb') != -1:
name = _('USB: ')
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/dev_usb.png'
name = name + model
f = open('/proc/mounts', 'r')
for line in f.readlines():
if line.find(device) != -1:
parts = line.strip().split()
d1 = parts[1]
dtype = parts[2]
break
continue
else:
d1 = _('None')
dtype = _('unavailable')
f.close()
size = Harddisk(device).diskSize()
if float(size) / 1024 / 1024 >= 1:
des = _('Size: ') + str(round(float(size) / 1024 / 1024, 2)) + _('TB')
elif size / 1024 >= 1:
des = _('Size: ') + str(round(float(size) / 1024, 2)) + _('GB')
elif size >= 1:
des = _('Size: ') + str(size) + _('MB')
else:
des = _('Size: ') + _('unavailable')
item = NoSave(ConfigSelection(default='/media/' + device, choices=[('/media/' + device, '/media/' + device),
('/media/hdd', '/media/hdd'),
('/media/hdd2', '/media/hdd2'),
('/media/hdd3', '/media/hdd3'),
('/media/usb', '/media/usb'),
('/media/usb1', '/media/usb1'),
('/media/usb2', '/media/usb2'),
('/media/usb3', '/media/usb3')]))
if dtype == 'Linux':
dtype = 'ext3'
else:
dtype = 'auto'
item.value = d1.strip()
text = name + ' ' + des + ' /dev/' + device
res = getConfigListEntry(text, item, device, dtype)
if des != '' and self.list.append(res):
pass
def saveMypoints(self):
system('mount media -a')
system('cp -r -f /etc/fstab /etc/fstab.org')
self.Console = Console()
mycheck = False
for x in self['config'].list:
self.device = x[2]
self.mountp = x[1].value
self.type = x[3]
self.Console.ePopen('umount ' + self.device)
self.Console.ePopen('/sbin/blkid | grep ' + self.device + ' && opkg list-installed ntfs-3g', self.add_fstab, [self.device, self.mountp])
message = _('Continues mounting equipment...')
ybox = self.session.openWithCallback(self.delay, MessageBox, message, type=MessageBox.TYPE_INFO, timeout=5, enable_input=False)
ybox.setTitle(_('Please, wait....'))
def delay(self, val):
#if fileExists('/etc/init.d/volatile-media.sh'):
#system('mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org')
message = _('Completed assembly of disks.\nReturn to installation ?')
ybox = self.session.openWithCallback(self.myclose, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('MOUNTING....'))
def myclose(self, answer):
if answer is True:
self.messagebox = self.session.open(MessageBox, _('Return to installation...'), MessageBox.TYPE_INFO)
self.close()
else:
self.messagebox = self.session.open(MessageBox, _('Return to installation...'), MessageBox.TYPE_INFO)
self.close()
def add_fstab(self, result = None, retval = None, extra_args = None):
print '[MountManager] RESULT:', result
if result:
self.device = extra_args[0]
self.mountp = extra_args[1]
self.device_uuid = 'UUID=' + result.split('UUID=')[1].split(' ')[0].replace('"', '')
self.device_type = result.split('TYPE=')[1].split(' ')[0].replace('"', '')
if self.device_type.startswith('ext'):
self.device_type = 'auto'
elif self.device_type.startswith('ntfs') and result.find('ntfs-3g') != -1:
self.device_type = 'ntfs-3g'
elif self.device_type.startswith('ntfs') and result.find('ntfs-3g') == -1:
self.device_type = 'ntfs'
if not path.exists(self.mountp):
mkdir(self.mountp, 493)
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device not in l ])
rename('/etc/fstab.tmp', '/etc/fstab')
file('/etc/fstab.tmp', 'w').writelines([ l for l in file('/etc/fstab').readlines() if self.device_uuid not in l ])
rename('/etc/fstab.tmp', '/etc/fstab')
out = open('/etc/fstab', 'a')
line = self.device_uuid + '\t' + self.mountp + '\t' + self.device_type + '\tdefaults\t0 0\n'
out.write(line)
out.close()
system('cp -r -f /etc/fstab /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files')
self.device_uuid2 = result.split('UUID=')[1].split(' ')[0].replace('"', '')
if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager2'):
out1 = open('/etc/devicemanager.cfg', 'a')
line1 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
out1.write(line1)
out1.close()
elif fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager'):
out2 = open('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg', 'a')
line2 = '"' + self.device_uuid2 + '"' + ':' + self.mountp + '\n'
out2.write(line2)
out2.close()
system('mount -a')
class DeviceManagerSummary(Screen):
def __init__(self, session, parent):
Screen.__init__(self, session, parent=parent)
self['entry'] = StaticText('')
self['desc'] = StaticText('')
self.onShow.append(self.addWatcher)
self.onHide.append(self.removeWatcher)
def addWatcher(self):
self.parent.onChangedEntry.append(self.selectionChanged)
self.parent.selectionChanged()
def removeWatcher(self):
self.parent.onChangedEntry.remove(self.selectionChanged)
def selectionChanged(self, name, desc):
self['entry'].text = name
self['desc'].text = desc
def SkinPath():
myskinpath = resolveFilename(SCOPE_CURRENT_SKIN, '')
if myskinpath == '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/':
myskinpath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/'
return myskinpath

409
NeoBoot/files/images.py Normal file
View File

@@ -0,0 +1,409 @@
# -*- coding: utf-8 -*-
#from __future__ import print_function
from Plugins.Extensions.NeoBoot.__init__ import _
from Components.Button import Button
from Components.ActionMap import ActionMap
from Components.MenuList import MenuList
from Components.Sources.List import List
from Components.PluginList import resolveFilename
from Components.Task import Task, Job, job_manager, Condition
from Screens.Console import Console
from Screens.MessageBox import MessageBox
from Screens.Screen import Screen
from Screens.Console import Console
from Screens.TaskView import JobView
from Tools.Downloader import downloadWithProgress
from Tools.LoadPixmap import LoadPixmap
from Tools.Directories import fileExists, SCOPE_PLUGINS
import urllib2
import os
import shutil
import math
from Plugins.Extensions.NeoBoot.files.stbbranding import getBoxType, getMachineBuild, getTypBoxa
class ChooseOnLineImage(Screen):
skin = """
<screen name="ChooseOnLineImage" position="center,center" size="880,620" title="%s" >
<widget source="list" render="Listbox" position="10,0" size="870,610" scrollbarMode="showOnDemand" transparent="1">
<convert type="TemplatedMultiContent">
{"template": [
MultiContentEntryText(pos = (0, 10), size = (830, 30), font=0, flags = RT_HALIGN_RIGHT, text = 0),
MultiContentEntryPixmapAlphaBlend(pos = (10, 0), size = (480, 60), png = 1),
MultiContentEntryText(pos = (0, 40), size = (830, 30), font=1, flags = RT_VALIGN_TOP | RT_HALIGN_RIGHT, text = 3),
],
"fonts": [gFont("Regular", 28),gFont("Regular", 20)],
"itemHeight": 65
}
</convert>
</widget>
</screen>""" % (_('NeoBoot - Download OnLine Images'))
def __init__(self, session):
Screen.__init__(self, session)
self.list = []
self['list'] = List(self.list)
self.updateList()
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
'back': self.close})
def KeyOk(self):
self.sel = self['list'].getCurrent()
returnValue = self.sel[2]
if returnValue is not None:
self.session.openWithCallback(self.quit, DownloadOnLineImage, returnValue)
return
def updateList(self):
self.list = []
mypath = resolveFilename(SCOPE_PLUGINS)
mypath = mypath + 'Extensions/NeoBoot/software/png/'
mypixmap = mypath + 'openatv.png'
png = LoadPixmap(mypixmap)
name = _('OpenATV-6.0')
desc = _('Download latest OpenATV Image')
idx = 'openatv'
res = (name,
png,
idx,
desc)
self.list.append(res)
mypixmap = mypath + 'openpli.png'
png = LoadPixmap(mypixmap)
name = _('OpenPLi')
desc = _('Download latest OpenPLi Image')
idx = 'openpli'
res = (name,
png,
idx,
desc)
self.list.append(res)
mypixmap = mypath + 'openvix.png'
png = LoadPixmap(mypixmap)
name = _('OpenVIX')
desc = _('Download latest OpenVIX Image')
idx = 'openvix'
res = (name,
png,
idx,
desc)
self.list.append(res)
self['list'].list = self.list
def quit(self):
self.close()
class DownloadOnLineImage(Screen):
skin = '\n\t<screen position="center,center" size="560,500" title="NeoBoot - Download Image">\n\t\t<ePixmap position="0,460" zPosition="1" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />\n\t\t<ePixmap position="140,460" zPosition="1" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />\n\t\t<widget name="key_red" position="0,460" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t\t<widget name="key_green" position="140,460" zPosition="2" size="140,40" valign="center" halign="center" font="Regular;21" transparent="1" shadowColor="black" shadowOffset="-1,-1" />\n\t\t<widget name="imageList" position="10,10" zPosition="1" size="550,450" font="Regular;20" scrollbarMode="showOnDemand" transparent="1" />\n\t</screen>'
def __init__(self, session, distro):
Screen.__init__(self, session)
self.session = session
Screen.setTitle(self, _('NeoBoot - Download Image'))
self['key_green'] = Button(_('Install'))
self['key_red'] = Button(_('Exit'))
self.filename = None
self.imagelist = []
self.simulate = False
self.imagePath = '/media/neoboot/ImagesUpload'
self.distro = distro
if self.distro == 'openatv':
self.feed = 'openatv'
self.feedurl = 'http://images.mynonpublic.com/openatv/6.0'
elif self.distro == 'openpli':
self.feed = 'openpli'
self.feedurl = 'http://openpli.org/download'
elif self.distro == 'openvix':
self.feed = 'openvix'
self.feedurl = 'http://www.openvix.co.uk'
elif self.distro == 'opendroid':
self.feed = 'opendroid'
self.feedurl = 'http://images.opendroid.org/5.5/'
else:
self.close()
self['imageList'] = MenuList(self.imagelist)
self['actions'] = ActionMap(['OkCancelActions', 'ColorActions'], {'green': self.green,
'red': self.quit,
'cancel': self.quit}, -2)
self.onLayoutFinish.append(self.layoutFinished)
return
def quit(self):
self.close()
def box(self):
box = getBoxType()
urlbox = getBoxType()
if self.distro == 'openatv':
if box in ('xpeedlx1', 'xpeedlx2'):
box = 'xpeedlx'
req = urllib2.Request(self.feedurl)
stb = 'no Image for this Box on this Side'
try:
response = urllib2.urlopen(req)
tmp = response.readlines()
for line in tmp:
if '<a href="' in line:
if box in line:
stb = '1'
break
except:
stb = 'no Image for this Box on this Side'
if self.distro == 'openvix':
if box in ('xpeedlx1', 'xpeedlx2', 'xpeedlx3', 'uniboxhd1', 'uniboxhd2', 'uniboxhd3', 'vusolo2', 'vusolose', 'vuultimo', 'vuuno', 'vuduo2', 'vuduo', 'sf8', 'mutant2400', 'gbquad', 'gbquadplus', 'gb800ueplus', 'gb800seplus', 'gb800se'):
if box in 'vusolo2':
box = 'vusolo2'
urlbox = 'Vu%2BSolo2'
stb = '1'
elif box in 'vusolose':
box = 'vusolose'
urlbox = 'Vu%2BSolose'
stb = '1'
elif box in 'vuultimo':
box = 'vuultimo'
urlbox = 'VuUltimo'
stb = '1'
elif box in 'vuuno':
box = 'vuuno'
urlbox = 'Vu%2BUno'
stb = '1'
elif box in 'vuduo2':
box = 'vuduo2'
urlbox = 'Vu%2BDuo2'
stb = '1'
elif box in 'vuduo':
box = 'vuduo'
urlbox = 'Vu%2BDuo'
stb = '1'
elif box in 'mutant2400':
box = 'mutant2400'
urlbox = 'Mutant-HD2400'
stb = '1'
elif box in 'gbquad':
box = 'gbquad'
urlbox = 'GiGaBlue-HD-QUAD'
stb = '1'
elif box in 'gbquadplus':
box = 'gbquadplus'
urlbox = 'GiGaBlue-HD-QUAD-PLUS'
stb = '1'
elif box in 'gb800se':
box = 'gb800se'
urlbox = 'GiGaBlue-HD800SE'
stb = '1'
elif box in 'gb800ueplus':
box = 'gb800ueplus'
urlbox = 'GiGaBlue-HD800UE-PLUS'
stb = '1'
elif box in 'gb800seplus':
box = 'gb800seplus'
urlbox = 'GiGaBlue-HD800SE-PLUS'
stb = '1'
else:
stb = 'no Image for this Box on this Side'
elif self.distro == 'openpli':
if box in ('vusolo2', 'vusolose', 'vuultimo', 'vuuno', 'vuduo2', 'vuduo', 'mutant2400', 'quadbox2400', 'xp1000', 'formuler1', 'formuler3'):
if box in 'vusolo2':
box = 'vusolo2'
urlbox = 'vuplus/vusolo2/'
stb = '1'
if box in 'vusolose':
box = 'vusolose'
urlbox = 'vuplus/vusolose/'
stb = '1'
elif box in 'vuultimo':
box = 'vuultimo'
urlbox = 'vuplus/vuultimo/'
stb = '1'
elif box in 'vuuno':
box = 'vuuno'
urlbox = 'vuplus/vuuno/'
stb = '1'
elif box in 'vuduo2':
box = 'vuduo2'
urlbox = 'vuplus/vuduo2/'
stb = '1'
elif box in 'vuduo':
box = 'vuduo'
urlbox = 'vuplus/vuduo/'
stb = '1'
else:
stb = 'no Image for this Box on this Side'
return (box, urlbox, stb)
def green(self, ret = None):
sel = self['imageList'].l.getCurrentSelection()
if sel == None:
print 'Nothing to select !!'
return
else:
file_name = self.imagePath + '/' + sel
self.filename = file_name
self.sel = sel
box = self.box()
self.hide()
if self.distro == 'openvix':
typboxa = getTypBoxa()
url = self.feedurl + '/openvix-builds/' + typboxa + '/' + sel
elif self.distro == 'openpli':
url = 'http://downloads.pli-images.org/builds/' + box[0] + '/' + sel
print '[NeoBoot] Image download url: ', url
try:
u = urllib2.urlopen(url)
except:
self.session.open(MessageBox, _('The URL to this image is not correct !!'), type=MessageBox.TYPE_ERROR)
self.close()
f = open(file_name, 'wb')
f.close()
meta = u.info()
file_size = int(meta.getheaders('Content-Length')[0])
print 'Downloading: %s Bytes: %s' % (sel, file_size)
job = ImageDownloadJob(url, file_name, sel)
job.afterEvent = 'close'
job_manager.AddJob(job)
job_manager.failed_jobs = []
self.session.openWithCallback(self.ImageDownloadCB, JobView, job, backgroundable=False, afterEventChangeable=False)
return
return
def ImageDownloadCB(self, ret):
if ret:
return
elif job_manager.active_job:
job_manager.active_job = None
self.close()
return
else:
if len(job_manager.failed_jobs) == 0:
self.session.openWithCallback(self.startInstall, MessageBox, _('Do you want to install this image now?'), default=False)
else:
self.session.open(MessageBox, _('Download Failed !!'), type=MessageBox.TYPE_ERROR)
return
return
def startInstall(self, ret = None):
if ret:
from Plugins.Extensions.NeoBoot.plugin import InstalacjaImage
self.session.openWithCallback(self.quit, InstalacjaImage)
else:
self.close()
def layoutFinished(self):
box = self.box()[0]
urlbox = self.box()[1]
stb = self.box()[2]
print '[NeoBoot] FEED URL: ', self.feedurl
print '[NeoBoot] BOXTYPE: ', box
print '[NeoXBoot] URL-BOX: ', urlbox
self.imagelist = []
if stb != '1':
url = self.feedurl
elif self.distro in 'openatv':
url = '%s/index.php?open=%s' % (self.feedurl, box)
elif self.distro == 'openvix':
typboxa = getTypBoxa()
url = '%s/openvix-builds/%s' % (self.feedurl, typboxa)
elif self.distro == 'openpli':
url = '%s/%s' % (self.feedurl, urlbox)
else:
url = self.feedurl
print '[NeoBoot] URL: ', url
req = urllib2.Request(url)
try:
response = urllib2.urlopen(req)
except urllib2.URLError as e:
print 'URL ERROR: %s' % e
return
try:
the_page = response.read()
except urllib2.HTTPError as e:
print 'HTTP download ERROR: %s' % e.code
return
lines = the_page.split('\n')
tt = len(box)
if stb == '1':
for line in lines:
if line.find("<a href='%s/" % box) > -1:
t = line.find("<a href='%s/" % box)
if self.feed in 'openatv':
self.imagelist.append(line[t + tt + 10:t + tt + tt + 39])
elif line.find('<a href="http://downloads.pli-images.org/builds/' + box + '/') > -1:
line = line[-43 - tt:-9]
self.imagelist.append(line)
elif line.find('href="openvix-') > -1:
t4 = line.find('openvix-')
t5 = line.find('.zip"')
self.imagelist.append(line[t4:t5 + 4])
else:
self.imagelist.append(stb)
self['imageList'].l.setList(self.imagelist)
class ImageDownloadJob(Job):
def __init__(self, url, filename, file):
Job.__init__(self, _('Downloading %s' % file))
ImageDownloadTask(self, url, filename)
class DownloaderPostcondition(Condition):
def check(self, task):
return task.returncode == 0
def getErrorMessage(self, task):
return self.error_message
class ImageDownloadTask(Task):
def __init__(self, job, url, path):
Task.__init__(self, job, _('Downloading'))
self.postconditions.append(DownloaderPostcondition())
self.job = job
self.url = url
self.path = path
self.error_message = ''
self.last_recvbytes = 0
self.error_message = None
self.download = None
self.aborted = False
return
def run(self, callback):
self.callback = callback
self.download = downloadWithProgress(self.url, self.path)
self.download.addProgress(self.download_progress)
self.download.start().addCallback(self.download_finished).addErrback(self.download_failed)
print '[ImageDownloadTask] downloading', self.url, 'to', self.path
def abort(self):
print '[ImageDownloadTask] aborting', self.url
if self.download:
self.download.stop()
self.aborted = True
def download_progress(self, recvbytes, totalbytes):
if recvbytes - self.last_recvbytes > 10000:
self.progress = int(100 * (float(recvbytes) / float(totalbytes)))
self.name = _('Downloading') + ' ' + '%d of %d kBytes' % (recvbytes / 1024, totalbytes / 1024)
self.last_recvbytes = recvbytes
def download_failed(self, failure_instance = None, error_message = ''):
self.error_message = error_message
if error_message == '' and failure_instance is not None:
self.error_message = failure_instance.getErrorMessage()
Task.processFinished(self, 1)
return
def download_finished(self, string = ''):
if self.aborted:
self.finish(aborted=True)
else:
Task.processFinished(self, 0)

View File

@@ -0,0 +1,16 @@
#!/bin/sh
#DESCRIPTION=This script by gutosie
opkg update
opkg install --force-reinstall mtd-utils
opkg install --force-reinstall mtd-utils-ubifs
opkg install --force-reinstall mtd-utils-jffs2
opkg install --force-reinstall kernel-module-nandsim
opkg install --force-reinstall python-subprocess
opkg install --force-reinstall python-argparse
opkg install --force-reinstall curl
opkg install --force-reinstall liblzo2-2
opkg install --force-reinstall python-imaging
opkg install --force-maintainer --force-reinstall --force-overwrite kernel-image
opkg configure update-modules
cd

View File

@@ -0,0 +1,8 @@
#!/bin/sh
#DESCRIPTION=This script by gutosie
touch /tmp/.init_reboot
if [ -f /etc/init.d/neobootmount.sh ] ; then
sync; rm -f /etc/init.d/neobootmount.sh;
fi

View File

@@ -0,0 +1,424 @@
# -*- coding: utf-8 -*-
#from __future__ import print_function
#from Plugins.Extensions.NeoBoot.__init__ import _ , Log, PluginPath
import sys
import os
import time
from Tools.Directories import fileExists, SCOPE_PLUGINS
def Log(param = ''):
global LogFileObj
#first close object if exists
if param.lower() in ['open','write','append','close']:
if LogFileObj is not None:
LogFileObj.close()
if LogFileObj.closed:
LogFileObj = None
try:
with open('/tmp/NeoBoot.log','a') as f:
f.write('LogFile closed properly\n')
f.close()
except Exception:
print("ERROR closing LogFile!!!")
else:
print("ERROR closing LogFile!!!")
#second create object if does not exist
if LogFileObj is None:
if param.lower() in ['open','write']:
LogFileObj = open(LogFile, "w")
elif param.lower() in ['append']:
LogFileObj = open(LogFile, "a")
elif param.lower() in ['close']:
pass
elif param.lower() in ['flush']:
LogFileObj.flush()
return LogFileObj
def clearMemory():
with open("/proc/sys/vm/drop_caches", "w") as f:
f.write("1\n")
f.close()
###############################################
#typ procesora arm lub mips
def getCPUtype():
cpu='UNKNOWN'
if os.path.exists('/proc/cpuinfo'):
with open('/proc/cpuinfo', 'r') as f:
lines = f.read()
f.close()
if lines.find('ARMv7') != -1:
cpu='ARMv7'
elif lines.find('mips') != -1:
cpu='MIPS'
return cpu
#zwraca typ chipa prcesora
def getCPUSoC():
chipset='UNKNOWN'
if os.path.exists('/proc/stb/info/chipset'):
with open('/proc/stb/info/chipset', 'r') as f:
chipset = f.readline().strip()
f.close()
if chipset == '7405(with 3D)':
chipset = '7405'
return chipset
def getCPUSoCModel():
devicetree='UNKNOWN'
if os.path.exists('/proc/device-tree/model'):
with open('/proc/device-tree/model', 'r') as f:
devicetree = f.readline().strip()
f.close()
return devicetree
#zwraca wybrane image w neoboot do uruchomienia
def getImageNeoBoot():
imagefile='UNKNOWN'
if os.path.exists('/media/neoboot/ImageBoot/.neonextboot'):
with open('/media/neoboot/ImageBoot/.neonextboot', 'r') as f:
imagefile = f.readline().strip()
f.close()
return imagefile
#zwraca model vuplus
def getBoxVuModel():
vumodel='UNKNOWN'
if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"):
with open('/proc/stb/info/vumodel', 'r') as f:
vumodel = f.readline().strip()
f.close()
elif fileExists("/proc/stb/info/boxtype") and not fileExists("/proc/stb/info/vumodel"):
with open('/proc/stb/info/boxtype', 'r') as f:
vumodel = f.readline().strip()
f.close()
return vumodel
def getVuModel():
if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"):
brand = "Vu+"
f = open("/proc/stb/info/vumodel",'r')
procmodel = f.readline().strip()
f.close()
model = procmodel.title().replace("olose", "olo SE").replace("olo2se", "olo2 SE").replace("2", "²")
return model
#zwraca nazwe stb z pliku hostname
def getBoxHostName():
if os.path.exists('/etc/hostname'):
with open('/etc/hostname', 'r') as f:
myboxname = f.readline().strip()
f.close()
return myboxname
#zwraca vuplus/vumodel
def getTunerModel(): #< neoboot.py
BOX_NAME = ''
if os.path.isfile('/proc/stb/info/vumodel') and not os.path.isfile("/proc/stb/info/boxtype"):
BOX_NAME = open('/proc/stb/info/vumodel').read().strip()
ImageFolder = 'vuplus/%s' % BOX_NAME
elif os.path.isfile('proc/stb/info/boxtype'):
BOX_NAME = open('/proc/stb/info/boxtype').read().strip()
elif os.path.isfile('proc/stb/info/model') and not os.path.isfile("/proc/stb/info/mid"):
BOX_NAME = open('/proc/stb/info/model').read().strip()
return BOX_NAME
def getBoxModelVU():
try:
if os.path.isfile('/proc/stb/info/vumodel'):
return open('/proc/stb/info/vumodel').read().strip().upper()
except:
pass
return _('unavailable')
#zwraca strukture folderu zip - vuplus/vumodel
def getImageFolder():
if os.path.isfile('/proc/stb/info/vumodel'):
BOX_NAME = getBoxModelVU()
ImageFolder = 'vuplus/' + BOX_NAME
return ImageFolder
#zwraca nazwe kernela z /lib/modules
def getKernelVersion():
try:
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
except:
return _('unknown')
# czysci pamiec
def runCMDS(cmdsList):
clearMemory()
if isinstance(cmdsList, (list, tuple)):
myCMD = '\n'.join(cmdsList)# + '\n'
ret = os.system(myCMD)
return rett
#####################################
def getImageDistro():
if fileExists('/etc/issue.net'):
try:
obraz = open('/etc/issue.net', 'r').readlines()
imagetype = obraz[0][:-1]
image = imagetype[0:-2]
return image
except:
False
elif fileExists('/etc/vtiversion.info'):
image = 'VTI'
return image
def getKernelVersionString():
try:
result = popen('uname -r', 'r').read().strip('\n').split('-')
kernel_version = result[0]
return kernel_version
except:
pass
return 'unknown'
def getKernelImageVersion():
try:
from glob import glob
lines = open(glob('/var/lib/opkg/info/kernel-*.control')[0], 'r').readlines()
kernelimage = lines[1][:-1]
except:
kernelimage = getKernelVersionString
return kernelimage
def getTypBoxa():
if not fileExists('/etc/typboxa'):
os.system('touch /etc/typboxa')
f2 = open('/etc/hostname', 'r')
mypath2 = f2.readline().strip()
f2.close()
if mypath2 == 'vuuno':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Uno ')
out.close()
elif mypath2 == 'vuultimo':
out = open('/etc/typboxa', 'w')
out.write('Vu+Ultimo ')
out.close()
elif mypath2 == 'vuduo':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Duo ')
out.close()
elif mypath2 == 'vuduo2':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Duo2 ')
out.close()
elif mypath2 == 'vusolo':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Solo ')
out.close()
elif mypath2 == 'vusolo2':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Solo2 ')
out.close()
elif mypath2 == 'vusolose':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Solo-SE ')
out.close()
elif mypath2 == 'vuvzero':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Zero ')
out.close()
elif mypath2 == 'vuuno4k':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Uno4k ')
out.close()
elif mypath2 == 'vuultimo4k':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Ultimo4k ')
out.close()
elif mypath2 == 'vusolo4k':
out = open('/etc/typboxa ', 'w')
out.write('Vu+Solo4k ')
out.close()
elif mypath2 == 'mbmini':
out = open('/etc/typboxa', 'w')
out.write('Miraclebox-Mini ')
out.close()
elif mypath2 == 'mutant51':
out = open('/etc/typboxa', 'w')
out.write('Mutant 51 ')
out.close()
elif mypath2 == 'sf4008':
out = open('/etc/typboxa', 'w')
out.write('Ocatgon sf4008 ')
out.close()
try:
lines = open('/etc/typboxa', 'r').readlines()
typboxa = lines[0][:-1]
except:
typboxa = 'not detected'
return typboxa
def getImageVersionString():
try:
if os.path.isfile('/var/lib/opkg/status'):
st = os.stat('/var/lib/opkg/status')
else:
st = os.stat('/usr/lib/ipkg/status')
tm = time.localtime(st.st_mtime)
if tm.tm_year >= 2015:
return time.strftime('%Y-%m-%d %H:%M:%S', tm)
except:
pass
return _('unavailable')
def getModelString():
try:
file = open('/proc/stb/info/boxtype', 'r')
model = file.readline().strip()
file.close()
return model
except IOError:
return 'unknown'
def getChipSetString():
try:
f = open('/proc/stb/info/chipset', 'r')
chipset = f.read()
f.close()
return str(chipset.lower().replace('\n', '').replace('bcm', ''))
except IOError:
return 'unavailable'
def getCPUString():
try:
file = open('/proc/cpuinfo', 'r')
lines = file.readlines()
for x in lines:
splitted = x.split(': ')
if len(splitted) > 1:
splitted[1] = splitted[1].replace('\n', '')
if splitted[0].startswith('system type'):
system = splitted[1].split(' ')[0]
elif splitted[0].startswith('Processor'):
system = splitted[1].split(' ')[0]
file.close()
return system
except IOError:
return 'unavailable'
def getCpuCoresString():
try:
file = open('/proc/cpuinfo', 'r')
lines = file.readlines()
for x in lines:
splitted = x.split(': ')
if len(splitted) > 1:
splitted[1] = splitted[1].replace('\n', '')
if splitted[0].startswith('processor'):
if int(splitted[1]) > 0:
cores = 2
else:
cores = 1
file.close()
return cores
except IOError:
return 'unavailable'
def getEnigmaVersionString():
import enigma
enigma_version = enigma.getEnigmaVersionString()
if '-(no branch)' in enigma_version:
enigma_version = enigma_version[:-12]
return enigma_version
def getKernelVersionString():
try:
f = open('/proc/version', 'r')
kernelversion = f.read().split(' ', 4)[2].split('-', 2)[0]
f.close()
return kernelversion
except:
return _('unknown')
def getHardwareTypeString():
try:
if os.path.isfile('/proc/stb/info/boxtype'):
return open('/proc/stb/info/boxtype').read().strip().upper() + ' (' + open('/proc/stb/info/board_revision').read().strip() + '-' + open('/proc/stb/info/version').read().strip() + ')'
if os.path.isfile('/proc/stb/info/vumodel'):
return 'VU+' + open('/proc/stb/info/vumodel').read().strip().upper() + '(' + open('/proc/stb/info/version').read().strip().upper() + ')'
if os.path.isfile('/proc/stb/info/model'):
return open('/proc/stb/info/model').read().strip().upper()
except:
pass
return _('unavailable')
def getImageTypeString():
try:
return open('/etc/issue').readlines()[-2].capitalize().strip()[:-6]
except:
pass
return _('undefined')
def getMachineBuild():
try:
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
except:
return 'unknown'
def getVuBoxModel():
if fileExists('/proc/stb/info/vumodel'):
try:
l = open('/proc/stb/info/vumodel')
model = l.read()
l.close()
BOX_NAME = str(model.lower().strip())
l.close()
BOX_MODEL = 'vuplus'
except:
BOX_MODEL = 'not detected'
return BOX_MODEL
def getMachineProcModel():
if os.path.isfile('/proc/stb/info/vumodel'):
BOX_NAME = getBoxModel()
BOX_MODEL = getVuBoxModel()
if BOX_MODEL == 'vuplus':
if BOX_NAME == 'duo':
GETMACHINEPROCMODEL = 'bcm7335'
elif BOX_NAME == 'solo':
GETMACHINEPROCMODEL = 'bcm7325'
elif BOX_NAME == 'solo2':
GETMACHINEPROCMODEL = 'bcm7346'
elif BOX_NAME == 'solose':
GETMACHINEPROCMODEL = 'bcm7241'
elif BOX_NAME == 'ultimo' or BOX_NAME == 'uno':
GETMACHINEPROCMODEL = 'bcm7413'
elif BOX_NAME == 'zero':
GETMACHINEPROCMODEL = 'bcm7362'
elif BOX_NAME == 'duo2':
GETMACHINEPROCMODEL = 'bcm7425'
elif BOX_NAME == 'ultimo4k':
GETMACHINEPROCMODEL = 'bcm7444S'
elif BOX_NAME == 'uno4k':
GETMACHINEPROCMODEL = 'bcm7252S'
elif BOX_NAME == 'solo4k':
GETMACHINEPROCMODEL = 'bcm7376'
elif BOX_NAME == 'zero4K':
GETMACHINEPROCMODEL = 'bcm72604'
elif BOX_NAME == 'uno4kse':
GETMACHINEPROCMODEL = ''
procmodel = getMachineProcModel()
return procmodel
boxbrand = sys.modules[__name__]

View File

@@ -0,0 +1,582 @@
#!/bin/sh
#script - gutosie
KERNEL=`uname -r`
IMAGE=/media/neoboot/ImageBoot
IMAGENEXTBOOT=/media/neoboot/ImageBoot/.neonextboot
BOXNAME=$( cat /etc/hostname)
if [ -f /proc/stb/info/vumodel ]; then
VUMODEL=$( cat /proc/stb/info/vumodel )
fi
if [ -f /proc/stb/info/boxtype ]; then
BOXTYPE=$( cat /proc/stb/info/boxtype )
fi
if [ -f /proc/stb/info/chipset ]; then
CHIPSET=$( cat /proc/stb/info/chipset )
fi
if [ -f /tmp/zImage.ipk ]; then
rm -f /tmp/zImage.ipk
fi
if [ -f /tmp/zImage ]; then
rm -f /tmp/zImage
fi
if [ -f $IMAGENEXTBOOT ]; then
TARGET=`cat $IMAGENEXTBOOT`
else
TARGET=Flash
fi
if [ $TARGET = "Flash" ]; then
if [ -e /.multinfo ]; then
if [ ! -e /proc/stb/info/boxtype ]; then
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
if [ -f /proc/stb/info/vumodel ]; then
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Instalacja kernel do /dev/mmcblk0p1..."
if [ -d /proc/stb ] ; then
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p1
fi
true
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p1..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
cat /dev/mmcblk0p1 | grep "kernel"
fi
fi
elif [ $VUMODEL = "zero4k" ]; then
if [ -f /proc/stb/info/vumodel ]; then
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Instalacja kernel do /dev/mmcblk0p4..."
if [ -d /proc/stb ] ; then
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p4
fi
true
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p4..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
cat /dev/mmcblk0p4 | grep "kernel"
fi
fi
elif [ $VUMODEL = "duo4k" ]; then
if [ -f /proc/stb/info/vumodel ]; then
cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Instalacja kernel do /dev/mmcblk0p6..."
if [ -d /proc/stb ] ; then
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p6
fi
true
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p6..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
cat /dev/mmcblk0p6 | grep "kernel"
fi
fi
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ]; then
if [ -f /proc/stb/info/vumodel ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd2..."
flash_eraseall /dev/mtd2
sleep 2
echo "Instalacja kernel do /dev/mtd2..."
nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel do /dev/mtd2..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
fi
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
if [ -f /proc/stb/info/vumodel ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd1..."
sleep 2
flash_eraseall /dev/mtd1
echo "Instalacja kernel do /dev/mtd1..."
sleep 2
nandwrite -p /dev/mtd1 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel do /dev/mtd1..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
fi
fi
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "NEOBOOT is booting image from " $TARGET
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
sleep 5; reboot -d -f -h -i
fi
#MiracleBox Ultra - test
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
if [ -f /proc/stb/info/boxtype ]; then
#if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
#echo "Kasowanie kernel z /dev/mtd2..."
#flash_erase /dev/mtd2 0 0
#sleep 2
#echo "Instalacja kernel do /dev/mtd2..."
#nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
#update-alternatives --remove vmlinux vmlinux-$KERNEL || true
#fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
echo "Instalacja kernel do /dev/mtd2..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
fi
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "NEOBOOT is booting image from " $TARGET
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
sleep 5; reboot -d -f -h -i
##################
#Edision OSmini - test
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ] || [ $BOXNAME = "osmini" ]; then
if [ -f /proc/stb/info/vumodel ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd0..."
flash_eraseall /dev/mtd0
sleep 2
echo "Instalacja kernel do /dev/mtd0..."
nandwrite -p /dev/mtd0 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
echo "Instalacja kernel do /dev/mtd0..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
fi
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "NEOBOOT is booting image from " $TARGET
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
sleep 5; reboot -d -f -h -i
##################
fi
else
if [ ! -e /.multinfo ]; then
if [ ! -e /media/neoboot/ImagesUpload/.kernel/used_flash_kernel ]; then
if [ ! -e /proc/stb/info/boxtype ]; then
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Instalacja kernel do /dev/mmcblk0p1..."
if [ -d /proc/stb ] ; then
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p1
fi
true
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p1..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
cat /dev/mmcblk0p1 | grep "kernel"
fi
elif [ $VUMODEL = "zero4k" ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Instalacja kernel do /dev/mmcblk0p4..."
if [ -d /proc/stb ] ; then
dd if=/media/neoboot/ImagesUpload/.kernel/flash-kernel-$VUMODEL.bin conv=noerror conv=sync of=/dev/mmcblk0p4
fi
true
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk do /dev/mmcblk0p..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
cat /dev/mmcblk0p4 | grep "kernel"
fi
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd1..."
sleep 2
flash_eraseall /dev/mtd1
echo "Wgrywanie kernel do /dev/mtd1..."
sleep 2
nandwrite -p /dev/mtd1 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd2..."
sleep 2
flash_eraseall /dev/mtd2
echo "Wgrywanie kernel do /dev/mtd2..."
sleep 2
nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$VUMODEL.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
fi
fi
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo " NEOBOOT - zainstalowano kernel-image - " $TARGET "Za chwile nastapi restart systemu !!!"
sleep 5 ; reboot -d -f -h -i
fi
#Ultra
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
#if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
#echo "Kasowanie kernel z /dev/mtd2..."
#sleep 2
#flash_eraseall /dev/mtd2 0 0
#echo "Wgrywanie kernel do /dev/mtd2..."
#sleep 2
#nandwrite -p /dev/mtd2 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
#update-alternatives --remove vmlinux vmlinux-$KERNEL || true
#fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
sleep 5; reboot -d -f -h -i
#OSmini
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ]; then
if [ -e /media/neoboot/ImagesUpload/.kernel/vmlinux.gz ] ; then
echo "Kasowanie kernel z /dev/mtd0..."
sleep 2
flash_eraseall /dev/mtd0
echo "Wgrywanie kernel do /dev/mtd0..."
sleep 2
nandwrite -p /dev/mtd0 //media/neoboot/ImagesUpload/.kernel/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-$KERNEL || true
fi
if [ -e /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk ] ; then
echo "Przenoszenie pliku kernel do /tmp..."
sleep 2
cp -fR /media/neoboot/ImagesUpload/.kernel/zImage.$BOXNAME.ipk /tmp/zImage.ipk
echo "Instalacja kernel zImage.ipk..."
opkg install --force-reinstall --force-overwrite --force-downgrade --nodeps /tmp/zImage.ipk
fi
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
sleep 5; reboot -d -f -h -i
else
echo " NEOBOOT Start sytem - " $TARGET "Za chwile nastapi restart !!!"
sleep 5; reboot -d -f -h -i
fi
fi
fi
else
if [ -f /proc/stb/info/vumodel ]; then
if [ ! -e /proc/stb/info/boxtype ]; then
if [ $VUMODEL = "ultimo4k" ] || [ $VUMODEL = "solo4k" ] || [ $VUMODEL = "uno4k" ] || [ $VUMODEL = "uno4kse" ] ; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
echo "Instalacja kernel do /dev/mmcblk0p1..."
sleep 2
if [ -d /proc/stb ] ; then
dd if=/tmp/zImage of=/dev/mmcblk0p1
fi
rm -f /tmp/zImage
true
cat /dev/mmcblk0p1 | grep "kernel"1
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " VUPLUS z procesorem arm zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"
fi
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -fR $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
echo "Instalacja kernel do /dev/mmcblk0p1..."
sleep 2
if [ -d /proc/stb ] ; then
dd if=/tmp/zImage of=/dev/mmcblk0p1
fi
rm -f /tmp/zImage
true
cat /dev/mmcblk0p1 | grep "kernel"
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " VU+ zmieniony."
sleep 2
echo "Za chwile nastapi restart systemu..."
sleep 2
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
sleep 2
echo "Typ procesora: " $CHIPSET " STB"
fi
sleep 5; reboot -d -f -h -i
elif [ $VUMODEL = "zero4k" ]; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
sleep 5; reboot -d -f -h -i
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
echo "Instalacja kernel do /dev/mmcblk0p4..."
sleep 2
if [ -d /proc/stb ] ; then
dd if=/tmp/zImage of=/dev/mmcblk0p4
fi
rm -f /tmp/zImage
true
cat /dev/mmcblk0p4 | grep "kernel"
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " VUPLUS z procesorem arm zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"
sleep 5; reboot -d -f -h -i
fi
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -fR $IMAGE/$TARGET/boot/zImage.$VUMODEL /tmp/zImage
echo "Instalacja kernel do /dev/mmcblk0p4..."
sleep 2
if [ -d /proc/stb ] ; then
dd if=/tmp/zImage of=/dev/mmcblk0p4
fi
rm -f /tmp/zImage
true
cat /dev/mmcblk0p4 | grep "kernel"
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " VU+ zmieniony."
sleep 2
echo "Za chwile nastapi restart systemu..."
sleep 2
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
sleep 2
echo "Typ procesora: " $CHIPSET " STB"
sleep 5
fi
reboot -d -f -h -i
elif [ $VUMODEL = "solo2" ] || [ $VUMODEL = "duo2" ] || [ $VUMODEL = "solose" ] || [ $VUMODEL = "zero" ] ; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd2"
sleep 2
flash_eraseall /dev/mtd2
echo "Wgrywanie kernel do /dev/mtd2"
sleep 2
nandwrite -p /dev/mtd2 //tmp/vmlinux.gz
rm -f //tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"t
fi
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd2"
sleep 2
flash_eraseall /dev/mtd2
echo "Wgrywanie kernel do /dev/mtd2"
sleep 2
nandwrite -p /dev/mtd2 /tmp/vmlinux.gz
rm -f /tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"
fi
sleep 5; reboot -d -f -h -i
elif [ $VUMODEL = "bm750" ] || [ $VUMODEL = "duo" ] || [ $VUMODEL = "solo" ] || [ $VUMODEL = "uno" ] || [ $VUMODEL = "ultimo" ]; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
else
echo "Kasowanie kernel z /dev/mtd1"
sleep 2
flash_eraseall /dev/mtd1
echo "Wgrywanie kernel do /dev/mtd1"
sleep 2
nandwrite -p /dev/mtd1 //$IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
fi
else
echo "Kasowanie kernel z /dev/mtd1"
sleep 2
flash_eraseall /dev/mtd1
echo "Wgrywanie kernel do /dev/mtd1"
sleep 2
nandwrite -p /dev/mtd1 //$IMAGE/$TARGET/boot/$VUMODEL.vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
fi
sleep 5; reboot -d -f -h -i
fi
fi
fi
#Ultra
if [ $BOXNAME = "mbultra" ] || [ $CHIPSET = "bcm7424" ]; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd2"
sleep 2
flash_eraseall /dev/mtd2 0 0
echo "Wgrywanie kernel do /dev/mtd2"
sleep 2
nandwrite -p /dev/mtd2 //tmp/vmlinux.gz
rm -f //tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"t
fi
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd2"
sleep 2
flash_eraseall /dev/mtd2 0 0
echo "Wgrywanie kernel do /dev/mtd2"
sleep 2
nandwrite -p /dev/mtd2 /tmp/vmlinux.gz
rm -f /tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"
fi
sleep 5; reboot -d -f -h -i
###############################
#OSmini
elif [ $BOXNAME = "osmini" ] || [ $CHIPSET = "BCM7362" ] ; then
if [ -e /.multinfo ] ; then
INFOBOOT=$( cat /.multinfo )
if [ $TARGET = $INFOBOOT ] ; then
echo "NEOBOOT is booting image from " $TARGET
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd0"
sleep 2
flash_eraseall /dev/mtd0
echo "Wgrywanie kernel do /dev/mtd0"
sleep 2
nandwrite -p /dev/mtd0 //tmp/vmlinux.gz
rm -f //tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"t
fi
else
echo "Przenoszenie pliku kernel do /tmp"
sleep 2
cp -f $IMAGE/$TARGET/boot/$BOXNAME.vmlinux.gz /tmp/vmlinux.gz
echo "Kasowanie kernel z /dev/mtd0"
sleep 2
flash_eraseall /dev/mtd0
echo "Wgrywanie kernel do /dev/mtd0"
sleep 2
nandwrite -p /dev/mtd0 /tmp/vmlinux.gz
rm -f /tmp/vmlinux.gz
update-alternatives --remove vmlinux vmlinux-`uname -r` || true
echo "Kernel dla potrzeb startu systemu " $TARGET " z procesorem mips zostal zmieniony!!!"
echo "Used Kernel: " $TARGET > /media/neoboot/ImagesUpload/.kernel/used_flash_kernel
echo "Typ procesora: " $CHIPSET " STB"
fi
sleep 5; reboot -d -f -h -i
#else
#echo "$TARGET " > /media/neoboot/ImageBoot/.neonextboot
#echo "Error - Nie wpierany model STB !!! "
#exit 0
#fi
else
echo "$TARGET " > /media/neoboot/ImageBoot/.neonextboot
echo "Error - Nie wpierany model STB !!! "
echo "Prawdopodobnie nie wspieramy tego modelu STB !!!"
exit 0
fi
fi
exit 0

954
NeoBoot/files/tools.py Normal file
View File

@@ -0,0 +1,954 @@
#!/usr/bin/python
# -*- coding: utf-8 -*-
from __init__ import _
import codecs
from enigma import getDesktop
from Components.ActionMap import ActionMap
from Components.Label import Label
from Components.ScrollLabel import ScrollLabel
from Components.Pixmap import Pixmap
from Components.Sources.List import List
from Components.ConfigList import ConfigListScreen
from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
from Components.config import getConfigListEntry, config, ConfigYesNo, ConfigText, ConfigSelection, NoSave
from Plugins.Extensions.NeoBoot.plugin import Plugins
from Plugins.Plugin import PluginDescriptor
from Screens.Standby import TryQuitMainloop
from Screens.MessageBox import MessageBox
from Screens.Console import Console
from Screens.Screen import Screen
from Tools.LoadPixmap import LoadPixmap
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_SKIN_IMAGE, SCOPE_CURRENT_SKIN, fileExists, pathExists, createDir
from os import system, listdir, mkdir, chdir, getcwd, rename as os_rename, remove as os_remove, popen
from os.path import dirname, isdir, isdir as os_isdir
from enigma import eTimer
from Plugins.Extensions.NeoBoot.files.stbbranding import getKernelVersionString
import os
import time
import sys
import struct, shutil
PLUGINVERSION = '7.00'
def getKernelVersion():
try:
return open('/proc/version', 'r').read().split(' ', 4)[2].split('-', 2)[0]
except:
return _('unknown')
def getCPUtype():
cpu='UNKNOWN'
if os.path.exists('/proc/cpuinfo'):
with open('/proc/cpuinfo', 'r') as f:
lines = f.read()
f.close()
if lines.find('ARMv7') != -1:
cpu='ARMv7'
elif lines.find('mips') != -1:
cpu='MIPS'
return cpu
if os.path.exists('/etc/hostname'):
with open('/etc/hostname', 'r') as f:
myboxname = f.readline().strip()
f.close()
if os.path.exists('/proc/stb/info/vumodel'):
with open('/proc/stb/info/vumodel', 'r') as f:
vumodel = f.readline().strip()
f.close()
if os.path.exists('/proc/stb/info/boxtype'):
with open('/proc/stb/info/boxtype', 'r') as f:
boxtype = f.readline().strip()
f.close()
class BoundFunction:
__module__ = __name__
def __init__(self, fnc, *args):
self.fnc = fnc
self.args = args
def __call__(self):
self.fnc(*self.args)
class MBTools(Screen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '\n <screen name="NeoBoot" position="center,center" size="1159,750" title="Narzedzia NeoBoota">\n\t\t<widget source="list" render="Listbox" position="15,27" size="1131,720" scrollbarMode="showOnDemand">\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (820, 46), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (66, 66), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 35)],\n \t\t\t"itemHeight": 50\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
else:
skin = '\n <screen position="center,center" size="590,330" title="Narzedzia NeoBoota">\n\t\t<widget source="list" render="Listbox" position="10,16" size="570,300" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (520, 36), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (36, 36), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 22)],\n \t\t\t"itemHeight": 36\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
__module__ = __name__
def __init__(self, session):
Screen.__init__(self, session)
self.list = []
self['list'] = List(self.list)
self.updateList()
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
'back': self.close})
def updateList(self):
self.list = []
mypath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot'
if not fileExists(mypath + 'icons'):
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/ok.png'
png = LoadPixmap(mypixmap)
res = (_('Wykonaj kopi\xc4\x99 obrazu z NeoBoota'), png, 0)
self.list.append(res)
self['list'].list = self.list
res = (_('Przywr\xc3\xb3\xc4\x87 kopi\xc4\x99 obrazu do NeoBoota'), png, 1)
self.list.append(res)
self['list'].list = self.list
res = (_('Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84'), png, 2)
self.list.append(res)
self['list'].list = self.list
res = (_('Usu\xc5\x84 image ZIP z katalogu ImagesUpload '), png, 3)
self.list.append(res)
self['list'].list = self.list
res = (_('Odinstalowanie NeoBoota'), png, 4)
self.list.append(res)
self['list'].list = self.list
res = (_('Reinstalacja NeoBoota'), png, 5)
self.list.append(res)
self['list'].list = self.list
res = (_('Zaktualizuj NeoBoota na wszystkich obrazach.'), png, 6)
self.list.append(res)
self['list'].list = self.list
res = (_('Kopia Zapasowa NeoBoota'), png, 7)
self.list.append(res)
self['list'].list = self.list
res = (_('Aktualizacja listy TV na zainstalowanych image.'), png, 8)
self.list.append(res)
self['list'].list = self.list
res = (_('Aktualizacja IPTVPlayer na zainstalowanych image.'), png, 9)
self.list.append(res)
self['list'].list = self.list
res = (_('Usuniecie hasla do root.'), png, 10)
self.list.append(res)
self['list'].list = self.list
res = (_('Sprawdz poprawnosc instalacji neoboota'), png, 11)
self.list.append(res)
self['list'].list = self.list
res = (_('Zahaszuj montowanie VolatileMedia '), png, 12)
self.list.append(res)
self['list'].list = self.list
res = (_('Informacje NeoBoota'), png, 13)
self.list.append(res)
self['list'].list = self.list
res = (_('Wspierane tunery sat'), png, 14)
self.list.append(res)
self['list'].list = self.list
def KeyOk(self):
self.sel = self['list'].getCurrent()
if self.sel:
self.sel = self.sel[2]
if self.sel == 0 and self.session.open(MBBackup):
pass
if self.sel == 1 and self.session.open(MBRestore):
pass
if self.sel == 2 and self.session.open(MenagerDevices):
pass
if self.sel == 3 and self.session.open(MBDeleUpload):
pass
if self.sel == 4 and self.session.open(UnistallMultiboot):
pass
if self.sel == 5 and self.session.open(ReinstllNeoBoot):
pass
if self.sel == 6 and self.session.open(UpdateNeoBoot):
pass
if self.sel == 7 and self.session.open(BackupMultiboot):
pass
if self.sel == 8 and self.session.open(ListTv):
pass
if self.sel == 9 and self.session.open(IPTVPlayer):
pass
if self.sel == 10 and self.session.open(SetPasswd):
pass
if self.sel == 11 and self.session.open(CheckInstall):
pass
if self.sel == 12 and self.session.open(VolatileMedia):
pass
if self.sel == 13 and self.session.open(MultiBootMyHelp):
pass
if self.sel == 14 and self.session.open(TunerInfo):
pass
class MBBackup(Screen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = ' <screen position="center,center" size="850,750" title="Wykonaj kopie zapasowa obrazu z NeoBoota">\n\t\t\n <widget name="lab1" position="24, 5" size="819, 62" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n\n <widget name="lab2" position="22, 82" size="819, 61" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n\n <widget name="lab3" position="21, 150" size="819, 62" font="Regular;35" halign="center" valign="center" transparent="1" foregroundColor="blue" />\n \n <widget source="list" render="Listbox" itemHeight="40" selectionPixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/selektor.png" font="Regular;25" position="20, 218" zPosition="1" size="820, 376" scrollbarMode="showOnDemand" transparent="1">\n\t\t\t\n <convert type="StringList" font="Regular;35" />\n\n </widget>\n\n <ePixmap position="336, 596" size="181, 29" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n\n <widget name="key_red" position="307, 629" zPosition="2" size="251, 77" font="Regular;35" halign="center" valign="center" backgroundColor="red" transparent="1" foregroundColor="red" />\n\n </screen>'
else:
skin = ' <screen position="center,center" size="700,550" title="Wykonaj kopie zapasowa obrazu z NeoBoota">\n\t\t\n <widget name="lab1" position="20,20" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\n <widget name="lab2" position="20,50" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\n <widget name="lab3" position="20,100" size="660,30" font="Regular;22" halign="center" valign="center" transparent="1"/>\n \n <widget source="list" render="Listbox" position="40,130" zPosition="1" size="620,360" scrollbarMode="showOnDemand" transparent="1" >\n\t\t\t\n <convert type="StringList" />\n</widget>\n<ePixmap position="280,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n\n <widget name="key_red" position="280,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" />\n\n </screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('')
self['lab2'] = Label('')
self['lab3'] = Label(_('Wybierz obraz z kt\xc3\xb3rego chcesz zrobi\xc4\x87 kopie'))
self['key_red'] = Label(_('Kopia Zapasowa'))
self['list'] = List([])
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'ok': self.backupImage,
'red': self.backupImage})
self.backupdir = '/media/neoboot/NeoBootImageBackup'
self.availablespace = '0'
self.onShow.append(self.updateInfo)
def updateInfo(self):
device = '/media/neoboot'
usfree = '0'
devicelist = ['cf',
'hdd',
'card',
'usb',
'usb2']
for d in devicelist:
test = '/media/' + d + '/ImageBoot/.neonextboot'
if fileExists(test):
device = '/media/' + d
rc = system('df > /tmp/ninfo.tmp')
f = open('/proc/mounts', 'r')
for line in f.readlines():
if line.find('/hdd') != -1:
self.backupdir = '/media/neoboot/NeoBootImageBackup'
device = '/media/neoboot'
f.close()
if pathExists(self.backupdir) == 0 and createDir(self.backupdir):
pass
if fileExists('/tmp/ninfo.tmp'):
f = open('/tmp/ninfo.tmp', 'r')
for line in f.readlines():
line = line.replace('part1', ' ')
parts = line.strip().split()
totsp = len(parts) - 1
if parts[totsp] == device:
if totsp == 5:
usfree = parts[3]
else:
usfree = parts[2]
break
f.close()
os_remove('/tmp/ninfo.tmp')
self.availablespace = usfree[0:-3]
strview = _('Masz zainstalowane nas\xc5\xa7\xc4\x99puj\xc4\x85ce obrazy')
self['lab1'].setText(strview)
strview = _('Masz jeszcze wolne: ') + self.availablespace + ' MB'
self['lab2'].setText(strview)
imageslist = ['Flash']
for fn in listdir('/media/neoboot/ImageBoot'):
dirfile = '/media/neoboot/ImageBoot/' + fn
if os_isdir(dirfile) and imageslist.append(fn):
pass
self['list'].list = imageslist
def backupImage(self):
image = self['list'].getCurrent()
if image:
self.backimage = image.strip()
myerror = ''
if self.backimage == 'Flash':
myerror = _('Niestety nie mo\xc5\xbcna wykona\xc4\x87 kopii zapasowej z flesza t\xc4\x85 wtyczk\xc4\x85\nZainstaluj backupsuite do kopii obrazu z pamieci flesza')
if int(self.availablespace) < 150:
myerror = _('Brak miejca do zrobienia kopii obrazu. Potrzebne jest 150 Mb wolnego miejsca na kopie obrazu.')
if myerror == '':
message = _('Wykona\xc4\x87 kopi\xc4\x99 obrazu:') + image + ' teraz ?'
ybox = self.session.openWithCallback(self.dobackupImage, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('Potwierdzenie kopii zapasowej'))
else:
self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO)
def dobackupImage(self, answer):
if answer is True:
cmd = "echo -e '\n\n%s '" % _('Prosz\xc4\x99 czeka\xc4\x87, NeoBoot dzia\xc5\x82a, wykonywanie kopii zapasowej moze zajac kilka chwil, proces w toku...')
cmd1 = '/bin/tar -cf ' + self.backupdir + '/' + self.backimage + '.tar /media/neoboot/ImageBoot/' + self.backimage + ' > /dev/null 2>&1'
cmd2 = 'mv -f ' + self.backupdir + '/' + self.backimage + '.tar ' + self.backupdir + '/' + self.backimage + '.mb'
cmd3 = "echo -e '\n\n%s '" % _('NeoBoot: Kopia Zapasowa KOMPLETNA !')
self.session.open(Console, _('NeoBoot: Kopia Zapasowa Obrazu'), [cmd,
cmd1,
cmd2,
cmd3])
self.close()
class MBRestore(Screen):
__module__ = __name__
skin = ' \n\t<screen position="center,center" size="700,550" title="NeoBoot Przywracanie Obrazu">\n <widget name="lab1" position="20,20" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n <widget name="lab2" position="20,50" size="660,30" font="Regular;24" halign="center" valign="center" transparent="1"/>\n <widget name="lab3" position="20,100" size="660,30" font="Regular;22" halign="center" valign="center" transparent="1"/>\n <widget source="list" render="Listbox" position="40,130" zPosition="1" size="620,380" scrollbarMode="showOnDemand" transparent="1" >\n\t\t\t<convert type="StringList" />\n </widget>\n <ePixmap position="140,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" />\n <ePixmap position="420,500" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/greencor.png" alphatest="on" zPosition="1" />\n <widget name="key_red" position="140,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" />\n <widget name="key_green" position="420,500" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="green" transparent="1" />\n </screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('')
self['lab2'] = Label('')
self['lab3'] = Label(_('Wybierz kopi\xc4\x99 kt\xc3\xb3r\xc4\x85 chcesz przywr\xc3\xb3ci\xc4\x87'))
self['key_red'] = Label(_('Restore'))
self['key_green'] = Label(_('Delete'))
self['list'] = List([])
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'ok': self.restoreImage,
'red': self.restoreImage,
'green': self.deleteback})
self.backupdir = '/media/neoboot/NeoBootImageBackup'
self.availablespace = '0'
self.onShow.append(self.updateInfo)
def updateInfo(self):
device = '/media/neoboot'
usfree = '0'
devicelist = ['cf',
'CF',
'hdd',
'card',
'sd',
'SD',
'usb',
'USB',
'usb2']
for d in devicelist:
test = '/media/' + d + '/ImageBoot/.neonextboot'
if fileExists(test):
device = '/media/' + d
rc = system('df > /tmp/ninfo.tmp')
f = open('/proc/mounts', 'r')
for line in f.readlines():
if line.find('/neoboot') != -1:
self.backupdir = '/media/neoboot/NeoBootImageBackup'
f.close()
if pathExists(self.backupdir) == 0 and createDir(self.backupdir):
pass
if fileExists('/tmp/ninfo.tmp'):
f = open('/tmp/ninfo.tmp', 'r')
for line in f.readlines():
line = line.replace('part1', ' ')
parts = line.strip().split()
totsp = len(parts) - 1
if parts[totsp] == device:
if totsp == 5:
usfree = parts[3]
else:
usfree = parts[2]
break
f.close()
os_remove('/tmp/ninfo.tmp')
self.availablespace = usfree[0:-3]
strview = _('Kopie Zapasowe znajduj\xc4\x85 si\xc4\x99 w katalogu /media/neoboot/NeoBootImageBackup')
self['lab1'].setText(strview)
strview = _('Ilo\xc5\x9b\xc4\x87 wolnego miejsca w Superbocie: ') + self.availablespace + ' MB'
self['lab2'].setText(strview)
imageslist = []
for fn in listdir(self.backupdir):
imageslist.append(fn)
self['list'].list = imageslist
def deleteback(self):
image = self['list'].getCurrent()
if image:
self.delimage = image.strip()
message = _('Wybierz obraz do przywr\xc3\xb3cenia lub usuni\xc4\x99cia:\n ') + image + '?'
ybox = self.session.openWithCallback(self.dodeleteback, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('Potwierdzenie Usuni\xc4\x99cia'))
def dodeleteback(self, answer):
if answer is True:
cmd = "echo -e '\n\n%s '" % _('SuperBoot usuwanie plik\xc3\xb3w kopi zapasowej.....')
cmd1 = 'rm ' + self.backupdir + '/' + self.delimage
self.session.open(Console, _('SuperBoot: Pliki kopii zapasowej usuni\xc4\x99te'), [cmd, cmd1])
self.updateInfo()
def restoreImage(self):
image = self['list'].getCurrent()
if image:
curimage = 'Flash'
if fileExists('/.neonextboot'):
f = open('/.neonextboot', 'r')
curimage = f.readline().strip()
f.close()
self.backimage = image.strip()
imagename = self.backimage[0:-3]
myerror = ''
if curimage == imagename:
myerror = _('Sorry you cannot overwrite the image currently booted from. Please, boot from Flash to restore this backup.')
if myerror == '':
message = _('Przed przywracaniem sprawdz czy masz wolne miejsce na swoim urz\xc4\x85dzeniu - 300Mb \nCzy chcesz przywr\xc3\xb3ci\xc4\x87 ten obraz:\n ') + image + '?'
ybox = self.session.openWithCallback(self.dorestoreImage, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('Potwierdzenie Przywracania'))
else:
self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO)
def dorestoreImage(self, answer):
if answer is True:
imagename = self.backimage[0:-3]
cmd = "echo -e '\n\n%s '" % _('Wait please, NeoBoot is working: ....Restore in progress....')
cmd1 = 'mv -f ' + self.backupdir + '/' + self.backimage + ' ' + self.backupdir + '/' + imagename + '.tar'
cmd2 = '/bin/tar -xf ' + self.backupdir + '/' + imagename + '.tar -C /'
cmd3 = 'mv -f ' + self.backupdir + '/' + imagename + '.tar ' + self.backupdir + '/' + imagename + '.mb'
cmd4 = 'sync'
cmd5 = "echo -e '\n\n%s '" % _('Superboot: Restore COMPLETE !')
self.session.open(Console, _('NeoBoot: Restore Image'), [cmd,
cmd1,
cmd2,
cmd3,
cmd4,
cmd5])
self.close()
def myclose(self):
self.close()
def myclose2(self, message):
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
self.close()
class MenagerDevices(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Uruchomic Menad\xc5\xbcer urz\xc4\x85dze\xc5\x84 ?')
self['key_red'] = Label(_('Uruchom'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.MD})
def MD(self):
try:
if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg'):
system('rm -f /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager/devicemanager.cfg')
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
self.session.open(ManagerDevice)
if fileExists('/etc/devicemanager.cfg'):
system(' rm -f /etc/devicemanager.cfg')
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
self.session.open(ManagerDevice)
if fileExists('/etc/fstab.org'):
system('rm /etc/fstab; mv /etc/fstab.org /etc/fstab; rm /etc/fstab.org ')
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
self.session.open(ManagerDevice)
elif not fileExists('/etc/fstab.org'):
system('cp -f /etc/fstab /etc/fstab.org')
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
self.session.open(ManagerDevice)
else:
from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice
self.session.open(ManagerDevice)
except:
False
class UnistallMultiboot(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Odinstaluj NeoBoota">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Czy odinstalowa\xc4\x87 NeoBoota ?')
self['key_red'] = Label(_('Odinstaluj'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.usun})
def usun(self):
message = _('Je\xc5\x9bli wybierzesz Tak, zostan\xc4\x85 przywr\xc3\xb3cone ustawienia obrazu pli \nMultibot zostanie tylko odinstalowany. \nBedziesz m\xc3\xb3g\xc5\x82 go zainstalowa\xc4\x87 ponownie')
ybox = self.session.openWithCallback(self.reinstallneoboot, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('Delete Confirmation'))
def reinstallneoboot(self, answer):
if answer is True:
cmd0 = "echo -e '\n\nPrzywracanie ustawie\xc5\x84.....'"
cmd = "echo -e '\n%s '" % _('Czekaj usuwam...')
cmd1 = 'rm /sbin/multinit; sleep 2'
cmd1a = "echo -e '\nNeoBoot usuwanie mened\xc5\xbcera rozruchu....'"
cmd2 = 'rm /sbin/init; sleep 2'
cmd3 = 'ln -sfn /sbin/init.sysvinit /sbin/init'
cmd4 = 'chmod 777 /sbin/init; sleep 2'
cmd4a = "echo -e '\nNeoBoot restoring media mounts....'"
cmd5 = 'mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; sleep 2'
cmd6 = 'rm /media/neoboot/ImageBoot/.neonextboot;rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location; sleep 2'
cmd7 = 'rm /media/neoboot/ImageBoot/.Flash; rm /media/neoboot/ImageBoot/.version'
cmd7a = "echo -e '\n\nOdinstalowywanie neoboota...'"
cmd8 = 'mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; sleep 2'
cmd8a = "echo -e '\n\nPrzywracanie montowania.'"
cmd9 = 'mv /etc/fstab.org /etc/fstab; sleep 2'
cmd9a = "echo -e '\n\nNeoBoot odinstalowany, mozesz zrobic reinstalacje.'"
self.session.openWithCallback(self.close, Console, _('NeoBoot is reinstall...'), [cmd0,
cmd,
cmd1,
cmd1a,
cmd2,
cmd3,
cmd4,
cmd4a,
cmd5,
cmd6,
cmd7,
cmd7a,
cmd8,
cmd8a,
cmd9,
cmd9a])
self.close()
class ReinstllNeoBoot(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Update NeoBoot">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Przywrocic kopie NeoBoota z lokalizacji /media/neoboot ?')
self['key_red'] = Label(_('Backup'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.reinstallMB})
def reinstallMB(self):
system('/bin/tar -xzvf /media/neoboot/NeoBoot_Backup.tar.gz -C /')
self.close()
class UpdateNeoBoot(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Update NeoBoot">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Aktualizowac neoboota na wszystkich obrazach ?')
self['key_red'] = Label(_('Zainstaluj'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.mbupload})
def mbupload(self):
self.session.open(MyUpgrade2)
class MyUpgrade2(Screen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen position="center,center" size="900,450" title="NeoBoot">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
else:
skin = '<screen position="center,center" size="400,200" title="NeoBoot">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label(_('[NeoBoot]Prosze czeka\xc4\x87, aktualizacja w toku...'))
self.activityTimer = eTimer()
self.activityTimer.timeout.get().append(self.updateInfo)
self.onShow.append(self.startShow)
def startShow(self):
self.activityTimer.start(10)
def updateInfo(self):
self.activityTimer.stop()
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
mypath2 = f2.readline().strip()
f2.close()
if mypath2 != 'Flash':
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash STB'))
self.close()
else:
for fn in listdir('/media/neoboot/ImageBoot'):
dirfile = '/media/neoboot/ImageBoot/' + fn
if isdir(dirfile):
target = dirfile + '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot'
cmd = 'rm -r ' + target + ' > /dev/null 2>&1'
system(cmd)
cmd = 'cp -r /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot ' + target
system(cmd)
out = open('/media/neoboot/ImageBoot/.version', 'w')
out.write(PLUGINVERSION)
out.close()
self.myClose(_('NeoBoot successfully updated. You can restart the plugin now.\nHave fun !!'))
def myClose(self, message):
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
self.close()
class MBDeleUpload(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="NeoBoot - wyczy\xc5\x9b\xc4\x87 pobrane image">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Czy na pewno chcesz usun\xc4\x85\xc4\x87 obraz z katalogu ImagesUpload ?\n\nJe\xc5\x9bli wybierzesz czerwony przycisk na pilocie to usuniesz wszystkie obrazy ZIP z katalogu ImagesUpload')
self['key_red'] = Label(_('Wyczy\xc5\x9b\xc4\x87'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.usunup})
def usunup(self):
message = _('Czy napewno chcesz wyczy\xc5\x9bci\xc4\x87')
ybox = self.session.openWithCallback(self.pedeleup, MessageBox, message, MessageBox.TYPE_YESNO)
ybox.setTitle(_('Czyszenie z pobranych obraz\xc3\xb3w'))
def pedeleup(self, answer):
if answer is True:
cmd = "echo -e '\n\n%s '" % _('Czekaj usuwam.....')
cmd1 = 'rm /media/neoboot/ImagesUpload/*.zip'
self.session.open(Console, _('Usuwanie pobranych obraz\xc3\xb3w....'), [cmd, cmd1])
self.close()
class BackupMultiboot(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="590,330" title="Backup NeoBoot">\n\t\t<widget source="list" render="Listbox" position="10,16" size="570,300" scrollbarMode="showOnDemand" >\n\t\t\t<convert type="TemplatedMultiContent">\n \t\t{"template": [\n \t\t\tMultiContentEntryText(pos = (50, 1), size = (520, 36), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0),\n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (36, 36), png = 1),\n \t\t\t],\n \t\t\t"fonts": [gFont("Regular", 22)],\n \t\t\t"itemHeight": 36\n \t\t}\n \t\t</convert>\n\t\t</widget>\n </screen>'
def __init__(self, session):
Screen.__init__(self, session)
self.list = []
self['list'] = List(self.list)
self.downList()
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk,
'back': self.close})
def downList(self):
self.list = []
mypixmap = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/ok.png'
png = LoadPixmap(mypixmap)
res = (_('Wykonac kompletna kopie NeoBoota ?'), png, 0)
self.list.append(res)
self['list'].list = self.list
def KeyOk(self):
self.sel = self['list'].getCurrent()
if self.sel:
self.sel = self.sel[2]
if self.sel == 0:
cmd = 'sh /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/NeoBoot.sh -i'
self.session.open(Console, _('Kopia zapasowa zostanie zapisana w lokalizacji /media/neoboot. Trwa wykonywanie....'), [cmd])
self.close()
class SetPasswd(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Czy skasowac haslo ?')
self['key_red'] = Label(_('Uruchom'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.passwd})
def passwd(self):
os.system('passwd -d root')
restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('GUI needs a restart.\nDo you want to Restart the GUI now?'), MessageBox.TYPE_YESNO)
restartbox.setTitle(_('Restart GUI now?'))
def restartGUI(self, answer):
if answer is True:
self.session.open(TryQuitMainloop, 3)
else:
self.close()
class ReinstallKernel(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Module kernel">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Reinstalacja j\xc4\x85dra.\n\nZainstalowa\xc4\x87 ?')
self['key_red'] = Label(_('Instalacja'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.kernel_image})
def kernel_image(self):
if fileExists('/.multinfo'):
if myboxname == 'vuuno4k' or myboxname == 'vuultimo4k' or myboxname == 'vusolo4k' or myboxname == 'vuzero4k' or myboxname == 'vuuno4kse' or myboxname == 'vuunose4k' or myboxname == 'bm750' or myboxname == 'vuduo' or myboxname == 'vuuno' or myboxname == 'vuultimo' or myboxname == 'vusolo' or myboxname == 'vusolo2' or myboxname == 'vusolose' or myboxname == 'vuduo2' or myboxname == 'vuzero' or myboxname == 'vuduo':
cmd1 = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (vumodel, vumodel)
self.session.open(Console, _('NeoBoot....'), [cmd1])
elif myboxname == 'sf4008' :
cmd1 = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (boxtype, boxtype)
self.session.open(Console, _('NeoBoot....'), [cmd1])
else:
self.messagebox = self.session.open(MessageBox, _('Canceled ... NeoBoot will not work properly !!! NeoBoot works only on VuPlus box !!!'), MessageBox.TYPE_INFO, 20)
self.messagebox = self.session.open(MessageBox, _('NeoBoot installd kernel-image...'), MessageBox.TYPE_INFO, 4)
self.close()
else:
if myboxname == 'vuuno4k' or myboxname == 'vuultimo4k' or myboxname == 'vusolo4k' or myboxname == 'bm750' or myboxname == 'vuduo' or myboxname == 'vuuno' or myboxname == 'vuultimo' or myboxname == 'vusolo' or myboxname == 'vusolo2' or myboxname == 'vusolose' or myboxname == 'vuduo2' or myboxname == 'vuzero' or myboxname == 'vuduo':
cmd1 = 'opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (vumodel, vumodel)
self.session.open(Console, _('NeoBoot....'), [cmd1])
elif myboxname == 'sf4008' :
cmd1 = 'opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; opkg configure update-modules' % (boxtype, boxtype)
self.session.open(Console, _('NeoBoot....'), [cmd1])
else:
self.messagebox = self.session.open(MessageBox, _('Canceled ... NeoBoot will not work properly !!! NeoBoot works only on VuPlus box !!!'), MessageBox.TYPE_INFO, 20)
self.messagebox = self.session.open(MessageBox, _('NeoBoot installd kernel-image...'), MessageBox.TYPE_INFO, 4)
self.close()
out = open('/media/neoboot/ImagesUpload/.kernel/used_flash_kernel', 'w')
out.write('Used Kernel: Flash')
out.close()
class ListTv(Screen):
__module__ = __name__
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen position="center,center" size="900,450" title="NeoBoot">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
else:
skin = '<screen position="center,center" size="400,200" title="NeoBoot">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label(_('NeoBoot: Upgrading in progress\nPlease wait...'))
self.activityTimer = eTimer()
self.activityTimer.timeout.get().append(self.updateInfo)
self.onShow.append(self.startShow)
def startShow(self):
self.activityTimer.start(10)
def updateInfo(self):
self.activityTimer.stop()
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
mypath2 = f2.readline().strip()
f2.close()
if mypath2 != 'Flash':
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.'))
self.close()
else:
os.system('mv /etc/enigma2 /etc/enigma2.tmp')
os.system('mkdir -p /etc/enigma2')
os.system('cp -f /etc/enigma2.tmp/*.tv /etc/enigma2')
os.system('cp -f /etc/enigma2.tmp/*.radio /etc/enigma2')
os.system('cp -f /etc/enigma2.tmp/lamedb /etc/enigma2')
for fn in listdir('/media/neoboot/ImageBoot'):
dirfile = '/media/neoboot/ImageBoot/' + fn
if isdir(dirfile):
target = dirfile + '/etc/'
cmd = 'cp -r -f /etc/enigma2 ' + target
system(cmd)
target1 = dirfile + '/etc/tuxbox'
cmd = 'cp -r -f /etc/tuxbox/satellites.xml ' + target1
system(cmd)
target2 = dirfile + '/etc/tuxbox'
cmd = 'cp -r -f /etc/tuxbox/terrestrial.xml ' + target2
system(cmd)
os.system('rm -f -R /etc/enigma2')
os.system('mv /etc/enigma2.tmp /etc/enigma2/')
self.myClose(_('NeoBoot successfully updated list tv.\nHave fun !!'))
def myClose(self, message):
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
self.close()
class IPTVPlayer(Screen):
__module__ = __name__
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen position="center,center" size="900,450" title="IPTVPlayer">\n\t\t<widget name="lab1" position="23,42" size="850,350" font="Regular;35" halign="center" valign="center" transparent="1" />\n</screen>'
else:
skin = '<screen position="center,center" size="400,200" title="IPTVPlayer">\n\t\t<widget name="lab1" position="10,10" size="380,180" font="Regular;24" halign="center" valign="center" transparent="1"/>\n\t</screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label(_('NeoBoot: Upgrading in progress\nPlease wait...'))
self.activityTimer = eTimer()
self.activityTimer.timeout.get().append(self.updateInfo)
self.onShow.append(self.startShow)
def startShow(self):
self.activityTimer.start(10)
def updateInfo(self):
self.activityTimer.stop()
f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r')
mypath2 = f2.readline().strip()
f2.close()
if mypath2 != 'Flash':
self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.'))
self.close()
elif not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer'):
self.myClose(_('Sorry, IPTVPlayer not found.'))
self.close()
else:
for fn in listdir('/media/neoboot/ImageBoot'):
dirfile = '/media/neoboot/ImageBoot/' + fn
if isdir(dirfile):
target = dirfile + '/usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer'
cmd = 'rm -r ' + target + ' > /dev/null 2>&1'
system(cmd)
cmd = 'cp -r /usr/lib/enigma2/python/Plugins/Extensions/IPTVPlayer ' + target
system(cmd)
self.myClose(_('NeoBoot successfully updated IPTVPlayer.\nHave fun !!'))
def myClose(self, message):
self.session.open(MessageBox, message, MessageBox.TYPE_INFO)
self.close()
class SetPasswd(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Czy skasowac haslo ?')
self['key_red'] = Label(_('Uruchom'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.passwd})
def passwd(self):
os.system('passwd -d root')
restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('GUI needs a restart.\nDo you want to Restart the GUI now?'), MessageBox.TYPE_YESNO)
restartbox.setTitle(_('Restart GUI now?'))
def restartGUI(self, answer):
if answer is True:
self.session.open(TryQuitMainloop, 3)
else:
self.close()
class CheckInstall(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Zmiana Hasla">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Sprawdzanie poprawnosci zainstalwoanych modulow dla NeoBoota')
self['key_red'] = Label(_('Uruchom'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.neocheck})
def neocheck(self):
try:
cmd = ' /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/module_neoboot.sh -i'
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd,
cmd])
self.close()
except:
False
class VolatileMedia(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="Zablokowac pomoc w montowaniu dyskow ?">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('Haszowanie montowania ?')
self['key_red'] = Label(_('Uruchom'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.Media})
def Media(self):
box = self.session.openWithCallback(self.restartGUI, MessageBox, _('Zmienic montowanie ?\n\nWybierz Tak by zmienic.\nWybierz Nie by porzucic zmiany lub przywrocic.'), MessageBox.TYPE_YESNO)
box.setTitle(_('MONTOWANIE '))
def restartGUI(self, answer):
if answer is True:
try:
if fileExists('/etc/init.d/volatile-media.sh'):
cmd = ' mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org'
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd])
self.close()
#else:
self.messagebox = self.session.open(MessageBox, _('Plik volatile-media.sh w lokalizacji /etc/init.d/\nzostal zmianiony na volatile-media.sh.org'), MessageBox.TYPE_INFO, 10)
except:
False
else:
try:
if fileExists('/etc/init.d/volatile-media.sh.org'):
cmd = ' mv /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh'
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd])
self.close()
#else:
self.messagebox = self.session.open(MessageBox, _('Plik volatile-media.sh.org w lokalizacji /etc/init.d/\nzostal zmianiony na org. naze volatile-media.sh'), MessageBox.TYPE_INFO, 10)
except:
False
class MultiBootMyHelp(Screen):
screenwidth = getDesktop(0).size().width()
if screenwidth and screenwidth == 1920:
skin = '<screen name=" NeoBoot" position="center,center" size="1920,1080" title="NeoBoot - Opis" flags="wfNoBorder">\n<eLabel text="INFORMACJE NeoBoot" font="Regular; 35" position="69,66" size="1777,96" halign="center" foregroundColor="yellow" backgroundColor="black" transparent="1" /><widget name="lab1" position="69,162" size="1780,885" font="Regular;35" />\n</screen>'
else:
skin = '<screen name=" NeoBoot" position="center,center" size="1280,720" title="NeoBoot - Opis">\n<widget name="lab1" position="18,19" size="1249,615" font="Regular;20" />\n</screen>'
__module__ = __name__
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = ScrollLabel('')
self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'DirectionActions'], {'back': self.close,
'ok': self.close,
'up': self['lab1'].pageUp,
'left': self['lab1'].pageUp,
'down': self['lab1'].pageDown,
'right': self['lab1'].pageDown})
self['lab1'].hide()
self.updatetext()
def updatetext(self):
message = ''
message += 'NeoBoot Wersja ' + PLUGINVERSION + ' Enigma2\n\n'
message += 'NeoBoot opiera si\xc4\x99 na EGAMIBoot < mod by gutosie >\n\n'
message += 'Autor EGAMIBoota zezwolil na rozwijanie i edycje NeoBoot - Thanks/Dzi\xc4\x99ki\n\n'
message += 'nfidump by gutemine - Thanks/Dzi\xc4\x99ki\n\n'
message += 'ubi_reader by Jason Pruitt - Thanks/Dzi\xc4\x99ki\n\n'
message += 'T\xc5\x82umaczenie: gutosie\n\n'
message += _('Podziekowania wszystkim tu niewspomnianym za udzielenie pomocy w ulepszaniu NeoBoota \n\n')
message += _('Udanej zabawy :)\n\n')
self['lab1'].show()
self['lab1'].setText(message)
class TunerInfo(Screen):
__module__ = __name__
skin = '\n\t<screen position="center,center" size="700,300" title="NeoBoot - Tunery Sat">\n\t\t<widget name="lab1" position="20,20" size="660,215" font="Regular;24" halign="center" valign="center" transparent="1"/><ePixmap position="280,250" size="140,40" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/images/redcor.png" alphatest="on" zPosition="1" /><widget name="key_red" position="280,250" zPosition="2" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="red" transparent="1" /></screen>'
def __init__(self, session):
Screen.__init__(self, session)
self['lab1'] = Label('NeoBoot: Lista wspieranych modeli STB.')
self['key_red'] = Label(_('Uruchom - Red'))
self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'back': self.close,
'red': self.iNFO})
def iNFO(self):
try:
cmd = ' cat /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.info'
cmd1 = ''
self.session.openWithCallback(self.close, Console, _('NeoBoot....'), [cmd,
cmd1])
self.close()
except:
False
def myboot(session, **kwargs):
session.open(MBTools)
def Plugins(path, **kwargs):
global pluginpath
pluginpath = path
return PluginDescriptor(name='NeoBoot', description='MENU NeoBoot', icon=None, where=PluginDescriptor.WHERE_PLUGINMENU, fnc=myboot)

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
NeoBoot/images/1matrix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 854 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

BIN
NeoBoot/images/arrowup.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 868 B

BIN
NeoBoot/images/baza.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
NeoBoot/images/bg500.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

BIN
NeoBoot/images/blue.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
NeoBoot/images/blue25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
NeoBoot/images/bluecor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

BIN
NeoBoot/images/button.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
NeoBoot/images/dev_cf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

BIN
NeoBoot/images/dev_hdd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
NeoBoot/images/dev_sd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

BIN
NeoBoot/images/dev_usb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
NeoBoot/images/div-v.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 B

BIN
NeoBoot/images/dot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
NeoBoot/images/dot1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 624 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

BIN
NeoBoot/images/green25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
NeoBoot/images/greencor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

BIN
NeoBoot/images/key_1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
NeoBoot/images/key_2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
NeoBoot/images/key_3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
NeoBoot/images/key_4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
NeoBoot/images/linia.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
NeoBoot/images/matrix.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
NeoBoot/images/matrixhd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

BIN
NeoBoot/images/mb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 946 B

BIN
NeoBoot/images/menu.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
NeoBoot/images/numer.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
NeoBoot/images/numery.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

BIN
NeoBoot/images/ok.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
NeoBoot/images/pasek.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

BIN
NeoBoot/images/pasek2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 461 B

BIN
NeoBoot/images/ping.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

BIN
NeoBoot/images/red-big.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
NeoBoot/images/red25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
NeoBoot/images/redcor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

BIN
NeoBoot/images/scroll.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
NeoBoot/images/sel500.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
NeoBoot/images/selektor.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
NeoBoot/images/sep.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
NeoBoot/images/skin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
NeoBoot/images/transp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
NeoBoot/images/transp1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
NeoBoot/images/updown.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
NeoBoot/images/usb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
NeoBoot/images/yellow25.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

Binary file not shown.