Merge branch 'collectd-5.3'
authorFlorian Forster <octo@collectd.org>
Sun, 18 Aug 2013 10:14:39 +0000 (12:14 +0200)
committerFlorian Forster <octo@collectd.org>
Sun, 18 Aug 2013 10:14:39 +0000 (12:14 +0200)
Conflicts:
configure.in

ChangeLog
configure.in
contrib/redhat/collectd.spec
src/csv.c
src/exec.c
src/memcached.c
src/rrdcached.c
src/rrdtool.c
version-gen.sh

index 27f58e9..acbf7bb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2013-07-13, Version 5.3.1
+       * Documentation: Various fixes.
+       * Configuration: Fix error handling: Errors in included files were
+         ignored, causing configuration mistakes to go unnoticed.
+       * dns plugin: Don't abort when PCAP returns an error.
+       * modbus plugin: The reconnection strategy was improved, fixing a
+         segfault in the libmodbud library. Thanks to Stefan Nickl and
+         Fabien Wernli for their patches.
+       * mysql plugin: The notification about a newly running MySQL slave
+         thread has been fixed. Thanks to Joaquín Cuenca Abela for the patch.
+       * snmp plugin: A build issue has been fixed (C99 mixed declaration).
+         The end-of-tree check has been improved by Pierre-Yves Ritschard.
+       * threshold plugin: Handling of the "Interesting" configuration option
+         has been fixed. Thanks to Björn for the patch.
+       * write_riemann plugin: A memory leak has been fixed. Thanks to Dave
+         Cottlehuber for reporting it.
+
 2013-04-09, Version 5.3.0
        * collectd: The "Include" statements can now be limited to include
          only matching files in a directory. Thanks to Sebastian Harl for his
index 16bffba..c23df17 100644 (file)
@@ -5452,7 +5452,7 @@ Configuration:
     libvirt . . . . . . . $enable_libvirt
     load  . . . . . . . . $enable_load
     logfile . . . . . . . $enable_logfile
-    lpar... . . . . . . . $enable_lpar
+    lpar  . . . . . . . . $enable_lpar
     lvm . . . . . . . . . $enable_lvm
     madwifi . . . . . . . $enable_madwifi
     match_empty_counter . $enable_match_empty_counter
index 86f317f..4f70fd6 100644 (file)
@@ -1,6 +1,51 @@
+#
+# q: What is this ?
+# a: A specfile for building RPM packages of current collectd releases, for
+#    RHEL/CentOS versions 5 and 6. By default all the plugins which are
+#    buildable based on the libraries available in the distribution + the
+#    EPEL repository, will be built. Plugins depending on external libs will
+#    be packaged in separate RPMs.
+#
+# q: And how can I do that ?
+# a: By following these instructions, using mock:
+#
+# - install and configure mock (https://fedoraproject.org/wiki/Projects/Mock)
+#
+# - enable the EPEL repository (http://dl.fedoraproject.org/pub/epel/) in the
+#   configuration files for your target systems (/etc/mock/*.cfg).
+#
+# - copy this file in your ~/rpmbuild/SPECS/ directory
+#
+# - fetch the desired collectd release file from https://collectd.org/files/
+#   and save it in your ~/rpmbuild/SOURCES/ directory
+#
+# - build the SRPM first:
+#   mock -r centos-6-x86_64 --buildsrpm --spec ~/rpmbuild/SPECS/collectd.spec \
+#     --sources ~/rpmbuild/SOURCES/
+#
+# - then build the RPMs:
+#   mock -r centos-6-x86_64 --no-clean --rebuild \
+#     /var/lib/mock/centos-6-x86_64/result/collectd-X.Y.Z-NN.src.rpm
+#
+# - you can also optionally enable/disable plugins which are disabled/enabled
+#   by default:
+#   mock -r centos-6-x86_64 --no-clean --without=java --with=oracle --rebuild \
+#     /var/lib/mock/centos-6-x86_64/result/collectd-X.Y.Z-NN.src.rpm
+#
+
 %global _hardened_build 1
 
-# enabled plugins
+# plugins only buildable on RHEL6
+# (NB: %{elN} macro is not available on RHEL < 6)
+%{?el6:%global _has_libyajl 1}
+%{?el6:%global _has_recent_libpcap 1}
+%{?el6:%global _has_recent_sockios_h 1}
+%{?el6:%global _has_recent_libganglia 1}
+%{?el6:%global _has_working_libiptc 1}
+%{?el6:%global _has_ip_vs_h 1}
+%{?el6:%global _has_perl_extutils_embed 1}
+
+# plugins enabled by default
 %define with_aggregation 0%{!?_without_aggregation:1}
 %define with_amqp 0%{!?_without_amqp:1}
 %define with_apache 0%{!?_without_apache:1}
 %define with_cpufreq 0%{!?_without_cpufreq:1}
 %define with_csv 0%{!?_without_csv:1}
 %define with_curl 0%{!?_without_curl:1}
-%define with_curl_json 0%{!?_without_curl_json:1}
+%define with_curl_json 0%{!?_without_curl_json:0%{?_has_libyajl}}
 %define with_curl_xml 0%{!?_without_curl_xml:1}
 %define with_dbi 0%{!?_without_dbi:1}
 %define with_df 0%{!?_without_df:1}
 %define with_disk 0%{!?_without_disk:1}
-%define with_dns 0%{!?_without_dns:1}
+%define with_dns 0%{!?_without_dns:0%{?_has_recent_libpcap}}
 %define with_email 0%{!?_without_email:1}
 %define with_entropy 0%{!?_without_entropy:1}
-%define with_ethstat 0%{!?_without_ethstat:1}
+%define with_ethstat 0%{!?_without_ethstat:0%{?_has_recent_sockios_h}}
 %define with_exec 0%{!?_without_exec:1}
 %define with_filecount 0%{!?_without_filecount:1}
 %define with_fscache 0%{!?_without_fscache:1}
-%define with_gmond 0%{!?_without_gmond:1}
+%define with_gmond 0%{!?_without_gmond:0%{?_has_recent_libganglia}}
 %define with_hddtemp 0%{!?_without_hddtemp:1}
 %define with_interface 0%{!?_without_interface:1}
 %define with_ipmi 0%{!?_without_ipmi:1}
-%define with_iptables 0%{!?_without_iptables:1}
-%define with_ipvs 0%{!?_without_ipvs:1}
+%define with_iptables 0%{!?_without_iptables:0%{?_has_working_libiptc}}
+%define with_ipvs 0%{!?_without_ipvs:0%{?_has_ip_vs_h}}
 %define with_irq 0%{!?_without_irq:1}
 %define with_java 0%{!?_without_java:1}
 %define with_libvirt 0%{!?_without_libvirt:1}
 %define with_nut 0%{!?_without_nut:1}
 %define with_olsrd 0%{!?_without_olsrd:1}
 %define with_openvpn 0%{!?_without_openvpn:1}
-%define with_perl 0%{!?_without_perl:1}
+%define with_perl 0%{!?_without_perl:0%{?_has_perl_extutils_embed}}
 %define with_pinba 0%{!?_without_pinba:1}
 %define with_ping 0%{!?_without_ping:1}
 %define with_postgresql 0%{!?_without_postgresql:1}
 %define with_write_http 0%{!?_without_write_http:1}
 %define with_write_riemann 0%{!?_without_write_riemann:1}
 
-# disabled plugins
+# Plugins not built by default because of dependencies on libraries not
+# available in RHEL or EPEL:
+
+# plugin apple_sensors disabled, requires a Mac
 %define with_apple_sensors 0%{!?_without_apple_sensors:0}
+# plugin lpar disabled, requires AIX
 %define with_lpar 0%{!?_without_lpar:0}
+# plugin modbus disabled, requires libmodbus
 %define with_modbus 0%{!?_without_modbus:0}
+# plugin netapp disabled, requires libnetapp
 %define with_netapp 0%{!?_without_netapp:0}
+# plugin netlink disabled, requires libnetlink.h
 %define with_netlink 0%{!?_without_netlink:0}
+# plugin onewire disabled, requires libowfs
 %define with_onewire 0%{!?_without_onewire:0}
+# plugin oracle disabled, requires Oracle
 %define with_oracle 0%{!?_without_oracle:0}
+# plugin oracle disabled, requires BSD
 %define with_pf 0%{!?_without_pf:0}
+# plugin redis disabled, requires credis
 %define with_redis 0%{!?_without_redis:0}
+# plugin routeros disabled, requires librouteros
 %define with_routeros 0%{!?_without_routeros:0}
+# plugin rrdcached disabled, requires rrdtool >= 1.4
 %define with_rrdcached 0%{!?_without_rrdcached:0}
+# plugin tape disabled, requires libkstat
 %define with_tape 0%{!?_without_tape:0}
+# plugin tokyotyrant disabled, requires tcrdb.h
 %define with_tokyotyrant 0%{!?_without_tokyotyrant:0}
+# plugin write_mongodb disabled, requires libmongoc
 %define with_write_mongodb 0%{!?_without_write_mongodb:0}
+# plugin write_redis disabled, requires credis
 %define with_write_redis 0%{!?_without_write_redis:0}
+# plugin xmms disabled, requires xmms
 %define with_xmms 0%{!?_without_xmms:0}
+# plugin zfs_arc disabled, requires FreeBSD/Solaris
 %define with_zfs_arc 0%{!?_without_zfs_arc:0}
 
 Summary:       Statistics collection daemon for filling RRD files
 Name:          collectd
-Version:       5.3.0
+Version:       5.3.1
 Release:       1%{?dist}
 URL:           http://collectd.org
 Source:                http://collectd.org/files/%{name}-%{version}.tar.bz2
 License:       GPLv2
 Group:         System Environment/Daemons
 BuildRoot:     %{_tmppath}/%{name}-%{version}-root
-BuildRequires: libgcrypt-devel
+BuildRequires: libgcrypt-devel, kernel-headers
 Vendor:                collectd development team <collectd@verplant.org>
 
 Requires(post):                chkconfig
@@ -192,7 +256,7 @@ the configuration.
 Summary:       Curl_json plugin for collectd
 Group:         System Environment/Daemons
 Requires:      %{name}%{?_isa} = %{version}-%{release}
-Buildrequires: curl-devel, yajl-devel
+BuildRequires: curl-devel, yajl-devel
 %description curl_json
 The cURL-JSON plugin queries JavaScript Object Notation (JSON) data using the
 cURL library and parses it according to the user's configuration.
@@ -214,7 +278,7 @@ Markup Language (XML).
 Summary:       DBI plugin for collectd
 Group:         System Environment/Daemons
 Requires:      %{name}%{?_isa} = %{version}-%{release}
-Buildrequires: libdbi-devel
+BuildRequires: libdbi-devel
 %description dbi
 The DBI plugin uses libdbi, a database abstraction library, to execute SQL
 statements on a database and read back the result.
@@ -224,8 +288,8 @@ statements on a database and read back the result.
 %package dns
 Summary:       DNS plugin for collectd
 Group:         System Environment/Daemons
-Requires:      %{name}%{?_isa} = %{version}-%{release}
-Buildrequires: libpcap-devel
+Requires:      %{name}%{?_isa} = %{version}-%{release}, libpcap >= 1.0
+BuildRequires: libpcap-devel >= 1.0
 %description dns
 The DNS plugin has a similar functionality to dnstop: It uses libpcap to get a
 copy of all traffic from/to port UDP/53 (that's the DNS port), interprets the
@@ -345,7 +409,7 @@ This plugin gets data provided by nginx.
 Summary:       Notify_desktop plugin for collectd
 Group:         System Environment/Daemons
 Requires:      %{name}%{?_isa} = %{version}-%{release}
-BuildRequires: libnotify-devel
+BuildRequires: libnotify-devel, gtk2-devel
 %description notify_desktop
 The Notify Desktop plugin uses libnotify to display notifications to the user
 via the desktop notification specification, i. e. on an X display.
@@ -422,7 +486,11 @@ database.
 Summary:       Python plugin for collectd
 Group:         System Environment/Daemons
 Requires:      %{name}%{?_isa} = %{version}-%{release}
-BuildRequires: python-devel
+%if 0%{?rhel} >= 6
+BuildRequires: python-devel
+%else
+BuildRequires: python26-devel
+%endif
 %description python
 The Python plugin embeds a Python interpreter into collectd and exposes the
 application programming interface (API) to Python-scripts.
@@ -551,11 +619,13 @@ package.
 
 %package -n libcollectdclient
 Summary:       Collectd client library
+Group:         System Environment/Daemons
 %description -n libcollectdclient
 Collectd client library
 
 %package -n libcollectdclient-devel
 Summary:       Development files for libcollectdclient
+Group:         System Environment/Daemons
 Requires:      pkgconfig
 Requires:      libcollectdclient%{?_isa} = %{version}-%{release}
 %description -n libcollectdclient-devel
@@ -981,8 +1051,12 @@ Development files for libcollectdclient
 %endif
 
 %if %{with_python}
+%if 0%{?rhel} >= 6
 %define _with_python --enable-python
 %else
+%define _with_python --enable-python --with-python=%{_bindir}/python2.6
+%endif
+%else
 %define _with_python --disable-python
 %endif
 
@@ -1194,7 +1268,6 @@ Development files for libcollectdclient
        --disable-static \
        --without-included-ltdl \
        --enable-all-plugins=yes \
-       --enable-aggregation \
        --enable-match_empty_counter \
        --enable-match_hashed \
        --enable-match_regex \
@@ -1353,6 +1426,8 @@ rm -f %{buildroot}%{_mandir}/man5/collectd-java.5*
 %if ! %{with_perl}
 rm -f %{buildroot}%{_mandir}/man5/collectd-perl.5*
 rm -f %{buildroot}%{_mandir}/man3/Collectd::Unixsock.3pm*
+rm -fr perl-examples/
+rm -fr %{buildroot}/usr/lib/perl5/
 %endif
 
 %if ! %{with_python}
@@ -1583,21 +1658,6 @@ fi
 %{_libdir}/%{name}/write_graphite.so
 %endif
 
-# All plugins not built by default because of dependencies on libraries not
-# available in RHEL or EPEL:
-# plugin modbus disabled, requires libmodbus
-# plugin netlink disabled, requires libnetlink.h
-# plugin numa disabled, requires libnetapp
-# plugin onewire disabled, requires libowfs
-# plugin oracle disabled, requires Oracle
-# plugin redis disabled, requires credis
-# plugin routeros disabled, requires librouteros
-# plugin rrdcached disabled, requires rrdtool >= 1.4
-# plugin tokyotyrant disabled, requires tcrdb.h
-# plugin write_mongodb disabled, requires libmongoc
-# plugin write_redis disabled, requires credis
-# plugin xmms disabled, requires xmms
-
 
 %files -n libcollectdclient-devel
 %{_includedir}/collectd/client.h
@@ -1682,8 +1742,8 @@ fi
 
 %if %{with_java}
 %files java
-%{_datarootdir}/collectd/java/collectd-api.jar
-%{_datarootdir}/collectd/java/generic-jmx.jar
+%{_prefix}/share/collectd/java/collectd-api.jar
+%{_prefix}/share/collectd/java/generic-jmx.jar
 %{_libdir}/%{name}/java.so
 %{_mandir}/man5/collectd-java.5*
 %endif
@@ -1745,7 +1805,7 @@ fi
 
 %if %{with_postgresql}
 %files postgresql
-%{_datarootdir}/collectd/postgresql_default.conf
+%{_prefix}/share/collectd/postgresql_default.conf
 %{_libdir}/%{name}/postgresql.so
 %endif
 
@@ -1813,6 +1873,16 @@ fi
 %doc contrib/
 
 %changelog
+* Tue Aug 06 2013 Marc Fournier <marc.fournier@camptocamp.com> 5.3.1-1
+- New upstream version
+- Added RHEL5 support:
+  * conditionally disable plugins not building on this platform
+  * add/specify some build dependencies and options
+  * replace some RPM macros not available on this platform
+- Removed duplicate --enable-aggregation
+- Added some comments & usage examples
+- Replaced a couple of "Buildrequires" by "BuildRequires"
+
 * Wed Apr 10 2013 Marc Fournier <marc.fournier@camptocamp.com> 5.3.0-1
 - New upstream version
 - Enabled write_riemann plugin
index afb4f83..958e34b 100644 (file)
--- a/src/csv.c
+++ b/src/csv.c
@@ -126,12 +126,25 @@ static int value_list_to_filename (char *buffer, size_t buffer_size,
 {
        int status;
 
-       char *ptr;
-       size_t ptr_size;
+       char *ptr = buffer;
+       size_t ptr_size = buffer_size;
        time_t now;
        struct tm struct_tm;
 
-       status = FORMAT_VL (buffer, buffer_size, vl);
+       if (datadir != NULL)
+       {
+               size_t len = strlen (datadir) + 1;
+
+               if (len >= ptr_size)
+                       return (ENOBUFS);
+
+               memcpy (ptr, datadir, len);
+               ptr[len-1] = '/';
+               ptr_size -= len;
+               ptr += len;
+       }
+
+       status = FORMAT_VL (ptr, ptr_size, vl);
        if (status != 0)
                return (status);
 
@@ -140,8 +153,8 @@ static int value_list_to_filename (char *buffer, size_t buffer_size,
        if (use_stdio)
                return (0);
 
-       ptr_size = buffer_size - strlen (buffer);
-       ptr = buffer + strlen (buffer);
+       ptr_size -= strlen (ptr);
+       ptr +=  strlen (ptr);
 
        /* "-2013-07-12" => 11 bytes */
        if (ptr_size < 12)
@@ -202,7 +215,10 @@ static int csv_config (const char *key, const char *value)
        if (strcasecmp ("DataDir", key) == 0)
        {
                if (datadir != NULL)
+               {
                        free (datadir);
+                       datadir = NULL;
+               }
                if (strcasecmp ("stdout", value) == 0)
                {
                        use_stdio = 1;
index fbd9c26..cfd82a3 100644 (file)
@@ -287,71 +287,11 @@ static void set_environment (void) /* {{{ */
 } /* }}} void set_environment */
 
 __attribute__((noreturn))
-static void exec_child (program_list_t *pl) /* {{{ */
+static void exec_child (program_list_t *pl, int uid, int gid, int egid) /* {{{ */
 {
   int status;
-  int uid;
-  int gid;
-  int egid;
-
-  struct passwd *sp_ptr;
-  struct passwd sp;
-  char nambuf[2048];
   char errbuf[1024];
 
-  sp_ptr = NULL;
-  status = getpwnam_r (pl->user, &sp, nambuf, sizeof (nambuf), &sp_ptr);
-  if (status != 0)
-  {
-    ERROR ("exec plugin: Failed to get user information for user ``%s'': %s",
-        pl->user, sstrerror (errno, errbuf, sizeof (errbuf)));
-    exit (-1);
-  }
-  if (sp_ptr == NULL)
-  {
-    ERROR ("exec plugin: No such user: `%s'", pl->user);
-    exit (-1);
-  }
-
-  uid = sp.pw_uid;
-  gid = sp.pw_gid;
-  if (uid == 0)
-  {
-    ERROR ("exec plugin: Cowardly refusing to exec program as root.");
-    exit (-1);
-  }
-
-  /* The group configured in the configfile is set as effective group, because
-   * this way the forked process can (re-)gain the user's primary group. */
-  egid = -1;
-  if (NULL != pl->group)
-  {
-    if ('\0' != *pl->group) {
-      struct group *gr_ptr = NULL;
-      struct group gr;
-
-      status = getgrnam_r (pl->group, &gr, nambuf, sizeof (nambuf), &gr_ptr);
-      if (0 != status)
-      {
-        ERROR ("exec plugin: Failed to get group information "
-            "for group ``%s'': %s", pl->group,
-            sstrerror (errno, errbuf, sizeof (errbuf)));
-        exit (-1);
-      }
-      if (NULL == gr_ptr)
-      {
-        ERROR ("exec plugin: No such group: `%s'", pl->group);
-        exit (-1);
-      }
-
-      egid = gr.gr_gid;
-    }
-    else
-    {
-      egid = gid;
-    }
-  } /* if (pl->group == NULL) */
-
 #if HAVE_SETGROUPS
   if (getuid () == 0)
   {
@@ -429,6 +369,14 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err)
   int status;
   int pid;
 
+  int uid;
+  int gid;
+  int egid;
+
+  struct passwd *sp_ptr;
+  struct passwd sp;
+  char nambuf[2048];
+
   if (pl->pid != 0)
     return (-1);
 
@@ -456,6 +404,59 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err)
     return (-1);
   }
 
+  sp_ptr = NULL;
+  status = getpwnam_r (pl->user, &sp, nambuf, sizeof (nambuf), &sp_ptr);
+  if (status != 0)
+  {
+    ERROR ("exec plugin: Failed to get user information for user ``%s'': %s",
+        pl->user, sstrerror (errno, errbuf, sizeof (errbuf)));
+    return (-1);
+  }
+  if (sp_ptr == NULL)
+  {
+    ERROR ("exec plugin: No such user: `%s'", pl->user);
+    return (-1);
+  }
+
+  uid = sp.pw_uid;
+  gid = sp.pw_gid;
+  if (uid == 0)
+  {
+    ERROR ("exec plugin: Cowardly refusing to exec program as root.");
+    return (-1);
+  }
+
+  /* The group configured in the configfile is set as effective group, because
+   * this way the forked process can (re-)gain the user's primary group. */
+  egid = -1;
+  if (NULL != pl->group)
+  {
+    if ('\0' != *pl->group) {
+      struct group *gr_ptr = NULL;
+      struct group gr;
+
+      status = getgrnam_r (pl->group, &gr, nambuf, sizeof (nambuf), &gr_ptr);
+      if (0 != status)
+      {
+        ERROR ("exec plugin: Failed to get group information "
+            "for group ``%s'': %s", pl->group,
+            sstrerror (errno, errbuf, sizeof (errbuf)));
+        return (-1);
+      }
+      if (NULL == gr_ptr)
+      {
+        ERROR ("exec plugin: No such group: `%s'", pl->group);
+        return (-1);
+      }
+
+      egid = gr.gr_gid;
+    }
+    else
+    {
+      egid = gid;
+    }
+  } /* if (pl->group == NULL) */
+
   pid = fork ();
   if (pid < 0)
   {
@@ -505,7 +506,7 @@ static int fork_child (program_list_t *pl, int *fd_in, int *fd_out, int *fd_err)
     /* Unblock all signals */
     reset_signal_mask ();
 
-    exec_child (pl);
+    exec_child (pl, uid, gid, egid);
     /* does not return */
   }
 
index 535ea84..d739203 100644 (file)
@@ -84,6 +84,15 @@ static int memcached_connect_unix (memcached_t *st)
     return (-1);
   }
 
+  /* connect to the memcached daemon */
+  int status = connect (fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
+  if (status != 0)
+  {
+      shutdown (fd, SHUT_RDWR);
+      close (fd);
+      fd = -1;
+  }
+
   return (fd);
 } /* int memcached_connect_unix */
 
index e5e11d4..e77be2d 100644 (file)
@@ -121,6 +121,21 @@ static int value_list_to_filename (char *buffer, size_t buffer_size,
   int status;
   size_t len;
 
+  if (datadir != NULL)
+  {
+    size_t datadir_len = strlen (datadir) + 1;
+
+    if (datadir_len >= buffer_size)
+      return (ENOMEM);
+
+    sstrncpy (buffer, datadir, buffer_size);
+    buffer[datadir_len - 1] = '/';
+    buffer[datadir_len] = 0;
+
+    buffer += datadir_len;
+    buffer_size -= datadir_len;
+  }
+
   status = FORMAT_VL (buffer, buffer_size, vl);
   if (status != 0)
     return (status);
index 2f28329..c795e26 100644 (file)
@@ -290,6 +290,21 @@ static int value_list_to_filename (char *buffer, size_t buffer_size,
        int status;
        size_t len;
 
+       if (datadir != NULL)
+       {
+               size_t datadir_len = strlen (datadir) + 1;
+
+               if (datadir_len >= buffer_size)
+                       return (ENOMEM);
+
+               sstrncpy (buffer, datadir, buffer_size);
+               buffer[datadir_len - 1] = '/';
+               buffer[datadir_len] = 0;
+
+               buffer += datadir_len;
+               buffer_size -= datadir_len;
+       }
+
        status = FORMAT_VL (buffer, buffer_size, vl);
        if (status != 0)
                return (status);
index 4be9a49..1ac1bc1 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env bash
 
-DEFAULT_VERSION="5.3.0.git"
+DEFAULT_VERSION="5.3.1.git"
 
 VERSION="`git describe 2> /dev/null | sed -e 's/^collectd-//'`"