Skip to content
Snippets Groups Projects
Commit 3a35da36 authored by Valentin Bruch's avatar Valentin Bruch
Browse files

linuxparty.sh executable, delete linuxparty.py

parent 2570f915
Branches
No related tags found
No related merge requests found
#!/usr/bin/python3
#this is treeview branch
import sys, os, io, subprocess
import json
import apt
import dbus
import traceback
import tempfile
from PyQt5 import QtWidgets, QtGui, QtCore
from collections import OrderedDict
cache = apt.cache.Cache()
def get_devices():
devices = []
bus = dbus.SystemBus()
udisks_manager = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2")
manager_iface = dbus.Interface(udisks_manager, "org.freedesktop.DBus.ObjectManager")
try:
for k,v in manager_iface.GetManagedObjects().items():
drive_info = v.get("org.freedesktop.UDisks2.Block", {})
if drive_info.get("IdUsage") == "filesystem":
label = str(drive_info.get("IdLabel"))
device = bytearray(drive_info.get("Device")).replace(b"\x00",b"").decode("utf-8")
fs_info = v.get("org.freedesktop.UDisks2.Filesystem")
dbus_mpoints = fs_info.get("MountPoints")
mpoints = [bytearray(mpoint).replace(b"\x00",b"").decode("utf-8") for mpoint in dbus_mpoints]
devices.append((label, device, mpoints))
except Exception as ex:
traceback.print_exc(ex)
print("No devices found")
return devices
def mount_stick(dev):
bus = dbus.SystemBus()
udisks = bus.get_object("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,))
iface = dbus.Interface(udisks, "org.freedesktop.UDisks2.Filesystem")
res = None
try:
res = bytearray(iface.Mount()).replace(b"\x00",b"").decode("utf-8")
except Exception as ex:
traceback.print_exc(ex)
print("Could not mount %s"%(dev,))
return res
def find_lipstick():
devices = get_devices()
stick = None
for device in devices:
if device[0].lower()=="lipstick":
stick = device
return stick
def enable_offline_repo(gui):
try_again = True
stick = None
while True:
stick = find_lipstick()
if stick is not None:
if len(stick[2])<1:
mount_stick(stick[1])
stick = find_lipstick()
if stick is None or (type(stick) is tuple and len(stick[2])<=0):
choice = QtWidgets.QMessageBox.question(gui, 'LIPStick nicht gefunden!', "Möchtest du noch einmal versuchen den LIPStick zu finden?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if choice == QtWidgets.QMessageBox.No:
try_again = False
else:
try_again = False
if not try_again:
break
if stick is None:
QtWidgets.QMessageBox.critical(gui, "Kein LIPStick gefunden", "Es wird ohne LIPStick weiter gemacht")
return
subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "on", stick[2][0]])
def disable_offline_repo():
subprocess_wrap(['/bin/bash', basedir+"/liprepoctl.sh", "off"])
def subprocess_wrap(what):
proc = subprocess.Popen(what, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
while True:
status = proc.poll()
if status is not None:
break
output = proc.stdout.readline()
if output == '' and status:
break
if output:
print(output.strip().decode('utf-8'))
rc = proc.poll()
print("Subprocess exited with status", rc)
return rc
def get_mountpoint(dev):
iface = QtDBus.QDBusInterface("org.freedesktop.UDisks2", "/org/freedesktop/UDisks2/block_devices/%s"%(dev,), "org.freedesktop.DBus.Properties", QtDBus.QDBusConnection.systemBus())
msg = iface.call("Get", "org.freedesktop.UDisks2.Filesystem", "MountPoints")
mpoint = msg.arguments()[0][0].data().decode('utf-8')[:-1]
print(mpoint)
return mpoint
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(700, 500)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.treeView = QtWidgets.QTreeView(self.centralwidget)
self.treeView.setGeometry(QtCore.QRect(10, 10, 781, 521))
self.treeView.header().setSectionResizeMode(QtWidgets.QHeaderView.ResizeToContents)
self.treeView.setHeaderHidden(True)
self.gridLayout.addWidget(self.treeView, 0, 0, 1, 4)
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.hide()
self.progressBar.setProperty("value", 0)
self.progressBar.setObjectName("progressBar")
self.gridLayout.addWidget(self.progressBar, 2, 0, 1, 1)
self.btnr = QtWidgets.QPushButton(self.centralwidget)
self.btnr.setObjectName("btnr")
self.gridLayout.addWidget(self.btnr, 2, 2, 1, 1)
self.btnl = QtWidgets.QPushButton(self.centralwidget)
self.btnl.setObjectName("btnl")
self.gridLayout.addWidget(self.btnl, 2, 1, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 600, 22))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
self.menuAbout = QtWidgets.QMenu(self.menubar)
self.menuAbout.setObjectName("menuAbout")
MainWindow.setMenuBar(self.menubar)
self.actionQuit = QtWidgets.QAction(MainWindow)
self.actionQuit.setObjectName("actionQuit")
self.actionInfo = QtWidgets.QAction(MainWindow)
self.actionInfo.setObjectName("actionInfo")
self.menuAbout.addAction(self.actionInfo)
self.menubar.addAction(self.menuFile.menuAction())
self.menubar.addAction(self.menuAbout.menuAction())
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.btnr.setText(_translate("MainWindow", "&Quit"))
self.btnl.setText(_translate("MainWindow", "&Install"))
self.menuFile.setTitle(_translate("MainWindow", "&File"))
self.menuAbout.setTitle(_translate("MainWindow", "&About"))
self.actionQuit.setText(_translate("MainWindow", "&Quit"))
self.actionInfo.setText(_translate("MainWindow", "&Info"))
class Main(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
extractAction = QtWidgets.QAction("&Quit", self)
extractAction.setShortcut("Ctrl+Q")
extractAction.setStatusTip('Leave the Application')
extractAction.triggered.connect(self.close_application)
self.ui.menuFile.addAction(extractAction)
self.ui.btnr.clicked.connect(self.close_application)
def close_application(self):
choice = QtWidgets.QMessageBox.question(self, 'Close the Application?', "No Packages will be installed.", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
if choice == QtWidgets.QMessageBox.Yes:
QtCore.QCoreApplication.instance().quit()
else:
pass
def installProcess():
global pkglist
window.ui.btnl.hide()
window.ui.btnr.setText("&Finish")
window.ui.progressBar.show()
window.ui.progressBar.setRange(0,0)
pkglist = getPackagelistTree()
enable_offline_repo(window)
installPackages(pkglist)
#window.ui.progressBar.setRange(0,1)
#window.ui.progressBar.setValue(1)
makeDoku(pkglist)
showSuccBox()
disable_offline_repo()
def showSuccBox():
succBox = QtWidgets.QMessageBox()
succBox.setText("The selected packages have been installed.")
succBox.setWindowTitle("Installation Finished!")
succBox.setIcon(1)
sys.exit(succBox.exec_())
def showErrorBox():
errorBox = QtWidgets.QMessageBox()
errorBox.setText("Something went wrong. No packages have been installed.")
errorBox.setWindowTitle("Error")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
def showErrorBox(errorstring):
errorBox = QtWidgets.QMessageBox()
errorBox.setText(errorstring)
errorBox.setWindowTitle("Error")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
def chooseFirewall():
askBox = QtWidgets.QMessageBox()
askBox.setText("Netzwerk: Soll die Ubuntu Firewall (ufw/gufw) aktiviert werden?")
askBox.setIcon(4)
askBox.setStandardButtons(QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No)
result = askBox.exec_()
if result == QtWidgets.QMessageBox.Yes:
enableFirewall()
def checkIfRoot():
if os.getuid() != 0:
errorBox = QtWidgets.QMessageBox()
errorBox.setText("You must run this script as root.")
errorBox.setWindowTitle("Please run this script as root.")
errorBox.setIcon(3)
sys.exit(errorBox.exec_())
else:
pass
def installPackages(strlist):
global pkglist
cache.update()
cache.open(None)
for pkg in pkglist:
candidate = cache[pkg]
if not candidate.is_installed:
candidate.mark_install()
try:
cache.commit(apt.progress.text.AcquireProgress(), apt.progress.base.InstallProgress())
except Exception as ex:
print("Error during install",ex)
def enableFirewall():
command=['ufw', 'enable']
subprocess_wrap(command)
def mountStick():
command=['/bin/bash', basedir+"/infuse_offline_repo.sh"]
subprocess_wrap(command)
def makeDoku(stringlist):
global pkglist
command=['/bin/bash', basedir+"/makeDoku.sh", basedir+"/", " ".join(pkglist)]
subprocess_wrap(command)
def getPackagelist():
installList = []
model = window.ui.tableView.model()
i = 0
while i < model.rowCount():
item = model.item(i)
item.readOnly(true)
if item.isEnabled:
if item.checkState():
installList.append(item.text())
i += 1
return installList
def getPackagelistTree():
installList = []
model = window.ui.treeView.model()
i = 0
while i < model.rowCount():
branch = model.item(i)
j = 0
#if branch.isEnabled():
#check if branc is checkt if true return all children true
# if branch.checkState():
# while j < branch.rowCount():
# installList.append(branch.child(j).text())
# j += 1
# else:
while j < branch.rowCount():
if branch.child(j).isEnabled:
if branch.child(j).checkState():
installList.append(branch.child(j).text())
j += 1
i += 1
return installList
def fillTreeView(inputDataJson, treeView):
model = QtGui.QStandardItemModel()
branchfont = QtGui.QFont()
branchfont.setBold(True)
for softwareGroup in inputDataJson:
branch = QtGui.QStandardItem(softwareGroup)
#branch.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
#branch.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
branch.setFont(branchfont)
if 'groupDesc' in inputDataJson[softwareGroup]:
branchDesc = QtGui.QStandardItem(inputDataJson[softwareGroup]['groupDesc'])
else:
branchDesc = QtGui.QStandardItem('')
for package in inputDataJson[softwareGroup]['packages']:
if not ('hidden' in package and package['hidden']):
item = QtGui.QStandardItem(package['pkgname'])
item.setText(package['pkgname'])
item.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
if package['tagged']:
item.setData(QtCore.QVariant(QtCore.Qt.Checked), QtCore.Qt.CheckStateRole)
else:
item.setData(QtCore.QVariant(QtCore.Qt.Unchecked), QtCore.Qt.CheckStateRole)
item2 = QtGui.QStandardItem(package['pkgdescription'])
branch.appendRow([item, item2])
model.appendRow([branch, branchDesc])
treeView.setModel(model)
treeView.expandAll()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
basedir=os.path.dirname(os.path.realpath(__file__))
checkIfRoot()
chooseFirewall()
#mountStick()
window = Main()
window.setWindowTitle("Linux Install Party Software Installer")
with open(basedir+'/../offline_repo.json', 'r') as inputfile:
data=json.loads(inputfile.read(), object_pairs_hook=OrderedDict)
fillTreeView(data, window.ui.treeView)
window.ui.btnl.clicked.connect(installProcess)
window.show()
sys.exit(app.exec_())
File mode changed from 100644 to 100755
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment