Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed install/remove of telegraf on non-systemd Debian/Ubuntu systems #2360

Merged
merged 8 commits into from
Apr 20, 2017
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,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.
Expand Down
51 changes: 31 additions & 20 deletions scripts/post-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we try this? I expect redhat would never have these scripts.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because we don't know on which Debian-Derivate the .deb package is being executed on later and so you don't know if it uses update-rc.d or chkconfig in advance. this is why we need both (so this .deb package can be run on as most distros as possible!)

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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why would we try this on debian? It looks like debian does have chkconfig, but the last version it was packaged for was jessie.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See above. You shouldn't depend on users only using Debian or Ubuntu. There are a ton of derivates which can use either update-rc.d or chkconfig, so this script should be as flexible as possible. what's you real problem here? i made it really flexible and tested it on several distributions (debian and non-debian) that it works. and it does perfectly.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay, so if we want to add support for chkconfig here we should also support it in the post-remove script.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're totally right, it's missing there. I'll rework the script and add support for it. Should be an easy quick fix.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@danielnelson chkconfig support for debian based systems in post-remove.sh has now been added

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
55 changes: 36 additions & 19 deletions scripts/post-remove.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
16 changes: 9 additions & 7 deletions scripts/pre-install.sh
Original file line number Diff line number Diff line change
@@ -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
9 changes: 4 additions & 5 deletions scripts/pre-remove.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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