Merge branch 'devel' of https://github.com/mbusb/multibootusb into devel

pull/166/head
mbusb 7 years ago
commit 7d45a6dfba

@ -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()

@ -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)

@ -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)

@ -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

@ -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

@ -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
@ -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

@ -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."

@ -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))

@ -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))

@ -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:

@ -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()

@ -255,7 +255,8 @@ class FormatLabel(Timer):
context[name] = value
else:
context[name] = transform(value)
except: pass
except:
raise
return self.format_string % context

@ -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 *
@ -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.')
@ -134,7 +131,8 @@ class Qemu(QtWidgets.QMainWindow, Ui_MainWindow):
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.
@ -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])

@ -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")

@ -11,7 +11,8 @@ __copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>'
__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)

@ -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'))

@ -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")

@ -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,

@ -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

Loading…
Cancel
Save