diff --git a/install.py b/install.py index e3e6500..ca00cc5 100644 --- a/install.py +++ b/install.py @@ -8,7 +8,9 @@ import os import sys -import urllib.request, urllib.error, urllib.parse +import urllib.request +import urllib.error +import urllib.parse import subprocess @@ -22,7 +24,7 @@ class Install(): def mbusb(self): try: - from PyQt5 import QtGui +# from PyQt5 import QtGui if subprocess.call("python3 setup.py install --record ./.install_files.txt", shell=True) == 0: print("Installation finished.") print("Find multibootusb under system menu or run from terminal using the following command...") @@ -52,7 +54,8 @@ class Install(): print("You can uninstall multibootusb at any time using follwing command (with root/sudo previlage)") print("\nsudo ./uninstall.sh\n") - def internet_on(self): + @staticmethod + def internet_on(): try: ret = urllib.request.urlopen('https://www.google.com', timeout=1) print("Interconnection exist.") @@ -64,7 +67,8 @@ class Install(): return result - def supported_pac_manager(self): + @staticmethod + def supported_pac_manager(): pac_managers = ["pacman", "yum", "apt-get", "zypper", "urpmi"] result = "0" for pac_man in pac_managers: @@ -76,10 +80,12 @@ class Install(): return False - def install_dependency_package(self): + @staticmethod + def install_dependency_package(): if subprocess.call("which pacman", shell=True) == 0: subprocess.call("pacman -Sy --noconfirm", shell=True) - if subprocess.call("pacman -S --needed --noconfirm p7zip python-pyqt5 mtools python3-six parted util-linux python-dbus") == 0: # Thank you Neitsab for "--needed" argument. + # Thank you Neitsab for "--needed" argument. + if subprocess.call("pacman -S --needed --noconfirm p7zip python-pyqt5 mtools python3-six parted util-linux python-dbus") == 0: result = True elif subprocess.call("which yum", shell=True) == 0: subprocess.call("yum check-update", shell=True) @@ -98,10 +104,7 @@ class Install(): if subprocess.call("urpmi install -auto mtools util-linux p7zip python3-pyudev python3-six parted python3-qt5", shell=True) == 0: result = True - if result is not True: - return False - else: - result + return bool(result) install = Install() diff --git a/scripts/admin.py b/scripts/admin.py index c3a94a8..19edcc4 100644 --- a/scripts/admin.py +++ b/scripts/admin.py @@ -102,7 +102,7 @@ def runAsAdmin(cmdLine=None, wait=True): cmd = '"%s"' % (cmdLine[0],) # XXX TODO: isn't there a function or something we can call to massage command line params? params = " ".join(['"%s"' % (x,) for x in cmdLine[1:]]) - cmdDir = '' +# cmdDir = '' showCmd = win32con.SW_SHOWNORMAL #showCmd = win32con.SW_HIDE lpVerb = 'runas' # causes UAC elevation prompt. @@ -146,19 +146,22 @@ def adminCmd(cmd, fork=False, gui=False): else: if os.system('which pkexec') == 0: if gui: - cmd = ['export DISPLAY=$DISPLAY; export XAUTHORITY=$XAUTHORITY; '] + cmd # By default, pkexec disallows X11 apps. Restore DISPLAY & XAUTHORITY to allow it. man 1 pkexec/"SECURITY NOTES" section + # By default, pkexec disallows X11 apps. Restore DISPLAY & XAUTHORITY + # to allow it. man 1 pkexec/"SECURITY NOTES" section + cmd = ['export DISPLAY=$DISPLAY; export XAUTHORITY=$XAUTHORITY; '] + cmd sudo_cmd = ['pkexec', '/bin/sh', '-c'] - elif os.system('which gksudo') == 0: + elif os.system('which gksudo') == 0: sudo_cmd = ["gksudo", "--", "/bin/sh", "-c"] - elif os.system('which gksu') == 0: + elif os.system('which gksu') == 0: sudo_cmd = ["gksu"] elif os.system('which kdesudo') == 0: sudo_cmd = ["kdesudo", "-t", "-c"] # http://www.unix.com/man-page/debian/1/kdesudo/ - elif os.system('which kdesu') == 0: + elif os.system('which kdesu') == 0: sudo_cmd = ["kdesu", "-t", "-c"] # http://linux.die.net/man/1/kdesu else: QtWidgets.QMessageBox.information('No root...', - 'Could not find any of: pkexec, sudo, gksu, kdesu, gksudo, or kdesudo. Please install one then restart multibootusb.') + 'Could not find any of: pkexec, sudo, gksu, kdesu, gksudo, or kdesudo.\n' + 'Please install one then restart multibootusb.') sys.exit(0) final_cmd = ' '.join(sudo_cmd + ['"' + ' '.join(cmd).replace('"', '\\"') + '"']) gen.log("Executing ==> " + final_cmd) diff --git a/scripts/debug.py b/scripts/debug.py index 2e6339c..3a3805c 100644 --- a/scripts/debug.py +++ b/scripts/debug.py @@ -1,5 +1,4 @@ import os -import platform import inspect from . import config @@ -8,8 +7,8 @@ try: except: try: from .colorama import init as colorama_init, Fore, Back, Style - except: - pass + except Exception as e: + raise e finally: try: colorama_init(autoreset=True) @@ -38,7 +37,8 @@ def fnCall(): Prints filename:line:function for parent and grandparent. """ - if not config.debug: return + if not config.debug: + return print(colors.OKGREEN + colors.BOLD + "=== DEBUG === | %s:%d:%s() called from %s:%d:%s()" % ( inspect.stack()[1][1].split(os.sep)[-1], @@ -48,4 +48,3 @@ def fnCall(): inspect.stack()[2][2], inspect.stack()[2][3], )+colors.RESET) - diff --git a/scripts/distro.py b/scripts/distro.py index aa1c265..60c4021 100644 --- a/scripts/distro.py +++ b/scripts/distro.py @@ -7,14 +7,12 @@ # under the terms of GNU General Public License, v.2 or above import os -import string import platform import re from .iso import * from .isodump3 import ISO9660 from .gen import * from . import _7zip -from . import config def distro(iso_cfg_ext_dir, iso_link): @@ -23,8 +21,8 @@ def distro(iso_cfg_ext_dir, iso_link): :param iso_cfg_ext_dir: Directory where *.cfg files are extracted. :return: Detected distro name as string. """ - iso9660fs = ISO9660(iso_link) - # iso_file_list = iso9660fs.readDir("/") +# iso9660fs = ISO9660(iso_link) +# iso_file_list = iso9660fs.readDir("/") iso_file_list = _7zip.list_iso(iso_link) if platform.system() == "Linux" or platform.system() == "Windows": for path, subdirs, files in os.walk(iso_cfg_ext_dir): @@ -32,7 +30,7 @@ def distro(iso_cfg_ext_dir, iso_link): if name.endswith(('.cfg', '.CFG', '.txt', '.TXT', '.lst')): try: # errors='ignore' is required as some files also contain non utf character - string = open(os.path.join(path, name), errors='ignore').read() + string = open(os.path.join(path, name), errors='ignore').read() except IOError: return "Read Error." else: @@ -143,15 +141,13 @@ def distro(iso_cfg_ext_dir, iso_link): if distro: return distro # FIXME: See the below comments. - ''' - else: - # FIXME: The idea of detecting as generic is to work like a unetbootin if other methods fails. - # This simply extracts distro to root of the USB and install syslinux on isolinux.bin directory. - # All works fine but unable to boot the distro successfully. Also, see the generic section from - # syslinux, update_cfg and install_distro modules. - if self.isolinux_bin_exist(): - return "generic" - ''' +# else: +# # FIXME: The idea of detecting as generic is to work like a unetbootin if other methods fails. +# # This simply extracts distro to root of the USB and install syslinux on isolinux.bin directory. +# # All works fine but unable to boot the distro successfully. Also, see the generic section from +# # syslinux, update_cfg and install_distro modules. +# if self.isolinux_bin_exist(): +# return "generic" else: return None diff --git a/scripts/gen.py b/scripts/gen.py index 9a7fc8e..3ac9548 100644 --- a/scripts/gen.py +++ b/scripts/gen.py @@ -194,7 +194,7 @@ def copy_mbusb_dir_usb(usb_disk): :param usb_mount_path: Path to USB mount. :return: """ - from .iso import iso_size +# from .iso import iso_size from .usb import details usb_details = details(usb_disk) @@ -243,17 +243,17 @@ def read_input_yes(): return False -def strings(filename, min=4): +def strings(filename, _min=4): with open(filename, errors="ignore") as f: result = "" for c in f.read(): if c in string.printable: result += c continue - if len(result) >= min: + if len(result) >= _min: yield result result = "" - if len(result) >= min: # catch result at EOF + if len(result) >= _min: # catch result at EOF yield result @@ -392,7 +392,7 @@ def write_to_file(filepath, text): Simple function to write a text file :param filepath: Path to file :param text: Text to be written on to file - :return: + :return: """ with open(filepath, 'w') as f: f.write(text.strip()) diff --git a/scripts/grub.py b/scripts/grub.py index b13d66e..0719ef5 100644 --- a/scripts/grub.py +++ b/scripts/grub.py @@ -37,10 +37,10 @@ def mbusb_update_grub_cfg(): grub_cfg_path = None syslinux_menu = None - sys_cfg_path = None +# sys_cfg_path = None loopback_cfg_path = None mbus_grub_cfg_path = os.path.join(config.usb_mount, 'multibootusb', 'grub', 'grub.cfg') - iso_grub_cfg = iso.iso_file_path(config.image_path, 'grub.cfg') +# iso_grub_cfg = iso.iso_file_path(config.image_path, 'grub.cfg') if iso.isolinux_bin_dir(config.image_path) is not False: iso_sys_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'syslinux.cfg') iso_iso_cfg_path = os.path.join(iso.isolinux_bin_dir(config.image_path), 'isolinux.cfg') @@ -147,19 +147,16 @@ def grub_custom_menu(mbus_grub_cfg_path, distro): if distro in ['sgrubd2', 'raw_iso']: grub_raw_iso(mbus_grub_cfg_path) - ''' - with open(mbus_grub_cfg_path, 'a') as f: - f.write("#start " + iso.iso_basename(config.image_path) + "\n") - f.write(grub_raw_iso()) - f.write("#end " + iso.iso_basename(config.image_path) + "\n") - - - elif iso_size_mb < 750.0: - grub_raw_iso(mbus_grub_cfg_path) - ''' +# with open(mbus_grub_cfg_path, 'a') as f: +# f.write("#start " + iso.iso_basename(config.image_path) + "\n") +# f.write(grub_raw_iso()) +# f.write("#end " + iso.iso_basename(config.image_path) + "\n") +# +# +# elif iso_size_mb < 750.0: +# grub_raw_iso(mbus_grub_cfg_path) else: - return False @@ -207,10 +204,10 @@ def extract_kernel_line(search_text, match_line, isolinux_dir): """ Function to check if kernel/linux line present in isolinux.cfg file is valid. If valid, then convert them in to grub accepted format - :param search_text: Type of text is to be searched. Typically kernel or linux + :param search_text: Type of text is to be searched. Typically kernel or linux :param match_line: Line containing kernel ot linux from isolinux supported .cfg files :param isolinux_dir: Path to isolinux directory of an ISO - :return: Valid grub2 accepted kernel/linux line after conversion. If nothing found return ''. + :return: Valid grub2 accepted kernel/linux line after conversion. If nothing found return ''. """ kernel_line = '' @@ -250,8 +247,8 @@ def extract_kernel_line(search_text, match_line, isolinux_dir): def iso2grub2(iso_dir): """ Function to convert syslinux configuration to grub2 accepted configuration format. Features implemented are similar - to that of grub2 'loopback.cfg'. This 'loopback.cfg' file can be later on caled directly from grub2. The main - advantage of this function is to generate the 'loopback.cfg' file automatically without manual involvement. + to that of grub2 'loopback.cfg'. This 'loopback.cfg' file can be later on caled directly from grub2. The main + advantage of this function is to generate the 'loopback.cfg' file automatically without manual involvement. :param iso_dir: Path to distro install directory for looping through '.cfg' files. :param file_out: Path to 'loopback.cfg' file. By default it is set to root of distro install directory. :return: @@ -277,11 +274,11 @@ def iso2grub2(iso_dir): if ext_text: for m in ext_text: menuentry = '' - kernel = '' +# kernel = '' kernel_line = '' boot_options = '' initrd_line = '' - initrd = '' +# initrd = '' # Extract line containing 'menu label' and convert to menu entry of grub2 if 'menu label' in m.group().lower(): @@ -308,7 +305,7 @@ def iso2grub2(iso_dir): for _lines in kernel_text: kernel_line = extract_kernel_line(_lines[0][1], _lines[0][0], iso_bin_dir) - if kernel_line is '': + if kernel_line == '': continue else: break @@ -322,7 +319,7 @@ def iso2grub2(iso_dir): for _lines in initrd_text: initrd_line = extract_kernel_line(_lines[0][1], _lines[0][0], iso_bin_dir) - if initrd_line is '': + if initrd_line == '': continue else: break diff --git a/scripts/imager.py b/scripts/imager.py index d69c29e..5862502 100644 --- a/scripts/imager.py +++ b/scripts/imager.py @@ -12,13 +12,10 @@ import subprocess import collections import platform import signal -from PyQt5 import QtGui from PyQt5 import QtWidgets -from PyQt5 import QtCore from .gui.ui_multibootusb import Ui_MainWindow from .gen import * from . import iso -from . import usb from . import config from . import progressbar @@ -28,15 +25,14 @@ if platform.system() == "Windows": def dd_linux(): import time - input = "if=" + config.image_path + _input = "if=" + config.image_path in_file_size = float(os.path.getsize(config.image_path)) - output = "of=" + config.usb_disk + _output = "of=" + config.usb_disk os.system("umount " + config.usb_disk + "1") - command = ['dd', input, output, "bs=1M", "oflag=sync"] + command = ['dd', _input, _output, "bs=1M", "oflag=sync"] log("Executing ==> " + " ".join(command)) dd_process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) - # bar = progressbar.ProgressBar(redirect_stdout=True) pbar = progressbar.ProgressBar( maxval=100, widgets=[ @@ -73,10 +69,10 @@ def dd_win(): windd = resource_path(os.path.join("data", "tools", "dd", "dd.exe")) if os.path.exists(resource_path(os.path.join("data", "tools", "dd", "dd.exe"))): log("dd exist") - input = "if=" + config.image_path + _input = "if=" + config.image_path in_file_size = float(os.path.getsize(config.image_path) / 1024 / 1024) - output = "of=\\\.\\" + config.usb_disk - command = [windd, input, output, "bs=1M", "--progress"] + _output = "of=\\\.\\" + config.usb_disk + command = [windd, _input, _output, "bs=1M", "--progress"] log("Executing ==> " + " ".join(command)) dd_process = subprocess.Popen(command, universal_newlines=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=False) @@ -127,19 +123,8 @@ class Imager(QtWidgets.QMainWindow, Ui_MainWindow): self.ui.imager_iso_size.setText("ISO Size: " + self.iso_size + " MB") log("ISO Size is " + self.iso_size + " MB") -# def onImagerComboChange(self): -# config.imager_usb_disk = str(self.ui.comboBox_2.currentText()) -# if bool(config.imager_usb_disk): -# self.ui.imager_disk_label.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).usb_type) -# self.ui.imager_total_size.setText(usb.bytes2human(int(self.imager_usb_detail(config.imager_usb_disk, partition=0).total_size))) -# -# if platform.system() == "Linux": -# self.ui.label_imager_uuid.setText("Disk Model:") -# self.ui.imager_uuid.setText(str(self.imager_usb_detail(config.imager_usb_disk, partition=0).model)) -# else: -# self.ui.imager_uuid.setText(self.imager_usb_detail(config.imager_usb_disk, partition=0).model) - - def imager_list_usb(self, partition=1): + @staticmethod + def imager_list_usb(partition=1): """ Function to detect whole USB disk. It uses lsblk package on Linux. :param partition: What to return. By default partition is set. @@ -148,7 +133,7 @@ class Imager(QtWidgets.QMainWindow, Ui_MainWindow): disk = [] if platform.system() == "Linux": output = subprocess.check_output("lsblk -i", shell=True) - if not partition == 1: + if partition != 1: for line in output.splitlines(): line = line.split() if (line[2].strip()) == b'1' and (line[5].strip()) == b'disk': @@ -159,15 +144,15 @@ class Imager(QtWidgets.QMainWindow, Ui_MainWindow): if (line[2].strip()) == b'1' and line[5].strip() == b'part': disk.append(str("/dev/" + str(line[0].strip()[2:]))) else: - if partition == 1 or not partition == 1: - oFS = win32com.client.Dispatch("Scripting.FileSystemObject") - oDrives = oFS.Drives - for drive in oDrives: - if drive.DriveType == 1 and drive.IsReady: - disk.append(drive) + oFS = win32com.client.Dispatch("Scripting.FileSystemObject") + oDrives = oFS.Drives + for drive in oDrives: + if drive.DriveType == 1 and drive.IsReady: + disk.append(drive) return disk - def imager_usb_detail(self, usb_disk, partition=1): + @staticmethod + def imager_usb_detail(usb_disk, partition=1): """ Function to detect details of USB disk using lsblk :param usb_disk: path to usb disk @@ -180,7 +165,7 @@ class Imager(QtWidgets.QMainWindow, Ui_MainWindow): output = subprocess.check_output("lsblk -ib " + usb_disk, shell=True) for line in output.splitlines(): line = line.split() - if not partition == 1: + if partition != 1: if line[2].strip() == b'1' and line[5].strip() == b'disk': total_size = line[3] if not total_size: @@ -194,7 +179,7 @@ class Imager(QtWidgets.QMainWindow, Ui_MainWindow): selected_usb_part = str(usb_disk) oFS = win32com.client.Dispatch("Scripting.FileSystemObject") d = oFS.GetDrive(oFS.GetDriveName(oFS.GetAbsolutePathName(selected_usb_part))) - selected_usb_device = d.DriveLetter +# selected_usb_device = d.DriveLetter label = (d.VolumeName).strip() if not label.strip(): label = "No label." diff --git a/scripts/install.py b/scripts/install.py index bd815ef..bea94a8 100644 --- a/scripts/install.py +++ b/scripts/install.py @@ -8,7 +8,6 @@ import os import shutil -import sys import platform import threading import subprocess @@ -47,7 +46,7 @@ def install_distro(): if config.distro == "opensuse": iso.iso_extract_file(config.image_path, install_dir, 'boot') - status_text = "Copying ISO..." + config.status_text = "Copying ISO..." if platform.system() == "Windows": subprocess.call(["xcopy", config.image_path, usb_mount], shell=True) # Have to use xcopy as python file copy is dead slow. elif platform.system() == "Linux": @@ -137,7 +136,7 @@ def install_progress(): thrd = threading.Thread(target=install_distro, name="install_progress") # thrd.daemon() # install_size = usb_size_used / 1024 - install_size = iso_size(config.image_path) / 1024 +# install_size = iso_size(config.image_path) / 1024 final_size = (usb_size_used + iso_size(config.image_path)) + config.persistence thrd.start() pbar = progressbar.ProgressBar(maxval=100).start() # bar = progressbar.ProgressBar(redirect_stdout=True) @@ -162,7 +161,7 @@ def install_patch(): os.sync() iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir") isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(config.image_path)) - iso_linux_bin_dir = isolinux_bin_dir(config.image_path) +# iso_linux_bin_dir = isolinux_bin_dir(config.image_path) config.syslinux_version = isolinux_version(isolinux_path) iso_file_list = iso.iso_file_list(config.image_path) os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path), isolinux_bin_dir(config.image_path)) diff --git a/scripts/iso.py b/scripts/iso.py index f670467..31d9ede 100644 --- a/scripts/iso.py +++ b/scripts/iso.py @@ -7,10 +7,7 @@ # Licence: This file is a part of multibootusb package. You can redistribute it or modify # under the terms of GNU General Public License, v.2 or above -import sys import os -import string -import platform import re from .gen import * from .isodump3 import ISO9660 @@ -56,11 +53,7 @@ def isolinux_bin_exist(iso_link): """ if os.path.exists(iso_link): iso_file_list = _7zip.list_iso(iso_link) - if any("isolinux.bin" in s.lower() for s in iso_file_list): - return True - else: - return False - + return bool(any("isolinux.bin" in s.lower() for s in iso_file_list)) def iso_size(iso_link): @@ -74,10 +67,7 @@ def is_bootable(iso_link): """ iso9660fs = ISO9660(iso_link) isBootable = iso9660fs.checkISOBootable() - if isBootable: - return True - else: - return False + return bool(isBootable) def isolinux_bin_dir(iso_link): @@ -162,14 +152,14 @@ def isolinux_version(isolinux_bin_path): return str(number) -def iso_extract_file(iso_link, dest_dir, filter): +def iso_extract_file(iso_link, dest_dir, _filter): """ Extract the specific file(s) from an ISO :param dest_dir: Path to destination directory. :param filter: Filter to extract particular file(s) :return: Extract file(s) to destination. """ - _7zip.extract_iso(iso_link, dest_dir, filter) + _7zip.extract_iso(iso_link, dest_dir, _filter) def extract_cfg_file(iso_link): @@ -232,4 +222,3 @@ if __name__ == '__main__': iso_extract_full(iso_path, 'test') iso_extract_file(iso_path, 'test', 'isolinux.bin') log(isolinux_version(test_iso_bin_path)) - diff --git a/scripts/mbusb_cli.py b/scripts/mbusb_cli.py index c5ad140..1c9030c 100644 --- a/scripts/mbusb_cli.py +++ b/scripts/mbusb_cli.py @@ -7,8 +7,6 @@ # under the terms of GNU General Public License, v.2 or above import os -import re -import shutil from . import usb from . import gen from .iso import * @@ -29,15 +27,13 @@ def read_input_uninstall(): def cli_install_distro(): - ''' - if platform.system() == 'Linux': - if os.getuid() != 0: - exit("You need to have root privileges to run this script.\nPlease try again using 'sudo'. Exiting.") - elif platform.system() == 'Windows': - - if admin.isUserAdmin(): - admin.elevate() - ''' +# if platform.system() == 'Linux': +# if os.getuid() != 0: +# exit("You need to have root privileges to run this script.\nPlease try again using 'sudo'. Exiting.") +# elif platform.system() == 'Windows': +# +# if admin.isUserAdmin(): +# admin.elevate() log('Starting multibootusb from Command line...') if usb.is_block(config.usb_disk) is False: @@ -65,7 +61,7 @@ def iso_install(iso_image): """ Script for installing iso image to a disk. This can be called by other script for auto install of many distros :param iso_image: Path to ISO image - :return: + :return: """ if size_not_enough(iso_image, config.usb_disk) is True: log(config.usb_disk + ' does not have enough space...') diff --git a/scripts/menus.py b/scripts/menus.py index 195956c..229fe36 100644 --- a/scripts/menus.py +++ b/scripts/menus.py @@ -11,10 +11,10 @@ from . import config def pc_tool_config(syslinux=True, grub=False): """ - Menu entry for PC Tool ISO - :param syslinux: - :param grub: - :return: + Menu entry for PC Tool ISO + :param syslinux: + :param grub: + :return: """ if syslinux is True: return """KERNEL /system/stage1 diff --git a/scripts/persistence.py b/scripts/persistence.py index 01bb6b0..047a917 100644 --- a/scripts/persistence.py +++ b/scripts/persistence.py @@ -6,12 +6,10 @@ # Licence: This file is a part of multibootusb package. You can redistribute it or modify # under the terms of GNU General Public License, v.2 or above -import sys import os import platform import tarfile import subprocess -from . import usb from . import iso from . import gen from . import config @@ -45,7 +43,7 @@ def persistence_distro(distro, iso_link): assert distro is not None assert iso_link is not None - iso_size = iso.iso_size(iso_link) +# iso_size = iso.iso_size(iso_link) if distro in ["ubuntu", "debian", "debian-install", "fedora"]: gen.log("Persistence option is available.") @@ -92,7 +90,7 @@ def create_persistence(): if subprocess.call(persistence_dd_cmd, shell=True) == 0: gen.log("\nSuccessfully created persistence file...\n") - if not config.distro == 'fedora': + if config.distro != 'fedora': gen.log('Applying filesystem to persistence file...') config.status_text = 'Applying filesystem to persistence file. Please wait...' gen.log('Executing ==> ' + persistence_mkfs_cmd) @@ -111,4 +109,3 @@ def extract_file(file_path, install_dir): tar = tarfile.open(file_path, "r:bz2") tar.extractall(install_dir) tar.close() - diff --git a/scripts/progressbar/widgets.py b/scripts/progressbar/widgets.py index 6434ad5..9e172f0 100644 --- a/scripts/progressbar/widgets.py +++ b/scripts/progressbar/widgets.py @@ -255,7 +255,8 @@ class FormatLabel(Timer): context[name] = value else: context[name] = transform(value) - except: pass + except: + raise return self.format_string % context diff --git a/scripts/qemu.py b/scripts/qemu.py index 717b25c..44231af 100644 --- a/scripts/qemu.py +++ b/scripts/qemu.py @@ -11,7 +11,6 @@ import os import subprocess import platform -from .admin import adminCmd from PyQt5 import QtWidgets from .gui.ui_multibootusb import Ui_MainWindow from .gen import * @@ -27,7 +26,7 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow): QtWidgets.QMainWindow.__init__(self) self.ui = Ui_MainWindow() self.ui.setupUi(self) - + def on_Qemu_Boot_iso_Click(self): """ Main function to boot a selected ISO. @@ -102,9 +101,7 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow): cmd = qemu + ' -hda ' + qemu_usb_disk + ram + ' -vga std' try: log('Executing ==> ' + cmd) - # adminCmd([qemu, '-hda', usb_disk[:-1], '-m', ram, '-vga std'], gui=True) subprocess.Popen(cmd, shell=True) - # adminCmd(qemu_cmd, gui=True) except: QtWidgets.QMessageBox.information(self, 'Error...', 'Error booting USB\n\nUnable to start QEMU.') @@ -133,8 +130,9 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow): return None else: return selected_ram - - def check_qemu_exist(self): + + @staticmethod + def check_qemu_exist(): """ Check if QEMU is available on host system. :return: path to QEMU program or None otherwise. @@ -150,7 +148,7 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow): elif platform.system() == "Windows": qemu = resource_path(os.path.join("data", "tools", "qemu", "qemu-system-x86_64.exe")) log(qemu) - + if qemu: log("QEMU: using " + qemu) else: @@ -158,24 +156,21 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow): return qemu - - def get_physical_disk_number(self, usb_disk): + @staticmethod + def get_physical_disk_number(usb_disk): """ Get the physical disk number as detected ny Windows. :param usb_disk: USB disk (Like F:) :return: Disk number. """ import wmi - c = wmi.WMI () - for physical_disk in c.Win32_DiskDrive (): - for partition in physical_disk.associators ("Win32_DiskDriveToDiskPartition"): - for logical_disk in partition.associators ("Win32_LogicalDiskToPartition"): + c = wmi.WMI() + for physical_disk in c.Win32_DiskDrive(): + for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"): + for logical_disk in partition.associators("Win32_LogicalDiskToPartition"): if logical_disk.Caption == usb_disk: - """ - log physical_disk.Caption - log partition.Caption - log logical_disk.Caption - """ +# log physical_disk.Caption +# log partition.Caption +# log logical_disk.Caption log("Physical Device Number is " + partition.Caption[6:-14]) return str(partition.Caption[6:-14]) - diff --git a/scripts/syslinux.py b/scripts/syslinux.py index 9bd6722..b9fab3d 100644 --- a/scripts/syslinux.py +++ b/scripts/syslinux.py @@ -7,7 +7,6 @@ # under the terms of GNU General Public License, v.2 or above import os -import sys import subprocess import platform from .gen import * @@ -39,7 +38,7 @@ def set_boot_flag(usb_disk): return False -def syslinux_default(usb_disk, version=4): +def syslinux_default(usb_disk): """ Install Syslinux of a selected drive :param usb_disk: '/dev/sdx' on linux and 'E:' on Windows @@ -152,7 +151,7 @@ def syslinux_distro_dir(usb_disk, iso_link, distro): if platform.system() == "Linux": syslinux_path = os.path.join(multibootusb_host_dir(), "syslinux", "bin", "syslinux") + config.syslinux_version if os.access(syslinux_path, os.X_OK) is False: - subprocess.call('chmod +x ' + syslinux_path, shell=True) == 0 + subprocess.call('chmod +x ' + syslinux_path, shell=True) sys_cmd = syslinux_path + option + quote(distro_syslinux_install_dir) + ' ' + usb_disk dd_cmd = 'dd if=' + usb_disk + ' ' + 'of=' + quote(distro_sys_install_bs) + ' count=1' log("Executing ==> " + sys_cmd) @@ -194,7 +193,7 @@ def syslinux_distro_dir(usb_disk, iso_link, distro): ext_cmd = syslinux_path + " --install " + distro_syslinux_install_dir dd_cmd = 'dd if=' + usb_disk + ' ' + 'of=' + quote(distro_sys_install_bs) + ' count=1' if os.access(syslinux_path, os.X_OK) is False: - subprocess.call('chmod +x ' + syslinux_path, shell=True) == 0 + subprocess.call('chmod +x ' + syslinux_path, shell=True) log("Executing ==> " + ext_cmd) if subprocess.call(ext_cmd, shell=True) == 0: log("\nSyslinux install on distro directory is successful...\n") diff --git a/scripts/udisks.py b/scripts/udisks.py index e02ec59..d1538df 100644 --- a/scripts/udisks.py +++ b/scripts/udisks.py @@ -11,7 +11,8 @@ __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' # from __future__ import print_function -import os, re +import os +import re def node_mountpoint(node): @@ -133,16 +134,6 @@ class UDisks2(object): def mount(self, device_node_path): d = self.device(device_node_path) - -# euid = os.environ['SUDO_UID'] -# egid = os.environ['SUDO_GID'] -# -# if euid and egid: -# user, group = int(euid), int(egid) -# else: -# user, group = os.getuid(), os.getgid() -# -# mount_options = ['rw', 'noexec', 'nosuid', 'nodev', 'uid=%d' % user, 'gid=%d' % group] mount_options = ['rw', 'noexec', 'nosuid', 'nodev'] try: @@ -158,8 +149,8 @@ class UDisks2(object): mp = node_mountpoint(str(device_node_path)) if mp is None: raise - finally: - return mp + + return mp def unmount(self, device_node_path): d = self.device(device_node_path) diff --git a/scripts/uninstall_distro.py b/scripts/uninstall_distro.py index 9f36088..70e4b7a 100644 --- a/scripts/uninstall_distro.py +++ b/scripts/uninstall_distro.py @@ -147,7 +147,7 @@ def uninstall_distro(): gen.log('EFI image does not exist. Copying now...') shutil.copy2(gen.resource_path(os.path.join("data", "EFI", "BOOT", "bootx64.efi")), os.path.join(config.usb_mount, 'EFI', 'BOOT')) - elif not gen.grub_efi_exist(efi_grub_img) is True: + elif not gen.grub_efi_exist(efi_grub_img): gen.log('EFI image overwritten by distro install. Replacing it now...') shutil.copy2(gen.resource_path(os.path.join("data", "EFI", "BOOT", "bootx64.efi")), os.path.join(config.usb_mount, 'EFI', 'BOOT')) diff --git a/scripts/update_cfg_file.py b/scripts/update_cfg_file.py index 28740d2..4b28d9d 100644 --- a/scripts/update_cfg_file.py +++ b/scripts/update_cfg_file.py @@ -26,10 +26,7 @@ def update_distro_cfg_files(iso_link, usb_disk, distro, persistence=0): usb_mount = usb_details['mount_point'] usb_uuid = usb_details['uuid'] usb_label = usb_details['label'] - patch = None - iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir") - if isolinux_bin_exist(config.image_path): - isolinux_path = os.path.join(iso_cfg_ext_dir, isolinux_bin_path(iso_link)[1:]) +# iso_cfg_ext_dir = os.path.join(multibootusb_host_dir(), "iso_cfg_ext_dir") config.status_text = "Updating config files..." install_dir = os.path.join(usb_mount, "multibootusb", iso_basename(iso_link)) log('Updating distro specific config files...') @@ -399,7 +396,7 @@ label hwinfo def update_menu_lst(): sys_cfg_file = os.path.join(config.usb_mount, "multibootusb", "syslinux.cfg") - install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path)) +# install_dir = os.path.join(config.usb_mount, "multibootusb", iso_basename(config.image_path)) menu_lst = iso_menu_lst_path(config.image_path).replace("\\", "/") with open(sys_cfg_file, "a") as f: f.write("#start " + iso_basename(config.image_path) + "\n") diff --git a/scripts/usb.py b/scripts/usb.py index 2848778..36969e9 100644 --- a/scripts/usb.py +++ b/scripts/usb.py @@ -20,7 +20,7 @@ if platform.system() == 'Linux': if platform.system() == 'Windows': import psutil import win32com.client - import wmi +# import wmi import pythoncom @@ -84,7 +84,7 @@ def disk_usage(mount_path): raise NotImplementedError("Platform not supported.") -def list_devices(partition=1, fixed=False): +def list_devices(fixed=False): """ List inserted USB devices. :return: USB devices as list. @@ -97,7 +97,7 @@ def list_devices(partition=1, fixed=False): try: import pyudev except Exception as e: - gen.log('Pydev is not installed on host system. Using the inbuilt one.') + gen.log('PyUdev is not installed on host system, using built-in.') from . import pyudev context = pyudev.Context() @@ -209,12 +209,9 @@ def details_udev(usb_disk_part): import pyudev except: from . import pyudev - """ - Try with PyUdev to get the details of USB disks. - This is the easiest and reliable method to find USB details. - Also, it is a standalone package and no dependencies are required. - """ - # gen.log "Using PyUdev for detecting USB details..." +# Try with PyUdev to get the details of USB disks. +# This is the easiest and reliable method to find USB details. +# Also, it is a standalone package and no dependencies are required. context = pyudev.Context() try: device = pyudev.Device.from_device_file(context, usb_disk_part) @@ -280,7 +277,7 @@ def details_udisks2(usb_disk_part): device = bd.Get('org.freedesktop.UDisks2.Block', 'Device', dbus_interface='org.freedesktop.DBus.Properties') device = bytearray(device).replace(b'\x00', b'').decode('utf-8') uuid = bd.Get('org.freedesktop.UDisks2.Block', 'IdUUID', dbus_interface='org.freedesktop.DBus.Properties') - file_system = bd.Get('org.freedesktop.UDisks2.Block', 'IdType', dbus_interface='org.freedesktop.DBus.Properties') + file_system = bd.Get('org.freedesktop.UDisks2.Block', 'IdType', dbus_interface='org.freedesktop.DBus.Properties') mount_point = bd.Get('org.freedesktop.UDisks2.Filesystem', 'MountPoints', dbus_interface='org.freedesktop.DBus.Properties') if mount_point: # mount_point = str(bytearray(mount_point[0]).decode('utf-8').replace(b'\x00', b'')) @@ -367,18 +364,17 @@ def win_disk_details(disk_drive): size_total = shutil.disk_usage(mount_point)[0] size_used = shutil.disk_usage(mount_point)[1] size_free = shutil.disk_usage(mount_point)[2] - ''' + # The below code works only from vista and above. I have removed it as many people reported that the software # was not working under windows xp. Even then, it is significantly slow if 'All Drives' option is checked. # Removing the code doesn't affect the functionality as it is only used to find vendor id and model of the drive. - c = wmi.WMI() - for physical_disk in c.Win32_DiskDrive(InterfaceType="USB"): - for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"): - for logical_disk in partition.associators("Win32_LogicalDiskToPartition"): - if logical_disk.Caption == disk_drive: - vendor = (physical_disk.PNPDeviceID.split('&VEN_'))[1].split('&PROD_')[0] - model = (physical_disk.PNPDeviceID.split('&PROD_'))[1].split('&REV_')[0] - ''' +# c = wmi.WMI() +# for physical_disk in c.Win32_DiskDrive(InterfaceType="USB"): +# for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"): +# for logical_disk in partition.associators("Win32_LogicalDiskToPartition"): +# if logical_disk.Caption == disk_drive: +# vendor = (physical_disk.PNPDeviceID.split('&VEN_'))[1].split('&PROD_')[0] +# model = (physical_disk.PNPDeviceID.split('&PROD_'))[1].split('&REV_')[0] return {'uuid': uuid, 'file_system': file_system, 'label': label, 'mount_point': mount_point, 'size_total': size_total, 'size_used': size_used, 'size_free': size_free, diff --git a/setup.py b/setup.py index 3087643..6adf520 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,6 @@ from distutils.core import setup #from setuptools import setup, find_packages import os -import sys from scripts.gen import mbusb_version