diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9ae0bd1 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +#Makefile per license-dialog +#E' il primo che scrivo, quindi lascio il resto alla vostra immaginazione ;D + +PACKAGE=license-dialog + +distdir = $(PACKAGE)-$(VERSION) +dist_archive = $(distdir).tar.bz2 + +include VERSION + +#Directory +bindir = /usr/bin +datadir = /usr/share +localesdir = ${datadir}/locale + +DESTDIR = +INSTALL = /usr/bin/install +INSTALL_PROGRAM = ${INSTALL} -m 755 +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_DIR = ${INSTALL} -d -m 755 +INSTALL_SCRIPT = ${INSTALL_PROGRAM} + +pck_catalogs := $(wildcard po/*.po) + +.SUFFIXES: .po .mo +.po.mo:; msgfmt $< -o $@ + +all: locales + +locales: $(pck_catalogs:.po=.mo) + +install-locales: locales + @for f in $(pck_catalogs); do\ + lang=`echo $$f | sed 's,.*/\(.*\)\.po,\1,'`;\ + echo "installing i18n file for language \`$$lang'...";\ + dir="$(DESTDIR)$(localesdir)/$$lang/LC_MESSAGES";\ + $(INSTALL_DIR) $$dir;\ + $(INSTALL_DATA) $${f/.po/.mo} $$dir/license-dialog.mo;\ + done + +install-dirs: + @$(INSTALL_DIR) $(DESTDIR)$(bindir) + +install: install-dirs install-locales + $(INSTALL_PROGRAM) src/license-dialog $(DESTDIR)$(bindir)/license-dialog + +clean: + rm -f $(pck_catalogs:.po=.mo) + rm -f $(dist_archive) + +dist: clean + #@git clean -f + #@git log > ChangeLog + @mkdir /tmp/$(distdir) + @cp -a * /tmp/$(distdir)/ + @rm -f $(dist_archive);\ + tar cf - -C /tmp $(distdir) | bzip2 -9 -c > $(dist_archive) + @rm -rf /tmp/$(distdir) + @echo "file \`$(dist_archive)' created" + +dist-rpm: dist + @rpm_sourcedir=`rpm --eval=%{_sourcedir}`;\ + mv -f $(PACKAGE)-$(VERSION).tar.bz2 $$rpm_sourcedir;\ + echo "File $$rpm_sourcedir/$(PACKAGE)-$(VERSION).tar.bz2 created." diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..61acab0 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +VERSION=0.3 diff --git a/gui.pyc b/gui.pyc deleted file mode 100644 index 43bfc1a..0000000 Binary files a/gui.pyc and /dev/null differ diff --git a/src/fdisk_template b/src/fdisk_template new file mode 100644 index 0000000..ee07a99 --- /dev/null +++ b/src/fdisk_template @@ -0,0 +1,16 @@ +d +4 +d +3 +d +2 +d +n +p +1 +1 + + +a +1 +w diff --git a/src/gui.py b/src/gui.py new file mode 100644 index 0000000..25842e4 --- /dev/null +++ b/src/gui.py @@ -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, 251, 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)) + diff --git a/src/img/back1.png b/src/img/back1.png new file mode 100644 index 0000000..810c5fa Binary files /dev/null and b/src/img/back1.png differ diff --git a/src/img/back2.png b/src/img/back2.png new file mode 100644 index 0000000..a3d3075 Binary files /dev/null and b/src/img/back2.png differ diff --git a/src/img/back3.png b/src/img/back3.png new file mode 100644 index 0000000..25c9eea Binary files /dev/null and b/src/img/back3.png differ diff --git a/src/img/back4.png b/src/img/back4.png new file mode 100644 index 0000000..1f6d3b1 Binary files /dev/null and b/src/img/back4.png differ diff --git a/src/img/dialog-question.png b/src/img/dialog-question.png new file mode 100644 index 0000000..ec8de67 Binary files /dev/null and b/src/img/dialog-question.png differ diff --git a/src/img/document-open.png b/src/img/document-open.png new file mode 100644 index 0000000..fce8c44 Binary files /dev/null and b/src/img/document-open.png differ diff --git a/src/img/exit.png b/src/img/exit.png new file mode 100644 index 0000000..b3a4555 Binary files /dev/null and b/src/img/exit.png differ diff --git a/src/img/mamba.png b/src/img/mamba.png new file mode 100644 index 0000000..ea54640 Binary files /dev/null and b/src/img/mamba.png differ diff --git a/src/img/nuvola.png b/src/img/nuvola.png new file mode 100644 index 0000000..6f6167e Binary files /dev/null and b/src/img/nuvola.png differ diff --git a/src/img/pach1.png b/src/img/pach1.png new file mode 100644 index 0000000..c5a1bd8 Binary files /dev/null and b/src/img/pach1.png differ diff --git a/src/img/view-refresh.png b/src/img/view-refresh.png new file mode 100644 index 0000000..53a5d14 Binary files /dev/null and b/src/img/view-refresh.png differ diff --git a/src/usbinstall.py b/src/usbinstall.py new file mode 100644 index 0000000..4cb2be3 --- /dev/null +++ b/src/usbinstall.py @@ -0,0 +1,322 @@ +# -*- coding: utf-8 -*- +#!/usr/bin/env python + +from gui import * # Importa la parte grafica + +import gettext + +from subprocess import Popen +# 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 + +gettext.install('usbinstall', '/usr/share/locale', unicode=1) + +# Variabili globali +passo = 1 +p = "" # Processo del file .sh +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(_("A file .cpio is required")) + return + else: + passo += 1 + passo2() + + elif passo == 2: + if path_Iso == "": + msg_warn(_("An openmamba's iso is required")) + return + else: + passo += 1 + passo3() + + elif passo == 3: + if sel_usb_file == "": + msg_warn(_("You must choose a usb key")) + return + else: + msg = QtGui.QMessageBox.question(None, _("Attention"), _("All data on the key ") + sel_usb_nome + _(" will be lost. \n")+_("Are you sure to continue?"), + 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 _("Application terminated by pressing \"cancel\" button") + + 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, _("Choose the boot file"), "~", "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, _("Choose the iso file"), "~", "File .iso (*.iso)", fileType) #26/10 path_Boot -> "~" + 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 = _("This archive is designed to make the usb bootable.") + _(" You can find this file here") + # Cambiata anche la lingua della pagina (lang=en) + elif passo == 2: + aiuto = _("The file .iso contains the operating system. You can download it from here") + elif passo == 3: + aiuto = _("Choose an usb key for the installation. All data will be lost") + 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 _("No usb available > 1 Gb") + + +## Abbreviazione di un warning +def msg_warn(testo): + msg = QtGui.QMessageBox.warning(None, _("Attention"), 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", _("Cancel"), None, QtGui.QApplication.UnicodeUTF8)) + # Visualizzo gli oggetti del passo 1 + visualizza_scegli_file() + # Chiudi la nuovola dell'help al cambio di passo + chiudi_nuvola() + elif passo == 2: + ext = "iso" + path_Iso = "" + ui.b_indietro.setText(QtGui.QApplication.translate("Dialog", _("Go back"), None, QtGui.QApplication.UnicodeUTF8)) + visualizza_scegli_file() + # Chiudi la nuovola dell'help al cambio di passo + chiudi_nuvola() + elif passo == 3: + visualizza_lista_usb() + lista_usb() + # Chiudi la nuovola dell'help al cambio di passo + chiudi_nuvola() + elif passo == 4: + chiudi_nuvola() + 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)) + + + +## 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", _("Step 1/4 - choice the boot file"), _("Choose the .cpio file")) + +def passo2(): + aggiorna_oggetti("img/back2.png", _("Step 2/4 - choice the iso file"), _("Choose the openmamba .iso file")) + +def passo3(): + aggiorna_oggetti("img/back3.png", _("Step 3/4 - choice of usb key"), _("Choose the usb key")) + + + +def passo4(): + global p + aggiorna_oggetti("img/back4.png", _("Step 4/4 - installation of openmamba to usb"), _("Installation in progress...")) + + # 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 _("Installation process started") + + +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) + +# Termina lo scipt e dbus insieme alla finestra +def closeEvent(form, event): + installazione_terminata() + + +def installazione_terminata(): + global p + msg = QtGui.QMessageBox.information(None, _("Information"), _("Installation process completed")) + p.terminate() + 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() + ui.b_avanti.setText(QtGui.QApplication.translate("Dialog", _("Go on"), None, QtGui.QApplication.UnicodeUTF8)) + Dialog.show() # Mostra il dialog precedentemente creato + + return app.exec_() + +if __name__ == "__main__": + run() + + diff --git a/src/usbinstall.sh b/src/usbinstall.sh new file mode 100755 index 0000000..73fd5ce --- /dev/null +++ b/src/usbinstall.sh @@ -0,0 +1,129 @@ +#!/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 + orig_size=$(stat -c %s $1) + cp "$1" ./ & + dest_size=0 + sleep 2 + while [ $orig_size -gt $dest_size ] ; do + dest_size=$(stat -c %s ./"`basename $1`") + percentuale=$((45 + ( 50 * $dest_size ) / $orig_size )) + pbar $percentuale + done + ln -fs `basename $1` ./openmamba-live.iso +} + + +#7 Smonta la chiavetta +inst_dir_umount() +{ + # So it attend up to umount return without errors + + while [ 1 ] ; do + sudo umount ${1} + if [ $? != 1 ]; then + break + fi + done + echo "Done" + 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 $2 + pbar 100 + + +else + echo $1 "Parametri non validi" + +fi