2005-12-18 00:33:16 +00:00
|
|
|
-------------------
|
|
|
|
H A - P r o x y
|
|
|
|
How to build it
|
|
|
|
-------------------
|
2008-05-25 08:32:50 +00:00
|
|
|
version 1.3.15
|
2005-12-18 00:33:16 +00:00
|
|
|
willy tarreau
|
2008-05-25 08:32:50 +00:00
|
|
|
2008/05/25
|
2005-12-18 00:33:16 +00:00
|
|
|
|
|
|
|
|
|
|
|
To build haproxy, you will need :
|
|
|
|
- GNU make. Neither Solaris nor OpenBSD's make work with this makefile.
|
2008-05-25 08:32:50 +00:00
|
|
|
However, specific Makefiles for BSD and OSX are provided.
|
|
|
|
- GCC between 2.91 and 4.3. Others may work, but not tested.
|
2005-12-18 00:33:16 +00:00
|
|
|
- GNU ld
|
|
|
|
|
|
|
|
Also, you might want to build with libpcre support, which will provide a very
|
|
|
|
efficient regex implementation and will also fix some badness on Solaris's one.
|
|
|
|
|
|
|
|
To build haproxy, you have to choose your target OS amongst the following ones
|
|
|
|
and assign it to the TARGET variable :
|
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
- linux22 for Linux 2.2
|
|
|
|
- linux24 for Linux 2.4 and above (default)
|
|
|
|
- linux24e for Linux 2.4 with support for a working epoll (> 0.21)
|
|
|
|
- linux26 for Linux 2.6 and above
|
|
|
|
- solaris for Solaris 8 or 10 (others untested)
|
|
|
|
- freebsd for FreeBSD 5 to 6.2 (others untested)
|
|
|
|
- openbsd for OpenBSD 3.1 to 3.7 (others untested)
|
2009-06-14 16:27:54 +00:00
|
|
|
- cygwin for Cygwin
|
2008-05-25 08:32:50 +00:00
|
|
|
- generic for any other OS.
|
|
|
|
- custom to manually adjust every setting
|
2005-12-18 00:33:16 +00:00
|
|
|
|
|
|
|
You may also choose your CPU to benefit from some optimizations. This is
|
|
|
|
particularly important on UltraSparc machines. For this, you can assign
|
|
|
|
one of the following choices to the CPU variable :
|
|
|
|
|
|
|
|
- i686 for intel PentiumPro, Pentium 2 and above, AMD Athlon
|
|
|
|
- i586 for intel Pentium, AMD K6, VIA C3.
|
|
|
|
- ultrasparc : Sun UltraSparc I/II/III/IV processor
|
|
|
|
- generic : any other processor or no specific optimization. (default)
|
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
Alternatively, you may just set the CPU_CFLAGS value to the optimal GCC options
|
|
|
|
for your platform.
|
|
|
|
|
2009-04-11 17:45:50 +00:00
|
|
|
You may want to build specific target binaries which do not match your native
|
|
|
|
compiler's target. This is particularly true on 64-bit systems when you want
|
|
|
|
to build a 32-bit binary. Use the ARCH variable for this purpose. Right now
|
|
|
|
it only knows about a few x86 variants (i386,i486,i586,i686,x86_64) and sets
|
|
|
|
-m32/-m64 as well as -march=<arch> accordingly.
|
|
|
|
|
2005-12-18 00:33:16 +00:00
|
|
|
If your system supports PCRE (Perl Compatible Regular Expressions), then you
|
|
|
|
really should build with libpcre which is between 2 and 10 times faster than
|
|
|
|
other libc implementations. Regex are used for header processing (deletion,
|
|
|
|
rewriting, allow, deny). The only inconvenient of libpcre is that it is not
|
|
|
|
yet widely spread, so if you build for other systems, you might get into
|
|
|
|
trouble if they don't have the dynamic library. In this situation, you should
|
|
|
|
statically link libpcre into haproxy so that it will not be necessary to
|
2008-05-25 08:32:50 +00:00
|
|
|
install it on target systems. Available build options for PCRE are :
|
2005-12-18 00:33:16 +00:00
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
- USE_PCRE=1 to use libpcre, in whatever form is available on your system
|
2005-12-18 00:33:16 +00:00
|
|
|
(shared or static)
|
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
- USE_STATIC_PCRE=1 to use a static version of libpcre even if the dynamic
|
|
|
|
one is available. This will enhance portability.
|
|
|
|
|
|
|
|
- with no option, use your OS libc's standard regex implemntation (default).
|
|
|
|
Warning! group references on Solaris seem broken. Use static-pcre whenever
|
|
|
|
possible.
|
2005-12-18 00:33:16 +00:00
|
|
|
|
|
|
|
By default, the DEBUG variable is set to '-g' to enable debug symbols. It is
|
|
|
|
not wise to disable it on uncommon systems, because it's often the only way to
|
|
|
|
get a complete core when you need one. Otherwise, you can set DEBUG to '-s' to
|
|
|
|
strip the binary.
|
|
|
|
|
|
|
|
For example, I use this to build for Solaris 8 :
|
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
$ make TARGET=solaris CPU=ultrasparc USE_STATIC_PCRE=1
|
2005-12-18 00:33:16 +00:00
|
|
|
|
2008-05-25 08:32:50 +00:00
|
|
|
And I build it this way on OpenBSD or FreeBSD :
|
2006-03-19 19:56:52 +00:00
|
|
|
|
|
|
|
$ make -f Makefile.bsd REGEX=pcre DEBUG= COPTS.generic="-Os -fomit-frame-pointer -mgnu"
|
|
|
|
|
2009-04-11 17:45:50 +00:00
|
|
|
In order to build a 32-bit binary on an x86_64 Linux system :
|
|
|
|
|
|
|
|
$ make TARGET=linux26 ARCH=i386
|
|
|
|
|
2005-12-18 00:33:16 +00:00
|
|
|
If you need to pass other defines, includes, libraries, etc... then please
|
|
|
|
check the Makefile to see which ones will be available in your case, and
|
2008-05-25 08:32:50 +00:00
|
|
|
use the USE_* variables in the GNU Makefile, or ADDINC, ADDLIB, and DEFINE
|
|
|
|
variables in the BSD makefiles.
|
2005-12-18 00:33:16 +00:00
|
|
|
|
2010-01-28 19:52:05 +00:00
|
|
|
AIX 5.3 is known to work with the generic target. However, for the binary to
|
|
|
|
also run on 5.2 or earlier, you need to build with DEFINE="-D_MSGQSUPPORT",
|
|
|
|
otherwise __fd_select() will be used while not being present in the libc.
|
|
|
|
|
2005-12-18 00:33:16 +00:00
|
|
|
-- end
|