示例#1
0
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print 'Se han encontrado los siguientes discos: {0}' \
        .format(self.discos)

        self.lbl1 = gtk.Label(
            _("Select the disk where you want to install \
Canaima:"))
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        atk_acc(self.cmb_discos, self.lbl1)
        self.cmb_discos.connect('changed', self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label(_("Slelect the installation method:"))
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.cmb_metodo.connect('changed', self.establecer_metodo)
        self.put(self.cmb_metodo, 0, 190)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        atk_label(self.lbl4)
        self.put(self.lbl4, 0, 225)

        atk_acc(self.cmb_metodo, self.lbl2)

        self.cmb_discos.set_active(0)
示例#2
0
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print 'Se han encontrado los siguientes discos: {0}' \
        .format(self.discos)

        self.lbl1 = gtk.Label(_("Select the disk where you want to install \
Canaima:"))
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        atk_acc(self.cmb_discos, self.lbl1)
        self.cmb_discos.connect('changed', self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label(_("Slelect the installation method:"))
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.cmb_metodo.connect('changed', self.establecer_metodo)
        self.put(self.cmb_metodo, 0, 190)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        atk_label(self.lbl4)
        self.put(self.lbl4, 0, 225)

        atk_acc(self.cmb_metodo, self.lbl2)

        self.cmb_discos.set_active(0)
示例#3
0
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print "Se han encontrado los siguientes discos: {0}".format(self.discos)

        self.lbl1 = gtk.Label("Seleccione el disco donde desea instalar el sistema:")
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        self.cmb_discos.connect("changed", self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label("Seleccione el método de instalación:")
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.put(self.cmb_metodo, 0, 190)
        self.cmb_metodo.connect("changed", self.establecer_metodo)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        self.put(self.lbl4, 0, 225)

        self.cmb_discos.set_active(0)
示例#4
0
class PasoMetodo(gtk.Fixed):
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print "Se han encontrado los siguientes discos: {0}".format(self.discos)

        self.lbl1 = gtk.Label("Seleccione el disco donde desea instalar el sistema:")
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        self.cmb_discos.connect("changed", self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label("Seleccione el método de instalación:")
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.put(self.cmb_metodo, 0, 190)
        self.cmb_metodo.connect("changed", self.establecer_metodo)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        self.put(self.lbl4, 0, 225)

        self.cmb_discos.set_active(0)

    def seleccionar_disco(self, widget=None):
        primarias = 0
        extendidas = 0
        logicas = 0
        self.metodos = []

        try:
            self.barra_part.expose()
        except:
            pass
        self.cmb_metodo.get_model().clear()
        self.cmb_metodo.set_sensitive(False)
        CFG["w"].siguiente.set_sensitive(False)
        self.lbl4.set_text("")

        self.disco = self.cmb_discos.get_active_text()
        print "{0} seleccionado".format(self.disco)
        self.particiones = self.part.lista_particiones(self.disco)

        if len(self.particiones) == 0:
            UserMessage(
                message="El disco {0} necesita una tabla de particiones para poder continuar con la instalación. ¿Desea crear una tabla de particiones ahora?.\n\nSi presiona cancelar no podrá utilizar este disco para instalar Canaima.".format(
                    self.disco
                ),
                title="Tabla de particiones no encontrada".format(self.disco),
                mtype=gtk.MESSAGE_INFO,
                buttons=gtk.BUTTONS_OK_CANCEL,
                c_1=gtk.RESPONSE_OK,
                f_1=self.part.nueva_tabla_particiones,
                p_1=(self.disco, "msdos"),
                c_2=gtk.RESPONSE_OK,
                f_2=self.seleccionar_disco,
                p_2=(),
            )
        else:
            try:
                self.barra_part.expose()
            except:
                pass

            self.total = self.particiones[0][9]
            CFG["w"].siguiente.set_sensitive(True)
            self.cmb_metodo.set_sensitive(True)

            mini = self.particiones[0][1]
            mfin = self.particiones[0][9]

            for t in self.particiones:
                if mini > t[1]:
                    mini = t[1]

                if mfin < t[2]:
                    mfin = t[2]

                if t[5] == "primary" and t[4] != "free":
                    primarias += 1
                elif t[5] == "logical" and t[4] != "free":
                    logicas += 1
                elif t[5] == "extended":
                    extendidas += 1

            disco_array = [self.disco, mini, mfin, primarias, extendidas, logicas]

            if self.total >= self.minimo:
                for p in self.particiones:
                    part = p[0]
                    tam = p[3]
                    fs = p[4]
                    tipo = p[5]
                    libre = p[8]

                    if fs != "free" and libre >= self.minimo:
                        if fs in FSPROGS:
                            if tipo == "logical" and FSPROGS[fs][1][0] != "":
                                if logicas < 10:
                                    self.metodos.append(
                                        {
                                            "tipo": "REDIM",
                                            "msg": "Instalar redimensionando {0} para liberar espacio ({1} libres)".format(
                                                part, humanize(libre)
                                            ),
                                            "part": p,
                                            "disco": disco_array,
                                        }
                                    )

                            elif tipo == "primary" and FSPROGS[fs][1][0] != "":
                                if (extendidas < 1 and primarias < 4) or (extendidas > 0 and primarias < 2):
                                    self.metodos.append(
                                        {
                                            "tipo": "REDIM",
                                            "msg": "Instalar redimensionando {0} para liberar espacio ({1} libres)".format(
                                                part, humanize(libre)
                                            ),
                                            "part": p,
                                            "disco": disco_array,
                                        }
                                    )

                    if fs == "free" and tam >= self.minimo:
                        if tipo == "logical":
                            if logicas < 10:
                                self.metodos.append(
                                    {
                                        "tipo": "LIBRE",
                                        "msg": "Instalar usando espacio libre disponible ({0})".format(humanize(tam)),
                                        "part": p,
                                        "disco": disco_array,
                                    }
                                )

                        elif tipo == "primary":
                            if (extendidas < 1 and primarias < 4) or (extendidas > 0 and primarias < 2):
                                self.metodos.append(
                                    {
                                        "tipo": "LIBRE",
                                        "msg": "Instalar usando espacio libre disponible ({0})".format(humanize(tam)),
                                        "part": p,
                                        "disco": disco_array,
                                    }
                                )

                self.metodos.append(
                    {
                        "tipo": "TODO",
                        "msg": "Instalar usando todo el disco ({0})".format(humanize(self.total)),
                        "part": disco_array,
                        "disco": disco_array,
                    }
                )

                self.metodos.append(
                    {
                        "tipo": "MANUAL",
                        "msg": "Instalar editando particiones manualmente".format(humanize(tam)),
                        "part": disco_array,
                        "disco": disco_array,
                    }
                )

            else:
                self.metodos.append({"tipo": "NONE", "msg": "El tamaño del disco no es suficiente"})

                CFG["w"].siguiente.set_sensitive(False)
                self.cmb_metodo.set_sensitive(False)

            for k in sorted(self.metodos, key=lambda ordn: ordn["tipo"], reverse=True):
                self.cmb_metodo.append_text(k["msg"])

            self.cmb_metodo.set_active(0)

    def establecer_metodo(self, widget=None):
        """
            Crea una lista de los metodos de instalación disponibles para la
            partición
        """
        for d in self.metodos:
            if d["msg"] == self.cmb_metodo.get_active_text():
                self.metodo = d

        if self.metodo["tipo"] == "TODO":
            msg = "Al escoger esta opción el nuevo Sistema Operativo ocupará la totalidad de su disco duro. Tenga en cuenta que se borrarán todos los datos y/o sistemas presentes. Puede aprovechar este momento para realizar un respaldo antes de proseguir con la instalación."
        elif self.metodo["tipo"] == "LIBRE":
            msg = "Esta opción le permitirá instalar el Sistema Operativo en el espacio libre de {0} que se encuentra en su disco duro, conservando los demás datos y/o sistemas que se encuentren en las demás porciones del disco.".format(
                humanize(self.metodo["part"][2] - self.metodo["part"][1])
            )
        elif self.metodo["tipo"] == "REDIM":
            msg = "Esta opción permitirá utilizar el espacio libre presente en la partición {0} para instalar el Sistema Operativo. Se redimensionará la partición para liberar el espacio, manteniendo los datos y/o sistemas presentes".format(
                self.metodo["part"][0]
            )
        elif self.metodo["tipo"] == "MANUAL":
            msg = "Si escoge esta opción se abrirá el editor de particiones, que le permitirá ajustar las particiones según más le convenga. No le recomendamos que utilice esta opción a menos que sepa lo que está haciendo."
        elif self.metodo["tipo"] == "NONE":
            msg = "El sistema operativo necesita al menos 6GB libres para poder instalar. Seleccione otro disco duro."
        else:
            pass

        self.lbl4.set_text(msg)
示例#5
0
class PasoMetodo(gtk.Fixed):
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print 'Se han encontrado los siguientes discos: {0}' \
        .format(self.discos)

        self.lbl1 = gtk.Label(
            _("Select the disk where you want to install \
Canaima:"))
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        atk_acc(self.cmb_discos, self.lbl1)
        self.cmb_discos.connect('changed', self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label(_("Slelect the installation method:"))
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.cmb_metodo.connect('changed', self.establecer_metodo)
        self.put(self.cmb_metodo, 0, 190)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        atk_label(self.lbl4)
        self.put(self.lbl4, 0, 225)

        atk_acc(self.cmb_metodo, self.lbl2)

        self.cmb_discos.set_active(0)

    def seleccionar_disco(self, widget=None):
        primarias = 0
        extendidas = 0
        logicas = 0
        self.metodos = []

        try:
            self.barra_part.expose()
        except:
            pass
        self.cmb_metodo.get_model().clear()
        self.cmb_metodo.set_sensitive(False)
        CFG['w'].siguiente.set_sensitive(False)
        self.lbl4.set_text('')

        self.disco = self.cmb_discos.get_active_text()
        print '{0} seleccionado'.format(self.disco)
        self.particiones = self.part.lista_particiones(self.disco)

        if len(self.particiones) == 0:
            UserMessage(
                    message=_("""Disk  "{0}" needs a partition table to \
continue the installation. Do you want to create a partition table now?

If you press Cancel you can not use that disk to install Canaima.""")\
                    .format(self.disco),
                    title=_("Partition table not found."),
                    mtype=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK_CANCEL,
                    c_1=gtk.RESPONSE_OK, f_1=self.part.nueva_tabla_particiones,
                    p_1=(self.disco, 'msdos'), c_2=gtk.RESPONSE_OK,
                    f_2=self.seleccionar_disco, p_2=()
                    )
        else:
            try:
                self.barra_part.expose()
            except:
                pass

            self.total = self.particiones[0][9]
            CFG['w'].siguiente.set_sensitive(True)
            self.cmb_metodo.set_sensitive(True)

            mini = self.particiones[0][1]
            mfin = self.particiones[0][9]

            for t in self.particiones:
                if mini > t[1]:
                    mini = t[1]

                if mfin < t[2]:
                    mfin = t[2]

                if t[5] == 'primary' and t[4] != 'free':
                    primarias += 1
                elif t[5] == 'logical' and t[4] != 'free':
                    logicas += 1
                elif t[5] == 'extended':
                    extendidas += 1

            disco_array = [
                self.disco, mini, mfin, primarias, extendidas, logicas
            ]

            if self.total >= self.minimo:
                for p in self.particiones:
                    part = p[0]
                    tam = p[3]
                    fs = p[4]
                    tipo = p[5]
                    libre = p[8]

                    if fs != 'free' and libre >= self.minimo:
                        if fs in FSPROGS:
                            if tipo == 'logical' and FSPROGS[fs][1][0] != '':
                                if logicas < 10:
                                    self.metodos.append({
                                        'tipo':
                                        'REDIM',
                                        'msg':
                                        _("Install resizing {0} to \
free up space ({1} free)").format(part, humanize(libre)),
                                        'part':
                                        p,
                                        'disco':
                                        disco_array
                                    })

                            elif tipo == 'primary' and FSPROGS[fs][1][0] != '':
                                if (extendidas < 1 and primarias < 4) \
                                or (extendidas > 0 and primarias < 2):
                                    self.metodos.append({
                                        'tipo':
                                        'REDIM',
                                        'msg':
                                        _("Install resizing {0} to \
free up space ({1} free)").format(part, humanize(libre)),
                                        'part':
                                        p,
                                        'disco':
                                        disco_array
                                    })

                    if fs == 'free' and tam >= self.minimo:
                        if tipo == 'logical':
                            if logicas < 10:
                                self.metodos.append({
                                    'tipo':
                                    'LIBRE',
                                    'msg':
                                    _("Install using available free \
space ({0})").format(humanize(tam)),
                                    'part':
                                    p,
                                    'disco':
                                    disco_array
                                })

                        elif tipo == 'primary':
                            if (extendidas < 1 and primarias < 4) \
                            or (extendidas > 0 and primarias < 2):
                                self.metodos.append({
                                    'tipo':
                                    'LIBRE',
                                    'msg':
                                    _("Install using available free \
space ({0})").format(humanize(tam)),
                                    'part':
                                    p,
                                    'disco':
                                    disco_array
                                })

                self.metodos.append({
                    'tipo': 'TODO',
                    'msg': _("Install using the entire disk ({0})") \
                    .format(humanize(self.total)),
                    'part': disco_array,
                    'disco': disco_array
                })

                self.metodos.append({
                    'tipo': 'MANUAL',
                    'msg': _("Install editing partitions manually")\
                    .format(humanize(tam)),
                    'part': disco_array,
                    'disco': disco_array
                })

            else:
                self.metodos.append({
                    'tipo':
                    'NONE',
                    'msg':
                    'El tamaño del disco no es suficiente'
                })

                CFG['w'].siguiente.set_sensitive(False)
                self.cmb_metodo.set_sensitive(False)

            for k in sorted(self.metodos,
                            key=lambda ordn: ordn['tipo'],
                            reverse=True):
                self.cmb_metodo.append_text(k['msg'])

            self.cmb_metodo.set_active(0)

    def establecer_metodo(self, widget=None):
        '''
            Crea una lista de los metodos de instalación disponibles para la
            partición
        '''
        for d in self.metodos:
            if d['msg'] == self.cmb_metodo.get_active_text():
                self.metodo = d

        if self.metodo['tipo'] == 'TODO':
            msg = _("By choosing this option, Canaima will occupy all of your \
hard drive. Note that all data present will be erased. You can take this time \
to make a backup before proceeding with the installation.")
        elif self.metodo['tipo'] == 'LIBRE':
            msg = _("By choosing this option, Canaima will be installed in \
the free space of {0} that is in you hard disk, preserving the other data and \
systems that are in the other portions of the disc."                                                    ) \
            .format(humanize(self.metodo['part'][2] - self.metodo['part'][1]))
        elif self.metodo['tipo'] == 'REDIM':
            msg = _("This option will use the free space present in the \
partition {0} to install Canaima. The partition will be resized to free up \
space, preserving the data and/or systems present."                                                   ) \
            .format(self.metodo['part'][0])
        elif self.metodo['tipo'] == 'MANUAL':
            msg = _("If you choose this option will open the partition \
editor, allowing you to adjust the partitions according to your convenience. \
We do not recommend you use this option unless you know what you are doing.")
        elif self.metodo['tipo'] == 'NONE':

            msg = _("Canaima needs at least {0} to be installed. Select other \
disk with more available space.").format(humanize(ESPACIO_TOTAL))
        else:
            pass

        self.lbl4.set_text(msg)
示例#6
0
def install_process(CFG, q_button_a, q_button_b, q_view, q_label, q_win):
    button_a = q_button_a.get()
    button_b = q_button_b.get()
    view = q_view.get()
    label = q_label.get()
    window = q_win.get()
    p = Particiones()
    metodo = CFG['metodo']
    acciones = CFG['acciones']
    passroot = CFG['passroot1']
    nombre = CFG['nombre']
    usuario = CFG['usuario']
    passuser = CFG['passuser1']
    maquina = CFG['maquina']
    lcl_item = CFG['locale']
    oem = CFG['oem']
    gdm = CFG['gdm']
    mountpoint = '/target'
    LIVE_PATH = get_live_path()
    squashfs = LIVE_PATH + '/live/filesystem.squashfs'
    uninstpkgs = [
        'canaima-instalador', 'live-config', 'live-boot',
        'live-boot-initramfs-tools', 'live-initramfs', 'live-config-sysvinit',
        'live-tools'
        ]
    reconfpkgs = [
        'locales', 'canaima-estilo-visual-gnome', 'canaima-escritorio-gnome',
        'canaima-base', 'tzdata', 'software-center'
        ]
    instpkgs_burg = [
        [LIVE_PATH + '/pool/main/libx/libx86', 'libx86-1'],
        [LIVE_PATH + '/pool/main/s/svgalib', 'libsvga1'],
        [LIVE_PATH + '/pool/main/libs/libsdl1.2', 'libsdl1.2debian'],
        [LIVE_PATH + '/pool/main/g/gettext', 'libasprintf0c2'],
        [LIVE_PATH + '/pool/main/g/gettext', 'gettext-base'],
        [LIVE_PATH + '/pool/main/b/burg-themes', 'burg-themes-common'],
        [LIVE_PATH + '/pool/main/b/burg-themes', 'burg-themes'],
        [LIVE_PATH + '/pool/main/b/burg', 'burg-common'],
        [LIVE_PATH + '/pool/main/b/burg', 'burg-emu'],
        [LIVE_PATH + '/pool/main/b/burg', 'burg-pc'],
        [LIVE_PATH + '/pool/main/b/burg', 'burg']
        ]
    instpkgs_cpp = [[
        LIVE_PATH + '/pool/main/c/canaima-primeros-pasos/',
        'canaima-primeros-pasos'
        ]]
    debconflist = [
        'burg-pc burg/linux_cmdline string quiet splash',
        'burg-pc burg/linux_cmdline_default string quiet splash vga=791',
        'burg-pc burg-pc/install_devices multiselect {0}'.format(
                                                ', '.join(p.lista_discos()))
        ]
    bindlist = [
        ['/dev', mountpoint + '/dev', ''],
        ['/dev/pts', mountpoint + '/dev/pts', ''],
        ['/sys', mountpoint + '/sys', ''],
        ['/proc', mountpoint + '/proc', '']
        ]
    mountlist = []

    # Lista de archivos de configuración que se copiaran al disco
    conffilelist = [
        [SHAREDIR + '/templates/sources.list',
                                        mountpoint + '/etc/apt/sources.list'],
        [SHAREDIR + '/templates/adduser.conf',
                                        mountpoint + '/etc/adduser.conf'],
        # Agregamos mtab para que no falle al instalar Burg
        ['/etc/mtab', mountpoint + '/etc/mtab']
    ]

    if not os.path.isdir(mountpoint):
        os.makedirs(mountpoint)

    #TODO: Esta validación deberia hacerse al inicio de la aplicación y no
    # esperar hasta este punto
    if not os.path.exists(squashfs):
        UserMessageError(_('Not found squashfs image.'),
                         window, bindlist, mountlist)

    if not assisted_umount(sync=True, plist=mounted_targets(mnt=mountpoint)):
        UserMessageError(_('An error occurred unmounting the partitions.'),
                         window, bindlist, mountlist)

    if not assisted_umount(sync=True,
                           plist=mounted_parts(disk=metodo['disco'][0])):
        UserMessageError(_('An error occurred unmounting the partitions.'),
                         window, bindlist, mountlist)

    label.set_text(_('Creating partitions in the disk ...'))
    for a in acciones:
        accion = a[0]
        montaje = a[2]
        inicio = a[3]
        fin = a[4]
        fs = a[5]
        tipo = a[6]
        nuevo_fin = a[7]
        disco = metodo['disco'][0]
        cdroms = lista_cdroms()

        if accion == 'crear':
            if not p.crear_particion(
                drive=disco, start=inicio, end=fin, fs=fs, partype=tipo,
                format=True):
                UserMessageError(_('An error occurred creating a partition.'),
                         window, bindlist, mountlist)
            else:
                if montaje:
                    mountlist.append([
                        p.nombre_particion(disco, tipo, inicio, fin),
                        mountpoint + montaje, fs
                        ])

        elif accion == 'borrar':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.borrar_particion(drive=disco, part=particion):
                UserMessageError(_('An error occurred removing a partition.'),
                         window, bindlist, mountlist)
            else:
                for item in mountlist:
                    if item[0] == particion:
                        mountlist.remove(item)

        elif accion == 'redimensionar':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.redimensionar_particion(drive=disco, part=particion,
                                             newend=nuevo_fin):
                UserMessageError(_('An error occurred resizing a partition.'),
                         window, bindlist, mountlist)

        elif accion == 'formatear':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.formatear_particion(part=particion, fs=fs):
                UserMessageError(_('An error occurred formatting a \
partition.'),
                         window, bindlist, mountlist)
            else:
                if montaje:
                    mountlist.append([
                        p.nombre_particion(disco, tipo, inicio, fin),
                        mountpoint + montaje, fs
                        ])

        elif accion == 'usar':
            if montaje:
                mountlist.append([
                    p.nombre_particion(disco, tipo, inicio, fin),
                    mountpoint + montaje, fs
                    ])

    unset_boot = ''
    for i in p.lista_particiones(metodo['disco'][0]):
        for flag in i[6]:
            if flag == 'boot':
                unset_boot = i[0]

    set_boot = ''
    winpart = get_windows_part_in(metodo['disco'][0])
    if winpart:
        set_boot = winpart
    else:
        for part, mount, fs in mountlist:
            if mount == mountpoint + '/':
                set_boot = part
            elif mount == mountpoint + '/boot':
                set_boot = part

    if unset_boot:
        if not p.remover_bandera(
            drive=metodo['disco'][0], part=unset_boot, flag='boot'
            ):
            UserMessageError(_("An error occurred mounting the filesystem"),
                             window, bindlist, mountlist)

    if set_boot:
        if not p.asignar_bandera(
            drive=metodo['disco'][0], part=set_boot, flag='boot'
            ):
            UserMessageError(_("An error occurred mounting the filesystem"),
                             window, bindlist, mountlist)

    if not activar_swap(plist=mountlist):
        UserMessageError(_("An error occurred activating the swap partition"),
                         window, bindlist, mountlist)

    label.set_text(_("Mounting the filesystem ..."))
    if not assisted_mount(sync=True, bind=False, plist=mountlist):
        UserMessageError(_("An error occurred mounting the filesystem"),
                         window, bindlist, mountlist)

    label.set_text(_("Copying files to disk ..."))
    if ProcessGenerator(
        'unsquashfs -f -n -d {0} {1}'.format(mountpoint, squashfs)
        ).returncode != 0:
        UserMessageError(_("An error occurred copying files to disk."),
                         window, bindlist, mountlist)

    label.set_text(_("Mounting the filesystem ..."))
    if not assisted_mount(sync=True, bind=True, plist=bindlist):
        UserMessageError(_("An error occurred mounting the filesystem"),
                         window, bindlist, mountlist)

    # Configuración de archivos del sistema
    label.set_text(_("Configuring system files ..."))
    if not crear_archivos_config(mnt=mountpoint, conffilelist=conffilelist):
        UserMessageError(_("An error occurred configuring the system files"),
                         window, bindlist, mountlist)
    if not conf_files_install(CFG, mountpoint):
        UserMessageError(_("An error occurred configuring the system files"),
                         window, bindlist, mountlist)

    label.set_text(_("Configuring network interfaces ..."))
    if not crear_etc_hostname(mnt=mountpoint, cfg='/etc/hostname',
                              maq=maquina):
        UserMessageError(_("An error occurred creating file /etc/hostname"),
                         window, bindlist, mountlist)
    if not crear_etc_hosts(mnt=mountpoint, cfg='/etc/hosts', maq=maquina):
        UserMessageError(_("An error occurred creating file /etc/hosts"),
                         window, bindlist, mountlist)
    if not crear_etc_network_interfaces(mnt=mountpoint,
                                        cfg='/etc/network/interfaces'):
        UserMessageError(_("An error occurred creating file \
/etc/network/interfaces"), window, bindlist, mountlist)

    label.set_text(_("Registering partitions in the system ..."))
    if not crear_etc_fstab(mnt=mountpoint, cfg='/etc/fstab',
                           mountlist=mountlist, cdroms=cdroms):
        UserMessageError(_("An error occurred creating file /etc/fstab"),
                         window, bindlist, mountlist)

    # Instalar accesibilidad en el GDM
    if gdm:
        label.set_text(_("Installing accessibility components in GDM ..."))
        if not activar_accesibilidad(mnt=mountpoint):
            UserMessageError(_("An error occurred activating accesibility."),
                         window, bindlist, mountlist)

    # Reconfigurando paquetes del sistema
    label.set_text(_("Configuring additional details on the system ..."))
    if not reconfigurar_paquetes(mnt=mountpoint, plist=reconfpkgs):
        UserMessageError(_("An error occurred reconfiguring a package."),
                         window, bindlist, mountlist)

    # instalación de los paquetes de idiomas
    label.set_text(_("Configuring additional language packages ..."))
    if not install_language_pack(lcl_item.get_locale(), mountpoint):
        print "ADVERTENCIA: No se instalaran los paquetes adicionales del \
idioma"

    # Activa la funcionalidad OEM si ha sido seleccionada por el usuario
    if oem:
        adm_user = '******'
        adm_password = '******'
        nml_user = '******'
        nml_password = '******'
        nml_name = 'Mantenimiento'
        # Instala Canaima Primeros Pasos
        label.set_text(_("Installing OEM characteristics ..."))
        if not instalar_paquetes(mnt=mountpoint, dest='/tmp',
                                 plist=instpkgs_cpp):
            UserMessageError(_("An error occurred installing a package"),
                         window, bindlist, mountlist)
    else:
        adm_user = '******'
        adm_password = passroot
        nml_user = usuario
        nml_password = passuser
        nml_name = nombre

    label.set_text(_("Creating system users ..."))
    if not crear_usuarios(mnt=mountpoint, a_user=adm_user, a_pass=adm_password,
                          n_name=nml_name, n_user=nml_user,
                          n_pass=nml_password):
        UserMessageError(_("An error occurred creating system user"),
                         window, bindlist, mountlist)

    label.set_text(_("Removing temporary data of installation ..."))
    if not desinstalar_paquetes(mnt=mountpoint, plist=uninstpkgs):
        UserMessageError(_("An error occurred removing a package"),
                         window, bindlist, mountlist)

    label.set_text(_("Installing Bootloader ..."))
    if not preseed_debconf_values(mnt=mountpoint, debconflist=debconflist):
        UserMessageError(_("An error occurred preseeding answers in debconf."),
                         window, bindlist, mountlist)
    if not instalar_paquetes(mnt=mountpoint, dest='/tmp', plist=instpkgs_burg):
        UserMessageError(_("An error occurred installing a package."),
                         window, bindlist, mountlist)
    if ProcessGenerator('chroot {0} update-burg'.format(mountpoint)
                        ).returncode != 0:
        UserMessageError(_("An error occurred updating BURG."),
                         window, bindlist, mountlist)

    label.set_text(_("Configuring system boot ..."))
    if ProcessGenerator(
        'chroot {0} /usr/sbin/mkinitramfs -o /boot/{1} {2}'.format(
            mountpoint, 'initrd.img-' + os.uname()[2], os.uname()[2]
            )
        ).returncode != 0:
        UserMessageError(_("An error occurred generating boot image"),
                         window, bindlist, mountlist)
    if ProcessGenerator(
        'chroot {0} update-initramfs -u -t'.format(mountpoint)
        ).returncode != 0:
        UserMessageError(_("An error occurred updating the boot image."),
                         window, bindlist, mountlist)

    # Terminando la instalación
    label.set_text(_("Umounting filesistems ..."))
    if not assisted_umount(sync=True, plist=bindlist):
        UserMessageError(_("An error occurred umounting partitions."),
                         window, bindlist, mountlist)
    if not assisted_umount(sync=True, plist=mountlist):
        UserMessageError(_("An error occurred umounting partitions."),
                         window, bindlist, mountlist)

    button_a.show()
    button_b.show()
    label.get_parent().remove(label)
    view.get_parent().remove(view)
def install_process(CFG, q_button_a, q_button_b, q_view, q_label, q_win):
    button_a = q_button_a.get()
    button_b = q_button_b.get()
    view = q_view.get()
    label = q_label.get()
    window = q_win.get()
    p = Particiones()
    metodo = CFG['metodo']
    acciones = CFG['acciones']
    teclado = CFG['teclado']
    passroot = CFG['passroot1']
    nombre = CFG['nombre']
    usuario = CFG['usuario']
    passuser = CFG['passuser1']
    maquina = CFG['maquina']
    oem = CFG['oem']
    gdm = CFG['gdm']
    mountpoint = '/target'
    squashfs = '/live/image/live/filesystem.squashfs'
    uninstpkgs = [
        'canaima-instalador', 'live-config', 'live-boot',
        'live-boot-initramfs-tools', 'live-initramfs', 'live-config-sysvinit'
        ]
    reconfpkgs = [
        'canaima-estilo-visual-gnome', 'canaima-plymouth',
        'canaima-chat-gnome', 'canaima-bienvenido-gnome',
        'canaima-escritorio-gnome', 'canaima-base'
        ]
    instpkgs_burg = [
        ['/live/image/pool/main/libx/libx86', 'libx86-1'],
        ['/live/image/pool/main/s/svgalib', 'libsvga1'],
        ['/live/image/pool/main/libs/libsdl1.2', 'libsdl1.2debian-alsa'],
        ['/live/image/pool/main/libs/libsdl1.2', 'libsdl1.2debian'],
        ['/live/image/pool/main/g/gettext', 'gettext-base'],
        ['/live/image/pool/main/b/burg-themes', 'burg-themes-common'],
        ['/live/image/pool/main/b/burg-themes', 'burg-themes'],
        ['/live/image/pool/main/b/burg', 'burg-common'],
        ['/live/image/pool/main/b/burg', 'burg-emu'],
        ['/live/image/pool/main/b/burg', 'burg-pc'],
        ['/live/image/pool/main/b/burg', 'burg']
        ]
    instpkgs_cpp = [[
        '/live/image/pool/main/c/canaima-primeros-pasos/',
        'canaima-primeros-pasos'
        ]]
    instpkgs_cagg = [[
        '/live/image/pool/main/c/canaima-accesibilidad-gdm-gnome/',
        'canaima-accesibilidad-gdm-gnome'
        ]]
    debconflist = [
        'burg-pc burg/linux_cmdline string quiet splash',
        'burg-pc burg/linux_cmdline_default string quiet splash vga=791',
        'burg-pc burg-pc/install_devices multiselect {0}'.format(', '.join(p.lista_discos()))
        ]
    bindlist = [
        ['/dev', mountpoint + '/dev', ''],
        ['/dev/pts', mountpoint + '/dev/pts', ''],
        ['/sys', mountpoint + '/sys', ''],
        ['/proc', mountpoint + '/proc', '']
        ]
    mountlist = []

    if not os.path.isdir(mountpoint):
        os.makedirs(mountpoint)

    if not os.path.exists(squashfs):
        UserMessage(
            message='No se encuentra la imagen squashfs.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if not assisted_umount(sync=True, plist=mounted_targets(mnt=mountpoint)):
        UserMessage(
            message='Ocurrió un error desmontando las particiones.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if not assisted_umount(
        sync=True, plist=mounted_parts(disk=metodo['disco'][0])
        ):
        UserMessage(
            message='Ocurrió un error desmontando las particiones.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Creando particiones en disco ...')
    for a in acciones:
        accion = a[0]
        montaje = a[2]
        inicio = a[3]
        fin = a[4]
        fs = a[5]
        tipo = a[6]
        nuevo_fin = a[7]
        disco = metodo['disco'][0]
        cdroms = lista_cdroms()

        if accion == 'crear':
            if not p.crear_particion(
                drive=disco, start=inicio, end=fin, fs=fs, partype=tipo, format=True
                ):
                UserMessage(
                    message='Ocurrió un error creando una partición.',
                    title='ERROR',
                    mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                    c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                    c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                    c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                    c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                    c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                    )
            else:
                if montaje:
                    mountlist.append([
                        p.nombre_particion(disco, tipo, inicio, fin),
                        mountpoint + montaje, fs
                        ])

        elif accion == 'borrar':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.borrar_particion(drive=disco, part=particion):
                UserMessage(
                    message='Ocurrió un error borrando una partición.',
                    title='ERROR',
                    mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                    c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                    c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                    c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                    c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                    c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                    )
            else:
                for item in mountlist:
                    if item[0] == particion:
                        mountlist.remove(item)

        elif accion == 'redimensionar':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.redimensionar_particion(
                drive=disco, part=particion, newend=nuevo_fin
                ):
                UserMessage(
                    message='Ocurrió un error redimensionando una partición.',
                    title='ERROR',
                    mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                    c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                    c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                    c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                    c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                    c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                    )

        elif accion == 'formatear':
            particion = p.nombre_particion(disco, tipo, inicio, fin)
            if not p.formatear_particion(part=particion, fs=fs):
                UserMessage(
                    message='Ocurrió un error formateando una partición.',
                    title='ERROR',
                    mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                    c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                    c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                    c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                    c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                    c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                    )
            else:
                if montaje:
                    mountlist.append([
                        p.nombre_particion(disco, tipo, inicio, fin),
                        mountpoint + montaje, fs
                        ])

        elif accion == 'usar':
            if montaje:
                mountlist.append([
                    p.nombre_particion(disco, tipo, inicio, fin),
                    mountpoint + montaje, fs
                    ])

    unset_boot = ''
    for i in p.lista_particiones(metodo['disco'][0]):
        for flag in i[6]:
            if flag == 'boot':
                unset_boot = i[0]

    set_boot = ''
    winpart = get_windows_part_in(metodo['disco'][0])
    if winpart:
        set_boot = winpart
    else:
        for part, mount, fs in mountlist:
            if mount == mountpoint + '/':
                set_boot = part
            elif mount == mountpoint + '/boot':
                set_boot = part

    if unset_boot:
        if not p.remover_bandera(
            drive=metodo['disco'][0], part=unset_boot, flag='boot'
            ):
            UserMessage(
                message='Ocurrió un error montando los sistemas de archivos.',
                title='ERROR',
                mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                )

    if set_boot:
        if not p.asignar_bandera(
            drive=metodo['disco'][0], part=set_boot, flag='boot'
            ):
            UserMessage(
                message='Ocurrió un error montando los sistemas de archivos.',
                title='ERROR',
                mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                )

    if not activar_swap(plist=mountlist):
        UserMessage(
            message='Ocurrió un error activando la partición swap.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Montando sistemas de archivos ...')
    if not assisted_mount(sync=True, bind=False, plist=mountlist):
        UserMessage(
            message='Ocurrió un error montando los sistemas de archivos.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Copiando archivos en disco ...')
    if ProcessGenerator(
        'unsquashfs -f -n -d {0} {1}'.format(mountpoint, squashfs)
        ).returncode != 0:
        UserMessage(
            message='Ocurrió un error copiando los archivos al disco.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Montando sistema de archivos ...')
    if not assisted_mount(sync=True, bind=True, plist=bindlist):
        UserMessage(
            message='Ocurrió un error montando los sistemas de archivos.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Instalando gestor de arranque ...')

    #Montamos /etc/mtab para que no de errores al intalar burg
    shutil.copy2('/etc/mtab', '{0}/etc/mtab'.format(mountpoint))

    if not preseed_debconf_values(mnt=mountpoint, debconflist=debconflist):
        UserMessage(
            message='Ocurrió un error presembrando las respuestas debconf.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if not instalar_paquetes(mnt=mountpoint, dest='/tmp', plist=instpkgs_burg):
        UserMessage(
            message='Ocurrió un error instalando un paquete.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if ProcessGenerator(
        'chroot {0} update-burg'.format(mountpoint)
        ).returncode != 0:
        UserMessage(
            message='Ocurrió un error actualizando burg.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Generando imagen de arranque ...')
    if ProcessGenerator(
        'chroot {0} /usr/sbin/mkinitramfs -o /boot/{1} {2}'.format(
            mountpoint, 'initrd.img-' + os.uname()[2], os.uname()[2]
            )
        ).returncode != 0:
        UserMessage(
            message='Ocurrió un error generando la imagen de arranque.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if ProcessGenerator(
        'chroot {0} update-initramfs -u -t'.format(mountpoint)
        ).returncode != 0:
        UserMessage(
            message='Ocurrió un error actualizando la imagen de arranque.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando detalles del sistema operativo ...')
    if not reconfigurar_paquetes(mnt=mountpoint, plist=reconfpkgs):
        UserMessage(
            message='Ocurrió un error reconfigurando un paquete.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando interfaces de red ...')
    if not crear_etc_hostname(mnt=mountpoint, cfg='/etc/hostname', maq=maquina):
        UserMessage(
            message='Ocurrió un error creando el archivo /etc/hostname.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if not crear_etc_hosts(mnt=mountpoint, cfg='/etc/hosts', maq=maquina):
        UserMessage(
            message='Ocurrió un error creando el archivo /etc/hosts.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=sys.exit, p_2=(1,)
            )

    if not crear_etc_network_interfaces(
        mnt=mountpoint, cfg='/etc/network/interfaces'
        ):
        UserMessage(
            message='Ocurrió un error creando el archivo /etc/network/interfaces.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando teclado ...')
    if not crear_etc_default_keyboard(
        mnt=mountpoint, cfg='/etc/canaima-base/alternatives/keyboard',
        key=teclado
        ):
        UserMessage(
            message='Ocurrió un error configurando el teclado.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando particiones en /etc/fstab ...')
    if not crear_etc_fstab(
        mnt=mountpoint, cfg='/etc/fstab',
        mountlist=mountlist, cdroms=cdroms
        ):
        UserMessage(
            message='Ocurrió un error creando el archivo /etc/fstab.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando usuarios y grupos ...')
    if not crear_passwd_group_inittab_mtab(mnt=mountpoint):
        UserMessage(
            message='Ocurrió un error configurando usuarios y grupos.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if oem:
        adm_user = '******'
        adm_password = '******'
        nml_user = '******'
        nml_password = '******'
        nml_name = 'Mantenimiento'

        if not instalar_paquetes(
            mnt=mountpoint, dest='/tmp', plist=instpkgs_cpp
            ):
            UserMessage(
                message='Ocurrió un error instalando un paquete.',
                title='ERROR',
                mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                )

    else:
        adm_user = '******'
        adm_password = passroot
        nml_user = usuario
        nml_password = passuser
        nml_name = nombre

    if gdm:
        if not instalar_paquetes(
            mnt=mountpoint, dest='/tmp', plist=instpkgs_cagg
            ):
            UserMessage(
                message='Ocurrió un error instalando un paquete.',
                title='ERROR',
                mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
                c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
                c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
                c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
                c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
                c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
                )

    label.set_text('Creando usuarios de sistema ...')
    if not crear_usuarios(
        mnt=mountpoint, a_user=adm_user, a_pass=adm_password,
        n_name=nml_name, n_user=nml_user, n_pass=nml_password
        ):
        UserMessage(
            message='Ocurrió un error creando los usuarios de sistema.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Configurando detalles del sistema operativo ...')
    if not reconfigurar_paquetes(
        mnt=mountpoint, plist=['canaima-escritorio-gnome', 'canaima-base']
        ):
        UserMessage(
            message='Ocurrió un error reconfigurando un paquete.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Removiendo instalador del sistema de archivos ...')
    if not desinstalar_paquetes(mnt=mountpoint, plist=uninstpkgs):
        UserMessage(
            message='Ocurrió un error desinstalando un paquete.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    label.set_text('Desmontando sistema de archivos ...')
    if not assisted_umount(sync=True, plist=bindlist):
        UserMessage(
            message='Ocurrió un error desmontando las particiones.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    if not assisted_umount(sync=True, plist=mountlist):
        UserMessage(
            message='Ocurrió un error desmontando las particiones.',
            title='ERROR',
            mtype=gtk.MESSAGE_ERROR, buttons=gtk.BUTTONS_OK,
            c_1=gtk.RESPONSE_OK, f_1=assisted_umount, p_1=(True, bindlist),
            c_2=gtk.RESPONSE_OK, f_2=assisted_umount, p_2=(True, mountlist),
            c_3=gtk.RESPONSE_OK, f_3=window.destroy, p_3=(),
            c_4=gtk.RESPONSE_OK, f_4=gtk.main_quit, p_4=(),
            c_5=gtk.RESPONSE_OK, f_5=sys.exit, p_5=()
            )

    button_a.show()
    button_b.show()
    label.hide()
    view.hide()
示例#8
0
class PasoMetodo(gtk.Fixed):
    def __init__(self, CFG):
        gtk.Fixed.__init__(self)

        self.metodos = []
        self.minimo = ESPACIO_TOTAL
        self.part = Particiones()
        self.discos = self.part.lista_discos()
        print 'Se han encontrado los siguientes discos: {0}' \
        .format(self.discos)

        self.lbl1 = gtk.Label(_("Select the disk where you want to install \
Canaima:"))
        self.lbl1.set_size_request(690, 20)
        self.lbl1.set_alignment(0, 0)
        self.put(self.lbl1, 0, 0)

        self.cmb_discos = gtk.combo_box_new_text()
        self.cmb_discos.set_size_request(690, 30)
        self.put(self.cmb_discos, 0, 25)
        atk_acc(self.cmb_discos, self.lbl1)
        self.cmb_discos.connect('changed', self.seleccionar_disco)

        for d in self.discos:
            self.cmb_discos.append_text(d)

        self.barra_part = BarraParticiones(self)
        self.barra_part.set_size_request(690, 100)
        self.put(self.barra_part, 0, 60)

        self.lbl2 = gtk.Label(_("Slelect the installation method:"))
        self.lbl2.set_size_request(690, 20)
        self.lbl2.set_alignment(0, 0)
        self.put(self.lbl2, 0, 165)

        self.cmb_metodo = gtk.combo_box_new_text()
        self.cmb_metodo.set_size_request(690, 30)
        self.cmb_metodo.connect('changed', self.establecer_metodo)
        self.put(self.cmb_metodo, 0, 190)

        self.lbl4 = gtk.Label()
        self.lbl4.set_size_request(690, 90)
        self.lbl4.set_alignment(0, 0)
        self.lbl4.set_line_wrap(True)
        atk_label(self.lbl4)
        self.put(self.lbl4, 0, 225)

        atk_acc(self.cmb_metodo, self.lbl2)

        self.cmb_discos.set_active(0)

    def seleccionar_disco(self, widget=None):
        primarias = 0
        extendidas = 0
        logicas = 0
        self.metodos = []

        try:
            self.barra_part.expose()
        except:
            pass
        self.cmb_metodo.get_model().clear()
        self.cmb_metodo.set_sensitive(False)
        CFG['w'].siguiente.set_sensitive(False)
        self.lbl4.set_text('')

        self.disco = self.cmb_discos.get_active_text()
        print '{0} seleccionado'.format(self.disco)
        self.particiones = self.part.lista_particiones(self.disco)

        if len(self.particiones) == 0:
            UserMessage(
                    message=_("""Disk  "{0}" needs a partition table to \
continue the installation. Do you want to create a partition table now?

If you press Cancel you can not use that disk to install Canaima.""")\
                    .format(self.disco),
                    title=_("Partition table not found."),
                    mtype=gtk.MESSAGE_INFO, buttons=gtk.BUTTONS_OK_CANCEL,
                    c_1=gtk.RESPONSE_OK, f_1=self.part.nueva_tabla_particiones,
                    p_1=(self.disco, 'msdos'), c_2=gtk.RESPONSE_OK,
                    f_2=self.seleccionar_disco, p_2=()
                    )
        else:
            try:
                self.barra_part.expose()
            except:
                pass

            self.total = self.particiones[0][9]
            CFG['w'].siguiente.set_sensitive(True)
            self.cmb_metodo.set_sensitive(True)

            mini = self.particiones[0][1]
            mfin = self.particiones[0][9]

            for t in self.particiones:
                if mini > t[1]:
                    mini = t[1]

                if mfin < t[2]:
                    mfin = t[2]

                if t[5] == 'primary' and t[4] != 'free':
                    primarias += 1
                elif t[5] == 'logical' and t[4] != 'free':
                    logicas += 1
                elif t[5] == 'extended':
                    extendidas += 1

            disco_array = [self.disco, mini, mfin, primarias, extendidas,
                           logicas]

            if self.total >= self.minimo:
                for p in self.particiones:
                    part = p[0]
                    tam = p[3]
                    fs = p[4]
                    tipo = p[5]
                    libre = p[8]

                    if fs != 'free' and libre >= self.minimo:
                        if fs in FSPROGS:
                            if tipo == 'logical' and FSPROGS[fs][1][0] != '':
                                if logicas < 10:
                                    self.metodos.append({
                                        'tipo': 'REDIM',
                                        'msg': _("Install resizing {0} to \
free up space ({1} free)").format(part, humanize(libre)),
                                        'part': p,
                                        'disco': disco_array
                                    })

                            elif tipo == 'primary' and FSPROGS[fs][1][0] != '':
                                if (extendidas < 1 and primarias < 4) \
                                or (extendidas > 0 and primarias < 2):
                                    self.metodos.append({
                                        'tipo': 'REDIM',
                                        'msg': _("Install resizing {0} to \
free up space ({1} free)").format(part, humanize(libre)),
                                        'part': p,
                                        'disco': disco_array
                                    })

                    if fs == 'free' and tam >= self.minimo:
                        if tipo == 'logical':
                            if logicas < 10:
                                self.metodos.append({
                                    'tipo': 'LIBRE',
                                    'msg': _("Install using available free \
space ({0})").format(humanize(tam)),
                                    'part': p,
                                    'disco': disco_array
                                })

                        elif tipo == 'primary':
                            if (extendidas < 1 and primarias < 4) \
                            or (extendidas > 0 and primarias < 2):
                                self.metodos.append({
                                    'tipo': 'LIBRE',
                                    'msg': _("Install using available free \
space ({0})").format(humanize(tam)),
                                    'part': p,
                                    'disco': disco_array
                                })

                self.metodos.append({
                    'tipo': 'TODO',
                    'msg': _("Install using the entire disk ({0})") \
                    .format(humanize(self.total)),
                    'part': disco_array,
                    'disco': disco_array
                })

                self.metodos.append({
                    'tipo': 'MANUAL',
                    'msg': _("Install editing partitions manually")\
                    .format(humanize(tam)),
                    'part': disco_array,
                    'disco': disco_array
                })

            else:
                self.metodos.append({
                    'tipo': 'NONE',
                    'msg': 'El tamaño del disco no es suficiente'
                })

                CFG['w'].siguiente.set_sensitive(False)
                self.cmb_metodo.set_sensitive(False)

            for k in sorted(self.metodos, key=lambda ordn: ordn['tipo'],
                            reverse=True):
                self.cmb_metodo.append_text(k['msg'])

            self.cmb_metodo.set_active(0)

    def establecer_metodo(self, widget=None):
        '''
            Crea una lista de los metodos de instalación disponibles para la
            partición
        '''
        for d in self.metodos:
            if d['msg'] == self.cmb_metodo.get_active_text():
                self.metodo = d

        if self.metodo['tipo'] == 'TODO':
            msg = _("By choosing this option, Canaima will occupy all of your \
hard drive. Note that all data present will be erased. You can take this time \
to make a backup before proceeding with the installation.")
        elif self.metodo['tipo'] == 'LIBRE':
            msg = _("By choosing this option, Canaima will be installed in \
the free space of {0} that is in you hard disk, preserving the other data and \
systems that are in the other portions of the disc.") \
            .format(humanize(self.metodo['part'][2] - self.metodo['part'][1]))
        elif self.metodo['tipo'] == 'REDIM':
            msg = _("This option will use the free space present in the \
partition {0} to install Canaima. The partition will be resized to free up \
space, preserving the data and/or systems present.") \
            .format(self.metodo['part'][0])
        elif self.metodo['tipo'] == 'MANUAL':
            msg = _("If you choose this option will open the partition \
editor, allowing you to adjust the partitions according to your convenience. \
We do not recommend you use this option unless you know what you are doing.")
        elif self.metodo['tipo'] == 'NONE':

            msg = _("Canaima needs at least {0} to be installed. Select other \
disk with more available space.").format(humanize(ESPACIO_TOTAL))
        else:
            pass

        self.lbl4.set_text(msg)