Compilar Zimbra OSE 8.0.6

Estrenando el blog

Parece ser que me toca estrenar el blog. Es posible que de la mayoría de cosas de las que hable sea de Zimbra porque es una de las cosas a las que más me dedicó en bTactic. Eso sí, los artículos, de normal no serán tan avanzados como este.

Requisitos previos generales

Para este proceso necesitáis una máquina virtual de Ubuntu 12.04 minimal limpia o por lo menos eso es recomiendo porque si usáis un Zimbra de producción todo el /opt/zimbra se borrará y normalmente no es lo que uno quiere. Unas 50 GB de espacio nos sobrarán para este proceso.
Por otro lado presupongo que se tiene una instalación de Zimbra 8.0.6 lista para usar para evitarnos, entre otras, unas descargas desde upstream. En teoría no haría falta esta instalación binaria, con descargar el tgz y descomprimir los debs podríamos conseguir estos ficheros pero, claro, llevaría mucho tiempo explicarlo, así que haremos esa suposición.

Sobre la dificultad de la compilación en la práctica

Cómo podréis comprobar las instrucciones oficiales de que el comando de compilación con fuentes te guiará para resolver todas las dependencias no es del todo cierto. Tienes que averiguar muchas cosas a mano para poder arreglarlas y que por fin compile.
Otra cosa especial de este documento es que por fin se emplea el nuevo repositorio Git que Zimbra ha puesto a disposición en lugar del vetusto repositorio Perforce.

Pensando en montar un Zimbra Daily builder

Por último comentaros que me ronda la idea de hacer un servidor de nightly builds (o daily builds como se prefiera) de Zimbra porque hay veces que uno no puede esperar a que Zimbra actualice cuando hay varios errores que comprometen su usabilidad. Dada la naturaleza de esta compilación si se desean compilar varias versiones de Zimbra a la vez habrá que recurrir a chroots. Este servicio además sería beneficioso para la comunidad porque la gente que tuviera bugs podría probar si, de verdad, han sido corregidos en versiones de prueba actualizadas a estas versiones daily.

Documento

Aquí os dejo el documento adaptado desde Latex para wordpress de una forma un tanto manual así que si encontráis algún gazapo comentadlo. Si os animáis a replicar el procedimiento y lo conseguís también nos alegraremos que dejéis un comentario de vuestra experiencia por aquí.

Introducción

Veremos cómo compilar Zimbra OSE, especificamente la versión 8.0.6.

Requisitos SO

Usaremos: Ubuntu 12.04 64 bit minimal.

Requisito usuario

Poder ejecutar cualquier comando con sudo sin pedir password.

Requisitos software

git

apt-get install git

ant

Instalamos el paquete ant.

 apt-get install ant

Paquetes varios

También instalaremos:

 apt-get install autoconf libtool bison \
 flex g++ patch unzip libncurses5-dev \
 zlibc zlib1g-dev libpcre3-dev \
 libexpat1-dev libpopt-dev libperl-dev \
 make cmake libltdl-dev libwww-perl \
 libbz2-dev libcloog-ppl-dev

Preparación Git

mkdir -p /tmp/zimbra-git
 cd /tmp/zimbra-git
 wget http://files2.zimbra.com\
 /downloads/git-fusion/zimbra-git-ssh.tgz
 tar xfz zimbra-git-ssh.tgz
 mkdir -p ~/.ssh/zimbra-git
 cd ~/.ssh/zimbra-git
 cp /tmp/zimbra-git/id_rsa_git* .

Creamos el fichero:

 ~/.ssh/config

para añadir:

 Host zimbra-git
 User public
 Hostname git.zimbra.com
 IdentityFile ~/.ssh/zimbra-git/id_rsa_git
 IdentitiesOnly yes
 Port 1067

Usuario y grupo zimbra

useradd zimbra

Descarga código fuente

Descargaremos el código fuente para la versión 8.0.6 lanzada.

 mkdir -p ~/zimbra-806-src
 cd ~/zimbra-806-src
 git clone git@zimbra-git:ironmaiden-806-foss

Si es la primera vez habrá que aceptar conectarse al repositorio de Zimbra.

Completado código fuente

JDK de Java

Creamos el directorio:

 mkdir -p ~/zimbra-806-src\
 /ironmaiden-806-foss\
 /ThirdPartyBuilds/x86_64/java

De facto conseguiremos el jdk de nuestra instalación de java. Será algo
como:
/opt/zimbra/jdk-1.7.0_45.tgz
que generaremos gracias al directorio del mismo nombre (salvo por el guión
que es guión bajo) en nuestra instalación del binario de Zimbra.

En código fuente

Este lo dejaremos en:

 ThirdPartyBuilds/x86_64/java/jdk-1.7.0_45.tgz

. (Crearemos el directorio si necesario)

En opt zimbra

También habrá que descomprimirlo en:

 /usr/local/jdk-1.7.0_45

y crearemos el siguiente enlace simbólico:

 cd /usr/local
 tar xzf ~/zimbra-806-src\
 /ironmaiden-806-foss/ThirdPartyBuilds\
 /x86_64/java/jdk-1.7.0_45.tgz
 ln -s /usr/local/jdk-1.7.0_45 /usr/local/java

US Export Policy

Hay que crear el fichero:

 ThirdPartyBuilds/x86_64/java/jce\
 /US_export_policy.jar

que podemos sacar del JDK de Java de nuestro Zimbra de producción en:
./java/jre/lib/security/US_export_policy.jar
Si necesario crearemos el directorio dónde se albergará el fichero.

 mkdir -p ~/zimbra-806-src\
 /ironmaiden-806-foss\
 /ThirdPartyBuilds/x86_64\
 /java/jce

También crearemos:

 local_policy.jar

de igual manera.

Arreglo jar

Haremos que:

ln -s /usr/local/java/bin/jar \
/usr/local/bin/jar

Arreglo ant

mkdir -p /usr/lib/jvm/java-6-openjdk-amd64
 ln -s /usr/local/java/lib/ \
 /usr/lib/jvm/java-6-openjdk-amd64/lib

Arreglo ncurses

ln -s /usr/lib\
 /x86_64-linux-gnu/libncurses.so \
 /usr/lib/libncurses.so

Arreglo zlib1g-dev

ln -s /usr/lib/x86_64-linux-gnu\
 /libz.so /usr/lib/libz.so

Arreglo libltdl-dev

ln -s /usr/lib/x86_64-linux-gnu\
 /libltdl.so /usr/lib/libltdl.so

Arreglo libpcre3-dev

ln -s /usr/lib/x86_64-linux-gnu\
 /libpcre.so /usr/lib/libpcre.so

Arreglo libexpat1-dev

ln -s /usr/lib/x86_64-linux-gnu\
 /libexpat.so /usr/lib/libexpat.so

Arreglo libpopt-dev

 

ln -s /usr/lib/x86_64-linux-gnu\
 /libpopt.so /usr/lib/libpopt.so

 

Junit

Conseguiremos junit desde:

 cd /usr/local/java/jre/lib/ext
 wget "http://downloads.\
 sourceforge.net\
 /project/junit/junit/4.10\
 /junit-4.10.jar?r=http%3A%2F%2F\
 sourceforge.net%2Fprojects%2F\
 junit%2F%3F_test%3Dbeta&ts=\
 1319305477&use_mirror=freefr" \
 -O junit-4.10.jar

 

libjunixsocket-linux-1.5-amd64.so

De producción conseguir el fichero:

 /opt/zimbra/lib/libjunixsocket-linux-1.5-amd64.so

para ponerlo en:

 ThirdPartyBuilds/x86_64/java\
 /junixsocket/libjunixsocket-linux-1.5-amd64.so

creando el directorio si necesario.

Arreglo UnlimitedJCEPolicy7

Creamos el directorio:

 ThirdPartyBuilds/x86_64/java/jce/UnlimitedJCEPolicy7

y dentro de él chero vacio: void.txt

Sencha

Por lo visto se necesita la versión:
3.1.2.342
De aquí:
http://cdn.sencha.com/cmd/3.1.2.342/release-notes.html
nos podemos descargar:
http://cdn.sencha.com/cmd/3.1.2.342/SenchaCmd-3.1.2.342-linux-x64.run.zip

wget "http://cdn.sencha.com/cmd\
 /3.1.2.342\
 /SenchaCmd-3.1.2.342-linux-x64.run.zip"
 mkdir senchacmd
 cd senchacmd
 unzip ../SenchaCmd\
 -3.1.2.342-linux-x64.run.zip
 chmod +x ./SenchaCmd\
 -3.1.2.342-linux-x64.run.zip
 sudo ./SenchaCmd\
 -3.1.2.342-linux-x64.run.zip

Directorio dónde instalar Sencha:
/usr/local/SenchaCmd
Aúnque lo ejecutemos con sudo nos modicará el .bashrc de nuestro
usuario para que el path sea correcto.
Y ponemos los permisos de nuestro usuario correctos:

 sudo chown -R usuario:usuario \
 /usr/local/SenchaCmd/Sencha/Cmd/ \
 /usr/local/SenchaCmd/Sencha/Cmd/*

Eso sí tendremos que hacer:

source .bashrc

para poder ejecutar sencha sin necesidad de hacer logout y login.

ruby

apt-get installrubygems \
 ruby

Creación opt zimbra

Se creará el directorio /opt/zimbra con los permisos del usuario que com-
pila.

 mkdir /opt/zimbra

Compilación

Para una compilación total en el directorio de compilación haremos:

 ./ZimbraBuild/buildZCS.sh

Compilación final

La compilación final se encuentra en el directorio:

 ZimbraBuild/amd64

. Por ejemplo podría ser:

 zcs-8.0.6_GA_5923.UBUNTU12_64.20140213220301.tgz

Bibliografía

Building Zimbra using Git
https://wiki.zimbra.com/wiki/Building_Zimbra_using_Git
Franklin README
http://wiki.zimbra.com/index.php?title=Franklin_README

2 comentarios en «Compilar Zimbra OSE 8.0.6»

Deja un comentario