b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | #!/bin/sh /etc/rc.common |
| 2 | # Copyright (C) 2013-2017 OpenWrt.org |
| 3 | |
| 4 | START=60 |
| 5 | USE_PROCD=1 |
| 6 | |
| 7 | _log() { |
| 8 | logger -p daemon.info -t prometheus-node-exporter-ucode "$@" |
| 9 | } |
| 10 | |
| 11 | start_service() { |
| 12 | . /lib/functions/network.sh |
| 13 | |
| 14 | local interface port bind4 bind6 |
| 15 | |
| 16 | config_load prometheus-node-exporter-ucode.main |
| 17 | config_get interface "main" listen_interface "loopback" |
| 18 | config_get port "main" listen_port 9101 |
| 19 | config_get keepalive "main" http_keepalive 70 |
| 20 | |
| 21 | [ "$interface" = "*" ] || { |
| 22 | network_get_ipaddr bind4 "$interface" |
| 23 | network_get_ipaddr6 bind6 "$interface" |
| 24 | [ -n "$bind4$bind6" ] || { |
| 25 | _log "defering start until listen interface $interface becomes ready" |
| 26 | return 0 |
| 27 | } |
| 28 | } |
| 29 | |
| 30 | procd_open_instance |
| 31 | |
| 32 | procd_set_param command /usr/sbin/uhttpd -f -c /dev/null -h /dev/null -S -D -o /metrics -O /usr/share/ucode/node-exporter/metrics.uc |
| 33 | |
| 34 | if [ "$interface" = "*" ]; then |
| 35 | procd_append_param command -p $port |
| 36 | else |
| 37 | [ -n "$bind4" ] && procd_append_param command -p $bind4:$port |
| 38 | [ -n "$bind6" ] && procd_append_param command -p [$bind6]:$port |
| 39 | fi |
| 40 | [ $keepalive -gt 0 ] && procd_append_param command -k $keepalive |
| 41 | |
| 42 | procd_add_jail prometheus-node-exporter-ucode log procfs sysfs ubus |
| 43 | procd_add_jail_mount "/usr/lib/uhttpd_ucode.so" |
| 44 | procd_add_jail_mount "/lib/libubus.so*" |
| 45 | procd_add_jail_mount "/lib/libuci.so" |
| 46 | procd_add_jail_mount "/usr/lib/ucode" |
| 47 | procd_add_jail_mount "/usr/lib/libnl*.so*" |
| 48 | procd_add_jail_mount "/usr/share/ucode/node-exporter" |
| 49 | procd_add_jail_mount "/etc/config" |
| 50 | |
| 51 | # TODO breaks the dsl collector? |
| 52 | #procd_set_param user nobody |
| 53 | #procd_set_param group nogroup |
| 54 | procd_set_param no_new_privs 1 |
| 55 | |
| 56 | procd_set_param stdout 1 |
| 57 | procd_set_param stderr 1 |
| 58 | procd_set_param respawn |
| 59 | |
| 60 | procd_close_instance |
| 61 | } |
| 62 | |
| 63 | service_triggers() |
| 64 | { |
| 65 | local interface |
| 66 | |
| 67 | procd_add_reload_trigger "prometheus-node-exporter-ucode" |
| 68 | |
| 69 | config_load prometheus-node-exporter-ucode.main |
| 70 | config_get interface "main" listen_interface "loopback" |
| 71 | |
| 72 | [ "$interface" = "*" ] || procd_add_reload_interface_trigger "$interface" |
| 73 | } |