diff --git a/NeoBoot/.info b/NeoBoot/.info new file mode 100644 index 0000000..8ec50ee --- /dev/null +++ b/NeoBoot/.info @@ -0,0 +1,40 @@ +#!/bin/sh +#Wspierane tunery satelitarne: +#Machine BCM - getCPUSoC(): + +#cat /proc/stb/info/chipset: +Ultimo4k : 7444s +Solo4k : 7376 +Zero 4K : 72604 +Duo4k : 7278 #BCM7278 +Uno 4K : 7252s +Uno4kSE : 7252s +Ultimo : 7405(with 3D) +Uno : 7405(with 3D) +Duo : 7335 +Duo2 : 7424 +Zero : 7362 +Solo : 7325 +Solose : 7241 +Solose-v2 : 7241 +Solo2 : 7356 + +Formuler F1 : bcm7356 +Formuler F3 : 7362 + +Miraclebox MBmini : bcm7358 +Miraclebox Micro : bcm7362 +Miraclebox Ultra : bcm7424 + +Octagon Sf8008 : 3798mv200 +Octagon SF4008 : bcm7251 + +Zgemma h7S : bcm7251s +Zgemma H9S : + +AX HD60 4K : hi3798mv200 root@ax60:~# cat /etc/hostname : ax60 + +OSmini : BCM7362 + +atemio6000 : bcm7362 + diff --git a/NeoBoot/__init__.py b/NeoBoot/__init__.py new file mode 100644 index 0000000..05c47ff --- /dev/null +++ b/NeoBoot/__init__.py @@ -0,0 +1,25 @@ +# -*- 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) diff --git a/NeoBoot/neo.png b/NeoBoot/neo.png new file mode 100644 index 0000000..7d924c2 Binary files /dev/null and b/NeoBoot/neo.png differ diff --git a/NeoBoot/neologo.mvi b/NeoBoot/neologo.mvi new file mode 100644 index 0000000..773c5cd Binary files /dev/null and b/NeoBoot/neologo.mvi differ diff --git a/NeoBoot/plugin.py b/NeoBoot/plugin.py new file mode 100644 index 0000000..c483660 --- /dev/null +++ b/NeoBoot/plugin.py @@ -0,0 +1,1492 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +from __init__ import _ +from Plugins.Extensions.NeoBoot.files import Harddisk +from Plugins.Extensions.NeoBoot.files.stbbranding import getKernelVersionString, getKernelImageVersion, getCPUtype, getCPUSoC, getImageNeoBoot, getBoxVuModel, getBoxHostName, getTunerModel +from enigma import getDesktop +from enigma import eTimer +from Screens.Screen import Screen +from Screens.Console import Console +from Screens.MessageBox import MessageBox +from Screens.ChoiceBox import ChoiceBox +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Screens.Standby import TryQuitMainloop +from Components.About import about +from Components.Sources.List import List +from Components.Button import Button +from Components.ActionMap import ActionMap, NumberActionMap +from Components.GUIComponent import * +from Components.MenuList import MenuList +from Components.Input import Input +from Components.Label import Label +from Components.ProgressBar import ProgressBar +from Components.ScrollLabel import ScrollLabel +from Components.Pixmap import Pixmap, MultiPixmap +from Components.config import * +from Components.ConfigList import ConfigListScreen +from Tools.LoadPixmap import LoadPixmap +from Tools.Directories import fileExists, pathExists, createDir, resolveFilename, SCOPE_PLUGINS +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 +import os +import time +# Copyright (c) , gutosie license +# +# Redystrybucja wersji programu i dokonywania modyfikacji JEST DOZWOLONE, pod warunkiem zachowania niniejszej informacji o prawach autorskich. +# Autor NIE ponosi JAKIEJKOLWIEK odpowiedzialności za skutki użtkowania tego programu oraz za wykorzystanie zawartych tu informacji. +# Modyfikacje przeprowadzasz na wlasne ryzyko!!! +# O wszelkich zmianach prosze poinformowac na http://all-forum.cba.pl w temacie pod nazwa -#[NEOBOOT]#- + +# This text/program is free document/software. Redistribution and use in +# source and binary forms, with or without modification, ARE PERMITTED provided +# save this copyright notice. This document/program is distributed WITHOUT any +# warranty, use at YOUR own risk. + +PLUGINVERSION = '7.00 ' +UPDATEVERSION = '7.15' + +class MyUpgrade(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + \ + {"template": [MultiContentEntryText(pos = (90, 1), size = (920, 66), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0), + MultiContentEntryPixmapAlphaTest(pos = (8, 4), size = (66, 66), png = 1), + ], + "fonts": [gFont("Regular", 40)], + "itemHeight": 66 + } + + + + + """ + else: + skin = """ + + + + {"template": [MultiContentEntryText(pos = (90, 1), size = (920, 66), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0), + MultiContentEntryPixmapAlphaTest(pos = (8, 4), size = (66, 66), png = 1), + ], + "fonts": [gFont("Regular", 40)], + "itemHeight": 66 + } + + + + + """ + __module__ = __name__ + + def __init__(self, session): + Screen.__init__(self, session) + self.list = [] + self['list'] = List(self.list) + self.wybierz() + self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk, + 'back': self.changever}) + + def changever(self): + ImageChoose = self.session.open(NeoBootImageChoose) + if fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location'): + out = open('/media/neoboot/ImageBoot/.version', 'w') + out.write(PLUGINVERSION) + out.close() + self.close() + else: + self.close(self.session.open(MessageBox, _('No file location NeoBot, do re-install the plugin.'), MessageBox.TYPE_INFO, 10)) + self.close() + return ImageChoose + + def wybierz(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 = (_('Update neoboot in all images ?'), 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 and self.session.open(MyUpgrade2): + pass + self.close() + + +class MyUpgrade2(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = '' + else: + skin = '' + + 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 fileExists('/.multinfo'): + self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.')) + self.close() + elif mypath2 != 'Flash': + self.myClose(_('Sorry, NeoBoot can installed or upgraded only when booted from Flash.')) + 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): + ImageChoose = self.session.open(NeoBootImageChoose) + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + self.close(ImageChoose) + + +class MyHelp(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + """ + else: + skin = """ + + """ + __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 = _('NeoBoot Ver. ' + PLUGINVERSION + ' Enigma2\n\nDuring the entire installation process does not restart the receiver !!!\n\n') + message += _('NeoBoot Ver. updates ' + UPDATEVERSION + ' \n\n') + message = _('For proper operation NeoBota type device is required USB stick or HDD, formatted on your system files Linux ext3 or ext4..\n\n') + message += _('1. If you do not have a media formatted with the ext3 or ext4 is open to the Device Manager , select the drive and format it.\n\n') + message += _('2. Go to the device manager and install correctly hdd and usb ...\n\n') + message += _('3. Install NeoBota on the selected device.\n\n') + message += _('4. Install the needed packages...\n\n') + message += _('5. For proper installation XenoBota receiver must be connected to the Internet.\n\n') + message += _('6. In the event of a problem with the installation cancel and inform the author of the plug of a problem.\n\n') + message += _('Have fun !!!') + self['lab1'].show() + self['lab1'].setText(message) + + +class Opis(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + + + + + + + """ + else: + skin = """ + + + + + + + + + """ + __module__ = __name__ + + def __init__(self, session): + Screen.__init__(self, session) + self['key_red'] = Label(_('Remove NeoBoot of STB')) + self['lab1'] = ScrollLabel('') + self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'DirectionActions'], {'back': self.close, + 'red': self.delete, + '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 = _('NeoBoot Ver. ' + PLUGINVERSION + '\n\n') + message += _('NeoBoot Ver. updates ' + UPDATEVERSION + '\n\n') + message += _('1. Requirements: For proper operation of the device NeoBota are required USB stick or HDD.\n\n') + message += _('2. NeoBot is fully automated\n\n') + message += _('3. To install a new image in MultiBocie should be sent by FTP software file compressed in ZIP or NIF to the folder: \n/media/neoboot/ImagesUpload and remote control plugin NeoBoot use the green button \n\n') + message += _('4. For proper installation and operation of additional image multiboot, use only the image intended for your receiver. !!!\n\n') + message += _('5. By installing the multiboot images of a different type than for your model STB DOING THIS AT YOUR OWN RISK !!!\n\n') + message += _('6. The installed to multiboot images, it is not indicated update to a newer version.\n\n') + message += _('The authors plug NeoBot not liable for damage a receiver, NeoBoota incorrect use or installation of unauthorized additions or images.!!!\n\n') + message += _('Have fun !!!') + message += _('\nCompletely uninstall NeoBota: \nIf you think NeoBot not you need it, you can uninstall it.\nTo uninstall now press the red button on the remote control.\n\n') + self['lab1'].show() + self['lab1'].setText(message) + + def delete(self): + message = _('Are you sure you want to completely remove NeoBoota of your image?\n\nIf you choose so all directories NeoBoota will be removed.\nA restore the original image settings Flash.') + ybox = self.session.openWithCallback(self.mbdelete, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Removed successfully.')) + + def mbdelete(self, answer): + if answer is True: + cmd = "echo -e '\n\n%s '" % _('Recovering setting....\n') + cmd1 = 'rm -R /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot; rm -R /media/neoboot/ImageBoot/.Flash; rm -R /media/neoboot/ImageBoot/.neonextboot; rm -R /media/neoboot/ImageBoot/.version' + cmd2 = 'rm -R /sbin/neoinit*' + cmd3 = 'ln -sfn /sbin/init.sysvinit /sbin/init' + cmd4 = 'cp -rf /etc/fstab.org /etc/fstab; rm /etc/fstab.org ' + cmd5 = 'cp -rf /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; rm /etc/init.d/volatile-media.sh.org ' + cmd6 = 'opkg install volatile-media; sleep 2; killall -9 enigma2' + self.session.open(Console, _('NeoBot was removed !!! \nThe changes will be visible only after complete restart of the receiver.'), [cmd, + cmd1, + cmd2, + cmd3, + cmd4, + cmd5, + cmd6]) + self.close() + +class Montowanie(Screen): + skin = """ + + + {"template": [MultiContentEntryText(pos = (50, 1), size = (520, 36), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0), + MultiContentEntryPixmapAlphaTest(pos = (4, 2), size = (36, 36), png = 1), + ], + "fonts": [gFont("Regular", 22)], + "itemHeight": 36 + } + + + """ + __module__ = __name__ + + 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 = (_('Start the device manager ?'), 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: + if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg'): + system('rm -f /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg; touch /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg') + if fileExists('/etc/devicemanager.cfg'): + system(' rm -f /etc/devicemanager.cfg; touch /etc/devicemanager.cfg ') + cmd = '/media/neoboot/ImageBoot/Backup_NeoBoot.sh ' + os.system('opkg install util-linux-sfdisk') + from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice + self.session.open(ManagerDevice) + else: + self.session.open(MessageBox, _('The operation has been canceled or meoboot is not running in stb VuPlus'), MessageBox.TYPE_INFO, 7) + + +class NeoBootInstallation(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + + + + + + + + + + + + + + """ + else: + skin = """ + + + \n + + + \n + \n + \n + \n + \n + \n + \n + \n + """ + + def __init__(self, session): + Screen.__init__(self, session) + self.list = [] + self['config'] = MenuList(self.list) + self['key_red'] = Label(_('Instruction')) + self['key_green'] = Label(_('Installation')) + self['key_yellow'] = Label(_('Info disc')) + self['key_blue'] = Label(_('Device Manager')) + self['label1'] = Label(_('Welcome to NeoBoot %s Plugin installation.') % PLUGINVERSION) + self['label3'] = Label(_('WARNING !!! First, mount the device.')) + self['label2'] = Label(_('Here is the list of mounted devices in Your STB\nPlease choose a device where You would like to install NeoBoot')) + self['actions'] = ActionMap(['WizardActions', 'ColorActions', 'DirectionActions'], {'red': self.Instrukcja, + 'green': self.install, + 'yellow': self.datadrive, + 'blue': self.devices, + 'back': self.close}) + self.updateList() + + def Instrukcja(self): + self.session.open(MyHelp) + + def datadrive(self): + try: + message = "echo -e '\n" + message += _('NeoBot checks the connected media.\nWAIT ...\n\nDISCS:') + message += "'" + cmd = '/sbin/blkid' + system(cmd) + print '[MULTI-BOOT]: ', cmd + self.session.open(Console, _(' NeoBot - Available media:'), [message, cmd]) + except: + pass + + def updateList(self): + if fileExists('/proc/mounts'): + with open('/proc/mounts', 'r') as f: + for line in f.readlines(): + if line.startswith('/dev/sd') and line.find('/media/neoboot') == -1 and (line.find('ext4') != -1 or line.find('ext3') != -1): + try: self.list.append(line.split(' ')[1] + '/') + except Exception: pass # nie powinno sie zdarzyc, ale w razie czego + if len(self.list) == 0: + self['label2'].setText(_('Sorry it seems that there are not Linux formatted devices mounted on your STB. To install NeoBoot you need a Linux formatted part1 device. Click on the blue button to open Devices Panel')) + self['config'].setList(self.list) + + def checkReadWriteDir(self, configele): + from Plugins.Extensions.NeoBoot.files import Harddisk + import os.path + import Plugins.Extensions.NeoBoot.files.Harddisk + supported_filesystems = frozenset(('ext4', 'ext3', 'ext2', 'ntfs', 'nfs', )) + candidates = [] + mounts = Harddisk.getProcMounts() + for partition in Harddisk.harddiskmanager.getMountedPartitions(False, mounts): + if partition.filesystem(mounts) in supported_filesystems: + candidates.append((partition.description, partition.mountpoint)) + + if candidates: + locations = [] + for validdevice in candidates: + locations.append(validdevice[1]) + + if Harddisk.findMountPoint(os.path.realpath(configele)) + '/' in locations or Harddisk.findMountPoint(os.path.realpath(configele)) in locations: + if fileExists(configele, 'w'): + return True + else: + dir = configele + self.session.open(MessageBox, _('The directory %s is not writable.\nMake sure you select a writable directory instead.') % dir, type=MessageBox.TYPE_ERROR) + return False + else: + dir = configele + self.session.open(MessageBox, _('The directory %s is not a EXT2, EXT3, EXT4 or NFS partition.\nMake sure you select a valid partition type.') % dir, type=MessageBox.TYPE_ERROR) + return False + else: + dir = configele + self.session.open(MessageBox, _('The directory %s is not a EXT2, EXT3, EXT4 or NFS partition.\nMake sure you select a valid partition type.') % dir, type=MessageBox.TYPE_ERROR) + return False + + def devices(self): + check = False + if check == False: + message = _('After selecting OK start Mounting Manager, option Mount - green\n') + message += _('Do you want to run the manager to mount the drives correctly ?\n') + ybox = self.session.openWithCallback(self.device2, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Device Manager')) + + def device2(self, yesno): + if yesno: + if fileExists('/usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg'): + system('rm -f /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg; touch /usr/lib/enigma2/python/Plugins/SystemPlugins/DeviceManager*/devicemanager.cfg') + if fileExists('/etc/devicemanager.cfg'): + system(' rm -f /etc/devicemanager.cfg; touch /etc/devicemanager.cfg ') + from Plugins.Extensions.NeoBoot.files.devices import ManagerDevice + self.session.open(ManagerDevice) + else: + self.close() + + def install(self): + if not os.path.isfile('/etc/fstab.org'): + self.session.open(MessageBox, _('NeoBot - First use the Device Manager and mount the drives correctly !!!'), MessageBox.TYPE_INFO, 7) + self.close() + if fileExists('/.multinfo'): + self.session.open(MessageBox, _('Sorry, NeoBoot can installed or upgraded only when booted from Flash.'), MessageBox.TYPE_INFO, 7) + self.close() + else: + self.first_installation() + + def first_installation(self): + check = False + if fileExists('/proc/mounts'): + with open('/proc/mounts', 'r') as f: + for line in f.readlines(): + if line.startswith('/dev/sd') and line.find('/media/neoboot') == -1 and (line.find('ext4') != -1 or line.find('ext3') != -1): + check = True + break + + if check == False: + self.session.open(MessageBox, _('Sorry, there is not any connected devices in your STB.\nPlease connect HDD or USB to install NeoBoot!'), MessageBox.TYPE_INFO) + else: + if not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/fstab'): + self.session.open(MessageBox, _('Device Manager encountered an error, disk drives not installed correctly !!!'), MessageBox.TYPE_INFO) + self.close() + self.mysel = self['config'].getCurrent() + if self.checkReadWriteDir(self.mysel): + message = _('Do You really want to install NeoBoot in:\n ') + self.mysel + '?' + ybox = self.session.openWithCallback(self.install2, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Install Confirmation')) + else: + self.close() + + def install2(self, yesno): + if yesno: + system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; chmod 0755 ./bin/neoini*; chmod 0755 ./ex_init.py; chmod 0755 ./files/targetimage.sh; chmod 0755 ./files/NeoBoot.sh; chmod 0755 ./files/S50fat.sh; cd;') + cmd = 'mkdir /media/neoboot;mount ' + self.mysel + ' /media/neoboot' + system(cmd) + cmd2 = 'mkdir ' + self.mysel + 'ImageBoot;mkdir ' + self.mysel + 'ImagesUpload' + system(cmd2) + cmd3 = 'mkdir ' + self.mysel + 'ImageBoot;mkdir ' + self.mysel + 'ImagesUpload/.kernel' + system(cmd3) + + if fileExists('/proc/mounts'): + fileExists('/proc/mounts') + f = open('/proc/mounts', 'r') + for line in f.readlines(): + if line.find(self.mysel): + mntdev = line.split(' ')[0] + + f.close() + mntid = os.system('blkid -s UUID -o value ' + mntdev + '>/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install') + os.system('blkid -s UUID -o value ' + mntdev + '>/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install') + + fstabuuid = os.popen('blkid -s UUID -o value ' + mntdev).read() + fstabuuidwrite = 'UUID=' + fstabuuid.strip() + ' /media/neoboot auto defaults\t 1 1' + fileHandle = open('/etc/fstab', 'a') + fileHandle.write(fstabuuidwrite) + fileHandle.close() + os.system('blkid -c /dev/null /dev/sd* > /tmp/blkidlist') + os.system('blkid -c /dev/null ' + mntdev + ' > /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install2') + system('chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install; chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/install2') + + + #if not fileExists('/usr/lib/enigma2/python/Plugins/PLi'): + #os.system('mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org') + + #if os.path.isfile('/etc/init.d/volatile-media.sh'): + #os.system('mv /etc/init.d/volatile-media.sh /etc/init.d/volatile-media.sh.org') + + if os.path.isfile('/media/neoboot/ImageBoot/.neonextboot'): + os.system('rm -f /media/neoboot/ImageBoot/.neonextboot; rm -f /media/neoboot/ImageBoot/.version; rm -f /media/neoboot/ImageBoot/.Flash; rm -f /media/neoboot/ImagesUpload/.kernel/zImage*.ipk; rm -f /media/neoboot/ImagesUpload/.kernel/zImage*.bin') + + out1 = open('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location', 'w') + out1.write(self.mysel) + out1.close() + out2 = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out2.write('Flash ') + out2.close() + + if fileExists('/etc/issue.net'): + try: + lines = open('/etc/hostname', 'r').readlines() + imagename = lines[0][:-1] + image = imagename + open('/media/neoboot/ImageBoot/.Flash', 'w').write(image) + except: + False + + out = open('/media/neoboot/ImageBoot/.version', 'w') + out.write(PLUGINVERSION) + out.close() + + self.installpakiet() + + else: + self.session.open(MessageBox, _('Installation aborted !'), MessageBox.TYPE_INFO) + + def installpakiet(self): + check = False + if check == False: + self.mysel = self['config'].getCurrent() + if fileExists('/proc/stb/info'): #vumodel'): ogranicza tylko dla vu+ + message = _('\n ... q(-_-)p ...\nNeoBot to function properly need additional packages.\nSelect Yes and wait ...\nProces installation may take a few moments ...\nInstall ?') + ybox = self.session.openWithCallback(self.pakiet2, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Installing packages ...')) + else: + self.session.open(MessageBox, _('Installation operation canceled. This is not a vuplus box !!!'), MessageBox.TYPE_INFO, 10) + + def pakiet2(self, yesno): + if yesno: + try: + system('opkg update;opkg configure;sleep 3') + + if os.system('opkg list-installed | grep python-subprocess') != 0: + os.system('opkg install python-subprocess') + if os.system('opkg list-installed | grep python-argparse') != 0: + os.system('opkg install python-argparse') + if os.system('opkg list-installed | grep curl') != 0: + os.system('opkg install curl') + if os.system('opkg list-installed | grep packagegroup-base-nfs') != 0: + os.system('opkg install packagegroup-base-nfs') + if os.system('opkg list-installed | grep ofgwrite') != 0: + os.system('opkg install ofgwrite') + if os.system('opkg list-installed | grep bzip2') != 0: + os.system('opkg install bzip2') + if os.system('opkg list-installed | grep mtd-utils') != 0: + os.system('opkg install mtd-utils') + if os.system('opkg list-installed | grep mtd-utils-ubifs') != 0: + os.system('opkg install mtd-utils-ubifs') + if os.system('opkg list-installed | grep mtd-utils-jffs2') != 0: + os.system('opkg install mtd-utils-jffs2') + if os.system('opkg list-installed | grep kernel-module-nandsim') != 0: + os.system('opkg install kernel-module-nandsim') + if os.system('opkg list-installed | grep packagegroup-base-nfs') != 0: + os.system('opkg install packagegroup-base-nfs') + if os.system('opkg list-installed | grep lzo') != 0: + os.system('opkg install lzo') + if os.system('opkg list-installed | grep python-setuptools') != 0: + os.system('opkg install python-setuptools') + + cmd = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade kernel-image' + system(cmd) + os.system('opkg configure update-modules; sleep 3') + + #VUPLUS ARM + if getCPUSoC() == '7444s' or getCPUSoC() == '7252s' or getCPUSoC() == '7376' or getBoxHostName() == 'vuultimo4k' or getBoxHostName() == 'vuuno4k' or getBoxHostName() == 'vusolo4k' or getBoxHostName() == 'vuuno4kse' : + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/' ) + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm') + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarmvu /sbin/neoinitarmvu; cd') + os.system('chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarmvu') + os.system('opkg download kernel-image') + os.system('mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxVuModel()) + os.system('dd if=/dev/mmcblk0p1 of=/media/neoboot/ImagesUpload/.kernel/flash-kernel-%s.bin' % getBoxVuModel()) + + elif getCPUSoC() == '72604' or getBoxHostName() == 'vuzero4k': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/' ) + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm') + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarmvu /sbin/neoinitarmvu; cd') + os.system('chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarmvu') + os.system('opkg download kernel-image') + os.system('mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxVuModel()) + os.system('dd if=/dev/mmcblk0p4 of=/media/neoboot/ImagesUpload/.kernel/flash-kernel-%s.bin' % getBoxVuModel()) + + elif getCPUSoC() == '7278' or getBoxHostName() == 'vuduo4k': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/' ) + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm') + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarmvu /sbin/neoinitarmvu; cd') + os.system('chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarmvu') + os.system('opkg download kernel-image') + os.system('mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxVuModel()) + os.system('dd if=/dev/mmcblk0p6 of=/media/neoboot/ImagesUpload/.kernel/flash-kernel-%s.bin' % getBoxVuModel()) + + + #Octagon SF4008 + elif getCPUSoC() == 'bcm7251' or getBoxHostName() == 'sf4008': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/' ) + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm') + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarmvu /sbin/neoinitarm; cd') + os.system('chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarm') + os.system('opkg download kernel-image') + os.system('mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + os.system('dd if=/dev/mmcblk0p3 of=/media/neoboot/ImagesUpload/.kernel/flash-kernel-%s.bin' % getBoxHostName()) + + #Zgemma h7S arm + elif getCPUSoC() == 'bcm7251s' or getBoxHostName() == 'h7': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/' ) + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm') + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarmvu /sbin/neoinitarm; cd') + os.system('chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarm') + os.system('opkg download kernel-image') + os.system('mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + os.system('dd if=/dev/kernel of=/media/neoboot/ImagesUpload/.kernel/flash-kernel-%s.bin' % getBoxHostName()) + + #VUPLUS MIPS + elif getCPUSoC() == '7335' or getCPUSoC() == '7413' or getCPUSoC() == '7325' or getCPUSoC() == '7356' or getCPUSoC() == 'bcm7356' or getCPUSoC() == '7429' or getCPUSoC() == '7424' or getCPUSoC() == '7241' or getCPUSoC() == '7405' or getCPUSoC() == '7405(with 3D)' or getCPUSoC() == '7362' or getCPUSoC() == 'bcm7362' or getCPUSoC() == 'BCM7362' or getCPUSoC() == 'bcm7358' or getCPUSoC() == 'bcm7424' or getBoxHostName() == 'bm750' or getBoxHostName() == 'vuduo' or getBoxHostName() == 'vusolo' or getBoxHostName() == 'vuuno' or getBoxHostName() == 'vuultimo' or getBoxHostName() == 'vuultimo' or getBoxHostName() == 'vusolo2' or getBoxHostName() == 'vuduo2' or getBoxHostName() == 'vusolose' or getBoxHostName() == 'vuzero' or getBoxHostName() == 'mbmini' or getBoxHostName() == 'mbultra' or getBoxHostName() == 'osmini' or getBoxHostName() == 'h3': + if not fileExists('/usr/lib/enigma2/python/Tools/HardwareInfoVu.pyo'): + os.system('ln -sfn /usr/lib/enigma2/python/Tools/HardwareInfo.pyo /usr/lib/enigma2/python/Tools/HardwareInfoVu.pyo') + if not fileExists('/usr/lib/enigma2/python/Tools/DreamboxHardware.pyo'): + os.system('ln -sfn /usr/lib/enigma2/python/Tools/StbHardware.pyo /usr/lib/enigma2/python/Tools/DreamboxHardware.pyo') + if not fileExists('/usr/lib/enigma2/python/Tools/DreamboxInfoHandler.pyo'): + os.system('ln -sfn /usr/lib/enigma2/python/Components/PackageInfo.pyo /usr/lib/enigma2/python/Tools/DreamboxInfoHandler.pyo') + + os.system('cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitmips /sbin/neoinitmips; cp -Rf /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitmipsvu /sbin/neoinitmipsvu') + os.system('chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nfidump; chmod 0755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips; rm -r /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitar*; cd') + os.system('chmod 755 /sbin/neoinitmips; chmod 0755 /sbin/neoinitmipsvu') + + if getCPUSoC() == 'bcm7358' or getCPUSoC() == 'bcm7362' or getCPUSoC() == 'BCM7362' or getCPUSoC() == 'bcm7356' or getCPUSoC() == 'bcm7241' or getCPUSoC() == 'bcm7362' or getBoxHostName() == 'mbmini' or getBoxHostName() == 'osmini' or getTunerModel() == 'ini-1000sv' or getTunerModel() == 'h3': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; mv ./bin/fontforneoboot.ttf /usr/share/fonts; mv ./bin/libpngneo /usr/lib; cp -f ./bin/neoinitmips /sbin/neoinitmips; chmod 0755 ./bin/neobm; chmod 0755 /usr/lib/libpngneo; cd; chmod 0755 /sbin/neoinitmips; ln -sf /media/neoboot/ImageBoot/.neonextboot /etc/neoimage') + + elif getBoxHostName() == 'bm750' or getBoxHostName() == 'vuduo' or getBoxHostName() == 'vusolo' or getBoxHostName() == 'vuuno' or getBoxHostName() == 'vuultimo': + #os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd1 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + if fileExists ('/usr/sbin/nanddump'): + os.system('cd; cd /media/neoboot/ImagesUpload/.kernel; /usr/sbin/nanddump /dev/mtd0 -o > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + elif not fileExists ('/usr/sbin/nanddump'): + os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd0 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; rm ./bin/neobm; rm ./neologo.mvi; rm ./bin/fontforneoboot.ttf; rm ./bin/libpngneo; cd') + + elif getBoxHostName() == 'vusolo2' or getBoxHostName() == 'vuduo2' or getBoxHostName() == 'vusolose' or getBoxHostName() == 'vuzero': + #os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd2 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + if fileExists ('/usr/sbin/nanddump'): + os.system('cd; cd /media/neoboot/ImagesUpload/.kernel; /usr/sbin/nanddump /dev/mtd2 -o > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + elif not fileExists ('/usr/sbin/nanddump'): + os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd2 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; rm ./bin/neobm; rm ./neologo.mvi; rm ./bin/fontforneoboot.ttf; rm ./bin/libpngneo; cd') + + if fileExists('/tmp/plik.tar.gz'): + cmd = 'mkdir -p ' + self.mysel + 'ImagesUpload/.egami' #private non-public use patch + system(cmd) + os.system('/bin/tar -xzvf /tmp/plik.tar.gz -C /;rm -fr /tmp/*.tar.gz') + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxVuModel()) + + #OctagonSF4008 - DM900 - Zgemma h7S - Octagon sf 8008 - AX HD60 4K + elif getCPUSoC() == 'hi3798mv200' or getBoxHostName() == 'ax60' or getCPUSoC() == '3798mv200' or getBoxHostName() == 'sf8008' or getCPUSoC() == 'bcm7251' or getCPUSoC() == 'bcm7251s' or getBoxHostName() == 'h7' or getCPUSoC() == 'BCM97252SSFF' or getBoxHostName() == 'dm900': + os.system('cp -f /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitarm /sbin/neoinitarm; chmod 0755 /sbin/neoinitarm; ln -sfn /sbin/neoinitarm /sbin/init') + + else: + self.messagebox = self.session.open(MessageBox, _('Canceled ... NeoBoot will not work properly !!! NeoBoot works only on VuPlus box, Ultimo4k, Solo4k, Uno4k !!!'), MessageBox.TYPE_INFO, 20) + + + + os.system('touch /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neobootup.sh') + cel = open('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neobootup.sh', 'w') + cel.write('#!/bin/sh\n#DESCRIPTION=This script by gutosie\n\ntouch /tmp/.init_reboot\n\nif [ -f /etc/init.d/neobootmount.sh ] ; then\n sync; rm -f /etc/init.d/neobootmount.sh; \nfi \n') + cel.close() + os.system('chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neobootup.sh; ln -s /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/files/neobootup.sh /etc/rcS.d/S50neo; touch /etc/name') + cel = open('/etc/name', 'w') + cel.write('gutosie') + cel.close() + + cmd = 'opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade kernel-image' + system(cmd) + + #MiracleBoxUltra + if getBoxHostName() == 'mbultra': + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + if not fileExists ('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()): + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + #os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd2 -f > vmlinux.gz') + if fileExists ('/usr/sbin/nanddump'): + os.system('cd; cd /media/neoboot/ImagesUpload/.kernel; /usr/sbin/nanddump /dev/mtd2 -o > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + elif not fileExists ('/usr/sbin/nanddump'): + os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd2 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + os.system('rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitmipsvu') + os.system('rm /sbin/neoinitmipsvu') + + #Edision OS MINI + if getCPUSoC() == 'BCM7362' or getBoxHostName() == 'osmini': + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + if not fileExists ('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()): + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + os.system('opkg download kernel-image; sleep 2; mv /home/root/*.ipk /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % getBoxHostName()) + if fileExists ('/usr/sbin/nanddump'): + os.system('cd; cd /media/neoboot/ImagesUpload/.kernel; /usr/sbin/nanddump /dev/mtd0 -o > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + elif not fileExists ('/usr/sbin/nanddump'): + os.system('cd /media/neoboot/ImagesUpload/.kernel/; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/nanddump_mips /dev/mtd0 -f > vmlinux.gz; mv /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel/') + #os.system('cp -rf /etc/fstab.org /etc/fstab; rm /etc/fstab.org') + #os.system('cp -rf /etc/init.d/volatile-media.sh.org /etc/init.d/volatile-media.sh; rm /etc/init.d/volatile-media.sh.org') + os.system('opkg install volatile-media') + os.system('rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitmipsvu') + os.system('rm /sbin/neoinitmipsvu') + + if fileExists("/home/root/vmlinux.gz"): + os.system('mv -f /home/root/vmlinux.gz /media/neoboot/ImagesUpload/.kernel') + os.system('opkg configure update-modules') + + if getCPUtype() == 'ARMv7': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; rm ./bin/neoinitmip*; rm -r ./bin/nanddump; rm ./bin/nfidump; rm ./bin/neobm; rm ./neologo.mvi; rm ./bin/fontforneoboot.ttf; rm ./bin/libpngneo; cd') + elif getCPUtype() == 'MIPS': + os.system('rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/neoinitar*; rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/bin/rebootbot') + + os.system('chmod 644 /media/neoboot/ImagesUpload/.kernel/*') + os.system('chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/*') + + if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"): + if fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxVuModel()) ): + self.myclose2(_('NeoBoot has been installed succesfully !' )) + elif not fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxVuModel()) ): + self.myclose2(_('Error - nie odnaleziono pliku kernela zImage.%s.ipk ' % ( getBoxVuModel()) )) + + #Ultra + if getCPUSoC() == 'bcm7424' or getBoxHostName == 'mbultra' or getTunerModel() == 'ini-8000sv': + if fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxHostName()) ): + self.myclose2(_('NeoBoot has been installed succesfully !' )) + elif not fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxHostName()) ): + self.myclose2(_('Error - nie odnaleziono pliku kernela zImage.%s.ipk ' % ( getBoxHostName()) )) + + else: + self.myclose2(_('NeoBoot has been installed succesfully !' )) + + #Edision OS MINI + if getCPUSoC() == 'BCM7362' or getBoxHostName == 'osmini': + if fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxHostName()) ): + self.myclose2(_('NeoBoot has been installed succesfully !' )) + elif not fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxHostName()) ): + self.myclose2(_('Error - nie odnaleziono pliku kernela zImage.%s.ipk ' % ( getBoxHostName()) )) + + else: + self.myclose2(_('NeoBoot has been installed succesfully !' )) + + except: + pass + else: + self.messagebox = self.session.open(MessageBox, _('Cancelled ... NeoBot will not work correctly !!!'), MessageBox.TYPE_INFO, 6) + + def myclose2(self, message): + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + self.close() + +class NeoBootImageChoose(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + + skin = """ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + """ + else: + skin = """ + \n\t\t\t\t\t\t\t + \n\t\t\t\t\t\t\t + \n\t\t\t\t\t\t\t + \n\t\t\t\t\t\t\t + \n\t\t\t\t\t\t\t + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Format:%A %e %B %Y + +\t\t\t""" + + + def __init__(self, session): + Screen.__init__(self, session) + if fileExists('/tmp/.init_reboot'): + system('rm /tmp/.init_reboot') + + if fileExists('/.multinfo'): + if fileExists('/.control_boot_new_image'): + os.system('rm -f /.control_boot_new_image; touch /.control_ok ') + if not fileExists('/.control_boot_new_image'): + os.system('touch /.control_ok ') + + if fileExists('/.multinfo') and getCPUtype() == 'ARMv7': + if os.path.exists('/proc/stb/info/boxtype'): + if getCPUSoC() == 'bcm7251' or getBoxHostName == 'sf4008': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p4 /media/mmc') + + if fileExists('/.multinfo') and getCPUtype() == 'ARMv7': + if os.path.exists('/proc/stb/info/boxtype'): + if getCPUSoC() == 'bcm7251s' or getBoxHostName() == 'h7': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p3 /media/mmc') + + if getCPUSoC() == 'bcm7251s' or getBoxHostName == 'h7': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p3 /media/mmc') + + if getCPUSoC() == '3798mv200' or getBoxHostName == 'sf8008': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p13 /media/mmc') + + if getCPUSoC() == 'hi3798mv200' or getBoxHostName == 'ax60': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p21 /media/mmc') + + if os.path.exists('/proc/stb/info/model'): + if getTunerModel() == 'dm900' or getCPUSoC() == 'BCM97252SSFF': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p2 /media/mmc') + + if getBoxVuModel() == 'uno4k' or getBoxVuModel() == 'uno4kse' or getBoxVuModel() == 'ultimo4k' or getBoxVuModel() == 'solo4k': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p4 /media/mmc') + + if getBoxVuModel() == 'vu_mmcblk0p4': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p7 /media/mmc') + + if getBoxVuModel() == 'duo4k': + os.system('mkdir -p /media/mmc; mount /dev/mmcblk0p9 /media/mmc') + + + self.list = [] + self.setTitle(' NeoBoot %s - Menu' % PLUGINVERSION + ' ' + 'Ver. update: %s' % UPDATEVERSION) + self['device_icon'] = Pixmap() + self['progreso'] = ProgressBar() + self['linea'] = ProgressBar() + self['config'] = MenuList(self.list) + self['key_red'] = Label(_('Boot Image')) + self['key_green'] = Label(_('Installation')) + self['key_yellow'] = Label(_('Remove Image ')) + self['key_blue'] = Label(_('Info')) + self['key_menu'] = Label(_('More options')) + self['key_1'] = Label(_('Update NeoBot')) + self['key_2'] = Label(_('Start Flash Image')) + self['key_3'] = Label(_('Install Kernel')) + self['label1'] = Label(_('Please choose an image to boot')) + self['label2'] = Label(_('NeoBoot is running from:')) + self['label3'] = Label('') + self['label4'] = Label(_('NeoBoot is running image:')) + self['label5'] = Label('') + self['label6'] = Label('') + self['label7'] = Label('') + self['label8'] = Label(_('Number of images installed:')) + self['label19'] = Label('') + self['label9'] = Label('') + self['label10'] = Label('') + self['label11'] = Label('') + self['label12'] = Label('') + self['label13'] = Label(_('Version update: ')) + self['label14'] = Label(_('NeoBoot version: ')) + self['label15'] = Label(_('Memory disc:')) + self['actions'] = ActionMap(['WizardActions', + 'ColorActions', + 'MenuActions', + 'NumberActionMap', + 'SetupActions', + 'number'], {'ok': self.boot, + 'red': self.boot, + 'green': self.ImageInstall, + 'yellow': self.remove, + 'blue': self.pomoc, + 'ok': self.boot, + 'menu': self.mytools, + '1': self.neoboot_update, + '2': self.ImageFlash, + '3': self.ReinstallKernel, + 'back': self.close_exit}) + if not fileExists('/etc/name'): + os.system('touch /etc/name') + self.onShow.append(self.updateList) + + + def pomoc(self): + if fileExists('/.multinfo'): + mess = _('Information available only when running Flash.') + self.session.open(MessageBox, mess, MessageBox.TYPE_INFO) + else: + self.session.open(Opis) + + def ImageFlash(self): + if not fileExists('/.multinfo'): + self.session.open(MessageBox, _('Sorry, Opcja dostepna tylko z poziomu image uruchomionego w neoboocie.'), MessageBox.TYPE_INFO, 7) + self.close() + else: + cmd = _("echo -e 'Restart in progress...\n'") + cmd1='opkg install --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/*.ipk' + cmd2 = 'mount -a ;ln -sf "init.sysvinit" "/sbin/init" ; echo "Flash " > /media/neoboot/ImageBoot/.neonextboot ;sleep 2; reboot -f' + self.session.openWithCallback(self.up, Console, _('NeoBoot: Deleting Image'), [cmd, cmd1, cmd2]) + + + def deviceneoboot(self): + self.session.open(Montowanie) + + def close_exit(self): + if fileExists("/proc/stb/info/vumodel") and not fileExists("/proc/stb/info/boxtype"): + if not fileExists('/media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk' % ( getBoxVuModel()) ): + mess = _('Error - nie odnaleziono pliku kernela zImage-ipk ') + self.session.open(MessageBox, mess, MessageBox.TYPE_INFO) + + if fileExists('/.multinfo'): + with open('/media/neoboot/ImageBoot/.neonextboot', 'r') as f: + imagefile = f.readline().strip() + f.close() + out = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out.write(imagefile) + out.close() + else: + system('touch /tmp/.init_reboot') + out = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out.write('Flash') + out.close() + self.close() + + def ReinstallKernel(self): + from Plugins.Extensions.NeoBoot.files.tools import ReinstallKernel + self.session.open(ReinstallKernel) + + def neoboot_update(self): + if fileExists('/.multinfo'): + mess = _('Downloading available only from the image Flash.') + self.session.open(MessageBox, mess, MessageBox.TYPE_INFO) + else: + out = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out.write('Flash') + out.close() + message = _('\n\n\n') + message += _('WARNING !: The update brings with it the risk of errors.\n') + message += _('Before upgrading it is recommended that you make a backup NeoBoot.\n') + message += _('Do you want to run the update now ?\n') + message += _('\n') + ybox = self.session.openWithCallback(self.chackupdate2, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('The download neoboot update.')) + + def chackupdate2(self, yesno): + if yesno: + self.chackupdate3() + else: + self.session.open(MessageBox, _('Canceled update.'), MessageBox.TYPE_INFO, 7) + + def chackupdate3(self): + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot;curl -O --ftp-ssl https://raw.githubusercontent.com/gutosie/neoboot/master/ver.txt;sleep 3;cd /') + if not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt'): + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot;fullwget --no-check-certificate https://raw.githubusercontent.com/gutosie/neoboot/master/ver.txt; sleep 3;cd /') + if not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt'): + self.session.open(MessageBox, _('Unfortunately, at the moment not found an update, try again later.'), MessageBox.TYPE_INFO, 8) + else: + mypath = '' + version = open('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt', 'r') + mypath = float(version.read().strip()) + version.close() + if float(UPDATEVERSION) != mypath: + message = _('NeoBoot has detected update.\nDo you want to update NeoBoota now ?') + ybox = self.session.openWithCallback(self.aktualizacjamboot, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Updating ... ')) + elif fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt'): + os.system('rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt') + self.session.open(MessageBox, _('Updated unnecessary, you have the latest version. Please try again later.'), MessageBox.TYPE_INFO) + + def aktualizacjamboot(self, yesno): + if yesno: + if fileExists('/tmp/*.zip'): + os.system('rm /tmp/*.zip') + os.system('cd /tmp; curl -O --ftp-ssl https://codeload.github.com/gutosie/neoboot/zip/master; mv /tmp/master /tmp/neoboot.zip; cd /') + if not fileExists('/tmp/neoboot.zip'): + os.system('cd /tmp;fullwget --no-check-certificate https://codeload.github.com/gutosie/neoboot/zip/master; mv /tmp/master /tmp/neoboot.zip; sleep 3;cd ') + if not fileExists('/tmp/neoboot.zip'): + self.session.open(MessageBox, _('Unfortunately, at the moment not found an update, try again later.'), MessageBox.TYPE_INFO, 8) + else: + os.system('cd /tmp/; unzip -qn ./neoboot.zip; rm -f ./neoboot.zip; cp -rf ./neoboot-master/NeoBoot /usr/lib/enigma2/python/Plugins/Extensions; rm -rf /tmp/neoboot-master; rm /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt; cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; chmod 0755 ./bin/neoini*; chmod 0755 ./ex_init.py; chmod 0755 ./target/*; chmod 0755 ./files/NeoBoot.sh; chmod 0755 ./files/S50fat.sh; cd') + if getCPUtype() == 'MIPS': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; cp -rf ./bin/neoinitmipsvu /sbin; chmod 755 /sbin/neoinitmipsvu; cp -rf ./bin/neoinitmips /sbin; chmod 755 /sbin/neoinitmips; cd') + elif getCPUtype() == 'ARMv7': + os.system('cd /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/; chmod 755 ./files/neobootup.sh; chmod 0755 ./bin/rebootbot; cp -rf ./bin/neoinitarm /sbin; cp -rf ./bin/neoinitarmvu /sbin; chmod 755 /sbin/neoinitarm; chmod 755 /sbin/neoinitarmvu; cd') + + restartbox = self.session.openWithCallback(self.restartGUI, MessageBox, _('Completed update NeoBoot. You need to restart the E2 !!!\nRestart now ?'), MessageBox.TYPE_YESNO) + restartbox.setTitle(_('Restart GUI now ?')) + + else: + os.system('rm -f /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/ver.txt') + self.session.open(MessageBox, _('The update has been canceled.'), MessageBox.TYPE_INFO, 8) + + def restartGUI(self, answer): + if answer is True: + self.session.open(TryQuitMainloop, 3) + else: + self.close() + + def installMedia(self): + images = False + myimages = os.listdir('/media/neoboot/ImagesUpload') + print myimages + for fil in myimages: + if fil.endswith('.zip'): + images = True + break + if fil.endswith('.tar.xz'): + images = True + break + if fil.endswith('.nfi'): + images = True + break + else: + images = False + + if images == True: + self.ImageInstall() + else: + mess = _('[NeoBoot] The /media/neoboot/ImagesUpload directory is EMPTY !!!\nPlease upload the image files in .ZIP or .NFI formats to install.') + self.session.open(MessageBox, mess, MessageBox.TYPE_INFO) + + def MBBackup(self): + from Plugins.Extensions.NeoBoot.files.tools import MBBackup + self.session.open(MBBackup) + + def MBRestore(self): + from Plugins.Extensions.NeoBoot.files.tools import MBRestore + self.session.open(MBRestore) + + def updateList(self): + if not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location'): + self.session.open(NeoBootInstallation) + else: + self.updateListOK() + + def updateListOK(self): + self.list = [] + pluginpath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot' + f = open(pluginpath + '/.location', 'r') + mypath = f.readline().strip() + f.close() + icon = 'dev_usb.png' + if 'card' in mypath or 'sd' in mypath: + icon = 'dev_sd.png' + elif 'ntfs' in mypath: + icon = 'dev_sd.png' + elif 'hdd' in mypath: + icon = 'dev_hdd.png' + elif 'cf' in mypath: + icon = 'dev_cf.png' + icon = pluginpath + '/images/' + icon + png = LoadPixmap(icon) + self['device_icon'].instance.setPixmap(png) + device = '/media/neoboot' + ustot = usfree = usperc = '' + rc = system('df > /tmp/memoryinfo.tmp') + if fileExists('/tmp/memoryinfo.tmp'): + f = open('/tmp/memoryinfo.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: + ustot = parts[1] + usfree = parts[3] + usperc = parts[4] + else: + ustot = 'N/A ' + usfree = parts[2] + usperc = parts[3] + break + + f.close() + os.remove('/tmp/memoryinfo.tmp') + if not fileExists('/usr/lib/enigma2/python/Plugins/Extensions/PowerboardCenter/PBDeviceManager.pyo'): + perc = int(usperc[0:-1]) + self['progreso'].setValue(perc) + green = '#00389416' + red = '#00ff2525' + yellow = '#00ffe875' + orange = '#00ff7f50' + if perc < 30: + color = green + elif perc < 60: + color = yellow + elif perc < 80: + color = orange + else: + color = red + elif fileExists('/usr/lib/enigma2/python/Plugins/Extensions/PowerboardCenter/PBDeviceManager.pyo'): + perc2 = usperc[0:-1] + self['progreso'].setValue(perc2) + green = '#00389416' + red = '#00ff2525' + yellow = '#00ffe875' + orange = '#00ff7f50' + if perc2 < 30: + color = green + elif perc2 < 60: + color = yellow + elif perc2 < 80: + color = orange + else: + color = red + try: + from skin import parseColor + self['label13'].instance.setForegroundColor(parseColor(color)) + self['label14'].instance.setForegroundColor(parseColor(color)) + self['label15'].instance.setForegroundColor(parseColor(color)) + self['progreso'].instance.setForegroundColor(parseColor(color)) + except: + pass + + self.availablespace = usfree[0:-3] + strview = _('Used: ') + usperc + _(' \n Available: ') + usfree[0:-3] + ' MB' + self['label3'].setText(strview) + try: + f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r') + mypath2 = f2.readline().strip() + f2.close() + except: + mypath2 = 'Flash' + + if mypath2 == 'Flash': + image = getImageNeoBoot() + if not fileExists('/.multinfo'): + if fileExists('/etc/issue.net'): + try: + obraz = open('/etc/issue.net', 'r').readlines() + imagetype = obraz[0][:-3] + image = imagetype + open('/media/neoboot/ImageBoot/.Flash', 'w').write(image) + except: + False + if fileExists('/.multinfo'): + if fileExists('/media/mmc/etc/issue.net'): + try: + obraz = open('/media/mmc/etc/issue.net', 'r').readlines() + imagetype = obraz[0][:-3] + image = imagetype + open('/media/neoboot/ImageBoot/.Flash', 'w').write(image) + except: + False + elif fileExists('/etc/issue.net'): + try: + obraz = open('/etc/issue.net', 'r').readlines() + imagetype = obraz[0][:-1] + lines = open('/etc/hostname', 'r').readlines() + boxtype = lines[0][:-1] + image = imagetype[0:-2] + ' ' + boxtype + open('/media/neoboot/ImageBoot/.Flash', 'w').write(image) + except: + False + + elif fileExists('/media/neoboot/ImageBoot/.Flash'): + f = open('/media/neoboot/ImageBoot/.Flash', 'r') + image = f.readline().strip() + f.close() + image = ' [' + image + ']' + self.list.append('Flash' + image) + self['label5'].setText(mypath) + if fileExists('/.multinfo'): + f2 = open('/.multinfo', 'r') + mypath3 = f2.readline().strip() + f2.close() + self['label6'].setText(mypath3) + else: + f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r') + mypath3 = f2.readline().strip() + f2.close() + self['label6'].setText(mypath3) + mypath = '/media/neoboot/ImageBoot' + myimages = listdir(mypath) + for fil in myimages: + if os.path.isdir(os.path.join(mypath, fil)): + self.list.append(fil) + + self['label7'].setText(str(len(self.list) - 1)) + self['config'].setList(self.list) + KERNELVERSION = getKernelImageVersion() + strview = PLUGINVERSION + ' ' + 'Kernel %s' % KERNELVERSION + self['label9'].setText(strview) + self['label19'].setText(readline('/media/neoboot/ImagesUpload/.kernel/used_flash_kernel')) + strview = UPDATEVERSION + self['label10'].setText(strview) + + def mytools(self): + from Plugins.Extensions.NeoBoot.files.tools import MBTools + self.session.open(MBTools) + + def remove(self): + self.mysel = self['config'].getCurrent() + if 'Flash' in self.mysel: + self.mysel = 'Flash' + if self.mysel: + f = open('/media/neoboot/ImageBoot/.neonextboot', 'r') + mypath = f.readline().strip() + f.close() + try: + if fileExists('/.multinfo'): + self.session.open(MessageBox, _('Sorry you can delete only from the image Flash.'), MessageBox.TYPE_INFO, 5) + elif self.mysel == 'Flash': + self.session.open(MessageBox, _('Sorry you cannot delete Flash image'), MessageBox.TYPE_INFO, 5) + elif mypath == self.mysel: + self.session.open(MessageBox, _('Sorry you cannot delete the image currently booted from.'), MessageBox.TYPE_INFO, 5) + else: + out = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out.write('Flash') + out.close() + message = _('Delete the selected image - ') + self.mysel + _('\nDelete ?') + ybox = self.session.openWithCallback(self.remove2, MessageBox, message, MessageBox.TYPE_YESNO) + ybox.setTitle(_('Delete Confirmation')) + except: + print 'no image to remove' + + else: + self.mysel + + def up(self): + self.list = [] + self['config'].setList(self.list) + self.updateList() + + def up2(self): + try: + self.list = [] + self['config'].setList(self.list) + self.updateList() + except: + print ' ' + + def remove2(self, yesno): + if yesno: + cmd = _("echo -e 'Deleting in progress...\n'") + cmd1 = 'rm -r /media/neoboot/ImageBoot/' + self.mysel + self.session.openWithCallback(self.up, Console, _('NeoBoot: Deleting Image'), [cmd, cmd1]) + else: + self.session.open(MessageBox, _('Removing canceled!'), MessageBox.TYPE_INFO) + + def ImageInstall(self): + if not fileExists('/.multinfo'): + KERNEL_VERSION = getKernelVersionString() + if getCPUSoC() == 'hi3798mv200' or getBoxHostName == 'ax60' or getCPUSoC() == '3798mv200' or getBoxHostName() == 'sf8008' or getCPUSoC() == 'bcm7251' or getBoxHostName() == 'sf4008' or getCPUSoC() == 'bcm7251s' or getCPUSoC() == '7241' or getBoxHostName() == 'h7' or getBoxHostName() == 'dm900' or getCPUSoC() == 'BCM97252SSFF' or getCPUSoC() == '7444s' or getCPUSoC() == '7252s' or getCPUSoC() == '7376' or getCPUSoC() == '72604' or getCPUSoC() == '7278' or getCPUSoC() == '7335' or getCPUSoC() == '7413' or getCPUSoC() == '7325' or getCPUSoC() == '7356' or getCPUSoC() == 'bcm7356' or getCPUSoC() == '7429' or getCPUSoC() == '7424' or getCPUSoC() == '7362' or getCPUSoC() == 'bcm7362' or getCPUSoC() == 'BCM7362' or getCPUSoC() == 'bcm7358' or getCPUSoC() == '7405' or getCPUSoC() == '7405(with 3D)' or getCPUSoC() == 'bcm7424' or getBoxHostName() == 'vuultimo' or getBoxHostName() == 'mbmini' or getBoxHostName() == 'osmini' or getBoxHostName() == 'mbultra' or getBoxHostName() == 'h3': + self.extractImage() + else: + self.messagebox = self.session.open(MessageBox, _('Nie wykryto odpowiedniego STB do instalacji !!!!'), MessageBox.TYPE_INFO, 8) + self.close() + else: + self.messagebox = self.session.open(MessageBox, _('Instalacja tylko z poziomu systemu flash.'), MessageBox.TYPE_INFO, 8) + self.close() + + def extractImage(self): + images = False + if fileExists('/media/neoboot/ImageBoot/.without_copying'): + system('rm /media/neoboot/ImageBoot/.without_copying') + + if not os.path.exists('/media/neoboot/ImagesUpload'): + system('mkdir /media/neoboot/ImagesUpload') + myimages = listdir('/media/neoboot/ImagesUpload') + print myimages + for fil in myimages: + if fil.endswith('.zip'): + images = True + break + if fil.endswith('.tar.xz'): + images = True + break + if fil.endswith('.nfi'): + images = True + break + else: + images = False + + if images == True: + #self.session.openWithCallback(self.up2, InstalacjaImage) + from Plugins.Extensions.NeoBoot.unpack import InstallImage + self.session.open(InstallImage) + else: + self.ImageSystem() + + def ImageSystem(self): + if fileExists('/media/neoboot/ImageBoot/.neonextboot'): + self.messagebox = self.session.open(MessageBox, _('[NeoBoot] The /media/neoboot/ImagesUpload directory is EMPTY !!!\nPlease upload the image files in .ZIP or .NFI formats to install.\n'), MessageBox.TYPE_INFO, 8) + self.close() + else: + self.close() + + def boot(self): + self.mysel = self['config'].getCurrent() + if 'Flash' in self.mysel: + self.mysel = 'Flash' + if self.mysel: + out = open('/media/neoboot/ImageBoot/.neonextboot', 'w') + out.write(self.mysel) + out.close() + from Plugins.Extensions.NeoBoot.run import StartImage + self.session.open(StartImage) + + def myClose(self, message): + self.session.open(MessageBox, message, MessageBox.TYPE_INFO) + self.close() + +####################### _(-_-)_ gutosie _(-_-)_ ####################### +####################### _(-_-)_ gutosie _(-_-)_ ####################### + +def readline(filename, iferror = ''): + if iferror[:3] == 'or:': + data = iferror[3:] + else: + data = iferror + try: + if os.path.exists(filename): + with open(filename) as f: + data = f.readline().strip() + f.close() + except Exception: + PrintException() + return data + +def checkimage(): + mycheck = False + if fileExists('/proc/stb/info'): #vumodel'): ogranicza tylko dla vu+ + mycheck = True + else: + mycheck = False + return mycheck + + +def checkversion(session): + version = 0 + if fileExists('/media/neoboot/ImageBoot/.version'): + f = open('/media/neoboot/ImageBoot/.version') + version = float(f.read()) + f.close() + if fileExists('/media/neoboot/ImageBoot/.neonextboot'): + f2 = open('/media/neoboot/ImageBoot/.neonextboot', 'r') + mypath2 = f2.readline().strip() + f2.close() + if mypath2 != 'Flash' or mypath2 == 'Flash' and checkimage(): + if float(PLUGINVERSION) != version: + session.open(MyUpgrade) + else: + session.open(NeoBootImageChoose) + else: + session.open(MessageBox, _('Sorry: Wrong image in flash found. You have to install in flash Vu+ or Octagon-sf4008 Image !!!'), MessageBox.TYPE_INFO, 10) + else: + session.open(NeoBootInstallation) + +def main(session, **kwargs): + try: + doMount=True + with open('/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/.location', 'r') as f: + mypath = f.readline().strip() + if not os.path.exists('/media/neoboot'): + system('mkdir /media/neoboot') + with open('/proc/mounts', 'r') as f: + for line in f.readlines(): + if line.find('/media/neoboot') != -1: + doMount=False + break + if doMount: + cmd = 'mount ' + mypath + ' /media/neoboot' + system(cmd) + except Exception: + pass + + checkversion(session) + +def menu(menuid, **kwargs): + if menuid == 'mainmenu': + return [(_('NEOBOOT'), + main, + 'neo_boot', + 1)] + return [] + +from Plugins.Plugin import PluginDescriptor + +def Plugins(**kwargs): + return [PluginDescriptor(name='NeoBoot ', description='NeoBoot', where=PluginDescriptor.WHERE_MENU, fnc=menu), PluginDescriptor(name='NeoBoot', description=_('Installing multiple images'), icon='neo.png', where=PluginDescriptor.WHERE_PLUGINMENU, fnc=main)] diff --git a/NeoBoot/run.py b/NeoBoot/run.py new file mode 100644 index 0000000..b60eeed --- /dev/null +++ b/NeoBoot/run.py @@ -0,0 +1,399 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +from __init__ import _ +from Plugins.Extensions.NeoBoot.files import Harddisk +from Plugins.Extensions.NeoBoot.files.stbbranding import getKernelVersionString, getKernelImageVersion, getCPUtype, getCPUSoC, getImageNeoBoot, getBoxVuModel, getBoxHostName, getTunerModel +from enigma import getDesktop +from enigma import eTimer +from Screens.Screen import Screen +from Screens.Console import Console +from Screens.MessageBox import MessageBox +from Screens.ChoiceBox import ChoiceBox +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Screens.Standby import TryQuitMainloop +from Components.About import about +from Components.Sources.List import List +from Components.Button import Button +from Components.ActionMap import ActionMap, NumberActionMap +from Components.GUIComponent import * +from Components.MenuList import MenuList +from Components.Input import Input +from Components.Label import Label +from Components.ProgressBar import ProgressBar +from Components.ScrollLabel import ScrollLabel +from Components.Pixmap import Pixmap, MultiPixmap +from Components.config import * +from Components.ConfigList import ConfigListScreen +from Tools.LoadPixmap import LoadPixmap +from Tools.Directories import fileExists, pathExists, createDir, resolveFilename, SCOPE_PLUGINS +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 +import os +import time + + +class StartImage(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + \n\t\t\t + \n\t\t\t\t + \n \t\t{"template": [ + \n \t\t\tMultiContentEntryText(pos = (90, 1), size = (920, 66), flags = RT_HALIGN_LEFT|RT_VALIGN_CENTER, text = 0), + \n \t\t\tMultiContentEntryPixmapAlphaTest(pos = (8, 4), size = (66, 66), png = 1), + \n \t\t\t], + \n \t\t\t"fonts": [gFont("Regular", 40)],\n \t\t\t"itemHeight": 66\n \t\t} + \n \t\t\n\t\t + \n + \n\t\t + \n\t\t """ + else: + skin = """ + \n\t\t\t + + \n\t\t\t\t + \n \t\t{"template": [ + \n \t\t\tMultiContentEntryText(pos = (180, 0), 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": 35\n \t\t}\n \t\t + \n\t\t\n + + \n\t\t """ + + __module__ = __name__ + def __init__(self, session): + Screen.__init__(self, session) + self.list = [] + self['list'] = List(self.list) + self.select() + self['actions'] = ActionMap(['WizardActions', 'ColorActions'], {'ok': self.KeyOk, + 'back': self.close}) + self['label1'] = Label(_('Start the chosen system now ?')) + self['label2'] = Label(_('Select OK to run the image.')) + + def select(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 = (_('OK Start image...'), png, 0) + self.list.append(res) + self['list'].list = self.list + +################################# + def KeyOk(self): + if getImageNeoBoot() != 'Flash': + cmd = _("echo -e '[NeoBoot] Uwaga!!! po poprawnym starcie wybranego oprogramowania w neoboot,\nnalezy uruchomic NEOBOOTA by potwierdzic prawidlowy start image.\n\nNacisnij OK lub exit na pilocie by kontynuowac...\n\n\n'") + self.session.openWithCallback(self.StartImageInNeoBoot, Console, _('NeoBoot: Start image...'), [cmd]) + else: + self.StartImageInNeoBoot() + + def StartImageInNeoBoot(self): + if fileExists('/media/neoboot/ImageBoot/%s/.control_ok ' % ( getImageNeoBoot())): + system('touch /tmp/.control_ok ') + elif not fileExists('/media/neoboot/ImageBoot/%s/.control_ok ' % ( getImageNeoBoot())): + system('touch /media/neoboot/ImageBoot/%s//.control_boot_new_image ' % ( getImageNeoBoot())) + +#################################### + system('sync; echo 3 > /proc/sys/vm/drop_caches; chmod 755 /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/*') + self.sel = self['list'].getCurrent() + if self.sel: + self.sel = self.sel[2] + if self.sel == 0: + if fileExists('/media/mmc/etc/init.d/neobootmount.sh'): + os.system('rm -f /media/mmc/etc/init.d/neobootmount.sh;') + + #DM900; Zgemma h7S; AX HD60 4K + if getCPUSoC() == 'hi3798mv200' or getBoxHostName == 'ax60' or getCPUSoC() == '3798mv200' or getBoxHostName() == 'sf8008' or getCPUSoC() == 'bcm7251s' or getBoxHostName() == 'h7' or getCPUSoC() == 'BCM97252SSFF' or getBoxHostName() == 'dm900': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + os.system('cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init; reboot -d -f -h -i') + elif not fileExists('/.multinfo'): + os.system('ln -sfn /sbin/init.sysvinit /sbin/init; reboot -d -f -h -i') + elif getImageNeoBoot() != 'Flash': + os.system('ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i') + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że multiboot nie wspiera tego modelu STB !!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #MiracleBox, ET8500, Formuler F1, Formuler F3, Atemio6000 - MIPS # test - ultra, osmini + elif getCPUtype() != 'ARMv7' and getCPUSoC() == 'bcm7358' or getCPUSoC() == 'bcm7362' or getCPUSoC() == 'bcm7356' or getCPUSoC() == 'bcm7241' or getCPUSoC() == 'bcm7362' or getBoxHostName() == 'mbmini' or getBoxHostName() == 'h3' or getTunerModel() == 'ini-1000sv': #or getBoxHostName == 'mbultra' or getCPUSoC() == 'BCM7362' or getBoxHostName() == 'osmini' + if getImageNeoBoot() == 'Flash': + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + cmd='ln -sfn /sbin/neoinitmips /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot ....'), [cmd]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że multiboot nie wspiera tego modelu STB !!! '), MessageBox.TYPE_INFO, 8) + self.close() + + + + #MiracleBox Ultra - MIPS #Test + elif getCPUtype() != 'ARMv7' and getCPUSoC() == 'bcm7424' or getTunerModel() == 'ini-8000sv': + + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/mbultra_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot MiracleBox Ultra...'), [cmd2]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz ' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot MiracleBox Ultra Rebooting....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/mbultra_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot MiracleBox Ultra....'), [cmd2]) + + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/init.sysvinit /sbin/init; opkg install --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxHostName() + self.session.open(Console, _('NeoBoot MiracleBox Ultra Rebooting....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/init.sysvinit /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/mbultra_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot MiracleBox Ultra....'), [cmd2]) + + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że model STB nie jest wpierany przez multiboota!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + + #Edision OS MINI - MIPS #Test + elif getCPUtype() != 'ARMv7' and getCPUSoC() == 'BCM7362' or getBoxHostName() == 'osmini': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/osmini_dev_mtd0.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/osmini_dev_mtd0.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='opkg install --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxHostName() + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxHostName())): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/osmini_dev_mtd0.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że model STB nie jest wpierany przez multiboota!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #Octagon SF4008 ARM + elif getCPUSoC() == 'bcm7251' or getBoxHostName() == 'sf4008' : + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd1='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/sf4008_mmcblk0p3.sh' + self.session.open(Console, _('NeoBoot Octagon SF4008 ARM ...'), [cmd1]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Octagon SF4008 ARM ....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/sf4008_mmcblk0p3.sh' + self.session.open(Console, _('NeoBoot Octagon SF4008 ARM ....'), [cmd1]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='cd /media/mmc; ln -sf /sbin/init.sysvinit /media/mmc/sbin/init; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxHostName() + self.session.open(Console, _('NeoBoot Octagon SF4008 ARM ....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='cd /media/mmc; ln -sfn /sbin/init.sysvinit /media/mmc/sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/sf4008_mmcblk0p3.sh' + self.session.open(Console, _('NeoBoot Octagon SF4008 ARM ....'), [cmd1]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że Twój model STB nie jest wpierany!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #Zgemma h7S ARM + elif getCPUSoC() == 'bcm7251s' or getBoxHostName() == 'h7' : + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd1='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/h7s_mmcblk0p2.sh' + self.session.open(Console, _('NeoBoot Zgemma h7S ARM ...'), [cmd1]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Zgemma h7S ARM ....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/h7s_mmcblk0p2.sh' + self.session.open(Console, _('NeoBoot Zgemma h7S ARM ....'), [cmd1]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='cd /media/mmc; ln -sf /sbin/neoinitarm /media/mmc/sbin/init; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxHostName() + self.session.open(Console, _('NeoBoot Zgemma h7S ARM ....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxHostName())): + cmd1='cd /media/mmc; ln -sfn /sbin/neoinitarm /media/mmc/sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/h7s_mmcblk0p2.sh' + self.session.open(Console, _('NeoBoot Zgemma h7S ARM ....'), [cmd1]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że Twój model STB nie jest wpierany!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #VUPLUS ARM - vu_mmcblk0p1.sh + elif getCPUSoC() == '7444s' or getBoxHostName() == 'vuultimo4k' or getCPUSoC() == '7376' or getBoxHostName() == 'vusolo4k' or getCPUSoC() == '7252s' or getBoxHostName() == 'vuuno4kse': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd1='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p1.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarmvu /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p1.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sf /sbin/neoinitarm /media/mmc/sbin/init; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxVuModel() + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sfn /sbin/neoinitarmvu /media/mmc/sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p1.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że Twój model STB nie jest wpierany!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #VUPLUS ARM - vu_mmcblk0p4.sh + elif getCPUSoC() == '72604' or getBoxHostName() == 'vuzero4k': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd1='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p4.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarmvu /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p4.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sf /sbin/neoinitarm /media/mmc/sbin/init; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxVuModel() + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sfn /sbin/neoinitarmvu /media/mmc/sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p4.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że Twój model STB nie jest wpierany!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #VUPLUS ARM - Duo4k.sh + elif getCPUSoC() == '7278' or getBoxHostName() == 'vuduo4k': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd1='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p6.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarm /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='ln -sfn /sbin/neoinitarmvu /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p6.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sf /sbin/neoinitarm /media/mmc/sbin/init; opkg install --force-maintainer --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxVuModel() + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/zImage.%s' % ( getImageNeoBoot(), getBoxVuModel())): + cmd1='cd /media/mmc; ln -sfn /sbin/neoinitarmvu /media/mmc/sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_mmcblk0p6.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd1]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że Twój model STB nie jest wpierany!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + #VUPLUS MIPS mtd2 + elif getCPUSoC() == '7356' or getCPUSoC() == '7429' or getCPUSoC() == '7424' or getCPUSoC() == '7241' or getCPUSoC() == '7362' or getBoxHostName() == 'vusolo2' or getBoxHostName() == 'vusolose' or getBoxHostName() == 'vuduo2' or getBoxHostName() == 'vuzero': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot MIPS...'), [cmd2]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='ln -sfn /sbin/neoinitmipsvu /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='opkg install --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxVuModel() + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd2.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że model STB nie jest wpierany przez multiboota!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + + #VUPLUS MIPS mtd1 + elif getCPUSoC() == '7335' or getCPUSoC() == '7325' or getCPUSoC() == '7405' or getCPUSoC() == '7405(with 3D)' or getBoxHostName() == 'vuultimo' or getBoxHostName() == 'bm750' or getBoxHostName() == 'duo' or getBoxHostName() == 'vuuno' or getBoxHostName() == 'vusolo' or getBoxHostName() == 'vuduo': + if getImageNeoBoot() == 'Flash': + if fileExists('/.multinfo'): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd1.sh' + self.session.open(Console, _('NeoBoot MIPS...'), [cmd2]) + elif not fileExists('/.multinfo'): + self.session.open(TryQuitMainloop, 2) + elif getImageNeoBoot() != 'Flash': + if not fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='ln -sfn /sbin/neoinitmips /sbin/init; reboot -d -f -h -i' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='ln -sfn /sbin/neoinitmipsvu /sbin/init; /usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd1.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/.multinfo'): + if not fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='opkg install --force-reinstall --force-overwrite --force-downgrade /media/neoboot/ImagesUpload/.kernel/zImage.%s.ipk; reboot -d -f -h -i' % getBoxVuModel() + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + elif fileExists('/media/neoboot/ImageBoot/%s/boot/%s.vmlinux.gz' % ( getImageNeoBoot(), getBoxVuModel())): + cmd2='/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot/target/vu_dev_mtd1.sh' + self.session.open(Console, _('NeoBoot Arm....'), [cmd2]) + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że model STB nie jest wpierany przez multiboota!!! '), MessageBox.TYPE_INFO, 8) + self.close() + + else: + os.system('echo "Flash " >> /media/neoboot/ImageBoot/.neonextboot') + self.messagebox = self.session.open(MessageBox, _('Wygląda na to że model STB nie jest wpierany przez NEOBOOT !!! '), MessageBox.TYPE_INFO, 8) + self.close() + diff --git a/NeoBoot/unpack.py b/NeoBoot/unpack.py new file mode 100644 index 0000000..cf4f97b --- /dev/null +++ b/NeoBoot/unpack.py @@ -0,0 +1,313 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +from __init__ import _ +from Plugins.Extensions.NeoBoot.files import Harddisk +from Plugins.Extensions.NeoBoot.files.stbbranding import getKernelVersionString, getKernelImageVersion, getCPUtype, getCPUSoC, getImageNeoBoot, getBoxVuModel, getBoxHostName, getTunerModel +from enigma import getDesktop +from enigma import eTimer +from Screens.Screen import Screen +from Screens.Console import Console +from Screens.MessageBox import MessageBox +from Screens.ChoiceBox import ChoiceBox +from Screens.VirtualKeyBoard import VirtualKeyBoard +from Screens.Standby import TryQuitMainloop +from Components.About import about +from Components.Sources.List import List +from Components.Button import Button +from Components.ActionMap import ActionMap, NumberActionMap +from Components.GUIComponent import * +from Components.MenuList import MenuList +from Components.Input import Input +from Components.Label import Label +from Components.ProgressBar import ProgressBar +from Components.ScrollLabel import ScrollLabel +from Components.Pixmap import Pixmap, MultiPixmap +from Components.config import * +from Components.ConfigList import ConfigListScreen +from Tools.LoadPixmap import LoadPixmap +from Tools.Directories import fileExists, pathExists, createDir, resolveFilename, SCOPE_PLUGINS +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 +import os +import time + +class InstallImage(Screen, ConfigListScreen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + + + + + + + + + + + \ + """ + else: + skin = """ + + + + + + + + + + + + + + """ + + def __init__(self, session): + Screen.__init__(self, session) + fn = 'NewImage' + sourcelist = [] + for fn in os.listdir('/media/neoboot/ImagesUpload'): + if fn.find('.zip') != -1: + fn = fn.replace('.zip', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.tar.xz') != -1: + fn = fn.replace('.tar.xz', '') + sourcelist.append((fn, fn)) + continue + if fn.find('.nfi') != -1: + fn = fn.replace('.nfi', '') + sourcelist.append((fn, fn)) + continue + if len(sourcelist) == 0: + sourcelist = [('None', 'None')] + self.source = ConfigSelection(choices=sourcelist) + self.target = ConfigText(fixed_size=False) + self.CopyFiles = ConfigYesNo(default=False) + self.CopyKernel = ConfigYesNo(default=True) + self.TvList = ConfigYesNo(default=True) + self.Montowanie = ConfigYesNo(default=True) + self.LanWlan = ConfigYesNo(default=True) + self.Sterowniki = ConfigYesNo(default=False) + self.InstallSettings = ConfigYesNo(default=False) + self.ZipDelete = ConfigYesNo(default=False) + self.RepairFTP = ConfigYesNo(default=False) + self.SoftCam = ConfigYesNo(default=False) + self.MediaPortal = ConfigYesNo(default=False) + self.BlackHole = ConfigYesNo(default=False) + self.target.value = '' + self.curselimage = '' + + try: + if self.curselimage != self.source.value: + self.target.value = self.source.value[:-13] + self.curselimage = self.source.value + except: + pass + + self.createSetup() + ConfigListScreen.__init__(self, self.list, session=session) + self.source.addNotifier(self.typeChange) + self['actions'] = ActionMap(['OkCancelActions', + 'ColorActions', + 'CiSelectionActions', + 'VirtualKeyboardActions'], {'cancel': self.cancel, + 'red': self.cancel, + 'green': self.imageInstall, + 'yellow': self.HelpInstall, + 'blue': self.openKeyboard}, -2) + self['key_green'] = Label(_('Install')) + self['key_red'] = Label(_('Cancel')) + self['key_yellow'] = Label(_('Help')) + self['key_blue'] = Label(_('Keyboard')) + self['HelpWindow'] = Pixmap() + self['HelpWindow'].hide() + + def createSetup(self): + self.list = [] + self.list.append(getConfigListEntry(_('Source Image file'), self.source)) + self.list.append(getConfigListEntry(_('Image Name'), self.target)) + self.list.append(getConfigListEntry(_('Do not copy files from Flash to the installed image ?'), self.CopyFiles )) + self.list.append(getConfigListEntry(_('Copy the kernel of the installed system (recommended only for Vu+) ?'), self.CopyKernel )) + self.list.append(getConfigListEntry(_('Copy the channel list ?'), self.TvList)) + self.list.append(getConfigListEntry(_('Copy mounting disks ? (Recommended)'), self.Montowanie)) + self.list.append(getConfigListEntry(_('Copy network settings LAN-WLAN ?'), self.LanWlan)) + self.list.append(getConfigListEntry(_('Copy the drivers ? (Recommended only other image.)'), self.Sterowniki)) + self.list.append(getConfigListEntry(_('Copy Settings to the new Image'), self.InstallSettings)) + self.list.append(getConfigListEntry(_('Delete Image zip after Install ?'), self.ZipDelete)) + self.list.append(getConfigListEntry(_('Repair FTP ? (Recommended only other image if it does not work.)'), self.RepairFTP)) + self.list.append(getConfigListEntry(_('Copy config SoftCam ?'), self.SoftCam)) + self.list.append(getConfigListEntry(_('Copy MediaPortal ?'), self.MediaPortal)) + self.list.append(getConfigListEntry(_('Path BlackHole ? (Not recommended for VuPlus)'), self.BlackHole)) + + def HelpInstall(self): + if fileExists('/.multinfo'): + mess = _('Information available only when running Flash.') + self.session.open(MessageBox, mess, MessageBox.TYPE_INFO) + else: + self.session.open(HelpInstall) + + + + def typeChange(self, value): + self.createSetup() + self['config'].l.setList(self.list) + if self.curselimage != self.source.value: + self.target.value = self.source.value[:-13] + self.curselimage = self.source.value + + def openKeyboard(self): + sel = self['config'].getCurrent() + if sel: + if sel == self.target: + if self['config'].getCurrent()[1].help_window.instance is not None: + self['config'].getCurrent()[1].help_window.hide() + self.vkvar = sel[0] + if self.vkvar == _('Image Name'): + self.session.openWithCallback(self.VirtualKeyBoardCallback, VirtualKeyBoard, title=self['config'].getCurrent()[0], text=self['config'].getCurrent()[1].value) + return + + def VirtualKeyBoardCallback(self, callback = None): + if callback is not None and len(callback): + self['config'].getCurrent()[1].setValue(callback) + self['config'].invalidate(self['config'].getCurrent()) + return + + def imageInstall(self): + if self.check_free_space(): + pluginpath = '/usr/lib/enigma2/python/Plugins/Extensions/NeoBoot' + myerror = '' + source = self.source.value.replace(' ', '') + target = self.target.value.replace(' ', '') + for fn in os.listdir('/media/neoboot/ImageBoot'): + if fn == target: + myerror = _('Sorry, an Image with the name ') + target + _(' is already installed.\n Please try another name.') + continue + + if source == 'None': + myerror = _('You have to select one Image to install.\nPlease, upload your zip file in the folder: /media/neoboot/ImagesUpload and select the image to install.') + if target == '': + myerror = _('You have to provide a name for the new Image.') + if target == 'Flash': + myerror = _('Sorry this name is reserved. Choose another name for the new Image.') + if len(target) > 35: + myerror = _('Sorry the name of the new Image is too long.') + if myerror: + myerror + self.session.open(MessageBox, myerror, MessageBox.TYPE_INFO) + else: + myerror + message = "echo -e '" + message += _('NeoBot started installing new image.\n') + message += _('The installation process may take a few minutes.\n') + message += _('Please: DO NOT reboot your STB and turn off the power.\n') + message += _('Please, wait...\n') + message += "'" + cmd1 = 'python ' + pluginpath + '/ex_init.py' + cmd = '%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s ' % (cmd1, + source, + target.replace(' ', '.'), + str(self.CopyFiles.value), + str(self.CopyKernel.value), + str(self.TvList.value), + str(self.Montowanie.value), + str(self.LanWlan.value), + str(self.Sterowniki.value), + str(self.InstallSettings.value), + str(self.ZipDelete.value), + str(self.RepairFTP.value), + str(self.SoftCam.value), + str(self.MediaPortal.value), + str(self.BlackHole.value)) + print '[NEO-BOOT]: ', cmd + self.session.open(Console, _('NEOBoot: Install new image'), [message, cmd]) + + + def check_free_space(self): + if Freespace('/media/neoboot/ImagesUpload') < 500000: + self.session.open(MessageBox, _('Not enough free space on /media/neoboot/ !!\nYou need at least 500Mb free space.\n\nExit plugin.'), type=MessageBox.TYPE_ERROR) + return False + return True + + def cancel(self): + self.close() + +class HelpInstall(Screen): + screenwidth = getDesktop(0).size().width() + if screenwidth and screenwidth == 1920: + skin = """ + + + """ + else: + skin = """ + + """ + __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 = _('Source Image file') + message += _(' -Wybierz kursorem pilota oprogramowanie do zainstalowania (w lewo lub prawo).\n\n') + + message += _('Image Name') + message += _(' -Zmień nazwę image - aby zmienić naciśnij na pilocie niebieski.\n\n') + + message += _('Do not copy files from Flash to the installed image ?') + message += _(' - po zaznaczeniu tej opcji nie zostanie nic skopiowane z image flash do instalowanego image w neoboot. \n\n') + + message += _('Copy the kernel of the installed system (recommended only for Vu+) ?') + message += _(' - po zaznaczeniu tej opcji zostanie skopiowany plik jądra (kernel) instalowanego image do neoboota, zalecane tylko dla STB vuplus \n\n') + + message += _('Copy the channel list ?') + message += _(' - opcja kopiuje listę kanałów z flasha do instalowanego image w neoboocie.\n\n') + + message += _('Copy mounting disks ? (Recommended)') + message += _(' - opcja przenosi do instalowanego image w neoboot ustawienia montowania podłaczonych urządzeń do tunera.\n\n') + + message += _('Copy network settings LAN-WLAN ?') + message += _(' - opcja przenosi pliki z zawartymi ustawieniami dla sieci lan i wlan. \n\n ') + + message += _('Copy the drivers ? (Recommended only other image.)') + message += _(' - opcja przenosi z flasza sterowniki do instalowanego image w neoboocie, zalecane tylko w przypadku jeśli instalujemy image od innego model niż posiadamy.\n\n') + + message += _('Copy Settings to the new Image') + message += _(' - opcja kopiuje ustawienia oprogramowania z flasza do instalowanego systemu w neoboocie.\n\n') + + message += _('Delete Image zip after Install ?') + message += _(' - po instalacji, opcja kasuje plik zip image z katalogu ImagesUpload. \n\n') + + message += _('Repair FTP ? (Recommended only other image if it does not work.)') + message += _(' - opcja w niektórych przypadkach naprawia w instalowanym image polączenie FTP (ang. File Transfer Protocol) \n\n') + + message += _('Copy config SoftCam ?') + message += _(' - opcja kopiuje configi oscama i cccam (openpli -domyślnie)\n\n') + + message += _('Path BlackHole ? (Not recommended for VuPlus)') + message += _(' - opcja przeznaczona dla image blackhole, pomaga uruchomić BH w neoboot \n\n') + + self['lab1'].show() + self['lab1'].setText(message) + +def Freespace(dev): + statdev = os.statvfs(dev) + space = statdev.f_bavail * statdev.f_frsize / 1024 + print '[NeoBoot] Free space on %s = %i kilobytes' % (dev, space) + return space \ No newline at end of file