Started to write Makefile

This commit is contained in:
Filippo Bedendo Bordon 2011-11-09 22:51:07 +01:00
parent 3de8c4ba76
commit 4cfdab8195
18 changed files with 678 additions and 0 deletions

64
Makefile Normal file
View File

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

1
VERSION Normal file
View File

@ -0,0 +1 @@
VERSION=0.3

BIN
gui.pyc

Binary file not shown.

16
src/fdisk_template Normal file
View File

@ -0,0 +1,16 @@
d
4
d
3
d
2
d
n
p
1
1
a
1
w

146
src/gui.py Normal file
View 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, 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))

BIN
src/img/back1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
src/img/back2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
src/img/back3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
src/img/back4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

BIN
src/img/dialog-question.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 869 B

BIN
src/img/document-open.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
src/img/exit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

BIN
src/img/mamba.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
src/img/nuvola.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 830 B

BIN
src/img/pach1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

BIN
src/img/view-refresh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

322
src/usbinstall.py Normal file
View File

@ -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 <a style=\"color: green; \"href=\"http://www.openmamba.org/distribution/media/bootusb.html?lang=en\">here</a>")
# Cambiata anche la lingua della pagina (lang=en)
elif passo == 2:
aiuto = _("The file .iso contains the operating system. You can download it from <a style=\"color: green; \"href=\"http://www.openmamba.org/distribution/download.html?lang=en\">here</a>")
elif passo == 3:
aiuto = _("Choose an usb key for the installation. <span style=\"color:red;\">All data will be lost</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 _("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()

129
src/usbinstall.sh Executable file
View File

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