* Imagenes de instalación de las versiones estables para Mageia y OpenMandriva.

OpenMandriva: Mageia (Mageia 9) 20/Agosto/2023 - Anuncio, Descargas.

Blogdrake recomienda descargar las imágenes de instalación (iso) vía torrent para evitar corrupción de datos, aprovechar mejor su ancho de banda y mejorar la difusión de las distribuciones.

Como construir nuestro asistente Drake

Como todos sabrán, los asistentes del MCC (o drakconf), se los suele denominar Drakes. Sobre estos asistentes tenemos una clase especial llamada drakewizards, como bien lo explican en la documentación oficial, http://wiki.mandriva.com/en/Writing_a_drakwizard_module.

Peero, esta documentación no ayuda demasiado a la hora de crear nuestro propio Drake. Lo que intentare aquí, es escribir un manual basándome en lo poco que expresa la documentación antes mencionada, lo que he aprendido leyendo en las librerías y, por el viejo método de la prueba y error.

NOTA: Este manual no se encuentra terminado. Debo agregar mas cosas y seguro deberé corregir otras. Si tienen sugerencias, agregados y correcciones, agradecería me lo comuniquen XD.

Comencemos con algunos conceptos generales.

Según la documentación oficial, al agregar nuestro drake, este se agrega en una nueva sección especial llamada "Asistentes adicionales".

Principalmente nuestro asistente se basara en los siguientes ficheros:

  • Un archivo que contendrá la mínima información del asistente. Sera de extensión .conf, se aloja en /etc/wizard.d/ y contendrá los siguientes paramentos:
      NAME = "[nombre del asistente]"
      DESCRIPTION = "[breve descripcion]"
      ICON = "[ruta del icono ]"
      LONG_DESCRIPTION = "[descripcion mas larga]"
    
  • Un icono que se alojara preferentemente en /usr/share/mcc/themes/default/
  • El archivo escrito en perl (de extensión .pm) que tendrá una estructura determinada que ahora paso a explicar. Este se aloja en /usr/lib/perl5/vendor_perl/5.10.0/MDK/Wizard/

Formato y escritura de nuestro modulo de asistente. (que lindo suena XD)

El archivo define como sera nuestro asistente. Primero cargamos las librerías y definimos la parte principal de nuestro modulo. Luego se incluyen las paginas. Estas son las que se muestran cada vez que presionamos atrás o siguiente.

Primeramente incluimos la información del asistente y cargamos las librerías necesarias. Quedando algo así en nuestro código:

#!/usr/bin/perl -w
#
# version [que version es]
# Copyright (C) [Año] [nombre]
# Author: [nombre de autor, emaill]
#
# [La licencia. Generalmente GPL ;)]
# [Alguna otra cosa que pueda ser de interes]

package MDK::Wizard::[nombre del drake];
use lib qw(/usr/lib/libDrakX);
use strict;
use MDK::Wizard::Wizcommon;
my $wiz = new MDK::Wizard::Wizcommon;
my $in = interactive->vnew;

Luego debemos especificar un objeto con las características del asistente. Para eso:

my $o = {
    name => 'titulo',                                                                  
    var => {                                                                                  
	var_numero => 0,                                                                    
        var_file => "",                                                                         
        var_letra => "a",
    },      
   allow_user => "",                                                                     
   defaultimage => "/usr/share/mcc/themes/default/file-sharing-mdk.png",           
   needed_rpm => [ 'paquete','paquete2' ],                   
   init => sub { codigo },                                                                
};    

Es importante notar que para separar los elementos se utiliza el carácter ','.

Como verán se encuentran disponibles varios parámetros, aunque no todos son obligatorios.

name
Titulo que tengra nuestro asistente
var
Es un hash con las variables que tendremos disponibles. No es obligatorio, aunque si muy util en algunas ocaciones ;)
defaultimage
Es el icono o imagen que se mostrara en el MCC
needed_rpm
Es la lista de paquetes que necesita tener el sistema instalado para que nuestro asistente se ejecute correctamente. Esto lo corrobora antes de iniciarse, instalando los paquetes de forma automatica. Si estos no pueden instalarse, la eecucoin del drake se cancela.
allow_user
Usuarios que tienen permitido ejecutar el asistente. Si se deja vario indica que solo root tiene acceso.
init
Ejecuta el codigo dentro de la subrutina al inicio del asistente.

Ahora lo mas importante es agregar las paginas al objeto antes definido. Esto lo hacemos asi:

$o->{pages} = {
   welcome => {
        name => "Bienvenidos",
        no_back => 1,
        data => [
            { label => "msj bienvenida." },
        ],
        next => 'bye_page'
    },
    
    bye_page => {
        name => "Chao",
        data => [
            { label => "msj de despedida.", }
        ],
        no_back => 1,
        end => 1,
        next => 0,
    },
};

Asi podemos agregar cuantas paginas queramos, siempre y cuando cumplamos ciertas reglas ;).
Cada pagina comenzara con su nombre, que debe ser unico. La primera SIEMPRE se llamara welcome.
Cada una la separaremos con el caracter ",", ya que estamos manejando hash's de perl ;).

Ahora, como en el caso de la def principal del objeto, aqui tenemos varios parametros que podemos utilizar:

name
Titulo de la pagina. SI supera las 2 lineas, se mostrara de forma distinta. Ver figura mas abajo.
data
Es lo que contendra. Pude que sea un checkbox, un radiobox, etc. Veremos sus posibilidades mas adelante
no_back
Indica que no debe aparecer el boton Atras. (Por ejemplo en la primera page)
no_cancel
Igual que el anterior, solo que con el boton cancelar.
end
Indica que es la ultima pagina.
pre
Es una subrutina que se ejecuta cuando se vuelve una pagina atras.
post
Similar a pre, solo que se ejecuta cuando se avanza. Este reemplaza al parametro next por medio de un return.
complete
Similar a post. La diferencia radica que, en lugar de avanzar devuelve por medio de un return un 0 si todo esta en orden o un 1 en caso contrario. Es util para chequear que una entrada sea valida por ejemplo.
next
Indica a que pagina ira luego al presionar siguiente.
ignore
Este ignora a la pagina en caso de que su subsiguiente presione atras. Muy util para dar mensajes de advertencia y similares.
default
Da una respuesta automatica para preguntas del tipo si/nom o cuando el parametro data no tiene campo alguno.

Los objetos no son nada si no los creamos. Todos los drakes deben devolver un 1 al final. Esto sirve para que MCC sepa que se cargo todo correctamente y que no hay error de sintaxis.
El final seria algo asi:

sub new {
    my ($class) = @_;
    bless $o, $class;
}
1;

Como mencione con anterioridad, el parametro data de las paginas permiten agregar varios "widgets" a nuestro drake. Estos son otorgados por la libreria interactive.

Ahora veremos los mas comunes.

Una etiqueta simple:
data => [{ label => "texto aqui"},]
Una etiqueta con un checkbox:
data => [{ label => "texto aqui", type => 'bool', val => valor_de_salida },]
Una lista de etiquetas con varios radiobox:
 
data => [ {label => "texto aqui",type => "list", val => valor_seleccion, list => ["elemto1","elemento2"], boolean_list => "", }]
Un textfield para completar:
data => [{ label => "texto aqui ",val => Valor_ingresado},]

Ventanas modales:

Las ventanas modales nos permitiran crear un cuadro de msj de advertencia, pregunta, error, progreso, o incluso seleccionar un archivo o directorio.
Estas se suelen utilizar en las subrutinas en pre. post y complete.

Advertencia
  $in->ask_warn("Titulo","mensaje"); 
Pregunta (yes/no)
 $in->ask_yesorno("Titulo","mensaje"); 

Esta devuelve un valor verdader si se escoje si y falso en caso contrario

Mesj Ok/Cancelar
$in->ask_okcancel("Titulo","mensaje","ruta a icono");
Seleccion archivo
$in->ask_filename();

Devuelve la ruta del archivo seleccionado.

Seleccion directorio
$in->ask_directory();

Idem anterior solo que con directorios

Pueden aprender mucho viendo como estan construidos otros drakes. SI instalan el paquete drakwizard, veran muchos en el directorio /usr/lib/perl5/vendor_perl/5.10.0/MDK/Wizard/.

Terminado con la teoria, incursionamos en la practica con unos ejemplos.

Primero, el .conf.

Por ejemplo llamaremos tuto a este drake. (como podan notar tengo problemas para poner nombres originales XD )

Entonces crearmos el archivo tuto.conf con el siguiente contenido:

NAME="tuto"
DESCRIPTION="Drake de ejemplo"
ICON = "/usr/share/mcc/themes/default/news-mdk.png"
LONG_DESCRIPTION = "Drake de ejemplo para el manual de blogdrake.net (tm)(r)(c)"

Luego lo movemos a /etc/wizard.d/

Ahora viene la parte importante, el asistente en si mismo. El mismo tendra nombre tuto.pm y lo ubicaremos en /usr/lib/perl5/vendor_perl/5.10.0/MDK/Wizard/

#!/usr/bin/perl -w
#
# version 0.1
# Copyright (C) 2010 Pipo Pescador
# Author: Pipo pescador < pipo@jotmeil.com >
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

package MDK::Wizard::tuto;
use lib qw(/usr/lib/libDrakX);
use strict;
use MDK::Wizard::Wizcommon;

my $wiz = new MDK::Wizard::Wizcommon;
my $in = interactive->vnew;

my $o = {
    name => 'TutoDrake',  # El titulo que usaremos
    defaultimage => "/usr/share/mcc/themes/default/news-mdk.png",        #Aca el icono
    allow_user => "",                # Aca le indicamos que debe ser root para ejecutarse.
};    

$o->{pages} = {
  
    welcome => {
        name => "Bienvenidos a tutoDrake",
        no_back => 1,
        data => [
            { label => "Hola mundo!!!!." },
        ],
        next => 'bye_page'
    },
    
    bye_page => {
        name => "Chao",
        data => [
            { label => "Hasta otra.", }
        ],
        no_back => 1,
        end => 1,
        next => 0,
    },
};

Explicacion:

Comenzamos creando el archivo con el encabezado:

#!/usr/bin/perl -w
#
# version 0.1
# Copyright (C) 2010 Pipo Pescador
# Author: Pipo pescador < pipo@jotmeil.com >
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

package MDK::Wizard::tuto;
use lib qw(/usr/lib/libDrakX);
use strict;
use MDK::Wizard::Wizcommon;

my $wiz = new MDK::Wizard::Wizcommon;
my $in = interactive->vnew;

La licencia completa solo la pondre ahora como ejemplo. En los proximos ejemplo la obviare ;)

Ahora continuamos agregando el resto de la informacion de nuestro asistente como una primer pagina y el saludo de salida.
La primera pagina solo mostrar un mensaje.

Definimos la estructura principal del objeto o, que contendra la informacion del asistente en cuestion

my $o = {
    name => 'TutoDrake',  # El titulo que usaremos
    defaultimage => "/usr/share/mcc/themes/default/news-mdk.png",        #Aca el icono
    allow_user => "",                # Aca le indicamos que debe ser root para ejecutarse.
};    

Como vemos no utilizaremos varibles en esta primera parte.

Ahora agregaremos a nuestro objeto, las paginas que necesitamos

$o->{pages} = {
  
    welcome => {
        name => "Bienvenidos a tutoDrake",
        no_back => 1,
        data => [
            { label => "Hola mundo!!!!." },
        ],
        next => 'bye_page'
    },
    
    bye_page => {
        name => "Chao",
        data => [
            { label => "Hasta otra.", }
        ],
        no_back => 1,
        end => 1,
        next => 0,
    },
};

Y culminamos con la subrutina de creacion y la devoluvion del 1 para indicar que todo se inicio sin problemas

sub new {
    my ($class) = @_;
    bless $o, $class;
}
1;

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.


Gravatar de drakedalfa

# 100323 ...

/etc/wizard.d/ no existe ¿se debe instalar algo o solo lo creo?



Gravatar de katnatek

# 100325 Instala el paquete drakwizard

 Instala el paquete drakwizard
 



Gravatar de drakedalfa

# 100327 Ya esta instalado

Ya esta instalado, tampoco veo el directorio /usr/lib/perl5/vendor_perl/5.10.0/MDK/Wizard/



Gravatar de drakedalfa

# 100328 Mi error

Estaba viendo en /usr/lib/perl5/vendor_perl/5.10.1



Gravatar de Drakor

# 100348 .

Hay que crearlo. :P

En la semana tratare de ampliar mas y ordenar el contenido del manual.

Otro apunte que omití es el hecho de que, aunque la documentación oficial lo asegura, no se crea la nueva sección en el MCC.

Estuve mirando el code del que se ocupa de eso, pero por mi triste conocimiento en perl, no puede encontrar el error. El code es /usr/sbin/drakconf.real aprox en la linea 557.

Para poder ejecutar el drake que escribes, por ahora debes recurrir a ejecutar drakwizard como root. (previamente instalado)

Este muestra todos los asistentes creados con el modulo wizard en un combobox para poder ejecutarlos.

Saludos

Opciones de visualización de comentarios

Seleccione la forma que desee de mostrar los comentarios y haga clic en «Guardar opciones» para activar los cambios.