Building HELIX 7.1.1 on FreeBSD 8 amd64
Article Information |
---|
This article applies to the following ZCS versions. |
![]() |
Contents
- 1 General information
- 2 Getting the source via Perforce
- 3 Getting the source from zimbra.imladris.sk
- 4 Initial pre-build steps
- 5 Preparing build enviroment via /usr/ports
- 6 Preparing build enviroment via zimbra.imladris.sk
- 7 Quick-hacks for a better day
- 8 Patching HELIX-711 to comply with FreeBSD
- 9 Putting diablo-jdk16 into ThirdPartyBuilds
- 10 Putting JCE files into ThirdPartyBuilds
- 11 Building Zimbra Collaboration Suite: HELIX-711
- 12 Installing Zimbra Collaboration Suite: HELIX-711 after a successful build
- 13 Further reading
General information
Please, read Zimbra_on_FreeBSD for all the details.
This guide describes building HELIX-711 on FreeBSD-8_amd64.
At this point it's good to note that everything should be run as root unless stated otherwise.
Getting the source via Perforce
You need to install Perforce from /usr/ports:
cd /usr/ports/devel/p4 && make install distclean
If you are using a csh derivate shell, which is the FreeBSD default, run:
rehash
Setup the perforce enviroment:
setenv P4PORT codes.zimbra.com:2666 setenv P4USER public setenv P4CLIENT public-view setenv P4PASSWD public1234
Fire up the workspace editor:
p4 client
which may look like this:
# A Perforce Client Specification. # # Client: The client name. # Update: The date this specification was last modified. # Access: The date this client was last used in any way. # Owner: The user who created this client. # Host: If set, restricts access to the named host. # Description: A short description of the client (optional). # Root: The base directory of the client workspace. # AltRoots: Up to two alternate client workspace roots. # Options: Client options: # [no]allwrite [no]clobber [no]compress # [un]locked [no]modtime [no]rmdir # SubmitOptions: # submitunchanged/submitunchanged+reopen # revertunchanged/revertunchanged+reopen # leaveunchanged/leaveunchanged+reopen # LineEnd: Text file line endings on client: local/unix/mac/win/share. # View: Lines to map depot files into the client workspace. # # Use 'p4 help client' to see more about client views and options. Client: public-view Update: 2008/04/08 04:45:37 Access: 2010/05/13 11:43:08 Owner: public Description: Created by admin. Root: /home/public/p4 AltRoots: /opt/zimbra-src/ /site/src/zimbra/p4 Options: noallwrite noclobber nocompress unlocked modtime normdir SubmitOptions: submitunchanged LineEnd: local View: //depot/zcs/... //public-view/...
and change Root: some_path to Root: /home/zimbrasrc.
Run the sync:
p4 sync -f //depot/zcs/HELIX-711/... cd /home/zimbrasrc
which should be now downloaded to /home/zimbrasrc/HELIX-711.
Getting the source from zimbra.imladris.sk
mkdir -p /home/zimbrasrc && \ cd /home/zimbrasrc && \ fetch http://zimbra.imladris.sk/download/src/HELIX-711-src.tgz && \ tar xzf HELIX-711-src.tgz
Initial pre-build steps
Let's check our system:
uname -a
FreeBSD zimbra-src-amd64.solko.sk 8.2-RELEASE-p2 FreeBSD 8.2-RELEASE-p2 #0: Wed Jun 8 02:07:09 CEST 2011 solko@zimbra-src-amd64.solko.sk:/usr/obj/usr/src/sys/GENERIC amd64
We love some optimizations:
cat /etc/make.conf
COPTFLAGS= -O2 -pipe CFLAGS= -O2 -fno-strict-aliasing -pipe
Preparing build enviroment via /usr/ports
I created simple "meta" ports which will take care of everything. Since I am a very very creative person I named those: mail/zimbra-rundeps and mail/zimbra-builddeps.
The first installs all dependencies needed to run HELIX-711 while the second installs all dependencies needed to build HELIX-711. For reasons vastly uknown the second requires the first one.
cd /usr/ports/mail fetch http://zimbra.imladris.sk/download/ports/usrports_zimbra-rundeps-7.1.1.tgz && \ tar xzf usrports_zimbra-rundeps-7.1.1.tgz && \ rm -f usrports_zimbra-rundeps-7.1.1.tgz fetch http://zimbra.imladris.sk/download/ports/usrports_zimbra-builddeps-7.1.1.tgz && \ tar xzf usrports_zimbra-builddeps-7.1.1.tgz && \ rm -f usrports_zimbra-builddeps-7.1.1.tgz cd /usr/ports/mail/zimbra-builddeps && make -DWITHOUT_X11 -DWITHOUT_XPM -DWITH_XS config-recursive install
followed by an optional:
make distclean
to completely clean the build mess including source files.
If you are able to use /usr/ports you should be able to figure out the configure options (not that it matters much, mostly unimportant stuff - just be sure NOT TO configure diablo-jdk16 for POLICY (as your build will be doomed to fail)). Be warned that HELIX-711 requires diablo-jdk16 to build/run and building diablo-jdk16 requires downloading some java stuff.
There are also those 117+ Perl modules..
If you are using a csh derivate shell, which is the FreeBSD default, run:
rehash
Preparing build enviroment via zimbra.imladris.sk
Since some people like to compile and others like to install-only I built all the necessary zimbra-builddeps packages.
cd /tmp && \ fetch http://zimbra.imladris.sk/download/packages/HELIX-711/FreeBSD-8/amd64/zimbra-builddeps-8_amd64-7.1.1.tgz && \ tar xzf zimbra-builddeps-8_amd64-7.1.1.tgz && \ cd zimbra-builddeps-8_amd64-7.1.1 && \ pkg_add zimbra-builddeps-7.1.1.tbz && cd /tmp && rm -rf zimbra-builddeps-8_amd64-7.1.1
You need to accept diablo-jdk16 license.
If you are using a csh derivate shell, which is the FreeBSD default, run:
rehash
Grats, you just saved yourself a lot of time.
Quick-hacks for a better day
Since Zimbra is a Linux lover by nature everything is /bin/bash but guess what.. we have /usr/local/bin/bash:
ln -s /usr/local/bin/bash /bin/bash
Since Zimbra uses gmake and since some ThirdParty (specifically snmp install script) does not honor ${MAKE} macro we have to replace make with gmake globally, otherwise some stuff just won't make (it) with weird errors:
cp -p /usr/bin/make /usr/bin/make.orig && cp /usr/local/bin/gmake /usr/bin/make
We need to compile with diablo-jdk16 so you should now get something like this:
java -version
java version "1.6.0_07" Diablo Java(TM) SE Runtime Environment (build 1.6.0_07-b02) Diablo Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode)
Patching HELIX-711 to comply with FreeBSD
Download the HELIX-711 FreeBSD patch and patch the source tree:
cd /home/zimbrasrc && \ fetch http://zimbra.imladris.sk/download/patches/HELIX-711.FreeBSD.patch && \ cd HELIX-711 && patch -p1 -s < ../HELIX-711.FreeBSD.patch
Remove unnecessary files:
find . -name "*.orig" -delete
Change modes of our new build/install scripts else the build will fail:
chmod 0755 ZimbraBuild/rpmconf/Spec/Scripts/FreeBSD/*
Rest is handled by libexec/zmfixperms after installation.
Putting diablo-jdk16 into ThirdPartyBuilds
Zimbra requires you to supply jdk16 so we are happy to oblige by using installed version of diablo-jdk16:
mkdir -p ThirdPartyBuilds/FreeBSD_amd64/java && cd ThirdPartyBuilds/FreeBSD_amd64/java && \ cp -pr /usr/local/diablo-jdk1.6.0 diablo-jdk1.6.0_07 &&\ tar zcf diablo-jdk1.6.0_07.tgz diablo-jdk1.6.0_07 && \ rm -rf diablo-jdk1.6.0_07 && cd ../../../
The destination tarball version must match with ZimbraBuild/defs/ThirdParty/FreeBSD_amd64.def!
Putting JCE files into ThirdPartyBuilds
Zimbra requires you to supply Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 6 so we are not so happy to oblige by downloading those from oracle to ThirdPartyBuilds/FreeBSD_amd64/java and unzipping the resulting jce_policy-6.zip:
mkdir -p ThirdPartyBuilds/FreeBSD_amd64/java && cd ThirdPartyBuilds/FreeBSD_amd64/java && \ unzip jce_policy-6.zip &&\ rm -f jce_policy-6.zip && \ cd ../../../
Building Zimbra Collaboration Suite: HELIX-711
First build yourself the native library and push it to the proper place:
cd ZimbraNative && make push && cd ../
Get junit package just in case:
cd ZimbraCommon/jars && \ fetch http://zimbra.imladris.sk/download/jars/junit-4.8.2.jar && \ cd ../../
Now (finally!) that's the part where real Zimbra developer's magic kicks in:
cd ZimbraBuild ./buildZCS.sh -t
Let's clean up after the build:
cp -p /usr/bin/make.orig /usr/bin/make && rm -f /usr/bin/make.orig
You should have a fresh build inside:
cd zcs-7.*
Installing Zimbra Collaboration Suite: HELIX-711 after a successful build
./install.sh
Further reading
--Solko 03:50, 13 June 2011 (PDT)