Instal.lació amb configuració (Debconf)

De Wikijoan
Dreceres ràpides: navegació, cerca

Moltes vegades quan s'instal.la un paquet surt una interfície gràfica que ens demana algunes preguntes. En el nostre cas, per exemple, podrem escollir el port en el què treballarà el servidor d'echos.

La informació quedarà emmagatzemada en un fitxer, que el trobarem a /etc/echod/port. El contingut d'aquest fitxer senzillament és un número, el port.

Debconf es una utilidad de software que permite llevar a cabo tareas de configuración en sistemas Debian GNU/Linux. Debconf está muy ligado a dpkg.

Muchos paquetes al instalarse iniciando una interfaz con el usuario para pedir los parámetros de configuración que crean adientes.

Finalmente y para ilustrar el uso de Debconf vamos a crear los ficheros necesarios para pedir al usuario que instala nuestro dominio, qué puerto quiere utilizar y guardaremos este puerto en el fichero /etc/echod/port.

Lo primero que tenemos que hacer es crear el fichero debian/templates. Este fichero contiene las plantillas de interfaz con el usuario.

$ gedit debian/templates &

Un plantilla sencilla puede ser la siguiente:

Template: echod/port
Type: string
Default: 8001
Description: Port Number:
  Please enter the port number for echod.
Description-es.UTF-8: 
  por favor introducir el puerto del servidor echod
Description-ca.UTF-8: 
 Por favor introducir el puerto del servidor echod

Esta plantilla se encarga de preguntar a los usuarios el número de puerto. Si estais interesados en hacer plantillas más complejas habría que consultar el apartado Templates de la especificación de Debconf y consultar el manual debconf-devel.

El segundo paso es crear el fichero debian/config:

$ gedit debian/config

# Source debconf library.
. /usr/share/debconf/confmodule 

db_version 2.0
#Establecemos que durante la configuración se pueda ir atrás con el botón cancelar
db_capb backup

#Establecemos nuestros templates a no vistos para que debconf siempre los muestre
db_fset echod/port seen false
db_fset echod/notconfigured seen false

STATE=1
while [ "$STATE"  != 0 -a "$STATE" != 2 ]
  do
  case "$STATE" in
      1)
        # Preparamos el template echod/port
	db_input critical echod/port || true
        #lo mostramos
 	if db_go; then
		#Controlamos si el valor del puerto está vacio
		db_get echod/port || true
		      if [ ! -z "$RET" ]; then
			  STATE=2
		      fi
		  else
		      STATE=0
		  fi
		  ;;
  esac
done 

#Si el puerto está vacio mostramos un mensaje de error: template echod/notconfigured
if [ "$STATE" = 0 ]; then
    db_input critical echod/notconfigured || true
    db_go
    exit 1
fi 

El fichero config solo se encarga del flujo de la interfaz con el usuario. Para este menester, utilizamos las funciones de shell proporcionadas por el fichero /usr/share/debconf/confmodule para comunicarnso con debconf a través de los comandos del protocolo debconf. Si os fijais, el script solo se encarga de llamar a la plantilla echod/port:

Imatge:DebconfDialog2.png

y en caso de que cancelemos muestra un mensaje de aviso echod/notconfigured:

Imatge:DebconfDialog3.png

El manual de confmodule (man confmodule) nos da información sobre la libreria de debconf para Shell (/usr/share/debconf/confmodule).

Ahora viene la parte más complicada: la lógica de la configuración. En nuestro caso modificaremos el script de mantenimiento postint. dh-make nos ha creado una plantilla para este fichero (debian/postinst.ex) y la aprovecharemos:

$ cp debian/postinst.ex debian/postinst
$ gedit debian/postinst & 

Una vez hemos copiado la plantilla le añadiremos la función get_config() justo antes del case:

get_config() {
    db_get echod/port
    port="$RET"
} 

handle_config() {

    cfile=/etc/echod/port
    tempcfile=`tempfile`
    cat > $tempcfile <<EOF
${port}
EOF
    ucf $tempcfile $cfile
    chmod 644 $cfile
}

Y llenaremos el case configure con el siguiente código:

. /usr/share/debconf/confmodule
	db_version 2.0  

	# Read debconf 
	get_config
	db_stop
	exec 0<&1
	handle_config 

El fichero ha de quedar igual que este.

Resumiendo, el codigo lee el puerto que hemos introducido, y lo guarda al fichero /etc/echod/port.

El último paso que nos queda es descomentar la línea dh_installdebconf del fichero debian/rules:

# Build architecture-dependent files here.
binary-arch: build install
        .....
	dh_installdocs
	dh_installexamples
#	dh_install
#	dh_installmenu
	dh_installdebconf
#	dh_installlogrotate
#	dh_installemacsen

Ahora ya está todo preparado y podemos crear nuestro paquete Debian:

$ fakeroot
# dpkg-buildpackage
# exit
Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines