From eaa8c5e29e04ecda2e4f759d00aa931bb9e85bd4 Mon Sep 17 00:00:00 2001 From: brooks Date: Fri, 4 Mar 2005 21:14:06 +0000 Subject: Correct a number of issues with the previous commit: - Patch a number of bugs in the metric code that caused gmond to be unstable, particularly on 4.x. These will be in the next ganglia release. - Use CFLAGS instead of CPPFLAGS to pass the include arguments. This appears to fix the bug where an installed, obsolete ganglia.h would break the build. - Do a better job of respecting CFLAGS and LDFLAGS. - Drop USE_LIBTOOL_VER. It appears to break sparc64. - Fix a warning caused by an @unexec in the plist when gmetad.conf has been modified. The port revision has been bumped. All users of 3.0.0 should upgrade. --- sysutils/ganglia-monitor-core/Makefile | 15 +- .../patch-srclib_libmetrics_freebsd_metrics.c | 184 +++++++++++++++++++++ sysutils/ganglia-monitor-core/pkg-plist | 3 +- 3 files changed, 194 insertions(+), 8 deletions(-) create mode 100644 sysutils/ganglia-monitor-core/files/patch-srclib_libmetrics_freebsd_metrics.c (limited to 'sysutils') diff --git a/sysutils/ganglia-monitor-core/Makefile b/sysutils/ganglia-monitor-core/Makefile index bd5c5c924894..294b7103417a 100644 --- a/sysutils/ganglia-monitor-core/Makefile +++ b/sysutils/ganglia-monitor-core/Makefile @@ -5,32 +5,33 @@ # $FreeBSD$ # -PORTNAME= ganglia-monitor-core +PORTNAME= monitor-core PORTVERSION= 3.0.0 +PORTREVISION= 1 CATEGORIES= sysutils net parallel MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} MASTER_SITE_SUBDIR= ganglia +PKGNAMEPREFIX= ganglia- DISTNAME= ganglia-${PORTVERSION} MAINTAINER= brooks@FreeBSD.org COMMENT= Ganglia cluster monitor, monitoring daemon -PKGINSTALL= ${WRKSRC}/pkg-install - .if defined (WITH_GMETAD) LIB_DEPENDS= rrd.0:${PORTSDIR}/net/rrdtool .endif +PKGINSTALL= ${WRKSRC}/pkg-install + OPTIONS+= GMETAD "include gmetad" on GNU_CONFIGURE= yes -CONFIGURE_ENV= CPPFLAGS="${CPPFLAGS}" LDFLAGS="${LDFLAGS}" -CPPFLAGS= -I${LOCALBASE}/include ${PTHREAD_CFLAGS} -LDFLAGS= -L${LOCALBASE}/lib +CONFIGURE_ENV= CFLAGS="${_CFLAGS}" LDFLAGS="${_LDFLAGS}" +_CFLAGS= ${CFLAGS} -I${LOCALBASE}/include ${PTHREAD_CFLAGS} +_LDFLAGS= ${LDFLAGS} -L${LOCALBASE}/lib USE_REINPLACE= yes USE_BZIP2= yes -USE_LIBTOOL_VER= 15 USE_RC_SUBR= ganglia.sh SUB_FILES= pkg-install diff --git a/sysutils/ganglia-monitor-core/files/patch-srclib_libmetrics_freebsd_metrics.c b/sysutils/ganglia-monitor-core/files/patch-srclib_libmetrics_freebsd_metrics.c new file mode 100644 index 000000000000..3950960809f0 --- /dev/null +++ b/sysutils/ganglia-monitor-core/files/patch-srclib_libmetrics_freebsd_metrics.c @@ -0,0 +1,184 @@ + +$FreeBSD$ + +--- srclib/libmetrics/freebsd/metrics.c.orig ++++ srclib/libmetrics/freebsd/metrics.c +@@ -51,6 +51,8 @@ + #define UINT64_MAX ULLONG_MAX + #endif + ++#define VFCF_NONLOCAL (VFCF_NETWORK|VFCF_SYNTHETIC|VFCF_LOOPBACK) ++ + #define timertod(tvp) \ + ((double)(tvp)->tv_sec + (double)(tvp)->tv_usec/(1000*1000)) + +@@ -243,49 +245,40 @@ + g_val_t + machine_type_func ( void ) + { +- g_val_t val; +- char machine_type[MAX_G_STRING_SIZE]; +- size_t len = MAX_G_STRING_SIZE; +- if (sysctlbyname("hw.machine", &machine_type, &len, NULL, 0) == -1 || !len) +- strncpy( val.str, "x86", MAX_G_STRING_SIZE ); ++ g_val_t val; ++ size_t len = sizeof(val.str); + +- strncpy( val.str, machine_type, MAX_G_STRING_SIZE ); +- return val; ++ if (sysctlbyname("hw.machine", val.str, &len, NULL, 0) == -1 || ++ (len == 0)) ++ strlcpy(val.str, "unknown", sizeof(val.str)); ++ ++ return val; + } + + g_val_t + os_name_func ( void ) + { +- g_val_t val; +- char osname[MAX_G_STRING_SIZE]; +- size_t len = MAX_G_STRING_SIZE; +- if (sysctlbyname("kern.ostype", &osname, &len, NULL, 0) == -1 || !len) +- strncpy( val.str, "FreeBSD", MAX_G_STRING_SIZE ); ++ g_val_t val; ++ size_t len = sizeof(val.str); + +- strncpy( val.str, osname, MAX_G_STRING_SIZE ); +- +- return val; ++ if (sysctlbyname("kern.ostype", val.str, &len, NULL, 0) == -1 || ++ (len == 0)) ++ strlcpy(val.str, "FreeBSD (unknown)", sizeof(val.str)); ++ ++ return val; + } + + g_val_t + os_release_func ( void ) + { +- g_val_t val; +- int mib[2]; +- size_t len; +- char *prefix, buf[1024]; +- +- prefix = ""; +- +- mib[0] = CTL_KERN; +- mib[1] = KERN_OSRELEASE; +- len = sizeof(buf); +- if (sysctl(mib, 2, &buf, &len, NULL, 0) == -1) +- strncpy( val.str, "Unknown", MAX_G_STRING_SIZE ); ++ g_val_t val; ++ size_t len = sizeof(val.str); + +- strncpy( val.str, buf, MAX_G_STRING_SIZE ); ++ if (sysctlbyname("kern.osrelease", val.str, &len, NULL, 0) == -1 || ++ (len == 0)) ++ strlcpy(val.str, "unknown", sizeof(val.str)); + +- return val; ++ return val; + } + + /* Get the CPU state given by index, from kern.cp_time +@@ -910,8 +903,9 @@ + static char * + makenetvfslist(void) + { +- char *str = NULL, *strptr, **listptr = NULL; +- int cnt, i; ++ char *str = NULL, *strptr, **listptr = NULL; ++ size_t slen; ++ int cnt, i; + + #if __FreeBSD_version > 500000 + struct xvfsconf *xvfsp, *keep_xvfsp = NULL; +@@ -938,20 +932,22 @@ + goto done; + } + +- for (cnt = 0, i = 0; i < maxvfsconf; i++) { +- if (xvfsp->vfc_flags & (VFCF_NETWORK|VFCF_SYNTHETIC|VFCF_LOOPBACK)) { +- listptr[cnt++] = strdup(xvfsp->vfc_name); +- if (listptr[cnt-1] == NULL) { +- warnx("malloc failed"); +- goto done; +- } ++ for (cnt = 0; cnt < maxvfsconf; xvfsp++) { ++ if (xvfsp->vfc_flags & VFCF_NONLOCAL) ++ continue; ++ ++ listptr[cnt] = strdup(xvfsp->vfc_name); ++ if (listptr[cnt] == NULL) { ++ warnx("malloc failed"); ++ goto done; + } +- xvfsp++; ++ cnt++; + } + #else + int mib[3], maxvfsconf; + size_t miblen; + struct ovfsconf *ptr; ++ int fd; + + mib[0] = CTL_VFS; mib[1] = VFS_GENERIC; mib[2] = VFS_MAXTYPENUM; + miblen=sizeof(maxvfsconf); +@@ -966,31 +962,45 @@ + goto done; + } + +- for (ptr = getvfsent(); ptr; ptr = getvfsent()) +- if (ptr->vfc_flags & (VFCF_NETWORK|VFCF_SYNTHETIC|VFCF_LOOPBACK)) { +- listptr[cnt++] = strdup(ptr->vfc_name); +- if (listptr[cnt-1] == NULL) { +- warnx("malloc failed"); +- goto done; +- } ++ cnt = 0; ++ while ((ptr = getvfsent()) != NULL && cnt < maxvfsconf) { ++ if (ptr->vfc_flags & VFCF_NONLOCAL) ++ continue; ++ ++ listptr[cnt] = strdup(ptr->vfc_name); ++ if (listptr[cnt] == NULL) { ++ warnx("malloc failed"); ++ goto done; + } ++ cnt++; ++ } + #endif + + if (cnt == 0) + goto done; + +- if ((str = malloc(sizeof(char) * (32 * cnt + cnt + 2))) == NULL) { ++ /* ++ * Count up the string lengths, we need a extra byte to hold ++ * the between entries ',' or the NUL at the end. ++ */ ++ for (i = 0; i < cnt; i++) ++ slen = strlen(listptr[i]) + 1; ++ /* Add 2 for initial "no". */ ++ slen += 2; ++ ++ if ((str = malloc(slen)) == NULL) { + warnx("malloc failed"); + goto done; + } + +- *str = 'n'; *(str + 1) = 'o'; ++ str[0] = 'n'; ++ str[1] = 'o'; + for (i = 0, strptr = str + 2; i < cnt; i++, strptr++) { +- strncpy(strptr, listptr[i], 32); ++ strcpy(strptr, listptr[i]); + strptr += strlen(listptr[i]); + *strptr = ','; + } +- *(--strptr) = '\0'; ++ *strptr = '\0'; + + done: + #if __FreeBSD_version > 500000 diff --git a/sysutils/ganglia-monitor-core/pkg-plist b/sysutils/ganglia-monitor-core/pkg-plist index 9f0667cc0e2b..98ad3d376c9e 100644 --- a/sysutils/ganglia-monitor-core/pkg-plist +++ b/sysutils/ganglia-monitor-core/pkg-plist @@ -4,12 +4,13 @@ bin/gstat bin/gmetric @unexec if cmp -s %D/etc/gmond.conf %D/etc/gmond.conf.sample; then rm -f %D/etc/gmond.conf; fi etc/gmond.conf.sample -%%GMETAD%%@unexec cmp -s %D/etc/gmetad.conf %D/etc/gmetad.conf.sample && rm -f %D/etc/gmetad.conf +%%GMETAD%%@unexec if cmp -s %D/etc/gmetad.conf %D/etc/gmetad.conf.sample; then rm -f %D/etc/gmetad.conf; fi %%GMETAD%%etc/gmetad.conf.sample include/ganglia.h lib/libganglia-3.0.0.so.0 lib/libganglia-3.0.0.so lib/libganglia.so +lib/libganglia.la lib/libganglia.a %%GMETAD%%sbin/gmetad sbin/gmond -- cgit