From 748ca7d50377217378920bf36bbffced964a369f Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 20 Apr 2017 20:19:33 +0200 Subject: [PATCH] Fixed install/remove of telegraf on non-systemd Debian/Ubuntu systems (#2360) --- CHANGELOG.md | 1 + scripts/post-install.sh | 51 +++++++++++++++++++++++--------------- scripts/post-remove.sh | 55 +++++++++++++++++++++++++++-------------- scripts/pre-install.sh | 16 ++++++------ scripts/pre-remove.sh | 9 +++---- 5 files changed, 81 insertions(+), 51 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6160d7558..b19c3785a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -85,6 +85,7 @@ be deprecated eventually. - [#2356](https://github.com/influxdata/telegraf/issues/2356): cpu input panic when /proc/stat is empty. - [#2341](https://github.com/influxdata/telegraf/issues/2341): telegraf swallowing panics in --test mode. - [#2358](https://github.com/influxdata/telegraf/pull/2358): Create pidfile with 644 permissions & defer file deletion. +- [#2360](https://github.com/influxdata/telegraf/pull/2360): Fixed install/remove of telegraf on non-systemd Debian/Ubuntu systems - [#2282](https://github.com/influxdata/telegraf/issues/2282): Reloading telegraf freezes prometheus output. - [#2390](https://github.com/influxdata/telegraf/issues/2390): Empty tag value causes error on InfluxDB output. - [#2380](https://github.com/influxdata/telegraf/issues/2380): buffer_size field value is negative number from "internal" plugin. diff --git a/scripts/post-install.sh b/scripts/post-install.sh index 45a19d26c..2baabe69a 100644 --- a/scripts/post-install.sh +++ b/scripts/post-install.sh @@ -24,10 +24,8 @@ function install_chkconfig { chkconfig --add telegraf } -id telegraf &>/dev/null -if [[ $? -ne 0 ]]; then - grep "^telegraf:" /etc/group &>/dev/null - if [[ $? -ne 0 ]]; then +if ! id telegraf &>/dev/null; then + if ! grep "^telegraf:" /etc/group &>/dev/null; then useradd -r -K USERGROUPS_ENAB=yes -M telegraf -s /bin/false -d /etc/telegraf else useradd -r -K USERGROUPS_ENAB=yes -M telegraf -s /bin/false -d /etc/telegraf -g telegraf @@ -60,31 +58,44 @@ fi # Distribution-specific logic if [[ -f /etc/redhat-release ]]; then # RHEL-variant logic - which systemctl &>/dev/null - if [[ $? -eq 0 ]]; then - install_systemd + if [[ "$(readlink /proc/1/exe)" == */systemd ]]; then + install_systemd else - # Assuming sysv - install_init - install_chkconfig + # Assuming SysVinit + install_init + # Run update-rc.d or fallback to chkconfig if not available + if which update-rc.d &>/dev/null; then + install_update_rcd + else + install_chkconfig + fi fi elif [[ -f /etc/debian_version ]]; then # Debian/Ubuntu logic - which systemctl &>/dev/null - if [[ $? -eq 0 ]]; then - install_systemd - systemctl restart telegraf || echo "WARNING: systemd not running." + if [[ "$(readlink /proc/1/exe)" == */systemd ]]; then + install_systemd + systemctl restart telegraf || echo "WARNING: systemd not running." else - # Assuming sysv - install_init - install_update_rcd - invoke-rc.d telegraf restart + # Assuming SysVinit + install_init + # Run update-rc.d or fallback to chkconfig if not available + if which update-rc.d &>/dev/null; then + install_update_rcd + else + install_chkconfig + fi + invoke-rc.d telegraf restart fi elif [[ -f /etc/os-release ]]; then source /etc/os-release if [[ $ID = "amzn" ]]; then # Amazon Linux logic - install_init - install_chkconfig + install_init + # Run update-rc.d or fallback to chkconfig if not available + if which update-rc.d &>/dev/null; then + install_update_rcd + else + install_chkconfig + fi fi fi diff --git a/scripts/post-remove.sh b/scripts/post-remove.sh index 0f262d225..b66a3aa9a 100644 --- a/scripts/post-remove.sh +++ b/scripts/post-remove.sh @@ -15,28 +15,45 @@ function disable_chkconfig { rm -f /etc/init.d/telegraf } -if [[ "$1" == "0" ]]; then - # RHEL and any distribution that follow RHEL, Amazon Linux covered - # telegraf is no longer installed, remove from init system - rm -f /etc/default/telegraf +if [[ -f /etc/redhat-release ]]; then + # RHEL-variant logic + if [[ "$1" = "0" ]]; then + # InfluxDB is no longer installed, remove from init system + rm -f /etc/default/telegraf - which systemctl &>/dev/null - if [[ $? -eq 0 ]]; then - disable_systemd - else - # Assuming sysv - disable_chkconfig + if [[ "$(readlink /proc/1/exe)" == */systemd ]]; then + disable_systemd + else + # Assuming sysv + disable_chkconfig + fi fi -elif [ "$1" == "remove" -o "$1" == "purge" ]; then +elif [[ -f /etc/debian_version ]]; then # Debian/Ubuntu logic - # Remove/purge - rm -f /etc/default/telegraf + if [ "$1" == "remove" -o "$1" == "purge" ]; then + # Remove/purge + rm -f /etc/default/telegraf - which systemctl &>/dev/null - if [[ $? -eq 0 ]]; then - disable_systemd - else - # Assuming sysv - disable_update_rcd + if [[ "$(readlink /proc/1/exe)" == */systemd ]]; then + disable_systemd + else + # Assuming sysv + # Run update-rc.d or fallback to chkconfig if not available + if which update-rc.d &>/dev/null; then + disable_update_rcd + else + disable_chkconfig + fi + fi + fi +elif [[ -f /etc/os-release ]]; then + source /etc/os-release + if [[ $ID = "amzn" ]]; then + # Amazon Linux logic + if [[ "$1" = "0" ]]; then + # InfluxDB is no longer installed, remove from init system + rm -f /etc/default/telegraf + disable_chkconfig + fi fi fi diff --git a/scripts/pre-install.sh b/scripts/pre-install.sh index 443d6bc87..b371f462d 100644 --- a/scripts/pre-install.sh +++ b/scripts/pre-install.sh @@ -1,14 +1,16 @@ #!/bin/bash -if [[ -f /etc/opt/telegraf/telegraf.conf ]]; then +if [[ -d /etc/opt/telegraf ]]; then # Legacy configuration found if [[ ! -d /etc/telegraf ]]; then - # New configuration does not exist, move legacy configuration to new location - echo -e "Please note, Telegraf's configuration is now located at '/etc/telegraf' (previously '/etc/opt/telegraf')." - mv /etc/opt/telegraf /etc/telegraf + # New configuration does not exist, move legacy configuration to new location + echo -e "Please note, Telegraf's configuration is now located at '/etc/telegraf' (previously '/etc/opt/telegraf')." + mv -vn /etc/opt/telegraf /etc/telegraf - backup_name="telegraf.conf.$(date +%s).backup" - echo "A backup of your current configuration can be found at: /etc/telegraf/$backup_name" - cp -a /etc/telegraf/telegraf.conf /etc/telegraf/$backup_name + if [[ -f /etc/telegraf/telegraf.conf ]]; then + backup_name="telegraf.conf.$(date +%s).backup" + echo "A backup of your current configuration can be found at: /etc/telegraf/${backup_name}" + cp -a "/etc/telegraf/telegraf.conf" "/etc/telegraf/${backup_name}" + fi fi fi diff --git a/scripts/pre-remove.sh b/scripts/pre-remove.sh index a57184630..2887fc9b6 100644 --- a/scripts/pre-remove.sh +++ b/scripts/pre-remove.sh @@ -5,11 +5,10 @@ BIN_DIR=/usr/bin # Distribution-specific logic if [[ -f /etc/debian_version ]]; then # Debian/Ubuntu logic - which systemctl &>/dev/null - if [[ $? -eq 0 ]]; then - deb-systemd-invoke stop telegraf.service + if [[ "$(readlink /proc/1/exe)" == */systemd ]]; then + deb-systemd-invoke stop telegraf.service else - # Assuming sysv - invoke-rc.d telegraf stop + # Assuming sysv + invoke-rc.d telegraf stop fi fi