FacebookTwitterFlickrYoutuberss

Es/4.1/Apendice B: Desarrollo y usos avanzados

From Zentyal Linux Small Business Server
Jump to: navigation, search




Contents

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.

[1] Perl es un lenguaje dinámico de programación interpretado de

alto nivel y de propósito general. http://www.perl.org/

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 ./bulkusersEn 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.


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).


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.

Fichero de configuración desde un stub

Modificar los ficheros de configuración directamente no sería correcto, por que 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/dnsOtra 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.masPara 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:

  1. !/bin/bash

iptables -t nat -I premodules -s 192.168.200.0/24 -p tcp -m tcp --dport 80 -j ACCEPTTras ello, daremos permisos de ejecución al módulo y reiniciaremos el servicio:

sudo chmod +x firewall.postservice sudo service zentyal firewall restartEstas 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.

[2] Una explicación más amplia del patrón MVC

http://es.wikipedia.org/wiki/Modelo_Vista_Controlador.

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.


Personal tools
Namespaces

Variants
Actions

Zentyal Wiki

Zentyal Doc
Navigation
Toolbox