app-admin/collectd: Use the Java eclasses wrt but #558310
authorJames Le Cuirot <chewi@gentoo.org>
Thu, 3 Sep 2015 08:57:21 +0000 (09:57 +0100)
committerJames Le Cuirot <chewi@gentoo.org>
Thu, 3 Sep 2015 08:57:21 +0000 (09:57 +0100)
Java team needs to remove java-config-wrapper, which this erroneously
depends on. The existing ebuild does not make use of the Java
eclasses, which can lead to problems. I have:

 * Made use of java-pkg-opt-2.
 * Added a DEPEND on virtual/jdk.
 * Used sed against the Java Makefile.am to set proper javac flags.
 * Used the eclasses to properly set JAVA_HOME.
 * Registered the installed jars so that Gentoo metadata is created.

Package-Manager: portage-2.2.20.1

app-admin/collectd/collectd-5.4.1-r2.ebuild [new file with mode: 0644]

diff --git a/app-admin/collectd/collectd-5.4.1-r2.ebuild b/app-admin/collectd/collectd-5.4.1-r2.ebuild
new file mode 100644 (file)
index 0000000..5b6a955
--- /dev/null
@@ -0,0 +1,388 @@
+# Copyright 1999-2015 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+EAPI="5"
+
+GENTOO_DEPEND_ON_PERL="no"
+JAVA_PKG_OPT_USE="collectd_plugins_java"
+# XXX: 5.4.1-r0 stated 2* but it builds fine against 3.4
+PYTHON_COMPAT=( python2_7 )
+
+inherit autotools base eutils java-pkg-opt-2 linux-info multilib perl-app python-single-r1 systemd user
+
+DESCRIPTION="A a daemon which collects system statistic and provides mechanisms to store the values"
+
+HOMEPAGE="http://collectd.org"
+SRC_URI="${HOMEPAGE}/files/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~x86"
+IUSE="contrib debug kernel_linux kernel_FreeBSD kernel_Darwin perl selinux static-libs"
+
+# The plugin lists have to follow here since they extend IUSE
+
+# Plugins that to my knowledge cannot be supported (eg. dependencies not in gentoo)
+COLLECTD_IMPOSSIBLE_PLUGINS="aquaero mic netapp pinba sigrok xmms"
+
+# Plugins that still need some work
+COLLECTD_UNTESTED_PLUGINS="amqp apple_sensors genericjmx ipvs lpar modbus redis
+       tape write_redis zfs_arc"
+
+# Plugins that have been (compile) tested and can be enabled via COLLECTD_PLUGINS
+COLLECTD_TESTED_PLUGINS="aggregation apache apcups ascent battery bind cgroups
+       conntrack contextswitch cpu cpufreq csv curl curl_json curl_xml dbi df disk dns
+       email entropy ethstat exec filecount fscache gmond hddtemp interface ipmi
+       iptables irq java libvirt load logfile lvm madwifi match_empty_counter
+       match_hashed match_regex match_timediff match_value mbmon md memcachec memcached
+       memory multimeter mysql netlink network network nfs nginx notify_desktop
+       notify_email ntpd numa nut olsrd onewire openvpn oracle perl perl ping postgresql
+       powerdns processes protocols python python routeros rrdcached rrdcached rrdtool
+       sensors serial snmp statsd swap syslog table tail target_notification
+       target_replace target_scale target_set tcpconns teamspeak2 ted thermal threshold
+       tokyotyrant unixsock uptime users uuid varnish vmem vserver wireless
+       write_graphite write_http write_mongodb"
+
+COLLECTD_DISABLED_PLUGINS="${COLLECTD_IMPOSSIBLE_PLUGINS} ${COLLECTD_UNTESTED_PLUGINS}"
+
+COLLECTD_ALL_PLUGINS=${COLLECTD_TESTED_PLUGINS}
+
+for plugin in ${COLLECTD_ALL_PLUGINS}; do
+       IUSE="${IUSE} collectd_plugins_${plugin}"
+done
+unset plugin
+
+# Now come the dependencies.
+
+COMMON_DEPEND="
+       dev-libs/libgcrypt:0
+       sys-devel/libtool
+       perl?                                   ( dev-lang/perl:=[ithreads] )
+       collectd_plugins_apache?                ( net-misc/curl )
+       collectd_plugins_ascent?                ( net-misc/curl dev-libs/libxml2 )
+       collectd_plugins_bind?                  ( dev-libs/libxml2 )
+       collectd_plugins_curl?                  ( net-misc/curl )
+       collectd_plugins_curl_json?             ( net-misc/curl dev-libs/yajl )
+       collectd_plugins_curl_xml?              ( net-misc/curl dev-libs/libxml2 )
+       collectd_plugins_dbi?                   ( dev-db/libdbi )
+       collectd_plugins_dns?                   ( net-libs/libpcap )
+       collectd_plugins_gmond?                 ( sys-cluster/ganglia )
+       collectd_plugins_ipmi?                  ( >=sys-libs/openipmi-2.0.16-r1 )
+       collectd_plugins_iptables?              ( >=net-firewall/iptables-1.4.13 )
+       collectd_plugins_libvirt?               ( app-emulation/libvirt dev-libs/libxml2 )
+       collectd_plugins_lvm?                   ( sys-fs/lvm2 )
+       collectd_plugins_memcachec?             ( dev-libs/libmemcached )
+       collectd_plugins_mysql?                 ( >=virtual/mysql-5.0 )
+       collectd_plugins_netlink?               ( net-libs/libmnl )
+       collectd_plugins_nginx?                 ( net-misc/curl )
+       collectd_plugins_notify_desktop?        ( x11-libs/libnotify )
+       collectd_plugins_notify_email?          ( net-libs/libesmtp dev-libs/openssl )
+       collectd_plugins_nut?                   ( sys-power/nut )
+       collectd_plugins_onewire?               ( sys-fs/owfs )
+       collectd_plugins_oracle?                ( dev-db/oracle-instantclient-basic )
+       collectd_plugins_perl?                  ( dev-lang/perl:=[ithreads] )
+       collectd_plugins_ping?                  ( net-libs/liboping )
+       collectd_plugins_postgresql?            ( dev-db/postgresql )
+       collectd_plugins_python?                ( ${PYTHON_DEPS} )
+       collectd_plugins_routeros?              ( net-libs/librouteros )
+       collectd_plugins_rrdcached?             ( net-analyzer/rrdtool )
+       collectd_plugins_rrdtool?               ( net-analyzer/rrdtool )
+       collectd_plugins_sensors?               ( sys-apps/lm_sensors )
+       collectd_plugins_snmp?                  ( net-analyzer/net-snmp )
+       collectd_plugins_tokyotyrant?           ( net-misc/tokyotyrant )
+       collectd_plugins_varnish?               ( www-servers/varnish )
+       collectd_plugins_write_http?            ( net-misc/curl )
+       collectd_plugins_write_mongodb?         ( dev-libs/mongo-c-driver )
+
+       kernel_FreeBSD? (
+               collectd_plugins_disk?          ( sys-libs/libstatgrab )
+               collectd_plugins_interface?     ( sys-libs/libstatgrab )
+               collectd_plugins_load?          ( sys-libs/libstatgrab )
+               collectd_plugins_memory?        ( sys-libs/libstatgrab )
+               collectd_plugins_swap?          ( sys-libs/libstatgrab )
+               collectd_plugins_users?         ( sys-libs/libstatgrab )
+       )"
+
+DEPEND="${COMMON_DEPEND}
+       virtual/pkgconfig
+       collectd_plugins_java?                  ( >=virtual/jdk-1.6 )
+       kernel_linux? (
+               collectd_plugins_vserver?       ( sys-kernel/vserver-sources )
+       )"
+
+RDEPEND="${COMMON_DEPEND}
+       collectd_plugins_java?                  ( >=virtual/jre-1.6 )
+       collectd_plugins_syslog?                ( virtual/logger )
+       selinux?                                                ( sec-policy/selinux-collectd )"
+
+REQUIRED_USE="
+       collectd_plugins_python?                ( ${PYTHON_REQUIRED_USE} )"
+
+PATCHES=(
+       "${FILESDIR}/${PN}-5.4.1"-{nohal,libocci,libperl,lt}.patch
+       "${FILESDIR}/${PN}-4.10.3"-werror.patch
+)
+
+# @FUNCTION: collectd_plugin_kernel_linux
+# @DESCRIPTION:
+# USAGE: <plug-in name> <kernel_options> <severity>
+# kernel_options is a list of kernel configurations options; the check tests whether at least
+#   one of them is enabled. If no, depending on the third argument an elog, ewarn, or eerror message
+#   is emitted.
+collectd_plugin_kernel_linux() {
+       local multi_opt opt
+       if has ${1} ${COLLECTD_ALL_PLUGINS}; then
+               if use collectd_plugins_${1}; then
+                       for opt in ${2}; do
+                               if linux_chkconfig_present ${opt}; then return 0; fi
+                       done
+                       multi_opt=${2//\ /\ or\ }
+                       case ${3} in
+                               (info)
+                                       elog "The ${1} plug-in can use kernel features that are disabled now; enable ${multi_opt} in your kernel"
+                               ;;
+                               (warn)
+                                       ewarn "The ${1} plug-in uses kernel features that are disabled now; enable ${multi_opt} in your kernel"
+                               ;;
+                               (error)
+                                       eerror "The ${1} plug-in needs kernel features that are disabled now; enable ${multi_opt} in your kernel"
+                               ;;
+                               (*)
+                                       die "function collectd_plugin_kernel_linux called with invalid third argument"
+                               ;;
+                       esac
+               fi
+       fi
+}
+
+collectd_linux_kernel_checks() {
+       linux-info_pkg_setup
+
+       # battery.c:/proc/pmu/battery_%i
+       # battery.c:/proc/acpi/battery
+       collectd_plugin_kernel_linux battery ACPI_BATTERY warn
+
+       # cgroups.c:/sys/fs/cgroup/
+       collectd_plugin_kernel_linux cgroups CONFIG_CGROUPS warn
+
+       # cpufreq.c:/sys/devices/system/cpu/cpu%d/cpufreq/
+       collectd_plugin_kernel_linux cpufreq SYSFS warn
+       collectd_plugin_kernel_linux cpufreq CPU_FREQ_STAT warn
+
+       # nfs.c:/proc/net/rpc/nfs
+       # nfs.c:/proc/net/rpc/nfsd
+       collectd_plugin_kernel_linux nfs NFS_COMMON warn
+
+       # serial.c:/proc/tty/driver/serial
+       # serial.c:/proc/tty/driver/ttyS
+       collectd_plugin_kernel_linux serial SERIAL_CORE warn
+
+       # swap.c:/proc/meminfo
+       collectd_plugin_kernel_linux swap SWAP warn
+
+       # thermal.c:/proc/acpi/thermal_zone
+       # thermal.c:/sys/class/thermal
+       collectd_plugin_kernel_linux thermal "PROC_FS SYSFS" warn
+       collectd_plugin_kernel_linux thermal ACPI_THERMAL warn
+
+       # vmem.c:/proc/vmstat
+       collectd_plugin_kernel_linux vmem VM_EVENT_COUNTERS warn
+
+       # uuid.c:/sys/hypervisor/uuid
+       collectd_plugin_kernel_linux uuid SYSFS info
+
+       # wireless.c:/proc/net/wireless
+       collectd_plugin_kernel_linux wireless "MAC80211 IEEE80211" warn
+}
+
+pkg_setup() {
+       if use kernel_linux; then
+               if linux_config_exists; then
+                       einfo "Checking your linux kernel configuration:"
+                       collectd_linux_kernel_checks
+               else
+                       elog "Cannot find a linux kernel configuration. Continuing anyway."
+               fi
+       fi
+
+       java-pkg-opt-2_pkg_setup
+       use collectd_plugins_python && python-single-r1_pkg_setup
+
+       enewgroup collectd
+       enewuser collectd -1 -1 /var/lib/collectd collectd
+}
+
+src_prepare() {
+       base_src_prepare
+
+       # There's some strange prefix handling in the default config file, resulting in
+       # paths like "/usr/var/..."
+       sed -i -e "s:@prefix@/var:/var:g" src/collectd.conf.in || die
+
+       sed -i -e "s:/etc/collectd/collectd.conf:/etc/collectd.conf:g" contrib/collectd.service || die
+
+       # fix installdirs for perl, bug 444360
+       sed -i -e 's/INSTALL_BASE=$(DESTDIR)$(prefix) //' bindings/Makefile.am || die
+
+       if use collectd_plugins_java; then
+               # Set javac -source and -target flags according to (R)DEPEND.
+               sed -i -e "s/\$(JAVAC)/\0 $(java-pkg_javac-args)/g" bindings/java/Makefile.am || die
+       fi
+
+       rm -r libltdl || die
+
+       eautoreconf
+}
+
+src_configure() {
+       # Now come the lists of os-dependent plugins. Any plugin that is not listed anywhere here
+       # should work independent of the operating system.
+
+       local linux_plugins="battery cpu cpufreq disk entropy ethstat interface iptables ipvs irq load
+               memory md netlink nfs numa processes serial swap tcpconns thermal users vmem vserver
+               wireless"
+
+       local libstatgrab_plugins="cpu disk interface load memory swap users"
+       local bsd_plugins="cpu tcpconns ${libstatgrab_plugins}"
+
+       local darwin_plugins="apple_sensors battery cpu disk interface memory processes tcpconns"
+
+       local osdependent_plugins="${linux_plugins} ${bsd_plugins} ${darwin_plugins}"
+       local myos_plugins=""
+       if use kernel_linux; then
+               einfo "Enabling Linux plugins."
+               myos_plugins=${linux_plugins}
+       elif use kernel_FreeBSD; then
+               einfo "Enabling FreeBSD plugins."
+               myos_plugins=${bsd_plugins}
+       elif use kernel_Darwin; then
+               einfo "Enabling Darwin plugins."
+               myos_plugins=${darwin_plugins}
+       fi
+
+       # Do we debug?
+       local myconf="$(use_enable debug)"
+
+       local plugin
+
+       # Disable what needs to be disabled.
+       for plugin in ${COLLECTD_DISABLED_PLUGINS}; do
+               myconf+=" --disable-${plugin}"
+       done
+
+       # Set enable/disable for each single plugin.
+       for plugin in ${COLLECTD_ALL_PLUGINS}; do
+               if has ${plugin} ${osdependent_plugins}; then
+                       # plugin is os-dependent ...
+                       if has ${plugin} ${myos_plugins}; then
+                               # ... and available in this os
+                               myconf+=" $(use_enable collectd_plugins_${plugin} ${plugin})"
+                       else
+                               # ... and NOT available in this os
+                               if use collectd_plugins_${plugin}; then
+                                       ewarn "You try to enable the ${plugin} plugin, but it is not available for this"
+                                       ewarn "kernel. Disabling it automatically."
+                               fi
+                               myconf+=" --disable-${plugin}"
+                       fi
+               elif [[ "${plugin}" = "collectd_plugins_perl" ]]; then
+                       if use collectd_plugins_perl && ! use perl; then
+                               ewarn "Perl plugin disabled as perl bindings disabled by -perl use flag"
+                               myconf+= --disable-perl
+                       else
+                               myconf+=" $(use_enable collectd_plugins_${plugin} ${plugin})"
+                       fi
+               else
+                       myconf+=" $(use_enable collectd_plugins_${plugin} ${plugin})"
+               fi
+       done
+
+       # JAVA_HOME is set by eclasses.
+       if use collectd_plugins_java; then
+               myconf+=" --with-java"
+       fi
+
+       # Need libiptc ONLY for iptables. If we try to use it otherwise bug 340109 happens.
+       if ! use collectd_plugins_iptables; then
+               myconf+=" --with-libiptc=no"
+       fi
+
+       if use perl; then
+               myconf+=" --with-perl-bindings=INSTALLDIRS=vendor"
+       else
+               myconf+=" --without-perl-bindings"
+       fi
+
+       # No need for v5upgrade
+       myconf+=" --disable-target_v5upgrade"
+
+       # Finally, run econf.
+       KERNEL_DIR="${KERNEL_DIR}" econf --config-cache --without-included-ltdl $(use_enable static-libs static) --localstatedir=/var ${myconf}
+}
+
+src_install() {
+       emake DESTDIR="${D}" install
+
+       perl_delete_localpod
+
+       find "${D}/usr/" -name "*.la" -exec rm -f {} +
+
+       use collectd_plugins_java && java-pkg_regjar "${ED}"/usr/share/${PN}/java/*.jar
+       # use collectd_plugins_ping && setcap cap_net_raw+ep ${D}/usr/sbin/collectd
+       # we cannot do this yet
+
+       fowners root:collectd /etc/collectd.conf
+       fperms u=rw,g=r,o= /etc/collectd.conf
+
+       dodoc AUTHORS ChangeLog NEWS README TODO
+
+       if use contrib ; then
+               insinto /usr/share/doc/${PF}
+               doins -r contrib
+       fi
+
+       keepdir /var/lib/${PN}
+       fowners collectd:collectd /var/lib/${PN}
+
+       newinitd "${FILESDIR}/${PN}.initd" ${PN}
+       newconfd "${FILESDIR}/${PN}.confd" ${PN}
+       systemd_dounit "contrib/${PN}.service"
+
+       insinto /etc/logrotate.d
+       newins "${FILESDIR}/logrotate" collectd
+
+       sed -i -e 's:^.*PIDFile     "/var/run/collectd.pid":PIDFile     "/var/run/collectd/collectd.pid":' "${D}"/etc/collectd.conf || die
+       sed -i -e 's:^# SocketFile "/var/run/collectd-unixsock":#       SocketFile "/var/run/collectd/collectd-unixsock":' "${D}"/etc/collectd.conf || die
+       sed -i -e 's:^.*LoadPlugin perl$:# The new, correct way to load the perl plugin -- \n# <LoadPlugin perl>\n#   Globals true\n# </LoadPlugin>:' "${D}"/etc/collectd.conf || die
+       sed -i -e 's:^.*LoadPlugin python$:# The new, correct way to load the python plugin -- \n# <LoadPlugin python>\n#   Globals true\n# </LoadPlugin>:' "${D}"/etc/collectd.conf || die
+}
+
+collectd_rdeps() {
+       if (use collectd_plugins_${1} && ! has_version "${2}"); then
+               elog "The ${1} plug-in needs ${2} to be installed locally or remotely to work."
+       fi
+}
+
+pkg_postinst() {
+       collectd_rdeps apcups sys-power/apcupsd
+       collectd_rdeps hddtemp app-admin/hddtemp
+       collectd_rdeps mbmon sys-apps/xmbmon
+       collectd_rdeps memcached ">=net-misc/memcached-1.2.2-r2"
+       collectd_rdeps ntpd net-misc/ntp
+       collectd_rdeps openvpn ">=net-misc/openvpn-2.0.9"
+       collectd_rdeps write_mongodb "dev-db/mongodb"
+
+       echo
+       elog "collectd is now started as unprivileged user by default."
+       elog "You may want to revisit the configuration."
+       elog
+
+       if use collectd_plugins_email; then
+               ewarn "The email plug-in is deprecated. To submit statistics please use the unixsock plugin."
+       fi
+       if use contrib; then
+               elog "The scripts in /usr/share/doc/${PF}/collection3 for generating graphs need dev-perl/HTML-Parser,"
+               elog "dev-perl/config-general, dev-perl/regexp-common, and net-analyzer/rrdtool[perl] to be installed."
+       fi
+}