Instal·lació amb configuració (Debconf)
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