Hi Daniel,

I gave this tar-ball a quick try and here is the outcome:

I built it on my AIX 5.3 build host and you have to have the following RPMs installed as prereqs for Ganglia to compile (you can get all those from my website http://www.perzl.org/aix):

Here are the versions I used:
apr-1.3.9 and apr-devel-1.3.9
libconfuse-2.6 and libconfuse-devel-2.6
expat-2.0.1 and expat-devel-2.0.1
rrdtool-1.2.30 and rrdtool-devel 1.2.30

Please keep in mind that these RPMs again have prereqs which I am not listing here.

Then I started the configure process as follows (using bash as shell):

CC="xlc_r -U_AIX43" ./configure --prefix=/var/tmp/gg --enable-shared --disable-static --with-gmetad --disable-python --sysconfdir=/etc/ganglia

which finished successfully. The compilation (just using "make") ran successfully until the gmond link step. The changed patch of BUG227 looks good to me, however now that "fabsf()" is required the link step fails as no "-lm" is specified for the gmond link step.

Just adding "-lm" to the link step (see below) did it:
/opt/freeware/bin/bash ../libtool --tag=CC --mode=link xlc_r -U_AIX43 -qlanglvl=extc99 -I../lib -I../include/ -I../libmetrics -D_LARGEFILE64_SOURCE -DSYSCONFDIR='"/etc/ganglia"' -qmaxmem=16384 -DSYSV -D_AIX -D_AIX32 -D_AIX41 -D_AIX43 -D_AIX51 -D_AIX52 -D_AIX53 -D_ALL_SOURCE -DFUNCPROTO=15 -O -I/opt/freeware/include -D_ALL_SOURCE -DAIX -DHAVE_PERFSTAT -Wl,-bexpfull -L/opt/freeware/lib -L/opt/freeware/lib -o gmond gmond.o cmdline.o g25_config.o core_metrics.o ../libmetrics/libmetrics.la ../lib/libganglia.la ../lib/libgetopthelper.a -ldl -lperfstat -lcfg -lodm -lnsl -lnsl -lpcre -lexpat -lconfuse -lapr-1 -lpthreads -lpthread -lm

The remaining compilation then runs without any errors until finished. So the GNU autotools guru need to figure out how to add an "-lm" to gmond/Makefile.am (please see the patch in a different content below).

Some more comments on the libmetrics/aix/metrics file:

Please note all patches are done on the Ganglia 3.1.2 version, so the line numbers might be slightly off for the 3.1.5 version.

The following patch is absolutely required to get it working on AIX 6.1:
***************
*** 814,822 ****
       */
      /*
       * AIX > 4.2 uses bos.mp or bos.up
       */
      getit = ODM_FIRST;
!     while ((rc = (int)odm_get_obj(my_cl, "name like bos.?p",
&productobj, getit)) != 0) {
          getit = ODM_NEXT;
          if (rc == -1) {
--- 834,843 ----
       */
      /*
       * AIX > 4.2 uses bos.mp or bos.up
+      * AIX >= 6.1 uses bos.mp64
       */
      getit = ODM_FIRST;
!     while ((rc = (int)odm_get_obj(my_cl, "name like bos.?p*",
&productobj, getit)) != 0) {
          getit = ODM_NEXT;
          if (rc == -1) {

The following patch is just cosmetics but nevertheless:
***************
*** 832,838 ****
          }
      }
      /*
!      * AIX < 4.2 uses bos.mp or bos.up
       */
      if (!found) {
          getit = ODM_FIRST;
--- 853,859 ----
          }
      }
      /*
!      * AIX < 4.2 uses bos.rte.mp or bos.rte.up
       */
      if (!found) {
          getit = ODM_FIRST;

Now the more serious issue with DSOs on AIX:

In the current gmond compilation setup DSOs unfortunately don't work:
ganglia-3.1.5.2236/gmond> ./gmond -m
Cannot load /var/tmp/gg/lib/ganglia/modcpu.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modcpu.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/moddisk.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/moddisk.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modload.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modload.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modmem.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modmem.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modnet.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modnet.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modproc.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modproc.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modsys.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modsys.so. 0509-026 System error: A file or directory in the path name does not exist. Cannot load /var/tmp/gg/lib/ganglia/modibmpower.so metric module: 0509-022 Cannot load module /var/tmp/gg/lib/ganglia/modibmpower.so. 0509-026 System error: A file or directory in the path name does not exist.
heartbeat       Last heartbeat (module core_metrics)
location        Location of the machine (module core_metrics)
gexec           gexec available (module core_metrics)

The following patch to gmond/Makefile.am is absolutely required to make DSOs work on AIX:
***************
*** 13,20 ****
  endif
  else
  GCFLAGS = -D_LARGEFILE64_SOURCE
! GLDADD =
! GLDFLAGS = -export-dynamic
  endif

  INCLUDES = @APR_INCLUDES@
--- 14,21 ----
  endif
  else
  GCFLAGS = -D_LARGEFILE64_SOURCE
! GLDADD = -lm
! GLDFLAGS = -Wl,-bexpfull
  endif

  INCLUDES = @APR_INCLUDES@

The reason behind is that "-export-dynamic" is then later expanded to the AIX linker option "-berok" (which allows a library to have unresolved symbols) but this is absolutely deadly - because you would have to let the linker know during the link step an import file of unknown symbols. To fix this on a general level for libtool is beyond my skills, therefore I always apply the following strategy:

   * Never use "-berok" for a linker flag but force all symbols to be
     resolved (via "-bernotok" linker flag)
   * Make sure all symbols are exported (via the "-Wl,-bexpfull" linker
     flag)

I also had to apply the following patch to libmetrics/aclocal.m4 (essentially removing any "-berok" occurrences):
*** libmetrics/aclocal.m4.ORIG  Fri Feb 13 17:04:11 2009
--- libmetrics/aclocal.m4       Wed Feb 18 23:18:38 2009
***************
*** 2958,2964 ****
      if test "$aix_use_runtimelinking" = yes; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an empty executable.
        _LT_AC_SYS_LIBPATH_AIX
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 2958,2964 ----
      if test "$aix_use_runtimelinking" = yes; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=''
# Determine the default libpath from the value encoded in an empty executable.
        _LT_AC_SYS_LIBPATH_AIX
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
***************
*** 2976,2982 ****
        # Warning - without using the other run time loading flags,
        # -berok will link without error, but may produce a broken library.
        _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
        # Exported symbols can be pulled into shared objects from archives
        _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
        _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
--- 2976,2982 ----
        # Warning - without using the other run time loading flags,
        # -berok will link without error, but may produce a broken library.
        _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=' '
        # Exported symbols can be pulled into shared objects from archives
        _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
        _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
***************
*** 5744,5750 ****
        if test "$aix_use_runtimelinking" = yes; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
# Determine the default libpath from the value encoded in an empty executable.
         _LT_AC_SYS_LIBPATH_AIX
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
--- 5744,5750 ----
        if test "$aix_use_runtimelinking" = yes; then
        # Warning - without using the other runtime loading flags (-brtl),
        # -berok will link without error, but may produce a broken library.
!       _LT_AC_TAGVAR(allow_undefined_flag, $1)=''
# Determine the default libpath from the value encoded in an empty executable.
         _LT_AC_SYS_LIBPATH_AIX
_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
***************
*** 5761,5767 ****
          # Warning - without using the other run time loading flags,
# -berok will link without error, but may produce a broken library.
          _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
!         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
# Exported symbols can be pulled into shared objects from archives
          _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
          _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
--- 5761,5767 ----
          # Warning - without using the other run time loading flags,
# -berok will link without error, but may produce a broken library.
          _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
!         _LT_AC_TAGVAR(allow_undefined_flag, $1)=' '
# Exported symbols can be pulled into shared objects from archives
          _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
          _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes

By removing the "allow_undefined_flag" AIX will run into an immediate compile error and not produce broken libraries where you run into problems only at runtime....

Hope that helps....

Regards,
Michael

On 01/15/2010 12:34 PM, Daniel Pocock wrote:


I've created branches/monitor-core-3.1-aix and applied the following:

BUG226: detect virtual IO server

BUG227: I've modified the patch to try and selectively set the linker flags for AIX and for fabsf on AIX < 5.2

I'd also like to test the effect the new autotools have on AIX

Therefore, I've created a tarball of the branch, bootstrapped on Debian 5. As I don't have an AIX box, is someone able to help test this and provide feedback?

It is at:

 http://www.pocock.com.au/ganglia/test/aix-branch

I can also bootstrap on other environments if necessary to provide something to compare with.


------------------------------------------------------------------------------
Throughout its 18-year history, RSA Conference consistently attracts the
world's best and brightest in the field, creating opportunities for Conference
attendees to learn about information security's most important issues through
interactions with peers, luminaries and emerging and established companies.
http://p.sf.net/sfu/rsaconf-dev2dev
_______________________________________________
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers

Reply via email to