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
Thanks, Gracias! I tried myself, but before reading this I was missing some of the details.