INSTALLing this way and that

Marilyn Davis <[email protected]>
Newsgroups gmane.mail.exim.spamassassin
Message-ID <Pine.LNX.4.10.10307011320250.9999-100000@rosa>
OK!  I did the build method #2 and made a little coding change and it
works and it *is* a great way to modify quickly and easily.

I have a few suggestions for the INSTALL document:

> CONFIGURING SPAMASSASSIN
> ------------------------
> For all this to work correctly, your global spamassassin config should have:
> 
> # Put report in the headers
> report_header                   1

report_header causes a complaint if you run spamd -D (which keeps
spamd in the forground and outputs debug messages).  It doesn't hurt
anything but doesn't do anything either -- as far as I can tell.

> 
> BUILDING
> --------
> The code can be compiled in two ways:
> 
> 1) Unpack exim 4.11 or better, and overwrite src/local_scan.c with 

sa-exim.c.

Edit your src/local_scan.c, which is now a copy of sa-exim.c:

#define SPAMASSASSIN_CONF "path/to/your/config-file-for-sa-exim"

Rebuild exim, and you're done.

However, if you ever want to modify or update the local_scan function,
you will be glad you instead built a dynamically loaded library for
your local_scan so you don't have to keep compiling exim.  Build method
#2 tells you how.

2) In the directory where you run make for exim, do this:

patch -p1 < path-to-sa-exim-localscan_dlopen.patch-in-this-directory

This patches exim's src/EDITME, amongst other things.

Now fix up the patched src/EDITME to be your Local/Makefile for exim,
making all the modifications you need for exim.

Rebuild exim.

In this sa-exim directory, fix up sa-exim's Makefile so that EXIM_SRC
points to exim's src directory; so that SACONF points to your
configuration file for sa-exim; and so that SPAMC points to your spamc
executable.

Run make here to build your sa-exim library.

Copy the resulting sa-exim-x.x.so file someplace convenient, maybe
/usr/lib/exim4/local_scan/sa-exim-x.x.so

And in your exim configuration file, make local_scan_path point
to your copied sa-exim-x.x.so, for example:

local_scan_path = /usr/lib/exim4/local_scan/sa-exim-x.x.so

kill SIGHUP your exim pid and you're set.

When you modify your local_scan function (in sa-exim.c), just run make
here and copy the sa-exim-x.x.so to your local_scan_path.  And that is
all, you are running your new code.  You don't even need to SIGHUP
your exim daemon.

-----

Hope this helps.

Thank you again.

Marilyn




>    sa-exim-x.y.c. Rebuild exim, and you're done.
>    Note that if you do this, you are responsible for modifying variables
>    in sa-exim.c that would normally have been modified by the Makefile.
> 
> 2) The better solution is to patch exim with localscan_dlopen.patch originally
>    from David Woodhouse (provided in this archive), and rebuild exim.
>    After that you can edit EXIM_SRC in the Makefile and build sa-exim-x.y.so
>    I have however modified the build environment so that you can now build
>    sa-exim without having the exim sources. 
> 
>    You can look in eximinc/version to see which source I included. While this
>    should work for the forseable future, the exim local_scan API might change
>    one day and not building against the current exim sources could cause issues
>    (hopefully, at worst it will prevent sa-exim from using better functions in
>    newer versions of the local_scan API).
>    To be really safe, I modified the localscan_dlopen patch to include a
>    minor and major version number for the API. Philip has agreed to including
>    the piece of the patch that says which version of the API exim is using,
>    so it will be obvious in the future whether exim become potentially
>    incompatible with an older version of sa-exim. Note that when Philip adds
>    this small portion of the patch, you will have a resulting conflict if
>    you try to apply it again. This is obviously normal, just remove it :-)
> 
>    Once you're done building, you can copy sa-exim-x.y.so and optionally the
>    dummy/test accept.so in /usr/lib/exim4/local_scan/, and add this to your
>    exim4.conf:
>    #local_scan_path = /usr/lib/exim4/local_scan/accept.so
>    local_scan_path = /usr/lib/exim4/local_scan/sa-exim.so
> 
>    If you are a package builder, note too that you don't actually have
>    to edit the values in the Makefile, you can override them as such:
>    make SACONF=/etc/mail/sa-exim.conf LDFLAGS="-shared -fPIC"
> 
> 
> The following is mostly obsolete, but left here for info purposes
> -----------------------------------------------------------------
> I would also recommend to edit exim/src/config.h.defaults as such:
> #define STRING_SPRINTF_BUFFER_SIZE 32768
> The default value is a bit too small for some of the strings that we need to
> expand from SA.
> That said, I found out that exim then complaints that the headers
> it tries to add are too big even after I set "uschar buffer[32768];" in
> src/header.c.
> As a result, I haven't quite found out how to deal with more than 8KB worth
> of SpamAssassin headers, but it may not be a huge deal, 8KB headers are too
> long anyway. 
> I asked the SA guys not to output such huge headers and I wrote a patch
> to disable one of the "features" that outputs such huge headers.
> See: http://bugzilla.spamassassin.org/showattachment.cgi?attach_id=195
> This is included and turned on by default in Spamassassin 2.40 and later.
> 
> 
> INSTALL
> -------
> Copy spamassassin.conf to /etc/exim4 (or whatever you set SACONF to),
> and make sure to read it and edit the values to suit your environment.
> So that you don't make any mistakes, SAEximRunCond is turned off by default.
> This should force you to scan the docs before potentially shooting yourself
> in the foot :)
> 
> See README for options
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.