Initial commit
146
gui.py
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Form implementation generated from reading ui file 'usbinstall.ui'
|
||||||
|
#
|
||||||
|
# Created: Fri Oct 14 18:57:57 2011
|
||||||
|
# by: PyQt4 UI code generator 4.8.3
|
||||||
|
#
|
||||||
|
# WARNING! All changes made in this file will be lost!
|
||||||
|
|
||||||
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
|
try:
|
||||||
|
_fromUtf8 = QtCore.QString.fromUtf8
|
||||||
|
except AttributeError:
|
||||||
|
_fromUtf8 = lambda s: s
|
||||||
|
|
||||||
|
class Ui_MainWindow(object):
|
||||||
|
def setupUi(self, MainWindow):
|
||||||
|
# Codice per la finestra
|
||||||
|
MainWindow.setObjectName(_fromUtf8("MainWindow"))
|
||||||
|
MainWindow.resize(500, 405)
|
||||||
|
MainWindow.setWindowTitle(_fromUtf8(""))
|
||||||
|
self.centralwidget = QtGui.QWidget(MainWindow)
|
||||||
|
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
|
||||||
|
|
||||||
|
# Immagine di sfondo
|
||||||
|
self.i_back = QtGui.QLabel(self.centralwidget)
|
||||||
|
self.i_back.setGeometry(QtCore.QRect(10, 10, 480, 300))
|
||||||
|
self.i_back.setText(_fromUtf8(""))
|
||||||
|
self.i_back.setObjectName(_fromUtf8("i_back"))
|
||||||
|
|
||||||
|
# Label della descrizione
|
||||||
|
self.l_descrizione = QtGui.QLabel(self.centralwidget)
|
||||||
|
self.l_descrizione.setGeometry(QtCore.QRect(10, 317, 201, 31))
|
||||||
|
self.l_descrizione.setText(_fromUtf8(""))
|
||||||
|
self.l_descrizione.setObjectName(_fromUtf8("l_descrizione"))
|
||||||
|
|
||||||
|
# Linea orizzontale di separazione
|
||||||
|
self.line = QtGui.QFrame(self.centralwidget)
|
||||||
|
self.line.setGeometry(QtCore.QRect(10, 350, 481, 20))
|
||||||
|
self.line.setFrameShape(QtGui.QFrame.HLine)
|
||||||
|
self.line.setFrameShadow(QtGui.QFrame.Sunken)
|
||||||
|
self.line.setObjectName(_fromUtf8("line"))
|
||||||
|
|
||||||
|
# Bottone Avanti
|
||||||
|
self.b_avanti = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.b_avanti.setGeometry(QtCore.QRect(400, 370, 90, 29))
|
||||||
|
self.b_avanti.setObjectName(_fromUtf8("b_avanti"))
|
||||||
|
|
||||||
|
# Bottone Indietro
|
||||||
|
self.b_indietro = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.b_indietro.setGeometry(QtCore.QRect(300, 370, 90, 29))
|
||||||
|
self.b_indietro.setText(_fromUtf8(""))
|
||||||
|
self.b_indietro.setObjectName(_fromUtf8("b_indietro"))
|
||||||
|
|
||||||
|
# Bottone di help
|
||||||
|
self.b_help = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.b_help.setGeometry(QtCore.QRect(464, 320, 26, 26))
|
||||||
|
self.b_help.setText(_fromUtf8(""))
|
||||||
|
icon = QtGui.QIcon()
|
||||||
|
icon.addPixmap(QtGui.QPixmap(_fromUtf8("img/dialog-question.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.b_help.setIcon(icon)
|
||||||
|
self.b_help.setIconSize(QtCore.QSize(24, 24))
|
||||||
|
self.b_help.setFlat(True)
|
||||||
|
self.b_help.setObjectName(_fromUtf8("b_help"))
|
||||||
|
|
||||||
|
# Casella di testo con il percorso del file scelto
|
||||||
|
self.t_file = QtGui.QLineEdit(self.centralwidget)
|
||||||
|
self.t_file.setGeometry(QtCore.QRect(212, 321, 222, 25))
|
||||||
|
self.t_file.setObjectName(_fromUtf8("t_file"))
|
||||||
|
|
||||||
|
# Immagine che rende piu lunga la casella di testo
|
||||||
|
self.pach1 = QtGui.QLabel(self.centralwidget)
|
||||||
|
self.pach1.setGeometry(QtCore.QRect(430, 320, 32, 27))
|
||||||
|
self.pach1.setText(_fromUtf8(""))
|
||||||
|
self.pach1.setPixmap(QtGui.QPixmap(_fromUtf8("img/pach1.png")))
|
||||||
|
self.pach1.setObjectName(_fromUtf8("pach1"))
|
||||||
|
|
||||||
|
# Bottone sopra la parte della finta casella di testo
|
||||||
|
self.b_apri_file = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.b_apri_file.setGeometry(QtCore.QRect(431, 320, 31, 27))
|
||||||
|
self.b_apri_file.setText(_fromUtf8(""))
|
||||||
|
icon1 = QtGui.QIcon()
|
||||||
|
icon1.addPixmap(QtGui.QPixmap(_fromUtf8("img/document-open.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.b_apri_file.setIcon(icon1)
|
||||||
|
self.b_apri_file.setFlat(True)
|
||||||
|
self.b_apri_file.setObjectName(_fromUtf8("b_apri_file"))
|
||||||
|
|
||||||
|
# Immagine del fumetto
|
||||||
|
self.n_img = QtGui.QLabel(self.centralwidget)
|
||||||
|
self.n_img.setGeometry(QtCore.QRect(289, 200, 211, 121))
|
||||||
|
self.n_img.setText(_fromUtf8(""))
|
||||||
|
self.n_img.setPixmap(QtGui.QPixmap(_fromUtf8("img/nuvola.png")))
|
||||||
|
self.n_img.setObjectName(_fromUtf8("n_img"))
|
||||||
|
self.n_img.hide()
|
||||||
|
|
||||||
|
# Testo del fumetto
|
||||||
|
self.n_testo = QtGui.QLabel(self.centralwidget)
|
||||||
|
self.n_testo.setGeometry(QtCore.QRect(298, 200, 181, 101))
|
||||||
|
self.n_testo.setText(_fromUtf8(""))
|
||||||
|
self.n_testo.setOpenExternalLinks(True)
|
||||||
|
self.n_testo.setWordWrap(True)
|
||||||
|
self.n_testo.setObjectName(_fromUtf8("n_testo"))
|
||||||
|
self.n_testo.hide()
|
||||||
|
|
||||||
|
# Croce del fumetto
|
||||||
|
self.n_chiudi = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.n_chiudi.setGeometry(QtCore.QRect(471, 202, 14, 14))
|
||||||
|
self.n_chiudi.setText(_fromUtf8(""))
|
||||||
|
icon1 = QtGui.QIcon()
|
||||||
|
icon1.addPixmap(QtGui.QPixmap(_fromUtf8("img/exit.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.n_chiudi.setIcon(icon1)
|
||||||
|
self.n_chiudi.setFlat(True)
|
||||||
|
self.n_chiudi.hide()
|
||||||
|
|
||||||
|
# Bottone del refresh della lista usb
|
||||||
|
self.b_refresh = QtGui.QPushButton(self.centralwidget)
|
||||||
|
self.b_refresh.setGeometry(QtCore.QRect(435, 320, 26, 26))
|
||||||
|
self.b_refresh.setText(_fromUtf8(""))
|
||||||
|
icon2 = QtGui.QIcon()
|
||||||
|
icon2.addPixmap(QtGui.QPixmap(_fromUtf8("img/view-refresh.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||||
|
self.b_refresh.setIcon(icon2)
|
||||||
|
self.b_refresh.setIconSize(QtCore.QSize(24, 24))
|
||||||
|
self.b_refresh.setFlat(True)
|
||||||
|
self.b_refresh.setObjectName(_fromUtf8("pushButton_5"))
|
||||||
|
|
||||||
|
# comboBox con la lista delle periferiche usb
|
||||||
|
self.l_usb = QtGui.QComboBox(self.centralwidget)
|
||||||
|
self.l_usb.setEnabled(True)
|
||||||
|
self.l_usb.setGeometry(QtCore.QRect(158, 320, 271, 25))
|
||||||
|
self.l_usb.setEditable(False)
|
||||||
|
self.l_usb.setObjectName(_fromUtf8("comboBox"))
|
||||||
|
|
||||||
|
#inizializza la progressbar
|
||||||
|
self.p_installazione = QtGui.QProgressBar(self.centralwidget)
|
||||||
|
self.p_installazione.setGeometry(QtCore.QRect(10, 354, 480, 36))
|
||||||
|
self.p_installazione.setProperty("value", 0)
|
||||||
|
self.p_installazione.setObjectName("progressBar")
|
||||||
|
self.p_installazione.hide()
|
||||||
|
|
||||||
|
self.retranslateUi(MainWindow)
|
||||||
|
QtCore.QMetaObject.connectSlotsByName(MainWindow)
|
||||||
|
|
||||||
|
def retranslateUi(self, MainWindow):
|
||||||
|
self.b_avanti.setText(QtGui.QApplication.translate("MainWindow", "Avanti", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
|
BIN
img/back1.png
Normal file
After Width: | Height: | Size: 103 KiB |
BIN
img/back2.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
img/back3.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
img/back4.png
Normal file
After Width: | Height: | Size: 119 KiB |
BIN
img/dialog-question.png
Normal file
After Width: | Height: | Size: 869 B |
BIN
img/document-open.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
img/exit.png
Normal file
After Width: | Height: | Size: 528 B |
BIN
img/mamba.png
Normal file
After Width: | Height: | Size: 2.1 KiB |
BIN
img/nuvola.png
Normal file
After Width: | Height: | Size: 830 B |
BIN
img/pach1.png
Normal file
After Width: | Height: | Size: 401 B |
BIN
img/view-refresh.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
315
usbinstall.py
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from gui import * # Importa la parte grafica
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
# La parte di dbus
|
||||||
|
import gobject
|
||||||
|
import dbus
|
||||||
|
import dbus.service
|
||||||
|
from dbus.mainloop.glib import DBusGMainLoop
|
||||||
|
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
|
||||||
|
import dbus.glib
|
||||||
|
|
||||||
|
|
||||||
|
# Variabili globali
|
||||||
|
passo = 1
|
||||||
|
ext = "" # Vedi apri_file()
|
||||||
|
path_Boot = "" # Percorso file.cpio.gz
|
||||||
|
path_Iso = "" # Percorso file.iso
|
||||||
|
sel_usb_file= ""# Chiavetta per l'installazione (file)
|
||||||
|
sel_usb_nome= ""# Modello
|
||||||
|
usb_file = [] # Lista chiavette disponibili
|
||||||
|
usb_nome = [] # Rispettivi modelli
|
||||||
|
|
||||||
|
|
||||||
|
## Assegna gli eventi agli oggetti del form
|
||||||
|
def assegna_eventi():
|
||||||
|
app.connect(ui.b_avanti, QtCore.SIGNAL('clicked()'), avanti)
|
||||||
|
app.connect(ui.b_indietro, QtCore.SIGNAL('clicked()'), indietro)
|
||||||
|
app.connect(ui.b_apri_file, QtCore.SIGNAL('clicked()'), apri_file)
|
||||||
|
app.connect(ui.b_help, QtCore.SIGNAL('clicked()'), gestisci_nuvola)
|
||||||
|
app.connect(ui.n_chiudi, QtCore.SIGNAL('clicked()'), chiudi_nuvola)
|
||||||
|
app.connect(ui.b_refresh, QtCore.SIGNAL('clicked()'), lista_usb)
|
||||||
|
app.connect(ui.l_usb, QtCore.SIGNAL("activated(int)"), seleziona_usb)
|
||||||
|
|
||||||
|
|
||||||
|
## Gestione del bottone b_avanti
|
||||||
|
def avanti():
|
||||||
|
# Prima controlla che tutto sia a posto per passare al passo successivo
|
||||||
|
global passo, path_Boot, path_Iso, sel_usb_file, sel_usb_nome
|
||||||
|
|
||||||
|
if passo == 1:
|
||||||
|
if path_Boot == "":
|
||||||
|
msg_warn("E' necessario scegliere un file per il boot")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
passo += 1
|
||||||
|
passo2()
|
||||||
|
|
||||||
|
elif passo == 2:
|
||||||
|
if path_Iso == "":
|
||||||
|
msg_warn("E' necessario scegliere un file immagine di openmamba")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
passo += 1
|
||||||
|
passo3()
|
||||||
|
|
||||||
|
elif passo == 3:
|
||||||
|
if sel_usb_file == "":
|
||||||
|
msg_warn("E' necessario scegliere una chiavetta per l'installazione")
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
msg = QtGui.QMessageBox.question(None, "Attenzione", "Tutti i dati presenti nella chiavetta " + sel_usb_nome + " saranno persi.\n"+"Sei sicuro di voler continuare?",
|
||||||
|
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.Yes)
|
||||||
|
# Continua solo se l'utente preme il bottone Yes
|
||||||
|
if msg == QtGui.QMessageBox.Yes:
|
||||||
|
passo += 1
|
||||||
|
passo4()
|
||||||
|
else:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Gestione del bottone b_indietro
|
||||||
|
def indietro():
|
||||||
|
global passo
|
||||||
|
passo -= 1
|
||||||
|
|
||||||
|
if passo == 0:
|
||||||
|
app.exit(1)
|
||||||
|
print "Applicazione terminata premendo il bottone annulla"
|
||||||
|
|
||||||
|
elif passo == 1:
|
||||||
|
passo1()
|
||||||
|
|
||||||
|
elif passo == 2:
|
||||||
|
passo2()
|
||||||
|
|
||||||
|
elif passo == 3:
|
||||||
|
passo3()
|
||||||
|
|
||||||
|
|
||||||
|
## Dialogo in cui si scegle i file per l'installazione
|
||||||
|
## Inoltre setta le variabili path_Boot e path_Iso e aggiorna la casella di testo con il percorso
|
||||||
|
def apri_file():
|
||||||
|
global path_Boot, path_Iso, ext
|
||||||
|
if ext == "boot":
|
||||||
|
fileType = QtCore.QString("cpio *.cpio.gz")
|
||||||
|
nfileName = QtGui.QFileDialog.getOpenFileName(None, "Scegli il file di boot da usare nell'installazione", "/home/", "File .cpio.gz (*.cpio.gz)", fileType)
|
||||||
|
path_Boot = nfileName
|
||||||
|
ui.t_file.setText(QtGui.QApplication.translate("Dialog", nfileName, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
elif ext == "iso":
|
||||||
|
fileType = QtCore.QString("iso *.iso")
|
||||||
|
nfileName = QtGui.QFileDialog.getOpenFileName(None, "Scegli l'iso da usare nell'installazione", "/home/", "File .iso (*.iso)", fileType)
|
||||||
|
path_Iso = nfileName
|
||||||
|
ui.t_file.setText(QtGui.QApplication.translate("Dialog", nfileName, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
|
||||||
|
|
||||||
|
## Visualizza l'aiuto
|
||||||
|
def gestisci_nuvola():
|
||||||
|
global passo
|
||||||
|
# Aiuto in base al passo corrente
|
||||||
|
if passo == 1:
|
||||||
|
aiuto = "Questo archivio ha lo scopo di rendere la chiavetta bootabile." " Il file in questione è reperibile <a style=\"color: green; \"href=\"http://www.openmamba.org/distribution/media/bootusb.html?lang=it\">qui</a>"
|
||||||
|
elif passo == 2:
|
||||||
|
aiuto = "L'iso è il file contente il sistema operativo. E' possibile scaricarlo da <a style=\"color: green; \"href=\"http://www.openmamba.org/distribution/download.html\">questo</a> indirizzo"
|
||||||
|
elif passo == 3:
|
||||||
|
aiuto = "Selezionare la chiavetta in cui verrà installato openmamba. <span style=\"color:red;\">Tutti i dati contenuti nella chiavetta andranno persi</span>"
|
||||||
|
ui.n_testo.setText(QtGui.QApplication.translate("Dialog", aiuto, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
ui.n_img.show() # Immagine della nuvola
|
||||||
|
ui.n_testo.show() # Testo della nuvola
|
||||||
|
ui.n_chiudi.show()
|
||||||
|
|
||||||
|
## Nasconde la nuvola
|
||||||
|
def chiudi_nuvola():
|
||||||
|
ui.n_img.hide()
|
||||||
|
ui.n_testo.hide()
|
||||||
|
ui.n_chiudi.hide()
|
||||||
|
|
||||||
|
## Lista periferiche usb e le aggiuge alla lista (widget)
|
||||||
|
def lista_usb():
|
||||||
|
import dbus
|
||||||
|
global usb_file, usb_nome
|
||||||
|
|
||||||
|
# Cancella i valori precedenti
|
||||||
|
usb_file = []
|
||||||
|
usb_nome = []
|
||||||
|
ui.l_usb.clear()
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
# Riceve da dbus le chiavette collegate al pc
|
||||||
|
bus = dbus.SystemBus()
|
||||||
|
ud_manager_obj = bus.get_object('org.freedesktop.UDisks', '/org/freedesktop/UDisks')
|
||||||
|
ud_manager = dbus.Interface(ud_manager_obj, 'org.freedesktop.UDisks')
|
||||||
|
for dev in ud_manager.EnumerateDevices():
|
||||||
|
device_obj = bus.get_object('org.freedesktop.UDisks', dev)
|
||||||
|
device_props = dbus.Interface(device_obj, dbus.PROPERTIES_IFACE)
|
||||||
|
# Se lo spazio e' minore di 1GB salta l'usb corrente
|
||||||
|
if(device_props.Get('org.freedesktop.UDisks.Device', 'PartitionSize')) > 1073741823:
|
||||||
|
# Se e' un device rimuovibile (== chiavetta usb)
|
||||||
|
if(device_props.Get('org.freedesktop.UDisks.Device', 'DeviceIsRemovable')):
|
||||||
|
usb_file.append(device_props.Get('org.freedesktop.UDisks.Device', 'DeviceFile'))
|
||||||
|
usb_nome.append(device_props.Get('org.freedesktop.UDisks.Device', 'DriveModel'))
|
||||||
|
ui.l_usb.addItem(usb_file[i] + " " + usb_nome[i])
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
# Imposta il primo come quello di default
|
||||||
|
if len(usb_file) != 0:
|
||||||
|
seleziona_usb(0)
|
||||||
|
else:
|
||||||
|
print "Nessuna chiavetta usb disponibile"
|
||||||
|
|
||||||
|
|
||||||
|
## Abbreviazione di un warning
|
||||||
|
def msg_warn(testo):
|
||||||
|
msg = QtGui.QMessageBox.warning(None, "Attenzione", testo)
|
||||||
|
|
||||||
|
## Aggiorna gli oggetti al cambio del passo
|
||||||
|
def aggiorna_oggetti(immagine, titolo, descrizione):
|
||||||
|
# Funzioni che servono solo qua dentro
|
||||||
|
def nascondi_oggetti():
|
||||||
|
ui.l_usb.hide()
|
||||||
|
ui.b_refresh.hide()
|
||||||
|
ui.t_file.hide()
|
||||||
|
ui.pach1.hide()
|
||||||
|
ui.b_apri_file.hide()
|
||||||
|
|
||||||
|
def visualizza_lista_usb():
|
||||||
|
ui.l_usb.show()
|
||||||
|
ui.b_refresh.show()
|
||||||
|
|
||||||
|
def visualizza_scegli_file():
|
||||||
|
ui.t_file.show()
|
||||||
|
ui.pach1.show()
|
||||||
|
ui.b_apri_file.show()
|
||||||
|
|
||||||
|
global passo, ext, path_Boot, path_Iso
|
||||||
|
|
||||||
|
nascondi_oggetti()
|
||||||
|
if passo == 1:
|
||||||
|
ext = "boot"
|
||||||
|
path_Boot = ""
|
||||||
|
ui.b_indietro.setText(QtGui.QApplication.translate("Dialog", "Annulla", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
# Visualizzo gli oggetti del passo 1
|
||||||
|
visualizza_scegli_file()
|
||||||
|
|
||||||
|
elif passo == 2:
|
||||||
|
ext = "iso"
|
||||||
|
path_Iso = ""
|
||||||
|
ui.b_indietro.setText(QtGui.QApplication.translate("Dialog", "Indietro", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
visualizza_scegli_file()
|
||||||
|
|
||||||
|
elif passo == 3:
|
||||||
|
visualizza_lista_usb()
|
||||||
|
lista_usb()
|
||||||
|
|
||||||
|
ui.t_file.setText(QtGui.QApplication.translate("Dialog", "", None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
ui.i_back.setPixmap(QtGui.QPixmap(immagine))
|
||||||
|
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", titolo, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
ui.l_descrizione.setText(QtGui.QApplication.translate("Dialog", descrizione, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## Funzione principale, installa openmamba sull'usb scelto
|
||||||
|
def installazione_start():
|
||||||
|
a=0
|
||||||
|
|
||||||
|
## Setta la variabili globali sel_usb_* con l'usb scelto
|
||||||
|
def seleziona_usb(i):
|
||||||
|
global sel_usb_file, usb_file, sel_usb_nome, usb_nome
|
||||||
|
sel_usb_file = usb_file[i]
|
||||||
|
sel_usb_nome = usb_nome[i]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Inizio dei vari passi
|
||||||
|
|
||||||
|
|
||||||
|
def passo1():
|
||||||
|
aggiorna_oggetti("img/back1.png", "Passo 1/4 - scelta del file di boot", "Scegli l\'archivio .cpio per il boot")
|
||||||
|
|
||||||
|
def passo2():
|
||||||
|
aggiorna_oggetti("img/back2.png", "Passo 2/4 - scelta del file iso", "Scegli il file iso di openmamba")
|
||||||
|
|
||||||
|
def passo3():
|
||||||
|
aggiorna_oggetti("img/back3.png", "Passo 3/4 - scelta della chiavetta", "Scegli la chiavetta usb")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def passo4():
|
||||||
|
from subprocess import Popen
|
||||||
|
|
||||||
|
aggiorna_oggetti("img/back4.png", "Passo 4/4 - installazione di openmamba su usb", "Installazione in corso...")
|
||||||
|
|
||||||
|
# Nasconde gli oggetti superflui:
|
||||||
|
ui.b_help.hide()
|
||||||
|
ui.line.hide()
|
||||||
|
ui.b_indietro.hide()
|
||||||
|
ui.b_avanti.hide()
|
||||||
|
# Mostra la progressBar
|
||||||
|
ui.p_installazione.show()
|
||||||
|
init_ascolto()
|
||||||
|
p = Popen(["./usbinstall.sh", "start", sel_usb_file, path_Boot, path_Iso])
|
||||||
|
print "Processo di installazione avviato"
|
||||||
|
|
||||||
|
|
||||||
|
def init_ascolto():
|
||||||
|
session_bus = dbus.SessionBus()
|
||||||
|
bus_name = dbus.service.BusName('org.openmamba.usbinstall', bus=session_bus)
|
||||||
|
dbus_loop = setta_dbus(bus_name)
|
||||||
|
bus = dbus.SessionBus(mainloop=dbus_loop)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class setta_dbus(dbus.service.Object):
|
||||||
|
def __init__(self, bus_name, object_path='/org/openmamba/usbinstall'):
|
||||||
|
dbus.service.Object.__init__(self, bus_name, object_path)
|
||||||
|
|
||||||
|
@dbus.service.method('org.openmamba.usbinstall')
|
||||||
|
def Pbar_aggiorna(self, p):
|
||||||
|
ui.p_installazione.setProperty("value", int(p))
|
||||||
|
if p == 100:
|
||||||
|
installazione_terminata()
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@dbus.service.method('org.openmamba.usbinstall')
|
||||||
|
def Descrizione(self, desc):
|
||||||
|
ui.l_descrizione.setText(QtGui.QApplication.translate("Dialog",desc, None, QtGui.QApplication.UnicodeUTF8))
|
||||||
|
return 0
|
||||||
|
|
||||||
|
@dbus.service.method('org.openmamba.usbinstall')
|
||||||
|
def Esci(self):
|
||||||
|
mainloop.quit()
|
||||||
|
app.exit(0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def installazione_terminata():
|
||||||
|
print "Installazione terminata"
|
||||||
|
msg = QtGui.QMessageBox.information(None, "Informazione", "Installazione terminata correttamente")
|
||||||
|
|
||||||
|
mainloop.quit()
|
||||||
|
app.exit(0)
|
||||||
|
|
||||||
|
# Inizializza la parte grafica
|
||||||
|
app = QtGui.QApplication([])
|
||||||
|
Dialog = QtGui.QDialog()
|
||||||
|
ui = Ui_MainWindow()
|
||||||
|
ui.setupUi(Dialog)
|
||||||
|
mainloop = gobject.MainLoop()
|
||||||
|
|
||||||
|
def run():
|
||||||
|
assegna_eventi()
|
||||||
|
passo1()
|
||||||
|
|
||||||
|
Dialog.show() # mostra il dialog precedentemente creato
|
||||||
|
|
||||||
|
return app.exec_()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
run()
|
||||||
|
|
||||||
|
|
117
usbinstall.sh
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# openmamba-usbinstall è uno script per la generazione automatica di una chiavetta di boot per openmamba snapshot.
|
||||||
|
# Se i file necessari sono presenti sul disco fisso verranno utilizzati quelli altrimenti
|
||||||
|
# scaricherà direttamente la versione attuale dal sito di openmamba.
|
||||||
|
# se il file iso è presente nella home verrà usato direttamente altrimenti si aprirà un dialogo dove sarà possibile cercarlo.
|
||||||
|
# (c) 2009 ercole 'ercolinux' carpanetto - ercole69@gmail.com
|
||||||
|
# (c) 2009-2010 Silvan Calarco - silvan.calarco@mambasoft.it
|
||||||
|
# rilasciato secondo la licenza GPL v.3
|
||||||
|
|
||||||
|
# 17/10/11 Script modificato organizzando il codice in funzioni, chiamate dal modulo installazione.py
|
||||||
|
|
||||||
|
|
||||||
|
# formattazione della chiavetta e installazione dei file necessari al boot di openmamba
|
||||||
|
|
||||||
|
|
||||||
|
#1 Smonta la partizione
|
||||||
|
inst_dev_umount()
|
||||||
|
{
|
||||||
|
sudo umount ${1}1
|
||||||
|
}
|
||||||
|
|
||||||
|
#2 Crea la partizione
|
||||||
|
inst_new_part()
|
||||||
|
{
|
||||||
|
sudo fdisk $1 <./.fdisk_template
|
||||||
|
}
|
||||||
|
|
||||||
|
#3 Formatta la partizione (e la monta)
|
||||||
|
inst_format()
|
||||||
|
{
|
||||||
|
|
||||||
|
sudo mkfs.ext3 ${1}1 -L openmamba_live
|
||||||
|
mkdir -p ~/tmpmamba
|
||||||
|
sudo mount ${1}1 ~/tmpmamba
|
||||||
|
sudo chmod 777 ~/tmpmamba
|
||||||
|
}
|
||||||
|
|
||||||
|
#4 Estrae il file boot
|
||||||
|
inst_extr_boot()
|
||||||
|
{
|
||||||
|
cd ~/tmpmamba
|
||||||
|
gunzip -c < $1 | cpio -i
|
||||||
|
}
|
||||||
|
|
||||||
|
#5 Installa il bootloader
|
||||||
|
inst_make_boot()
|
||||||
|
{
|
||||||
|
cd ~/tmpmamba
|
||||||
|
sudo extlinux --install boot
|
||||||
|
sudo install-mbr -e 1 $1
|
||||||
|
}
|
||||||
|
|
||||||
|
#6 Copia la iso sull'usb
|
||||||
|
inst_copy_iso()
|
||||||
|
{
|
||||||
|
cd ~/tmpmamba
|
||||||
|
cp $1 ./
|
||||||
|
ln -fs `basename $1` ./openmamba-live.iso
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#7 Smonta la chiavetta
|
||||||
|
inst_dir_umount()
|
||||||
|
{
|
||||||
|
sudo umount ~/tmpmamba
|
||||||
|
rmdir ~/tmpmamba
|
||||||
|
}
|
||||||
|
|
||||||
|
# Aggiorna la progressbar $1 == %
|
||||||
|
pbar()
|
||||||
|
{
|
||||||
|
dbus-send --print-reply --session --dest=org.openmamba.usbinstall /org/openmamba/usbinstall org.openmamba.usbinstall.Pbar_aggiorna int32:$1
|
||||||
|
}
|
||||||
|
|
||||||
|
descrizione()
|
||||||
|
{
|
||||||
|
|
||||||
|
dbus-send --print-reply --session --dest=org.openmamba.usbinstall /org/openmamba/usbinstall org.openmamba.usbinstall.Descrizione string:$1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if [ $1 == "start" ]; then
|
||||||
|
descrizione "Smonto la chiavetta"
|
||||||
|
inst_dev_umount $2
|
||||||
|
pbar 2
|
||||||
|
|
||||||
|
descrizione "Formattazione della chiavetta in corso..."
|
||||||
|
inst_new_part $2
|
||||||
|
pbar 5
|
||||||
|
inst_format $2
|
||||||
|
pbar 20
|
||||||
|
|
||||||
|
descrizione "Estrazione del file di boot in corso..."
|
||||||
|
inst_extr_boot $3
|
||||||
|
pbar 38
|
||||||
|
|
||||||
|
descrizione "Scrittura del bootloader in corso..."
|
||||||
|
inst_make_boot $2
|
||||||
|
pbar 45
|
||||||
|
|
||||||
|
descrizione "Copia del file iso di openmamba in corso..."
|
||||||
|
inst_copy_iso $4
|
||||||
|
pbar 98
|
||||||
|
|
||||||
|
descrizione "Smonto la chiavetta"
|
||||||
|
inst_dir_umount
|
||||||
|
pbar 100
|
||||||
|
|
||||||
|
|
||||||
|
else
|
||||||
|
echo $1 "Parametri non validi"
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|