#!/bin/bash if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4 set -eE -o pipefail trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@" usage() { cat </dev/null; then apt-get -y install $p fi done fi if $do_setup && ! type -t rsync &>/dev/null; then # note: we could use diff or cmp instead. apt-get -y install rsync fi sysd_reload=false installed_file=false i() { # install file local tmp tmpdir dest="$1" local base="${dest##*/}" local dir="${dest%/*}" if [[ $dir != "$base" ]]; then # dest has a directory component mkdir -p "$dir" fi tmpdir=$(mktemp -d) cat >$tmpdir/"$base" tmp=$(rsync -ic $tmpdir/"$base" "$dest") if [[ $tmp ]]; then printf "%s\n" "$tmp" installed_file=true if [[ $dest == /etc/systemd/system/* ]]; then sysd_reload=true fi fi rm -rf $tmpdir } if $dl_bin; then if [[ -s /usr/local/src/node-exporter-url ]]; then installed_url=$(cat /usr/local/src/node-exporter-url) fi url=$(curl -s https://api.github.com/repos/prometheus/node_exporter/releases/latest | jq -r '.assets[].browser_download_url | match(".*linux-amd64.tar.gz$").string') if [[ ! $url ]]; then echo $0: error failed to get url exit 1 fi if [[ $url != "$installed_url" ]]; then tmpdir=$(mktemp -d) cd $tmpdir f=${url##*/} wget -nv $url tar -xf $f dir=${f%.tar.gz} install $dir/node_exporter /usr/local/bin/prometheus-node-exporter printf "%s\n" "$url" >/usr/local/src/node-exporter-url cd rm -rf $tmpdir fi fi if ! $do_setup; then exit 0 fi # taken from postinstall script if ! getent passwd prometheus &>/dev/null; then adduser --quiet --system --home /var/lib/prometheus --no-create-home \ --group --gecos "Prometheus daemon" prometheus fi # textfile collector dir mkdir -p /var/lib/prometheus/node-exporter chown prometheus:prometheus /var/lib/prometheus i /etc/default/prometheus-node-exporter < # Author: Guillem Jover DESC="Prometheus exporter for machine metrics" NAME=prometheus-node-exporter USER=prometheus GROUP=$USER DAEMON=/usr/bin/$NAME PIDFILE=/run/prometheus/$NAME.pid LOGFILE=/var/log/prometheus/$NAME.log START_ARGS="--no-close --background --make-pidfile" STOP_ARGS="--remove-pidfile" do_start_prepare() { mkdir -p $(dirname $PIDFILE) } do_start_cmd_override() { start-stop-daemon --start --quiet --oknodo \ --exec $DAEMON --pidfile $PIDFILE --user $USER --group $GROUP \ --chuid $USER:$GROUP $START_ARGS -- $ARGS >>$LOGFILE 2>&1 } do_stop_cmd_override() { start-stop-daemon --stop --quiet --oknodo --retry=TERM/30/KILL/5 \ --exec $DAEMON --pidfile $PIDFILE --user $USER $STOP_ARGS } alias do_reload=do_reload_sigusr1 EOF chmod +x /etc/init.d/prometheus-node-exporter mkdir -p /var/log/prometheus chown prometheus:prometheus /var/log/prometheus update-rc.d prometheus-node-exporter defaults running=false if type -t pgrep &>/dev/null && pgrep -f prometheus-node-exporter &>/dev/null; then running=true fi if $installed_file || ! $running; then /etc/init.d/prometheus-node-exporter restart fi i /etc/logrotate.d/prometheus-node-exporter <<'EOF' /var/log/prometheus/prometheus-node-exporter.log { weekly rotate 10 copytruncate compress delaycompress notifempty missingok } EOF fi