373 lines
13 KiB
Bash
373 lines
13 KiB
Bash
# Copyright 1999-2013 Gentoo Foundation
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
# $Header: /var/cvsroot/gentoo-x86/app-admin/collectd/collectd-5.4.0.ebuild,v 1.2 2013/11/24 12:26:50 pinkbyte Exp $
|
|
|
|
EAPI="5"
|
|
|
|
GENTOO_DEPEND_ON_PERL="no"
|
|
|
|
inherit autotools base eutils linux-info multilib perl-app 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 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
|
|
sys-devel/libtool
|
|
perl? ( dev-lang/perl[ithreads] ( || ( sys-devel/libperl[ithreads] >=sys-devel/libperl-5.10 ) ) )
|
|
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_java? ( virtual/jre dev-java/java-config-wrapper )
|
|
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] ( || ( sys-devel/libperl[ithreads] >=sys-devel/libperl-5.10 ) ) )
|
|
collectd_plugins_ping? ( net-libs/liboping )
|
|
collectd_plugins_postgresql? ( dev-db/postgresql-base )
|
|
collectd_plugins_python? ( =dev-lang/python-2* )
|
|
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
|
|
kernel_linux? (
|
|
collectd_plugins_vserver? ( sys-kernel/vserver-sources )
|
|
)"
|
|
|
|
RDEPEND="${COMMON_DEPEND}
|
|
collectd_plugins_syslog? ( virtual/logger )"
|
|
|
|
PATCHES=(
|
|
"${FILESDIR}/${PN}-4.10.2"-{libocci,nohal}.patch
|
|
"${FILESDIR}/${PN}-4.10.3"-werror.patch
|
|
"${FILESDIR}/${PN}-5.1.0"-libperl.patch
|
|
"${FILESDIR}/${PN}-5.1.1"-lt.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
|
|
|
|
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
|
|
|
|
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
|
|
|
|
# Need JAVA_HOME for java.
|
|
if use collectd_plugins_java; then
|
|
myconf+=" --with-java=$(java-config -g JAVA_HOME)"
|
|
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
|
|
|
|
fixlocalpod
|
|
|
|
find "${D}/usr/" -name "*.la" -exec rm -f {} +
|
|
|
|
# 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 recheck 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
|
|
}
|