Hello Michael, the node exporter does not have a daemon mode. I could alternatively pip the output into a log file: loadproc /usr/bin/node_exporter $OPTIONS >> /var/log/node_exporter.log 2>&1 & Should I add a third patch to do my fixes or adjust patch 1 & 2 each? Kind regards Holger Am 08.06.21 um 18:56 schrieb Michael Tremer: > Hello, > > This looks quite good, too. > > Just a minor detail below... > >> On 6 Jun 2021, at 18:48, Holger Sunke wrote: >> >> --- >> config/node_exporter/node_exporter_options | 203 +++++++++++++++++++++ >> config/rootfiles/packages/node_exporter | 3 + >> lfs/node_exporter | 94 ++++++++++ >> make.sh | 1 + >> src/initscripts/packages/node_exporter | 42 +++++ >> src/paks/node_exporter/install.sh | 31 ++++ >> src/paks/node_exporter/uninstall.sh | 30 +++ >> src/paks/node_exporter/update.sh | 27 +++ >> 8 files changed, 431 insertions(+) >> create mode 100644 config/node_exporter/node_exporter_options >> create mode 100644 config/rootfiles/packages/node_exporter >> create mode 100644 lfs/node_exporter >> create mode 100644 src/initscripts/packages/node_exporter >> create mode 100644 src/paks/node_exporter/install.sh >> create mode 100644 src/paks/node_exporter/uninstall.sh >> create mode 100644 src/paks/node_exporter/update.sh >> >> diff --git a/config/node_exporter/node_exporter_options b/config/node_exporter/node_exporter_options >> new file mode 100644 >> index 000000000..f614b1102 >> --- /dev/null >> +++ b/config/node_exporter/node_exporter_options >> @@ -0,0 +1,203 @@ >> +# Customize node_exporter startup command line flags by editing OPTIONS below: >> + >> +export OPTIONS="--web.listen-address=:9100" >> + >> +#Flags: >> +# -h, --help Show context-sensitive help (also try >> +# --help-long and --help-man). >> +# --collector.bcache.priorityStats >> +# Expose expensive priority stats. >> +# --collector.cpu.info Enables metric cpu_info >> +# --collector.cpu.info.flags-include=COLLECTOR.CPU.INFO.FLAGS-INCLUDE >> +# Filter the `flags` field in cpuInfo with a >> +# value that must be a regular expression >> +# --collector.cpu.info.bugs-include=COLLECTOR.CPU.INFO.BUGS-INCLUDE >> +# Filter the `bugs` field in cpuInfo with a value >> +# that must be a regular expression >> +# --collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$" >> +# Regexp of devices to ignore for diskstats. >> +# --collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker/.+)($|/)" >> +# Regexp of mount points to ignore for filesystem >> +# collector. >> +# --collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" >> +# Regexp of filesystem types to ignore for >> +# filesystem collector. >> +# --collector.ipvs.backend-labels="local_address,local_port,remote_address,remote_port,proto,local_mark" >> +# Comma separated list for IPVS backend stats >> +# labels. >> +# --collector.netclass.ignored-devices="^$" >> +# Regexp of net devices to ignore for netclass >> +# collector. >> +# --collector.netdev.device-include=COLLECTOR.NETDEV.DEVICE-INCLUDE >> +# Regexp of net devices to include (mutually >> +# exclusive to device-exclude). >> +# --collector.netdev.device-exclude=COLLECTOR.NETDEV.DEVICE-EXCLUDE >> +# Regexp of net devices to exclude (mutually >> +# exclusive to device-include). >> +# --collector.netstat.fields="^(.*_(InErrors|InErrs)|Ip_Forwarding|Ip(6|Ext)_(InOctets|OutOctets)|Icmp6?_(InMsgs|OutMsgs)|TcpExt_(Listen.*|Syncookies.*|TCPSynRetrans)|Tcp_(ActiveOpens|InSegs|OutSegs|OutRsts|PassiveOpens|RetransSegs|CurrEstab)|Udp6?_(InDatagrams|OutDatagrams|NoPorts|RcvbufErrors|SndbufErrors))$" >> +# Regexp of fields to return for netstat >> +# collector. >> +# --collector.ntp.server="127.0.0.1" >> +# NTP server to use for ntp collector >> +# --collector.ntp.protocol-version=4 >> +# NTP protocol version >> +# --collector.ntp.server-is-local >> +# Certify that collector.ntp.server address is >> +# not a public ntp server >> +# --collector.ntp.ip-ttl=1 IP TTL to use while sending NTP query >> +# --collector.ntp.max-distance=3.46608s >> +# Max accumulated distance to the root >> +# --collector.ntp.local-offset-tolerance=1ms >> +# Offset between local clock and local ntpd time >> +# to tolerate >> +# --path.procfs="/proc" procfs mountpoint. >> +# --path.sysfs="/sys" sysfs mountpoint. >> +# --path.rootfs="/" rootfs mountpoint. >> +# --collector.perf.cpus="" List of CPUs from which perf metrics should be >> +# collected >> +# --collector.perf.tracepoint=COLLECTOR.PERF.TRACEPOINT ... >> +# perf tracepoint that should be collected >> +# --collector.powersupply.ignored-supplies="^$" >> +# Regexp of power supplies to ignore for >> +# powersupplyclass collector. >> +# --collector.qdisc.fixtures="" >> +# test fixtures to use for qdisc collector >> +# end-to-end testing >> +# --collector.runit.servicedir="/etc/service" >> +# Path to runit service directory. >> +# --collector.supervisord.url="http://localhost:9001/RPC2" >> +# XML RPC endpoint. >> +# --collector.systemd.unit-include=".+" >> +# Regexp of systemd units to include. Units must >> +# both match include and not match exclude to be >> +# included. >> +# --collector.systemd.unit-exclude=".+\\.(automount|device|mount|scope|slice)" >> +# Regexp of systemd units to exclude. Units must >> +# both match include and not match exclude to be >> +# included. >> +# --collector.systemd.enable-task-metrics >> +# Enables service unit tasks metrics >> +# unit_tasks_current and unit_tasks_max >> +# --collector.systemd.enable-restarts-metrics >> +# Enables service unit metric >> +# service_restart_total >> +# --collector.systemd.enable-start-time-metrics >> +# Enables service unit metric >> +# unit_start_time_seconds >> +# --collector.textfile.directory="" >> +# Directory to read text files with metrics from. >> +# --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*" >> +# Regexp of fields to return for vmstat >> +# collector. >> +# --collector.wifi.fixtures="" >> +# test fixtures to use for wifi collector metrics >> +# --collector.arp Enable the arp collector (default: enabled). >> +# --collector.bcache Enable the bcache collector (default: enabled). >> +# --collector.bonding Enable the bonding collector (default: >> +# enabled). >> +# --collector.btrfs Enable the btrfs collector (default: enabled). >> +# --collector.buddyinfo Enable the buddyinfo collector (default: >> +# disabled). >> +# --collector.conntrack Enable the conntrack collector (default: >> +# enabled). >> +# --collector.cpu Enable the cpu collector (default: enabled). >> +# --collector.cpufreq Enable the cpufreq collector (default: >> +# enabled). >> +# --collector.diskstats Enable the diskstats collector (default: >> +# enabled). >> +# --collector.drbd Enable the drbd collector (default: disabled). >> +# --collector.edac Enable the edac collector (default: enabled). >> +# --collector.entropy Enable the entropy collector (default: >> +# enabled). >> +# --collector.fibrechannel Enable the fibrechannel collector (default: >> +# enabled). >> +# --collector.filefd Enable the filefd collector (default: enabled). >> +# --collector.filesystem Enable the filesystem collector (default: >> +# enabled). >> +# --collector.hwmon Enable the hwmon collector (default: enabled). >> +# --collector.infiniband Enable the infiniband collector (default: >> +# enabled). >> +# --collector.interrupts Enable the interrupts collector (default: >> +# disabled). >> +# --collector.ipvs Enable the ipvs collector (default: enabled). >> +# --collector.ksmd Enable the ksmd collector (default: disabled). >> +# --collector.loadavg Enable the loadavg collector (default: >> +# enabled). >> +# --collector.logind Enable the logind collector (default: >> +# disabled). >> +# --collector.mdadm Enable the mdadm collector (default: enabled). >> +# --collector.meminfo Enable the meminfo collector (default: >> +# enabled). >> +# --collector.meminfo_numa Enable the meminfo_numa collector (default: >> +# disabled). >> +# --collector.mountstats Enable the mountstats collector (default: >> +# disabled). >> +# --collector.netclass Enable the netclass collector (default: >> +# enabled). >> +# --collector.netdev Enable the netdev collector (default: enabled). >> +# --collector.netstat Enable the netstat collector (default: >> +# enabled). >> +# --collector.network_route Enable the network_route collector (default: >> +# disabled). >> +# --collector.nfs Enable the nfs collector (default: enabled). >> +# --collector.nfsd Enable the nfsd collector (default: enabled). >> +# --collector.ntp Enable the ntp collector (default: disabled). >> +# --collector.perf Enable the perf collector (default: disabled). >> +# --collector.powersupplyclass >> +# Enable the powersupplyclass collector (default: >> +# enabled). >> +# --collector.pressure Enable the pressure collector (default: >> +# enabled). >> +# --collector.processes Enable the processes collector (default: >> +# disabled). >> +# --collector.qdisc Enable the qdisc collector (default: disabled). >> +# --collector.rapl Enable the rapl collector (default: enabled). >> +# --collector.runit Enable the runit collector (default: disabled). >> +# --collector.schedstat Enable the schedstat collector (default: >> +# enabled). >> +# --collector.sockstat Enable the sockstat collector (default: >> +# enabled). >> +# --collector.softnet Enable the softnet collector (default: >> +# enabled). >> +# --collector.stat Enable the stat collector (default: enabled). >> +# --collector.supervisord Enable the supervisord collector (default: >> +# disabled). >> +# --collector.systemd Enable the systemd collector (default: >> +# disabled). >> +# --collector.tcpstat Enable the tcpstat collector (default: >> +# disabled). >> +# --collector.textfile Enable the textfile collector (default: >> +# enabled). >> +# --collector.thermal_zone Enable the thermal_zone collector (default: >> +# enabled). >> +# --collector.time Enable the time collector (default: enabled). >> +# --collector.timex Enable the timex collector (default: enabled). >> +# --collector.udp_queues Enable the udp_queues collector (default: >> +# enabled). >> +# --collector.uname Enable the uname collector (default: enabled). >> +# --collector.vmstat Enable the vmstat collector (default: enabled). >> +# --collector.wifi Enable the wifi collector (default: disabled). >> +# --collector.xfs Enable the xfs collector (default: enabled). >> +# --collector.zfs Enable the zfs collector (default: enabled). >> +# --collector.zoneinfo Enable the zoneinfo collector (default: >> +# disabled). >> +# --web.listen-address=":9100" >> +# Address on which to expose metrics and web >> +# interface. >> +# --web.telemetry-path="/metrics" >> +# Path under which to expose metrics. >> +# --web.disable-exporter-metrics >> +# Exclude metrics about the exporter itself >> +# (promhttp_*, process_*, go_*). >> +# --web.max-requests=40 Maximum number of parallel scrape requests. Use >> +# 0 to disable. >> +# --collector.disable-defaults >> +# Set all collectors to disabled by default. >> +# --web.config="" [EXPERIMENTAL] Path to config yaml file that >> +# can enable TLS or authentication. >> +# --log.level=info Only log messages with the given severity or >> +# above. One of: [debug, info, warn, error] >> +# --log.format=logfmt Output format of log messages. One of: [logfmt, >> +# json] >> +# --version Show application version. >> + >> diff --git a/config/rootfiles/packages/node_exporter b/config/rootfiles/packages/node_exporter >> new file mode 100644 >> index 000000000..994c8365b >> --- /dev/null >> +++ b/config/rootfiles/packages/node_exporter >> @@ -0,0 +1,3 @@ >> +usr/bin/node_exporter >> +etc/node_exporter_options >> +etc/rc.d/init.d/node_exporter >> diff --git a/lfs/node_exporter b/lfs/node_exporter >> new file mode 100644 >> index 000000000..942816754 >> --- /dev/null >> +++ b/lfs/node_exporter >> @@ -0,0 +1,94 @@ >> +############################################################################## >> +# # >> +# IPFire.org - A linux based firewall # >> +# Copyright (C) 2007 Michael Tremer & Christian Schmidt # >> +# # >> +# This program is free software: you can redistribute it and/or modify # >> +# it under the terms of the GNU General Public License as published by # >> +# the Free Software Foundation, either version 3 of the License, or # >> +# (at your option) any later version. # >> +# # >> +# This program is distributed in the hope that it will be useful, # >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of # >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # >> +# GNU General Public License for more details. # >> +# # >> +# You should have received a copy of the GNU General Public License # >> +# along with this program. If not, see . # >> +# # >> +############################################################################### >> + >> +############################################################################### >> +# Definitions >> +############################################################################### >> + >> +include Config >> + >> +VER = 1.1.2 >> + >> +THISAPP = node_exporter-$(VER) >> +DL_FILE = $(THISAPP).tar.gz >> +DL_FROM = https://github.com/prometheus/node_exporter/archive/v$(VER)/ >> +DIR_APP = $(DIR_SRC)/$(THISAPP) >> +TARGET = $(DIR_INFO)/$(THISAPP) >> +SUP_ARCH = x86_64 i586 aarch64 armv5tel >> +PROG = node_exporter >> +PAK_VER = 1 >> + >> +DEPS = "" >> + >> +############################################################################### >> +# Top-level Rules >> +############################################################################### >> + >> +objects = $(DL_FILE) >> + >> +$(DL_FILE) = $(DL_FROM)/$(DL_FILE) >> + >> +$(DL_FILE)_MD5 = 33c2be846dbd502f9c0efab149a8cbc5 >> + >> +install : $(TARGET) >> +check : $(patsubst %,$(DIR_CHK)/%,$(objects)) >> + >> +download : $(patsubst %,$(DIR_DL)/%,$(objects)) >> + >> +md5 : $(subst %,%_MD5,$(objects)) >> + >> +dist : >> + @$(PAK) >> + >> +############################################################################### >> +# Downloading, checking, md5sum >> +############################################################################### >> + >> +$(patsubst %,$(DIR_CHK)/%,$(objects)) : >> + @$(CHECK) >> + >> +$(patsubst %,$(DIR_DL)/%,$(objects)) : >> + @$(LOAD) >> + >> +$(subst %,%_MD5,$(objects)) : >> + @$(MD5) >> + >> +############################################################################### >> +# Installation Details >> +############################################################################### >> + >> +$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) >> + @$(PREBUILD) >> + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) >> + cd $(DIR_APP) && make build $(MAKETUNING) $(EXTRA_MAKE) >> + >> + # install compiled binary >> + cd $(DIR_APP) && cp node_exporter /usr/bin >> + >> + # install configuration file >> + install -v -m 644 $(DIR_SRC)/config/node_exporter/node_exporter_options \ >> + /etc/node_exporter_options >> + >> + # Install initscript >> + $(call INSTALL_INITSCRIPT,node_exporter) >> + >> + @rm -rf $(DIR_APP) >> + @$(POSTBUILD) >> + >> diff --git a/make.sh b/make.sh >> index 4af0081e9..671f15558 100755 >> --- a/make.sh >> +++ b/make.sh >> @@ -1632,6 +1632,7 @@ buildipfire() { >> lfsmake2 socat >> lfsmake2 libcdada >> lfsmake2 pmacct >> + lfsmake2 node_exporter >> } >> >> buildinstaller() { >> diff --git a/src/initscripts/packages/node_exporter b/src/initscripts/packages/node_exporter >> new file mode 100644 >> index 000000000..b9cbc6ab9 >> --- /dev/null >> +++ b/src/initscripts/packages/node_exporter >> @@ -0,0 +1,42 @@ >> +#!/bin/sh >> +######################################################################## >> +# Begin $rc_base/init.d/ >> +# >> +# Description : Prometheus Node Exporter daemon >> +# >> +######################################################################## >> + >> +. /etc/sysconfig/rc >> +. ${rc_functions} >> + >> +# read configurable OPTIONS >> +. /etc/node_exporter_options >> + >> +case "${1}" in >> + start) >> + boot_mesg "Starting..." > > The “Starting…” line normally has the name of the program. > >> + loadproc /usr/bin/node_exporter $OPTIONS > /dev/null 2>&1 & > > You are throwing away the output of loadproc as well as any potential error messages. > > Does this program have a way to fork itself into the background? > >> + ;; >> + >> + stop) >> + boot_mesg "Stopping..." > > Same here. > >> + killproc /usr/bin/node_exporter >> + ;; >> + >> + restart) >> + ${0} stop >> + sleep 1 >> + ${0} start >> + ;; >> + >> + status) >> + statusproc /usr/bin/node_exporter >> + ;; >> + >> + *) >> + echo "Usage: ${0} {start|stop|restart|status}" >> + exit 1 >> + ;; >> +esac >> + >> +# End $rc_base/init.d/ >> diff --git a/src/paks/node_exporter/install.sh b/src/paks/node_exporter/install.sh >> new file mode 100644 >> index 000000000..e9272d7cb >> --- /dev/null >> +++ b/src/paks/node_exporter/install.sh >> @@ -0,0 +1,31 @@ >> +#!/bin/bash >> +############################################################################ >> +# # >> +# This file is part of the IPFire Firewall. # >> +# # >> +# IPFire is free software; you can redistribute it and/or modify # >> +# it under the terms of the GNU General Public License as published by # >> +# the Free Software Foundation; either version 2 of the License, or # >> +# (at your option) any later version. # >> +# # >> +# IPFire is distributed in the hope that it will be useful, # >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of # >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # >> +# GNU General Public License for more details. # >> +# # >> +# You should have received a copy of the GNU General Public License # >> +# along with IPFire; if not, write to the Free Software # >> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # >> +# # >> +# Copyright (C) 2007 IPFire-Team . # >> +# # >> +############################################################################ >> +# >> +. /opt/pakfire/lib/functions.sh >> +extract_files >> +restore_backup ${NAME} >> +start_service --background ${NAME} >> + >> +ln -svf ../init.d/node_exporter /etc/rc.d/rc0.d/K30node_exporter >> +ln -svf ../init.d/node_exporter /etc/rc.d/rc3.d/S40node_exporter >> +ln -svf ../init.d/node_exporter /etc/rc.d/rc6.d/K30node_exporter >> diff --git a/src/paks/node_exporter/uninstall.sh b/src/paks/node_exporter/uninstall.sh >> new file mode 100644 >> index 000000000..710baf8b4 >> --- /dev/null >> +++ b/src/paks/node_exporter/uninstall.sh >> @@ -0,0 +1,30 @@ >> +#!/bin/bash >> +############################################################################ >> +# # >> +# This file is part of the IPFire Firewall. # >> +# # >> +# IPFire is free software; you can redistribute it and/or modify # >> +# it under the terms of the GNU General Public License as published by # >> +# the Free Software Foundation; either version 2 of the License, or # >> +# (at your option) any later version. # >> +# # >> +# IPFire is distributed in the hope that it will be useful, # >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of # >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # >> +# GNU General Public License for more details. # >> +# # >> +# You should have received a copy of the GNU General Public License # >> +# along with IPFire; if not, write to the Free Software # >> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # >> +# # >> +# Copyright (C) 2007 IPFire-Team . # >> +# # >> +############################################################################ >> +# >> +. /opt/pakfire/lib/functions.sh >> +/etc/init.d/node_exporter stop >> +make_backup ${NAME} >> +remove_files >> + >> +rm -rfv /etc/rc.d/rc*.d/*node_exporter >> + >> diff --git a/src/paks/node_exporter/update.sh b/src/paks/node_exporter/update.sh >> new file mode 100644 >> index 000000000..99776659c >> --- /dev/null >> +++ b/src/paks/node_exporter/update.sh >> @@ -0,0 +1,27 @@ >> +#!/bin/bash >> +############################################################################ >> +# # >> +# This file is part of the IPFire Firewall. # >> +# # >> +# IPFire is free software; you can redistribute it and/or modify # >> +# it under the terms of the GNU General Public License as published by # >> +# the Free Software Foundation; either version 2 of the License, or # >> +# (at your option) any later version. # >> +# # >> +# IPFire is distributed in the hope that it will be useful, # >> +# but WITHOUT ANY WARRANTY; without even the implied warranty of # >> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # >> +# GNU General Public License for more details. # >> +# # >> +# You should have received a copy of the GNU General Public License # >> +# along with IPFire; if not, write to the Free Software # >> +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # >> +# # >> +# Copyright (C) 2007-2020 IPFire-Team . # >> +# # >> +############################################################################ >> +# >> +. /opt/pakfire/lib/functions.sh >> +extract_backup_includes >> +./uninstall.sh >> +./install.sh >> -- >> 2.30.2 >> >