Apéndice A: Desarrollo y usos avanzados

Importación de datos de configuración

Aunque la interfaz de Zentyal facilita enormemente la labor del administrador de sistemas, algunas de las tareas de configuración a través de dicha interfaz pueden resultar tediosas si tenemos que repetirlas muchas veces. Ejemplos de esto serí­an añadir 100 nuevas cuentas de usuario o habilitar una cuenta de correo electrónico para todos los usuarios de Zentyal.

Estas tareas se pueden automatizar fácilmente a través de la interfaz de programación de aplicaciones (API), que nos proporciona Zentyal. Para ello sólo son necesarios unos conocimientos básicos de lenguaje Perl [1], así­ como conocer los métodos expuestos por el módulo de Zentyal que queramos utilizar. De hecho, la interfaz Web utiliza la misma interfaz de programación.

A continuación se muestra un ejemplo de cómo crear una pequeña utilidad, haciendo uso del API de Zentyal, para añadir automáticamente un número arbitrario de usuarios definidos en un fichero CSV (Comma Separated Values):

#!/usr/bin/perl

use strict;
use warnings;

use EBox;
use EBox::Samba::User;
use File::Slurp;

my @lines = read_file('users.csv');
chomp (@lines);

EBox::init();

my $parent = EBox::Samba::User->defaultContainer();

for my $line (@lines) {
    my ($username, $givenname, $surname, $password) = split(',', $line);
    EBox::Samba::User->create(
        samAccountName => $username,
        parent => $parent,
        givenName => $givenname,
        sn => $surname,
        password => $password
    );
}

1;

Guardamos el fichero con el nombre bulkusers y le damos permisos de ejecución mediante el comando chmod +x bulkusers.

Antes de ejecutar el script debemos tener un fichero llamado users.csv en el mismo directorio. El aspecto de este fichero debe ser así:

jfoo,John,Foo,jfoopassword,
jbar,Jack,Bar,jbarpassword,

Finalmente nos situamos en el directorio donde lo hayamos guardado y ejecutamos:

sudo ./bulkusers

En esta sección se ha mostrado un pequeño ejemplo de las posibilidades de automatización de tareas con el API de Zentyal, pero estas son prácticamente ilimitadas.

[1]Perl es un lenguaje dinámico de programación interpretado de alto nivel y de propósito general. http://www.perl.org/

Personalización avanzada de servicios

Es posible que necesites extender la funcionalidad de los módulos de Zentyal para adaptarse a tus necesidades. Zentyal ofrece dos mecanismos para este propósito. Es posible cambiar o ampliar partes del comportamiento de tal forma que todavía podemos reutilizar la abstracción y automatización del entorno.

stubs: Plantillas que serán procesadas para generar los ficheros de configuración que usan los daemons. Modificando o creando un stub, podemos cambiar el comportamiento de cualquier módulo, por ejemplo, añadiendo puertos seguros a la configuración de Squid (Proxy HTTP).

hooks: Scripts que serán llamados en puntos específicos del ciclo de vida de un módulo, por ejemplo añadir una regla que marque un determinado tipo de tráfico en el cortafuegos después de establecer las reglas de Zentyal.

Stubs

Los módulos de Zentyal, una vez que han sido configurados, sobreescriben los ficheros originales del sistema en los servicios que gestionan. Los módulos realizan esta operación a partir de plantillas que contienen la estructura básica del fichero de configuración. Ciertas partes del fichero resultante se parametrizan usando las variables que les provee el entorno.

_images/stubs.png

Fichero de configuración desde un stub

Modificar los ficheros de configuración directamente no sería correcto, porque los ficheros serán sobreescritos cada vez que las plantillas sean procesadas (salvando cambios, por ejemplo). Las propias plantillas de configuración de Zentyal residen en /usr/share/zentyal/stubs. Su nombre es el del fichero de configuración original, más la extensión .mas, por ejemplo /usr/share/zentyal/stubs/dns/named.conf.mas. Modificar estas plantillas tampoco sería la mejor solución, por que también se van a sobreescribir si el módulo en cuestión se reinstala o se actualiza.

Por lo tanto, para hacer los cambios persistentes, se puede copiar la plantilla original al directorio /etc/zentyal/stubs/, con el nombre del módulo.

Por ejemplo:

sudo mkdir /etc/zentyal/stubs/dns
sudo cp /usr/share/zentyal/stubs/dns/named.conf.options.mas /etc/zentyal/stubs/dns

Otra de las ventajas de copiar las plantillas a /etc/zentyal/stubs/ es que podemos llevar el control de las modificaciones que hemos hecho sobre los originales, usando la herramienta ‘diff’. Por ejemplo, para el caso anterior:

diff /etc/zentyal/stubs/dns/named.conf.options.mas
/usr/share/zentyal/stubs/dns/named.conf.options.mas

Para nuestro siguiente ejemplo, supongamos que no queremos permitir que la red ‘DMZ’, que es interna, pero no totalmente confiable, realice una transferencia de zona DNS.

Crearemos el directorio /etc/zentyal/stubs/dns y copiaremos los ficheros named.conf.local.mas y named.conf.options.mas.

Añadiremos el grupo ‘DMZ’ conteniendo los segmentos de red necesarios en el fichero named.conf.local.mas:

acl "DMZ" {
    192.168.200.0/24;
    192.168.201.0/24;
};

Ahora prohibimos las transferencias de zona para este objeto en named.conf.options.mas:

allow-transfer { !DMZ; internal-local-nets; };

Para comprobar los cambios, reiniciaremos el módulo tras modificar los ficheros:

sudo service zentyal dns restart

Hooks

Es posible que deseemos realizar algunas acciones adicionales en un punto determinado del ciclo de vida de un módulo. Por ejemplo, cuando Zentyal guarda los cambios relacionados con el cortafuegos, lo primero que hace el módulo es eliminar todas las reglas existentes, y después añadir las configuradas en Zentyal. Si añadimos una regla de iptables que no esta contemplada en la interfaz, desaparecerá tras salvar los cambios. Para modificar este comportamiento, Zentyal ofrece la posibilidad de ejecutar scripts durante el proceso de guarda de cambios. Hay seis puntos en los que se pueden ejecutar estos scripts conocidos como hooks. Dos de ellos son generales y los otros cuatro son específicos de cada módulo:

  • Antes de salvar cambios: En el directorio /etc/zentyal/pre-save, todos los scripts con permisos de ejecución son ejecutados antes del proceso de guarda de cambios.
  • Después de guardar cambios: Los scripts con permisos de ejecución de /etc/zentyal/post-save son ejecutados tras este proceso.
  • Antes de guardar la configuración de un módulo: Escribiendo el archivo /etc/zentyal/hooks/<module>.presetconf, con ‘module’ conteniendo el nombre del módulo a tratar, el hook se ejecutará antes de escribir la configuración de este daemon.
  • Después de salvar la configuración del módulo: /etc/zentyal/hooks/<module>.postsetconf, se ejecutará tras salvar la configuración del módulo específico.
  • Antes de reiniciar el servicio: Se ejecutará /etc/zentyal/hooks/<module>.preservice. Podemos utilizarlo para cargar módulos de Apache, por ejemplo.
  • Después de reiniciar el servicio: Se ejecutará /etc/zentyal/hooks/<module>.postservice. Para el caso del cortafuegos, podemos añadir todas las reglas adicionales aquí.

Supongamos que tenemos un proxy transparente, pero deseamos que algunos segmentos de red no sean redirigidos automáticamente al proxy. Crearemos el fichero /etc/zentyal/hooks/firewall.postservice, con el siguiente contenido:

#!/bin/bash
iptables -t nat -I premodules -s 192.168.200.0/24 \
-p tcp -m tcp --dport 80 -j ACCEPT

Tras ello, daremos permisos de ejecución al módulo y reiniciaremos el servicio:

sudo chmod +x firewall.postservice
sudo service zentyal firewall restart

Estas opciones tienen gran potencial y nos permitirán adaptar Zentyal a nuestro caso específico.

Entorno de desarrollo de nuevos módulos

Zentyal está diseñado precisamente pensando en la extensibilidad y es relativamente sencillo crear nuevos módulos.

Cualquiera con conocimientos del lenguaje Perl puede aprovecharse de las facilidades que proporciona Zentyal para la creación de interfaces Web, y también beneficiarse de la integración con el resto de módulos y las demás caracterí­sticas comunes de Zentyal.

El diseño de Zentyal es completamente orientado a objetos y hace uso del patrón Modelo-Vista-Controlador (MVC) [2], de forma que el desarrollador sólo necesita definir qué características desea en su modelo de datos, y el resto será generado automáticamente por Zentyal.

Existe un turorial de desarrollo [3] para orientar en los primeros pasos del desarrollo de un nuevo módulo.

Zentyal está pensado para ser instalado en una máquina dedicada. Esta recomendación es también extensible para el caso del desarrollo de módulos. No se recomienda desarrollar sobre la propia máquina del usuario, en su lugar se recomienda servirse de un entorno virtualizado como se detalla en Apéndice A: Entorno de pruebas con VirtualBox.

[2]Una explicación más amplia del patrón MVC http://es.wikipedia.org/wiki/Modelo_Vista_Controlador.
[3]https://wiki.zentyal.org/wiki/Tutorial

Política de publicación de la Edición Comercial

Se publican versiones principales (major releases) de la Edición Comercial del Servidor Zentyal (como 6.0 o 5.0) cada dos años, cuando una nueva versión de Ubuntu Server LTS está disponible. Se publican versiones menores (minor releases) de la Edición Comercial del Servidor Zentyal (como 6.1 o 6.2) entre lanzamientos de versiones principales, generalmente introduciendo nuevas características. Las Ediciones Comerciales del Servidor Zentyal se basan siempre en Ubuntu Server LTS.

Zentyal ofrece 4.5 años de soporte técnico oficial para la Edición Comercial de Zentyal. De esta forma, tras el lanzamiento de una nueva Edición Comercial Zentyal, ésta contará con soporte en todas las cuestiones de seguridad, además de soporte comercial y servicios de suscripción garantizados durante los 4.5 años siguientes. Tras este periodo, la Edición Comercial Zentyal alcanza el fin de su ciclo de vida y deja de contar con soporte técnico. Para más información, consulte el siguiente enlace: https://www.zentyal.com/release-policy

Política de publicación de la Edición Development

Generalmente el ciclo de lanzamientos de la Edición Development es similar al de la Edición Comercial: las principales versiones del Servidor Zentyal (como 6.0 o 5.0) se publican cada dos años y las versiones menores del Servidor Zentyal (como 6.1 o 6.2) se publican entre versiones principales , presentando generalmente nuevas funciones. Todas las versiones se basan siempre en Ubuntu Server LTS.

Es importante tener en cuenta que la Edición Development es el laboratorio donde se prueban nuevas funcionalidades. Solo cuando se haya estabilizado una característica nueva o una solución en la Edición Development, se implementarán en la Edición Comercial. Además, solo se mantiene la última versión de la Edición Development.

Política de gestión de errores

Zentyal utiliza [4] GitHub para la gestión de las incidencias y peticiones de nuevas funcionalidades por parte de los usuarios. Cualquier usuario con cuenta en GitHub podrá crear o contestar dichas incidencias o nuevas funcionalidades. Dichas “issues” son visible por todos los usuarios y cualquier de ellos, con una cuenta en GitHub

Antes de reportar un bug asegurate de que realmente se trata de un error y no de un resultado esperado del programa en determinadas circunstancias. Si el bug ha sido enviado anteriormente, todavía puedes ayudar confirmando que lo has reproducido y aportando detalles adicionales sobre el problema.

Es absolutamente necesario incluir los detalles sobre los pasos para reproducir el error para que el Equipo de Desarrollo puede arreglarlo. Si estás reportando el error manualmente, se debería incluir al menos el fichero /var/log/zentyal/zentyal.log y cualquier otra información que estimes relacionada con la causa de tu problema. Las capturas de pantalla también son bienvenidas si permiten visualizar mejor el problema.

[4]Zentyal Github: https://github.com/zentyal/zentyal/issues

Soporte de la comunidad

El soporte de comunidad se provee principalmente a través de Internet. En muchas ocasiones es la propia comunidad la que se ofrece soporte a sí­ misma. Es decir, usuarios de la aplicación que ayudan desinteresadamente a otros usuarios.

La comunidad proporciona una mejora importante en el desarrollo del producto, los usuarios contribuyen a descubrir fallos en la aplicación que no se conocí­an hasta la fecha o también con sus sugerencias ayudan a dar ideas sobre la forma en que se puede mejorar la aplicación.

Este soporte desinteresado, lógicamente, no está sujeto a ninguna garantí­a. Si un usuario formula una pregunta, es posible que por distintas circunstancias nadie con el conocimiento apropiado tenga tiempo para responderle en el plazo que este desearí­a.

Los medios de soporte de la comunidad de Zentyal se centran en el foro [5].

Toda esta información, junto a otra documentación, se encuentra en la sección de la comunidad de la Wiki de Zentyal (http://wiki.zentyal.org/).

[5]Foro http://forum.zentyal.org