blob: 96f7c12704a7f22a8ad1fac4b458c21a95bd27b0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
#!/usr/bin/env bash
#shellcheck disable=SC2164
# this script will uninstall netdata
# Variables needed by script:
# - PATH
# - CFLAGS
# - NETDATA_CONFIGURE_OPTIONS
# - REINSTALL_COMMAND
# - NETDATA_TARBALL_URL
# - NETDATA_TARBALL_CHECKSUM_URL
# - NETDATA_TARBALL_CHECKSUM
# Usually stored in /etc/netdata/.environment
: "${ENVIRONMENT_FILE:=THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT}"
# shellcheck source=/dev/null
source "${ENVIRONMENT_FILE}" || exit 1
if [ "${INSTALL_UID}" != "$(id -u)" ]; then
echo >&2 "You are running this script as user with uid $(id -u). We recommend to run this script as root (user with uid 0)"
exit 1
fi
# signal netdata to start saving its database
# this is handy if your database is big
pids=$(pidof netdata)
do_not_start=
if [ -n "${pids}" ]; then
#shellcheck disable=SC2086
kill -USR1 ${pids}
else
# netdata is currently not running, so do not start it after updating
do_not_start="--dont-start-it"
fi
tmp=
if [ -t 2 ]; then
# we are running on a terminal
# open fd 3 and send it to stderr
exec 3>&2
else
# we are headless
# create a temporary file for the log
tmp=$(mktemp /tmp/netdata-updater.log.XXXXXX)
# open fd 3 and send it to tmp
exec 3>"${tmp}"
fi
info() {
echo >&3 "$(date) : INFO: " "${@}"
}
error() {
echo >&3 "$(date) : ERROR: " "${@}"
}
# this is what we will do if it fails (head-less only)
failed() {
error "FAILED TO UPDATE NETDATA : ${1}"
if [ -n "${tmp}" ]; then
cat >&2 "${tmp}"
rm "${tmp}"
fi
exit 1
}
update() {
[ -z "${tmp}" ] && info "Running on a terminal - (this script also supports running headless from crontab)"
# Check if tmp is mounted as noexec
if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
pattern="/opt/netdata-updater-XXXXXX"
else
pattern="/tmp/netdata-updater-XXXXXX"
fi
dir=$(mktemp -d "$pattern")
cd "$dir"
wget "${NETDATA_TARBALL_CHECKSUM_URL}" -O sha256sum.txt >&3 2>&3
if grep "${NETDATA_TARBALL_CHECKSUM}" sha256sum.txt >&3 2>&3; then
info "Newest version is already installed"
exit 0
fi
wget "${NETDATA_TARBALL_URL}" -O netdata-latest.tar.gz >&3 2>&3
if ! grep netdata-latest.tar.gz sha256sum.txt | sha256sum --check - >&3 2>&3; then
failed "Tarball checksum validation failed. Stopping netdata upgrade and leaving tarball in ${dir}"
fi
NEW_CHECKSUM="$(sha256sum netdata-latest.tar.gz 2>/dev/null| cut -d' ' -f1)"
tar -xf netdata-latest.tar.gz >&3 2>&3
rm netdata-latest.tar.gz >&3 2>&3
cd netdata-*
info "Re-installing netdata..."
${REINSTALL_COMMAND} --dont-wait ${do_not_start} >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA"
sed -i '/NETDATA_TARBALL/d' "${ENVIRONMENT_FILE}"
cat <<EOF >>"${ENVIRONMENT_FILE}"
NETDATA_TARBALL_URL="$NETDATA_TARBALL_URL"
NETDATA_TARBALL_CHECKSUM_URL="$NETDATA_TARBALL_CHECKSUM_URL"
NETDATA_TARBALL_CHECKSUM="$NEW_CHECKSUM"
EOF
rm -rf "${dir}" >&3 2>&3
[ -n "${tmp}" ] && rm "${tmp}" && tmp=
return 0
}
# the installer updates this script - so we run and exit in a single line
update && exit 0
|