diff options
author | V3n3RiX <venerix@koprulu.sector> | 2023-12-04 10:56:18 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2023-12-04 10:56:18 +0000 |
commit | 4ead5818a5d230bcc875202c487761a9b786e945 (patch) | |
tree | 63238d1977f2788cb5b7074037f15810af25bb88 /app-metrics/collectd | |
parent | d074d0ba59e3121dba0c27c4a18f1e481f67b62a (diff) |
gentoo auto-resync : 04:12:2023 - 10:56:18
Diffstat (limited to 'app-metrics/collectd')
-rw-r--r-- | app-metrics/collectd/Manifest | 2 | ||||
-rw-r--r-- | app-metrics/collectd/collectd-5.12.0-r9.ebuild | 563 | ||||
-rw-r--r-- | app-metrics/collectd/files/collectd-5.12.0-nut-c99.patch | 143 |
3 files changed, 708 insertions, 0 deletions
diff --git a/app-metrics/collectd/Manifest b/app-metrics/collectd/Manifest index 90877d0ae887..630ff3915cfd 100644 --- a/app-metrics/collectd/Manifest +++ b/app-metrics/collectd/Manifest @@ -1,5 +1,6 @@ AUX collectd-5.11.0-libsigrok-0.4+.patch 5447 BLAKE2B 6de12feb7226ae3a16a89f3282b54d363cc64e176fe4f9cc9a6bfef0874bca0447a8d21689f8d3c91b2840d12ba4abd3c6f38cfc0b4e885582cc42c81865a1f8 SHA512 a7c99664f632eaff35eef18a0bd8da5bfa39812d223eb6449acd0fa871c5d43a401ed48b1003275a2ae0362b92c69ab52b46af39fa69dd7e4cc2b2969dc4b2de AUX collectd-5.12.0-clang16-configure.patch 3272 BLAKE2B 0586d4f412713bcf5c7136ef88294a63edb2bae8b83d98e3db383e04275c68ad8efe66ad85fbe8f55eca5fcd40eb181faacf3a421d6064b4207085766cd60e0f SHA512 a3f7c8641b35ce8855f38a2d47e76f2701acb49588e94937d73ddc9f3dfc8606046063654d14d1af060176cf227562b1f269d323e48b220611c597664febbf0a +AUX collectd-5.12.0-nut-c99.patch 5295 BLAKE2B 8c8d3b1beed4fcecf5b46bdd739c24f14d5a0af923364a2233fa506c3a4b678e7d12a25e902c01c5f04f1a9742d82dbfa3e61b9af73d35a8e3d62a7438f1c1f5 SHA512 298c7ee75b83c47b4de8b4890f7756560585be104db93b7103c35e4c3f69a13fdd776f1df58d6c47e33476b902781f77f15dc1412d2d05f9c05f66548fd4c939 AUX collectd-5.12.0-python3_11.patch 1022 BLAKE2B 5317cd8f13eb7d657c1dc2041e23e3335a00f4ed781376cf942f74ffd7b57ca3be64e159b59bfeae2d7f3d7b76cf4ed9d9f1f71c890f6e3d86bb57399d31e03d SHA512 7a3b9d42910cd88ecc767a57c085410ee6c664f9e8c993591e2ef1a169723553dc1224b295623363af1a473b0d22cf2a937bee5d93d64c8c59651cff3f08a5e0 AUX collectd.confd-r2 2005 BLAKE2B 1f68f769d06b1f486c33f76060cf13f784d5b45ff7a04c209a6e23b8a9af94b3db54744532c74f8c95dae4fccb7f89a4e9a5f5353575c7099da0a2db3c1f8f37 SHA512 89fd2d60e1e0c7f4145d0791d65e29821e7f585015f1ba6bf94f80f47ffcefb7bdd75b2ba3e0acb18f0ee27f64100b3c4737ad30ce516785571d277a6923666f AUX collectd.initd-r3 1877 BLAKE2B 8e81c314abdd366a7583dd18bdad10c9d7da14589c030b9c3121090f9ee74b300f1bb919168117ce84aec3af6f0708f14fa6a71c5be049b099d5221656ac7dac SHA512 0dd1541bf6a17f7b26e8671ba236b11a599c07b30be6700d2e37ee2d6f59114d95c83b3ca8ddcb98d6a8e0d7321d994682411aff815c1b1f792314a6a17de4b5 @@ -7,4 +8,5 @@ AUX collectd.logrotate 115 BLAKE2B ce2a79787096b04af6ecd128633dde68fb868a02cc1d2 AUX collectd.tmpfile 39 BLAKE2B 0d1ee2f02e539e854b62b47032308d08505fa31d8428e98f8d150c924201074c5edae22eea3990edf3a7837f1473193fe009a501645bf064638c532ec53a36cc SHA512 55fb70da9ece74b143c3e971b890954842230691039f8ad2240cc4c8d699e4e7a21efcbfd0b3cb2503e90af0bbdd0c7d886e09baf9fc86ec26c115a0bce6a668 DIST collectd-5.12.0.tar.bz2 1902756 BLAKE2B 9567c55b47c0ea5b7836c0d858c16a637c4a2054486a9d9ca6cd9951a92381bdf4f49d7dc0be0c9c9131802120d0af2e542a3997f01484c89ba135b3c46db795 SHA512 7a15e4c0ae587db4987d673a790a4f3bea1cab29ce24a506fb21fa7bd2f60bfec70867eaa1c1395cb5b0e0ae81a024fb6109b064da0ef50e7c146d2198871c70 EBUILD collectd-5.12.0-r8.ebuild 20020 BLAKE2B a8bdebaee2dce0576250e0313ac2b36f9ce2a74d832b80c8ce4d76b91af1c3accdcb9bad006630eca59fb8bc11fe34319589c95390469985ac8791dfe8a95587 SHA512 4e8dd2fbd353fcdd358425f70a2bc61ca85ac439c169bde6fa6e64876c8749ad129919bfe967aeac6b7b3370f8c583abc7076874435ad81eac9e9e291b96bc50 +EBUILD collectd-5.12.0-r9.ebuild 20065 BLAKE2B 1927befaf04db51dd6a378c15cd18142bc440a6b16a62c3c95ba31d1cb92ffe431b306dbfddee50a46f40f60f6c8dac3cf2d95f9bab7df5ae720e77958c945d7 SHA512 b706c42b459de828cb49c9a729d84a9ec6b59a711851bce324d4d0aa047498e7de8b4d9e299769b3c0ad6e3ecda3279981887d904a339ca4e35f353d6223e9cc MISC metadata.xml 1515 BLAKE2B 318f796bfacb0e1facbd60f80fc9176e24f06661fc4dce4acda3a218aab10766231566a9ae58f9985770513fb53a52e9ea5e985aba0bcff62c042c75fb662c70 SHA512 4c886d89143d2862a3d915e5b0ef14382c76d758a306fa9971a762fdae400086175c470045e85775f028947156a4bb40a09bd9810c56dda08662e835cba3b45c diff --git a/app-metrics/collectd/collectd-5.12.0-r9.ebuild b/app-metrics/collectd/collectd-5.12.0-r9.ebuild new file mode 100644 index 000000000000..04af4bc67d49 --- /dev/null +++ b/app-metrics/collectd/collectd-5.12.0-r9.ebuild @@ -0,0 +1,563 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI="7" + +JAVA_PKG_OPT_USE="collectd_plugins_java" +LUA_COMPAT=( lua5-{1..4} ) +PYTHON_COMPAT=( python3_{9..11} ) + +inherit autotools fcaps java-pkg-opt-2 linux-info lua-single perl-functions python-single-r1 systemd tmpfiles udev + +DESCRIPTION="Collects system statistics and provides mechanisms to store the values" + +HOMEPAGE="https://collectd.org/" +SRC_URI="https://github.com/${PN}/${PN}/releases/download/${P}/${P}.tar.bz2" + +LICENSE="MIT GPL-2 GPL-2+ GPL-3 GPL-3+" +SLOT="0" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~x86" +IUSE="contrib debug java perl selinux static-libs udev xfs" + +# The plugin lists have to follow here since they extend IUSE + +# Plugins that don't build (e.g. dependencies not in Gentoo) +# apple_sensors: Requires libIOKit +# amqp1: Requires libqpid-proton +# aquaero: Requires aerotools-ng/libaquaero5 +# barometer: Requires libi2c (i2c_smbus_read_i2c_block_data) +# dpdkevents: Requires dpdk +# dpdkstat: Requires dpdk +# dpdk_telemetry: Requires dpdk +# grpc: Requires libgrpc +# intel_pmu: Requires libjevents (pmu-tools) +# intel_rdt: Requires libpqos from intel-cmt-cat project +# lpar: Requires libperfstat (AIX only) +# mic: Requires Intel Many Integrated Core Architecture API +# (part of Intel's Xeon Phi software) +# netapp: Requires libnetapp (http://communities.netapp.com/docs/DOC-1110) +# onewire: Requires sys-fs/owfs which was removed from repository +# pf: Requires BSD packet filter +# pinba: Requires MySQL Pinba engine (http://pinba.org/) +# redfish: Requires libredfish +# tape: Requires libkstat (Solaris only) +# tokyotyrant: Requires tokyotyrant +# write_riemann: Requires riemann-c-client +# xmms: Requires libxmms (v1) +# zone: Solaris only... +COLLECTD_IMPOSSIBLE_PLUGINS="apple_sensors amqp1 aquaero barometer + dpdkevents dpdkstat dpdk_telemetry grpc intel_pmu intel_rdt lpar + mic netapp onewire pf pinba redfish tape tokyotyrant write_riemann + xmms zone" + +# Plugins that have been (compile) tested and can be enabled via COLLECTD_PLUGINS +COLLECTD_TESTED_PLUGINS="aggregation amqp apache apcups ascent battery bind + buddyinfo capabilities ceph cgroups check_uptime chrony connectivity + conntrack contextswitch cpu cpufreq cpusleep csv curl curl_json + curl_xml dbi df disk dns drbd email entropy ethstat exec fhcount + filecount fscache gps gpu_nvidia hddtemp hugepages interface ipc + ipmi iptables ipvs irq java lua load logfile logparser log_logstash + madwifi match_empty_counter match_hashed match_regex match_timediff + match_value mbmon mcelog md memcachec memcached memory modbus mqtt + multimeter mysql netlink network network nfs nginx notify_desktop + notify_email notify_nagios ntpd numa nut olsrd onewire openldap + openvpn oracle ovs_events ovs_stats pcie_errors perl ping postgresql + powerdns procevent processes protocols python redis routeros + rrdcached rrdtool sensors serial sigrok slurm smart snmp snmp_agent + statsd swap synproxy sysevent syslog table tail tail_csv + target_notification target_replace target_scale target_set tcpconns + teamspeak2 ted thermal threshold turbostat ubi unixsock uptime users + uuid varnish virt vmem vserver wireless write_graphite write_http + write_influxdb_udp write_kafka write_log write_mongodb write_prometheus + write_redis write_sensu write_stackdriver write_syslog write_tsdb + xencpu zfs_arc zookeeper" + +COLLECTD_DISABLED_PLUGINS="${COLLECTD_IMPOSSIBLE_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=" + acct-group/collectd + acct-user/collectd + dev-libs/libgcrypt:= + dev-libs/libltdl:0= + sys-libs/libcap + perl? ( dev-lang/perl:=[ithreads] ) + udev? ( virtual/udev ) + xfs? ( sys-fs/xfsprogs ) + collectd_plugins_amqp? ( net-libs/rabbitmq-c ) + collectd_plugins_apache? ( net-misc/curl:0= ) + collectd_plugins_ascent? ( net-misc/curl:0= dev-libs/libxml2:2= ) + collectd_plugins_bind? ( net-misc/curl:0= dev-libs/libxml2:2= ) + collectd_plugins_ceph? ( dev-libs/yajl:= ) + collectd_plugins_capabilities? ( dev-libs/jansson net-libs/libmicrohttpd:= ) + collectd_plugins_connectivity? ( dev-libs/yajl:= net-libs/libmnl ) + collectd_plugins_curl? ( net-misc/curl:0= ) + collectd_plugins_curl_json? ( net-misc/curl:0= dev-libs/yajl:= ) + collectd_plugins_curl_xml? ( net-misc/curl:0= dev-libs/libxml2:2= ) + collectd_plugins_dbi? ( dev-db/libdbi ) + collectd_plugins_dns? ( net-libs/libpcap ) + collectd_plugins_gps? ( sci-geosciences/gpsd:= ) + collectd_plugins_gpu_nvidia? ( dev-util/nvidia-cuda-toolkit ) + collectd_plugins_ipmi? ( >=sys-libs/openipmi-2.0.16-r1 ) + collectd_plugins_iptables? ( >=net-firewall/iptables-1.4.13:0= ) + collectd_plugins_log_logstash? ( dev-libs/yajl:= ) + collectd_plugins_lua? ( ${LUA_DEPS} ) + collectd_plugins_memcachec? ( dev-libs/libmemcached ) + collectd_plugins_modbus? ( dev-libs/libmodbus ) + collectd_plugins_mqtt? ( app-misc/mosquitto ) + collectd_plugins_mysql? ( dev-db/mysql-connector-c:= ) + collectd_plugins_netlink? ( net-libs/libmnl ) + collectd_plugins_nginx? ( net-misc/curl:0= ) + collectd_plugins_notify_desktop? ( x11-libs/libnotify ) + collectd_plugins_notify_email? ( net-libs/libesmtp:= ) + collectd_plugins_nut? ( >=sys-power/nut-2.7.2-r2 ) + collectd_plugins_openldap? ( net-nds/openldap:= ) + collectd_plugins_oracle? ( dev-db/oracle-instantclient[sdk] ) + collectd_plugins_ovs_events? ( dev-libs/yajl:= ) + collectd_plugins_ovs_stats? ( dev-libs/yajl:= ) + collectd_plugins_perl? ( dev-lang/perl:=[ithreads] ) + collectd_plugins_ping? ( net-libs/liboping ) + collectd_plugins_postgresql? ( dev-db/postgresql:= ) + collectd_plugins_procevent? ( dev-libs/yajl:= ) + collectd_plugins_python? ( ${PYTHON_DEPS} ) + collectd_plugins_redis? ( dev-libs/hiredis:= ) + 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_sigrok? ( >=sci-libs/libsigrok-0.4:= dev-libs/glib:2 ) + collectd_plugins_slurm? ( sys-cluster/slurm ) + collectd_plugins_smart? ( dev-libs/libatasmart:0= ) + collectd_plugins_snmp? ( net-analyzer/net-snmp:= ) + collectd_plugins_snmp_agent? ( net-analyzer/net-snmp:= ) + collectd_plugins_sysevent? ( dev-libs/yajl:= ) + collectd_plugins_varnish? ( www-servers/varnish:= ) + collectd_plugins_virt? ( app-emulation/libvirt:= dev-libs/libxml2:2= ) + collectd_plugins_write_http? ( net-misc/curl:0= dev-libs/yajl:= ) + collectd_plugins_write_kafka? ( >=dev-libs/librdkafka-0.9.0.99:= dev-libs/yajl:= ) + collectd_plugins_write_mongodb? ( >=dev-libs/mongo-c-driver-1.8.2:= ) + collectd_plugins_write_prometheus? ( >=dev-libs/protobuf-c-1.2.1-r1:= net-libs/libmicrohttpd:= ) + collectd_plugins_write_redis? ( dev-libs/hiredis:= ) + collectd_plugins_write_stackdriver? ( net-misc/curl:0= dev-libs/yajl:= ) + collectd_plugins_xencpu? ( app-emulation/xen-tools:= ) +" + +# FIXME: should virtual/jdk be here as well? +BDEPEND="virtual/pkgconfig" + +# Enforcing !=sys-kernel/linux-headers-4.5 > due to #577846 +DEPEND="${COMMON_DEPEND} + collectd_plugins_iptables? ( || ( <=sys-kernel/linux-headers-4.4 >=sys-kernel/linux-headers-4.6 ) ) + collectd_plugins_java? ( >=virtual/jdk-1.8 )" + +RDEPEND="${COMMON_DEPEND} + collectd_plugins_java? ( >=virtual/jre-1.8 ) + collectd_plugins_syslog? ( virtual/logger ) + selinux? ( sec-policy/selinux-collectd )" + +REQUIRED_USE=" + collectd_plugins_lua? ( ${LUA_REQUIRED_USE} ) + collectd_plugins_python? ( ${PYTHON_REQUIRED_USE} ) + collectd_plugins_smart? ( udev ) + contrib? ( perl )" + +PATCHES=( + "${FILESDIR}"/${PN}-5.11.0-libsigrok-0.4+.patch + "${FILESDIR}"/${PN}-5.12.0-python3_11.patch + "${FILESDIR}"/${PN}-5.12.0-clang16-configure.patch + "${FILESDIR}"/${PN}-5.12.0-nut-c99.patch +) + +# @FUNCTION: collectd_plugin_kernel_linux +# @DESCRIPTION: +# USAGE: <plugin 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} plugin can use kernel features that are disabled now; enable ${multi_opt} in your kernel" + ;; + (warn) + ewarn "The ${1} plugin uses kernel features that are disabled now; enable ${multi_opt} in your kernel" + ;; + (error) + eerror "The ${1} plugin 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() { + if ! linux_chkconfig_present PROC_FS; then + ewarn "/proc file system support is disabled, many plugins will not be able to read any statistics from your system unless you enable PROC_FS in your kernel" + fi + + if ! linux_chkconfig_present SYSFS; then + ewarn "/sys file system support is disabled, many plugins will not be able to read any statistics from your system unless you enable SYSFS in your kernel" + fi + + # 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 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 + + # drbd.c: /proc/drbd + collectd_plugin_kernel_linux drbd BLK_DEV_DRBD warn + + # conntrack.c: /proc/sys/net/netfilter/* + collectd_plugin_kernel_linux conntrack NETFILTER warn + + # fscache.c: /proc/fs/fscache/stats + collectd_plugin_kernel_linux fscache FSCACHE 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 ACPI_THERMAL warn + + # turbostat.c: /dev/cpu/%d/msr + collectd_plugin_kernel_linux turbostat X86_MSR warn + + # vmem.c: /proc/vmstat + collectd_plugin_kernel_linux vmem VM_EVENT_COUNTERS warn + + # vserver.c: /proc/virtual + collectd_plugin_kernel_linux vserver VSERVER warn + + # uuid.c: /sys/hypervisor/uuid + collectd_plugin_kernel_linux uuid SYSFS info + + # wireless.c: /proc/net/wireless + collectd_plugin_kernel_linux wireless "WIRELESS MAC80211 IEEE80211" warn + + # zfs_arc.c: /proc/spl/kstat/zfs/arcstats + collectd_plugin_kernel_linux zfs_arc "SPL ZFS" warn +} + +pkg_setup() { + if use kernel_linux; then + linux-info_pkg_setup + + 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 + + if use collectd_plugins_java; then + java-pkg-opt-2_pkg_setup + fi + + use collectd_plugins_lua && lua-single_pkg_setup + use collectd_plugins_python && python-single-r1_pkg_setup +} + +src_prepare() { + default + + # 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 + + # Adjust upstream's systemd unit + # - Get rid of EnvironmentFile directive; These files don't exist on Gentoo! + # - Add User=collectd to run collectd as user "collectd" per default + sed -i \ + -e '/^EnvironmentFile=.*/d' \ + -e '/^\[Service\]/aUser=collectd' \ + contrib/systemd.${PN}.service || 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="barometer battery cpu cpufreq disk + drbd entropy ethstat hugepages interface iptables + ipvs irq ipc load memory md netlink nfs numa processes + serial swap tcpconns thermal turbostat users vmem wireless + zfc_arc" + + local need_libstatgrab=0 + local libstatgrab_plugins="cpu disk interface load memory swap users" + local bsd_plugins="cpu tcpconns ${libstatgrab_plugins} zfc_arc" + + 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_Darwin; then + einfo "Enabling Darwin plugins." + myos_plugins=${darwin_plugins} + fi + + local myconf="--disable-werror" + + # Do we debug? + myconf+=" $(use_enable debug)" + + # udev support? + # Required for smart plugin via REQUIRED_USE; Optional for disk plugin + if use udev; then + myconf+=" --with-libudev" + else + myconf+=" --without-libudev" + fi + + local plugin + + # Disable what needs to be disabled. + for plugin in ${COLLECTD_DISABLED_PLUGINS}; do + if [[ "${plugin}" == 'dpdkstat' ]]; then + myconf+=" --without-libdpdk" + else + myconf+=" --disable-${plugin}" + fi + 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 + + if [ "${need_libstatgrab}" -eq 1 ]; then + myconf+=" --with-libstatgrab" + else + myconf+=" --without-libstatgrab" + fi + + # 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. + # lots of libs are only needed for plugins, if they are disabled, also disable the lib + use collectd_plugins_iptables || myconf+=" --with-libiptc=no" + use collectd_plugins_openldap || myconf+=" --with-libldap=no" + use collectd_plugins_redis || use collectd_plugins_write_redis || myconf+=" --with-libhiredis=no" + use collectd_plugins_smart || myconf+=" --with-libatasmart=no" + use collectd_plugins_gps || myconf+=" --with-libgps=no" + + if use collectd_plugins_gpu_nvidia; then + myconf+=" --with-cuda=${EPREFIX}/opt/cuda" + else + myconf+=" --with-cuda=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" + + # Python + if use collectd_plugins_python; then + myconf+=" --with-libpython=yes" + export PYTHON_CONFIG=$(python_get_PYTHON_CONFIG) + else + myconf+=" --with-libpython=no" + fi + + # XFS support + myconf+=" $(use_enable xfs)" + + # Finally, run econf. + KERNEL_DIR="${KERNEL_DIR}" econf --config-cache \ + $(use_enable static-libs static) \ + --localstatedir=/var ${myconf} +} + +src_install() { + emake DESTDIR="${D}" install + + perl_delete_localpod + + find "${ED}"/usr/ -name "*.la" -delete || die + + if use collectd_plugins_java; then + java-pkg_regjar "${ED}"/usr/share/${PN}/java/*.jar + fi + + if use collectd_plugins_disk && use udev; then + udev_newrules contrib/99-storage-collectd.rules 60-persistent-storage-collectd.rules + fi + + fowners root:collectd /etc/collectd.conf + fperms u=rw,g=r,o= /etc/collectd.conf + + einstalldocs + + if use contrib; then + insinto /usr/share/${PN} + doins -r contrib + fi + + keepdir /var/lib/${PN} + fowners collectd:collectd /var/lib/${PN} + + newinitd "${FILESDIR}/${PN}.initd-r3" ${PN} + newconfd "${FILESDIR}/${PN}.confd-r2" ${PN} + systemd_newunit "contrib/systemd.${PN}.service" ${PN}.service + + insinto /etc/logrotate.d + newins "${FILESDIR}/${PN}.logrotate" ${PN} + + newtmpfiles "${FILESDIR}"/${PN}.tmpfile ${PN}.conf + + sed \ + -e 's:^.*PIDFile "/var/run/collectd.pid":#PIDFile "/run/collectd.pid":' \ + -i "${ED}"/etc/collectd.conf || die + sed \ + -e 's:^# SocketFile "/var/run/collectd-unixsock":# SocketFile "/run/collectd/collectd.socket":' \ + -i "${ED}"/etc/collectd.conf || die + sed \ + -e 's:^.*LoadPlugin perl$:# The new, correct way to load the perl plugin -- \n# <LoadPlugin perl>\n# Globals true\n# </LoadPlugin>:' \ + -i "${ED}"/etc/collectd.conf || die + sed \ + -e 's:^.*LoadPlugin python$:# The new, correct way to load the python plugin -- \n# <LoadPlugin python>\n# Globals true\n# </LoadPlugin>:' \ + -i "${ED}"/etc/collectd.conf || die +} + +pkg_postinst() { + tmpfiles_process "${PN}.conf" + + if use filecaps; then + local caps=() + use collectd_plugins_ceph && caps+=('CAP_DAC_OVERRIDE') + use collectd_plugins_exec && caps+=('CAP_SETUID' 'CAP_SETGID') + use collectd_plugins_iptables && caps+=('CAP_NET_ADMIN') + use collectd_plugins_filecount && caps+=('CAP_DAC_READ_SEARCH') + + if use collectd_plugins_dns || use collectd_plugins_ping; then + caps+=('CAP_NET_RAW') + fi + + if use collectd_plugins_turbostat || use collectd_plugins_smart; then + caps+=('CAP_SYS_RAWIO') + fi + + if [ ${#caps[@]} -gt 0 ]; then + local caps_str=$(IFS=","; echo "${caps[*]}") + fcaps ${caps_str} usr/sbin/collectd + elog "Capabilities for ${EROOT}/usr/sbin/collectd set to:" + elog " ${caps_str}+EP" + elog + + local systemd_unit="$(systemd_get_systemunitdir)/collectd.service" + if [[ -e "${systemd_unit}" ]]; then + caps_str="${caps[*]}" + sed -i -e "s:^CapabilityBoundingSet=.*:CapabilityBoundingSet=${caps_str}:" "${systemd_unit}" || \ + die "Failed to set CapabilityBoundingSet in '${systemd_unit}'" + + elog "CapabilityBoundingSet in '${systemd_unit}'" + elog "updated to match capabilities set above." + elog + else + if has_version "sys-apps/systemd"; then + # Bug 596852 + ewarn "Failed to update CapabilityBoundingSet in '${systemd_unit}'" + ewarn "because unit was not found. Please file a bug about this." + fi + fi + fi + fi + + elog "Note: Collectd is only the collector." + elog " You need to install 'data' sources (applications) locally or" + elog " remotely on your own." + + elog + elog "Collectd is configured to run 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 collectd_plugins_smart; then + elog "" + elog "If you are using smart plugin and don't run collectd as root make sure" + elog "that the collectd user is allowed to access the disk you want to monitor" + elog "(can be done via udev rule for example) and that collectd has the required" + elog "capabilities set (which is the default when package was emerged with" + elog "'filecaps' USE flag set)." + 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/CGI, dev-perl/Config-General and net-analyzer/rrdtool[perl] to be installed." + fi +} diff --git a/app-metrics/collectd/files/collectd-5.12.0-nut-c99.patch b/app-metrics/collectd/files/collectd-5.12.0-nut-c99.patch new file mode 100644 index 000000000000..0935eed070e9 --- /dev/null +++ b/app-metrics/collectd/files/collectd-5.12.0-nut-c99.patch @@ -0,0 +1,143 @@ +https://github.com/collectd/collectd/commit/d409ffa2a64cac3fc2abe2bb86ec3a80cb34d0a6 + +From d409ffa2a64cac3fc2abe2bb86ec3a80cb34d0a6 Mon Sep 17 00:00:00 2001 +From: Jim Klimov <jimklimov+nut@gmail.com> +Date: Wed, 31 Aug 2022 11:40:01 +0200 +Subject: [PATCH] configure.ac, src/nut.c: detect int types required by NUT API + we build against + +Either use the stricter int types required by NUT headers since v2.8.0 release, +or the relaxed (arch-dependent) types required by older NUT releases - depending +on which NUT API version the collectd is building against at the moment. + +Inspired by discussion at https://github.com/networkupstools/nut/issues/1638 +--- a/configure.ac ++++ b/configure.ac +@@ -5881,6 +5881,106 @@ if test "x$with_libupsclient" = "xyes"; then + CPPFLAGS="$SAVE_CPPFLAGS" + fi + ++if test "x$with_libupsclient" = "xyes"; then ++ dnl The m4 script logic below is modelled after NUT_FUNC_GETNAMEINFO_ARGTYPES ++ dnl further originating in curl autoconf scripts or beyond. See there for an ++ dnl example of general-case logic to handle matching of numerous possible ++ dnl data types for each argument in supported API variants. ++ dnl Note: techically compiler complains here not about int types themselves, ++ dnl but about pointers to such data. We know "out of band" that e.g. NUT ++ dnl change to "size_t" happened at once for all arguments in the API, so ++ dnl simplify the handling here and now with that assumption. ++ AC_LANG_PUSH([C]) ++ SAVE_CPPFLAGS="$CPPFLAGS" ++ SAVE_LDFLAGS="$LDFLAGS" ++ SAVE_CFLAGS="$CFLAGS" ++ CPPFLAGS="$CPPFLAGS $with_libupsclient_cflags" ++ LDFLAGS="$LDFLAGS $with_libupsclient_libs" ++ CFLAGS="$CFLAGS $with_libupsclient_cflags" ++ if test "x$GCC" = "xyes"; then ++ CFLAGS="$CFLAGS -Wall -Werror" ++ fi ++ ++ dnl upscli_splitname() *is* there forever (2007 or older) ++ dnl but int types e.g. "port" changed in NUT 2.8.0 ++ dnl Also this is the UPSCONN_t::port field type: ++ AC_CACHE_CHECK([int type of port argument for NUT upscli_splitname], ++ [collectd_cv_func_upscli_splitname_args], [ ++ collectd_cv_func_upscli_splitname_args="unknown" ++ for port_arg in 'uint16_t' 'int' ; do ++ AC_COMPILE_IFELSE([ ++ AC_LANG_PROGRAM([ ++#include <upsclient.h> ++/* int upscli_splitname(const char *buf, char **upsname, char **hostname, <port_arg> *port); */ ++ ],[ ++const char *origname = "ups@localhost:3493"; ++$port_arg port=0; ++char *hostname; ++char *upsname; ++int res = upscli_splitname(origname, &upsname, &hostname, &port); ++return(res); ++ ]) ++ ],[ ++ collectd_cv_func_upscli_splitname_args="$port_arg" ++ break ++ ]) ++ done ++ ]) ++ ++ AS_IF([test x"$collectd_cv_func_upscli_splitname_args" = xunknown], ++ [AC_MSG_WARN([Can not find proper port type for upscli_splitname()]) ++ with_libupsclient="no (required data types for NUT API were not detected)"], ++ [AC_DEFINE_UNQUOTED(NUT_PORT_TYPE, $collectd_cv_func_upscli_splitname_args, ++ [Define to the integer type for TCP/IP ports used by NUT API we build against]) ++ ]) ++ ++ ++ AC_CACHE_CHECK([int type of length/numbering arguments for NUT upscli_list_next], ++ [collectd_cv_func_upscli_list_next_args], [ ++ collectd_cv_func_upscli_list_next_args="unknown" ++ for size_arg in 'size_t' 'unsigned int' 'int' ; do ++ AC_COMPILE_IFELSE([ ++ AC_LANG_PROGRAM([ ++#include <upsclient.h> ++/* int upscli_list_next(UPSCONN_t *ups, <size_arg> numq, const char **query, <size_arg> *numa, char ***answer); */ ++ ++#if HAVE_UPSCONN_T ++typedef UPSCONN_t collectd_upsconn_t; ++#elif HAVE_UPSCONN ++typedef UPSCONN collectd_upsconn_t; ++#else ++#error "Unable to determine the UPS connection type." ++#endif ++ ],[ ++$size_arg query_num=0; ++$size_arg answer_num=0; ++const char * query; ++char** answer; ++collectd_upsconn_t ups; ++int res = upscli_list_next(&ups, query_num, &query, &answer_num, &answer); ++return(res); ++ ]) ++ ],[ ++ collectd_cv_func_upscli_list_next_args="$size_arg" ++ break ++ ]) ++ done ++ ]) ++ ++ AS_IF([test x"$collectd_cv_func_upscli_list_next_args" = xunknown], ++ [AC_MSG_WARN([Can not find proper type for array sizes and string lengths used by upscli_list_next()]) ++ with_libupsclient="no (required data types for NUT API were not detected)"], ++ [AC_DEFINE_UNQUOTED(NUT_SIZE_TYPE, $collectd_cv_func_upscli_list_next_args, ++ [Define to the integer type for array sizes and string lengths used by NUT API we build against]) ++ ]) ++ ++ ++ CPPFLAGS="$SAVE_CPPFLAGS" ++ LDFLAGS="$SAVE_LDFLAGS" ++ CFLAGS="$SAVE_CFLAGS" ++ AC_LANG_POP([C]) ++fi ++ + if test "x$with_libupsclient" = "xyes"; then + BUILD_WITH_LIBUPSCLIENT_CFLAGS="$with_libupsclient_cflags" + BUILD_WITH_LIBUPSCLIENT_LIBS="$with_libupsclient_libs" +--- a/src/nut.c ++++ b/src/nut.c +@@ -46,7 +46,7 @@ struct nut_ups_s { + collectd_upsconn_t *conn; + char *upsname; + char *hostname; +- int port; ++ NUT_PORT_TYPE port; + nut_ups_t *next; + }; + +@@ -250,7 +250,7 @@ static int nut_read(user_data_t *user_data) { + const char *query[3] = {"VAR", ups->upsname, NULL}; + unsigned int query_num = 2; + char **answer; +- unsigned int answer_num; ++ NUT_SIZE_TYPE answer_num; + int status; + + /* (Re-)Connect if we have no connection */ + |