Z-push_v2 en Zimbra 8

Lo prometido es deuda y hace tiempo os comentaba que se puede tener sincronización móvil con la versión Open de Zimbra, utilizando el protocolo Active-Sync proporcionado por z-push.

Como he vuelto a hacerlo en otro Zimbra, voy a ponerlo paso a paso. Si se me olvida algo, me avisais…

Todas las páginas que he visitado recomiendan NO INSTALAR z-push en la misma máquina que tiene el zimbra.
Hecha ésta advertencia, que cada uno actúe en consecuencia y haga lo que crea conveniente…
El procedimiento que os comento, está basado en un Ubuntu 12.04 LTS con un Zimbra 8.0.2 y además, el apache2 para el z-push v2.
También te recomendaría que leyeses antes el fichero INSTALL. Aunque como ya se que nadie se los lee, intentaré explicar los pasos lo mas detalladamente posible. Y si no entiendes algo, busca en google o me preguntas… O en la web principal de z-push, que para eso la tienen http://z-push.sourceforge.net/soswp/
Si no los tienes ya instalados, instala el subversion y php-curl
    • apt-get install subversion php5-curl

Crea la carpeta para el z-push en el servidor

    • mkdir /var/www/z-push

Descarga la última versión de z-push disponible a una carpeta temporal y descomprimelo

Mueve el contenido a la carpeta z-push del servidor web

    • mv z-push-2.1.3-1892/* /var/www/z-push/

Crea las carpetas para el state (/var/lib/z-push) y para los logs (/var/log/z-push) y hazlos escribibles para el usuario web.

    • mkdir /var/lib/z-push
    • mkdir /var/log/z-push
    • chgrp www-data /var/lib/z-push
    • chmod g+w /var/lib/z-push
    • chgrp www-data /var/log/z-push
    • chmod g+w /var/log/z-push
Descarga el backend de z-push para Zimbra en la carpeta  zimbra dentro de la carpeta backend

Modifica el fichero config.php con los datos necesarios. Puedes ver el ejemplo de más abajo.

Debemos también crear un VirtualHost en el Apache2. Como no es un howto de apache solo te pongo un ejemplo de las líneas que deberás incluir en el nuevo virtualhost y después hacerlo enable mediante un a2ensite. Os pongo el ejemplo de un virtualhost.

<VirtualHost *:443>
ServerAdmin admin@midominio.com
ServerName mail.domain.com

DirectoryIndex index.php
DocumentRoot /var/www/z-push/
Alias /Microsoft-Server-ActiveSync /var/www/z-push/index.php

SSLEngine On
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key

<Directory />
AllowOverride All
</Directory>

# Logfiles
ErrorLog /var/log/z-push/error.log
CustomLog /var/log/z-push/access.log combined

</VirtualHost>

Una vez añadido éste virtualhost, habilita el site (mediante un a2ensite z-push) reinicia apache y, en teoría, ya debería estar funcionando.

Si, correcto. Hay que instalar certificados. Para eso buscais en google…

Para comprobarlo;

En el navegador accede a : http://mail.domain.com/Microsoft-Server-ActiveSynSi todo ha ido bien, debería pedirte usuario y contraseña (de una cuenta de Zimbra, claro).

Si no te la pipde, seguramente hayas hecho algo mal. Revisa el log de Apache o la configuración del sitio zimbra en el config.php, o el error de PHP.
Si pones un usuario y una clave válida, debería salir una página en la que, además de no salir ningún error, te muestra algo así como  “Z-Push – Open Source ActiveSync“. Esto confirma que está todo bien configurado y sin errores. También que hay comunicación entre todos los componentes (Apache, Z-push y Zimbra).

Ahora debemos configurar el rotate del log (es voluntario….). En el ejemplo de aquí abajo, rotarán diariamente, guardando un máximo de 2 semanas.

Crea en /etc/logrotate.d,  por ejemplo;   vi /etc/logrotate.d/z-push

/var/log/z-push/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
}

Configuración de Z-Push

Ahora desde la versión 2, hay ficheros de configuración diferentes, para z-push y para el backend de Zimbra.

Abajo os pongo un ejemplo de configuración de z-push para que haga la “llamada” al backend de Zimbra y más abajo otro ejemplo de configuración del Backend.

Configuración de Z-Push

Fichero:     /var/www/z-push/config.php

// Update existing fields in config
define('TIMEZONE', 'Europe/Madrid"');
define('PROVISIONING', false);
$BACKEND_PROVIDER = "BackendZimbra";

Configuración del Zimbra Backend

Fichero:     /var/www/z-push/backend/zimbra/config.php

INSISTO: la configuración de abajo es solo un ejemplo. Comprueba, junto con el fichero INSTALL, que el entorno que viene con el Zimbra backend  se corresponde con lo que realmente tienes.

define('ZIMBRA_URL', 'https://mail.domain.com');
define('ZIMBRA_USER_DIR', 'zimbra');
define('ZIMBRA_SYNC_CONTACT_PICTURES', true);
define('ZIMBRA_VIRTUAL_CONTACTS',true);
define('ZIMBRA_VIRTUAL_APPOINTMENTS',true);
define('ZIMBRA_VIRTUAL_TASKS',true);
define('ZIMBRA_IGNORE_EMAILED_CONTACTS',true);
define('ZIMBRA_HTML',true);

define('ZIMBRA_ENFORCE_VALID_EMAIL', true);

define('ZIMBRA_SMART_FOLDERS',false);
define('ZIMBRA_RETRIES_ON_HOST_CONNECT_ERROR',5);

define('ZIMBRA_LOCAL_CACHE', true);

define('ZIMBRA_DEBUG',false);

Nota: Ni que decir tiene que debes cambiar mail.domain.com por el dominio que tengas.

Accede a http://php.net/manual/en/timezones.php para localizar to zona horaria correcta.


Configuración de dispositivos Móviles

Para sincronizar dispositivos móviles deberás, a la hora de configurar la cuenta, seleccionar una Cuenta Exchange o una cuenta de ActiveSync.

 :wq

Anuncios

5 comentarios en “Z-push_v2 en Zimbra 8

    • En este caso concreto, si, lo instalé en la misma máquina. Hay que tener cuidado con los puertos que se utilizan.
      Por defecto Zimbra utiliza el 443 y el Z-push también, por lo que tendrás que elegir cual se queda con él.
      O también puedes dejar el zimbra en el 443 y configurar el z-push (apache) para que escuche en el 8443, o en el que quieras.
      Un saludo,

      Responder
  1. Hola, he intentado la instalación, puedo conectarme con mi smartphone samsung galaxy ace, pero no sincroniza, inclusive cuando intento ingresar por navegador de internet, me solicita un user/pass válido de zimbra, cuando ingreso estos datos me da el mensaje de “Z-Push – Open Source ActiveSync” Version 2.0.7-1690 GET not supported This is the Z-Push location and can only be accessed by Microsoft ActiveSync-capable devices. Hasta ahí creo que todo lo he hecho bien, ahh se me olvidaba, el z-push lo configuré para el puerto 443 y el zimbra para el 80. El error en mis logs de z-push son los siguientes:

    z-push/access.log

    192.168.1.34 – – [30/Apr/2013:08:39:42 -0500] “POST /service/soap HTTP/1.1” 404 289 “-” “-”
    192.168.1.34 – – [30/Apr/2013:08:39:42 -0500] “POST /service/soap HTTP/1.1” 404 289 “-” “-”

    Es interminable

    z-push/z-push-error.log

    30/04/2013 07:57:37 [13261] [ERROR] [admin] SimpleMutex not available as InterProcessData is not available. This is not recommended on duty systems and may result in corrupt user/device linking.

    z-push/z-push.log

    30/04/2013 08:37:47 [24497] [INFO] [unknown] User-agent: ‘Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0′
    30/04/2013 08:37:47 [24497] [INFO] [unknown] InterProcessData::InitSharedMem(): PHP libraries for the use shared memory are not available. Functionalities like z-push-top or loop detection are not available. Check your php packages.
    30/04/2013 08:37:53 [24984] [INFO] [admin] Version=’2.0.7-1690′ method=’GET’ from=’190.40.20.207′ cmd=” getUser=’admin’ devId=” devType=”
    30/04/2013 08:37:53 [24984] [WARN] [admin] /var/www/z-push/backend/zimbra/zimbra.php:1119 Undefined index: soap:Envelope (8)
    30/04/2013 08:37:53 [24984] [WARN] [admin] /var/www/z-push/backend/zimbra/zimbra.php:1122 Undefined index: soap:Envelope (8)
    30/04/2013 08:37:53 [24984] [WARN] [admin] /var/www/z-push/backend/zimbra/zimbra.php:1218 Undefined property: BackendZimbra::$_primaryAddressbook (8)
    30/04/2013 08:37:53 [24984] [WARN] [admin] /var/www/z-push/backend/zimbra/zimbra.php:1218 Undefined property: BackendZimbra::$_primaryCalendar (8)
    30/04/2013 08:37:53 [24984] [WARN] [admin] /var/www/z-push/backend/zimbra/zimbra.php:1218 Undefined property: BackendZimbra::$_primaryTask (8)
    30/04/2013 08:37:53 [24984] [INFO] [admin] User-agent: ‘Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0’
    30/04/2013 08:40:29 [23198] [INFO] [admin] ExportChangesDiff->InitializeExporter(): Found ‘0’ changes

    z-push/error.log

    [Tue Apr 30 08:42:02 2013] [error] [client 192.168.1.34] File does not exist: /var/www/z-push/service
    [Tue Apr 30 08:42:02 2013] [error] [client 192.168.1.34] File does not exist: /var/www/z-push/service

    También interminable.

    Saludos.

    Responder
    • En el Apache que errores te salen?
      Que versión de z-push has instalado?
      Has instalado todos los paquetes de PHP?
      Tienes el Zimbra accesible desde Internet? Tienes abiertos los puertos 80 y 443?
      Enviame si quieres y puedes, el config.php del z-push y el z-push.conf

      Responder
      • Esto es lo que tengo configurado en z-push/config.php

        /**********************************************************************************
        * Default settings
        */
        // Defines the default time zone, change e.g. to “Europe/London” if necessary
        define(‘TIMEZONE’, ‘America/Lima’);

        // Defines the base path on the server
        define(‘BASE_PATH’, dirname($_SERVER[‘SCRIPT_FILENAME’]). ‘/’);

        // Try to set unlimited timeout
        define(‘SCRIPT_TIMEOUT’, 0);

        //Max size of attachments to display inline. Default is 2 MB
        define(‘MAX_EMBEDDED_SIZE’, 2097152);

        /**********************************************************************************
        * Default FileStateMachine settings
        */
        define(‘STATE_DIR’, ‘/var/lib/z-push/’);
        define(‘LOGFILEDIR’, ‘/var/log/z-push/’);
        define(‘LOGFILE’, LOGFILEDIR . ‘z-push.log’);
        define(‘LOGERRORFILE’, LOGFILEDIR . ‘z-push-error.log’);
        define(‘LOGLEVEL’, LOGLEVEL_INFO);
        define(‘LOGAUTHFAIL’, false);

        // To save e.g. WBXML data only for selected users, add the usernames to the array
        // The data will be saved into a dedicated file per user in the LOGFILEDIR
        // Users have to be encapusulated in quotes, several users are comma separated, like:
        // $specialLogUsers = array(‘info@domain.com’, ‘myusername’);
        define(‘LOGUSERLEVEL’, LOGLEVEL_DEVICEID);
        $specialLogUsers = array();

        // Location of the trusted CA, e.g. ‘/etc/ssl/certs/EmailCA.pem’
        // Uncomment and modify the following line if the validation of the certificates fails.
        // define(‘CAINFO’, ‘/etc/ssl/certs/EmailCA.pem’);

        /**********************************************************************************
        * Mobile settings
        */
        // Device Provisioning
        define(‘PROVISIONING’, false);

        // This option allows the ‘loose enforcement’ of the provisioning policies for older
        // devices which don’t support provisioning (like WM 5 and HTC Android Mail) – dw2412 contribution
        // false (default) – Enforce provisioning for all devices
        // true – allow older devices, but enforce policies on devices which support it
        define(‘LOOSE_PROVISIONING’, false);

        // Default conflict preference
        // Some devices allow to set if the server or PIM (mobile)
        // should win in case of a synchronization conflict
        // SYNC_CONFLICT_OVERWRITE_SERVER – Server is overwritten, PIM wins
        // SYNC_CONFLICT_OVERWRITE_PIM – PIM is overwritten, Server wins (default)
        define(‘SYNC_CONFLICT_DEFAULT’, SYNC_CONFLICT_OVERWRITE_PIM);

        define(‘SYNC_FILTERTIME_MAX’, SYNC_FILTERTYPE_ALL);

        // Interval in seconds before checking if there are changes on the server when in Ping.
        // It means the highest time span before a change is pushed to a mobile. Set it to
        // a higher value if you have a high load on the server.
        define(‘PING_INTERVAL’, 30);

        // Interval in seconds to force a re-check of potentially missed notifications when
        // using a changes sink. Default are 300 seconds (every 5 min).
        // This can also be disabled by setting it to false
        define(‘SINK_FORCERECHECK’, 300);

        // Set the fileas (save as) order for contacts in the webaccess/webapp/outlook.
        // It will only affect new/modified contacts on the mobile which then are synced to the server.
        // Possible values are:
        // SYNC_FILEAS_FIRSTLAST – fileas will be “Firstname Middlename Lastname”
        // SYNC_FILEAS_LASTFIRST – fileas will be “Lastname, Firstname Middlename”
        // SYNC_FILEAS_COMPANYONLY – fileas will be “Company”
        // SYNC_FILEAS_COMPANYLAST – fileas will be “Company (Lastname, Firstname Middlename)”
        // SYNC_FILEAS_COMPANYFIRST – fileas will be “Company (Firstname Middlename Lastname)”
        // SYNC_FILEAS_LASTCOMPANY – fileas will be “Lastname, Firstname Middlename (Company)”
        // SYNC_FILEAS_FIRSTCOMPANY – fileas will be “Firstname Middlename Lastname (Company)”
        // The company-fileas will only be set if a contact has a company set. If one of
        // company-fileas is selected and a contact doesn’t have a company set, it will default
        // to SYNC_FILEAS_FIRSTLAST or SYNC_FILEAS_LASTFIRST (depending on if last or first
        // option is selected for company).
        // If SYNC_FILEAS_COMPANYONLY is selected and company of the contact is not set
        // SYNC_FILEAS_LASTFIRST will be used
        define(‘FILEAS_ORDER’, SYNC_FILEAS_LASTFIRST);

        // Amount of items to be synchronized per request
        // Normally this value is requested by the mobile. Common values are 5, 25, 50 or 100.
        // Exporting too much items can cause mobile timeout on busy systems.
        // Z-Push will use the lowest value, either set here or by the mobile.
        // default: 100 – value used if mobile does not limit amount of items
        define(‘SYNC_MAX_ITEMS’, 100);

        // The data providers that we are using (see configuration below)
        define(‘BACKEND_PROVIDER’, “BackendZimbra”);

        ========================================================================

        z-push/backend/zimbra/config.php

        // **********************
        // BackendZimbra settings
        // **********************

        define(‘ZIMBRA_URL’, ‘http://192.168.1.34’);
        define(‘ZIMBRA_USER_DIR’, ‘zimbra’);
        define(‘ZIMBRA_SYNC_CONTACT_PICTURES’, true);
        define(‘ZIMBRA_VIRTUAL_CONTACTS’,true);
        define(‘ZIMBRA_VIRTUAL_APPOINTMENTS’,true);
        define(‘ZIMBRA_VIRTUAL_TASKS’,true);
        define(‘ZIMBRA_IGNORE_EMAILED_CONTACTS’,true);
        define(‘ZIMBRA_HTML’,true);

        // define(‘ZIMBRA_TIMEZONE’, ‘Europe/Dublin’);

        define(‘ZIMBRA_ENFORCE_VALID_EMAIL’, true);

        define(‘ZIMBRA_SMART_FOLDERS’,false);
        define(‘ZIMBRA_RETRIES_ON_HOST_CONNECT_ERROR’,5);

        define(‘ZIMBRA_LOCAL_CACHE’, true);

        // define(‘ZIMBRA_MB_DETECT_ORDER’, ‘ASCII, UTF-8, ISO-8859-1, ISO-8859-15’ );

        define(‘ZIMBRA_DEBUG’,false);
        // define(‘ZIMBRA_DEBUG’,’setup’);
        // define(‘ZIMBRA_DEBUG’,’username’);

        // In case Function Overload is being detect for mbstring functions we set the define
        // to the overload level so that we can handle binary data propper…
        define(‘MBSTRING_OVERLOAD’, (extension_loaded(‘mbstring’) ? ini_get(‘mbstring.func_overload’) : false));

        =======================================================================

        /var/log/httpd/error_log

        [Tue Apr 30 07:47:25 2013] [notice] caught SIGTERM, shutting down
        [Tue Apr 30 07:47:34 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
        [Tue Apr 30 07:47:34 2013] [notice] Digest: generating secret for digest authentication …
        [Tue Apr 30 07:47:34 2013] [notice] Digest: done
        [Tue Apr 30 07:47:34 2013] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured — resuming normal operations
        [Tue Apr 30 16:59:57 2013] [notice] caught SIGTERM, shutting down
        [Tue Apr 30 16:59:58 2013] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
        [Tue Apr 30 16:59:58 2013] [notice] Digest: generating secret for digest authentication …
        [Tue Apr 30 16:59:58 2013] [notice] Digest: done
        [Tue Apr 30 16:59:59 2013] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured — resuming normal operations

        =======================================================================

        /var/log/httpd/access_log –> aquí mi dispositivo samsung intenta acceder colgado de la wifi de mi red lan

        190.40.20.207 – admin [30/Apr/2013:17:11:26 -0500] “POST /Microsoft-Server-ActiveSync?Cmd=Sync&User=admin&DeviceId=SAMSUNG1359971043808350&DeviceType=SAMSUNGGTS5830M HTTP/1.1” 200 64
        190.40.20.207 – admin [30/Apr/2013:17:11:27 -0500] “POST /Microsoft-Server-ActiveSync?Cmd=Sync&User=admin&DeviceId=SAMSUNG1359971043808350&DeviceType=SAMSUNGGTS5830M HTTP/1.1” 200 65
        190.40.20.207 – admin [30/Apr/2013:17:03:38 -0500] “POST /Microsoft-Server-ActiveSync?Cmd=Ping&User=admin&DeviceId=SAMSUNG1359971043808350&DeviceType=SAMSUNGGTS5830M HTTP/1.1” 200 13
        190.40.20.207 – admin [30/Apr/2013:17:04:44 -0500] “POST /Microsoft-Server-ActiveSync?Cmd=Ping&User=admin&DeviceId=SAMSUNG1359971043808350&DeviceType=SAMSUNGGTS5830M HTTP/1.1” 200 13

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s