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, Application Programming Interface), 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 de Zentyal 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. Esta utilidad añade 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 necesitemos extender la funcionalidad de los módulos de Zentyal para adaptarse a nuestras 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.
Modificar los ficheros de configuración directamente no sería correcto,
porque los ficheros serán sobreescritos cada vez que las plantillas
sean procesadas (guardando 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 zs 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 guardar 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 guardar la configuración del módulo: /etc/zentyal/hooks/<module>.postsetconf, se ejecutará tras guardar 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 zs 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 tutorial 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] | Tutorial de Desarrollo de Zentyal: 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 7.0 o 6.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 7.1 o 7.2) entre lanzamientos de versiones principales, generalmente introduciendo nuevas características. Las Ediciones Comerciales de Zentyal se basan siempre en Ubuntu Server LTS.
Zentyal ofrece aproximadamente 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 la Política de Lanzamientos de Zentyal [4].
[4] | Política de lanzamiento de Zentyal: https://zentyal.com/es/politica-de-lanzamientos-zentyal/ |
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 7.0 o 6.0) se publican cada dos años y las versiones menores del Servidor Zentyal (como 7.1 o 7.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 GitHub [5] para la gestión de las incidencias y peticiones de nuevas funcionalidades por parte de los usuarios. Dichas “issues” son visible por todos los usuarios y cualquier usuario con cuenta en GitHub podrá crear o contestar dichas incidencias o peticiones.
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 pueda 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.
[5] | 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 Oficial de Zentyal [6].
Toda esta información, junto a otra documentación, se encuentra en la sección de la comunidad de la Wiki de Zentyal [7].
[6] | Foro Oficial de Zentyal: http://forum.zentyal.org |
[7] | Wiki de Zentyal: http://wiki.zentyal.org/ |