If you're building MUNGE from source on AIX, you need to export the
OBJECT_MODE environment variable to your environment.  It should be set to
either "32" or "64" depending on whether you want code to be generated for
a 32-bit or 64-bit architecture.  If you are using gcc, you also need to
set CFLAGS to either "-maix32" or "-maix64".  Finally, you should set the
"--enable-arch" option as well:

  $ CFLAGS="-maix32" OBJECT_MODE=32 ./configure --enable-arch=32

  $ CFLAGS="-maix64" OBJECT_MODE=64 ./configure --enable-arch=64

In the configure script, AC_INIT is called before anything else and performs
some basic compiler checks.  The "-maix" gcc compiler flag must agree
with the OBJECT_MODE environment variable recognized by the AIX linker.
One alternative is to always set OBJECT_MODE=32.  The gcc compiler
will default to "-maix32" which allows the AC_INIT checks to succeed.
The "--enable-arch" option can then be used to control whether code is
generated for a 32-bit or 64-bit architecture.  For example:

  $ export OBJECT_MODE=32
  $ ./configure --enable-arch=64

This is the trick that is used in the RPM spec file.

--

MUNGE supports two different types of client authentication under AIX.
The getpeereid() method is supported by AIX 5.2 ML4 and later.  The configure
script tests for this when "checking for getpeereid".  The recvfd-mknod
file-descriptor-passing method is supported by earlier AIX versions.
The configure script tests for this when "checking for /dev/spx" and
"checking for struct strrecvfd".

The getpeereid() method is substantially faster; if your system supports that,
you can stop reading now.  On the other hand, the file-descriptor-passing
method on AIX is excruciatingly slow unless special steps are taken.
This is due to the fact that a unique STREAMS-based pipe must be created in
the filesystem for each client authentication attempt, and the journaling
of the jfs filesystem makes this quite slow.  To increase performance,
the authentication pipe needs to be created in a ramdisk.

The following steps create a 5MB ramdisk and mount it as "/tmp/munge".
A small ramdisk will do just fine.  You should then create two directories:
/tmp/munge/client (permissioned 1733) & /tmp/munge/server (permissioned 0711).
These directories can be named whatever you like, but these names will be used
in the following example.

  # mkramdisk 10000
  /dev/rramdisk0

  # mkfs -V jfs /dev/ramdisk0
  mkfs: destroy /dev/ramdisk0 (y)? y
  Device /dev/ramdisk0:
    Standard empty file system
    Size:           10000 512-byte (UBSIZE) blocks
    Initial Inodes: 1792

  # mkdir /tmp/munge

  # mount -V jfs -o nointegrity /dev/ramdisk0 /tmp/munge

  # chmod 0755 /tmp/munge

  # mkdir /tmp/munge/client
  # chmod 1733 /tmp/munge/client

  # mkdir /tmp/munge/server
  # chmod 0711 /tmp/munge/server

  # mount
    node       mounted        mounted over    vfs       date        options
  -------- ---------------  ---------------  ------ ------------ ---------------
           /dev/ramdisk0    /tmp/munge       jfs    Oct 01 10:01 rw,nointegrity

The MUNGE_AUTH_SERVER_DIR and MUNGE_AUTH_CLIENT_DIR defines in
src/libcommon/munge_defs.h need to be modified, and then the source
needs to be recompiled.

  #define MUNGE_AUTH_SERVER_DIR           "/tmp/munge/server"
  #define MUNGE_AUTH_CLIENT_DIR           "/tmp/munge/client"

Alternatively, you can override these settings with the munged
"--auth-server-dir" and "--auth-client-dir" command-line options.

  munged --auth-server-dir /tmp/munge/server \
         --auth-client-dir /tmp/munge/client

These options will be moved into the configuration file once one exists.
