cleanup updater script and no `/opt` usage (#5218)
Paweł Krupa committed
Feb 13, 2019 at 16:24 UTC
3b41c79afdd7d5b2d6f2ed0225a51b0df7e63158
2 files changed
+59
-47
packaging/installer/kickstart.sh
+1
-1
@@ -218,7 +218,7 @@ EOF
218
219
# Check if tmp is mounted as noexec
220
if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
221
- pattern="/opt/netdata-kickstart-XXXXXX"
221
+ pattern="$(pwd)/netdata-kickstart-XXXXXX"
222
else
223
pattern="/tmp/netdata-kickstart-XXXXXX"
224
fi
packaging/installer/netdata-updater.sh
+58
-46
@@ -12,43 +12,6 @@
12
# - NETDATA_TARBALL_CHECKSUM_URL
13
# - NETDATA_TARBALL_CHECKSUM
14
15
-
16
-# Usually stored in /etc/netdata/.environment
17
-: "${ENVIRONMENT_FILE:=THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT}"
18
-
19
-# shellcheck source=/dev/null
20
-source "${ENVIRONMENT_FILE}" || exit 1
21
-
22
-if [ "${INSTALL_UID}" != "$(id -u)" ]; then
23
- 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)"
24
- exit 1
25
-fi
26
-
27
-# signal netdata to start saving its database
28
-# this is handy if your database is big
29
-pids=$(pidof netdata)
30
-do_not_start=
31
-if [ -n "${pids}" ]; then
32
- #shellcheck disable=SC2086
33
- kill -USR1 ${pids}
34
-else
35
- # netdata is currently not running, so do not start it after updating
36
- do_not_start="--dont-start-it"
37
-fi
38
-
39
-tmp=
40
-if [ -t 2 ]; then
41
- # we are running on a terminal
42
- # open fd 3 and send it to stderr
43
- exec 3>&2
44
-else
45
- # we are headless
46
- # create a temporary file for the log
47
- tmp=$(mktemp /tmp/netdata-updater.log.XXXXXX)
48
- # open fd 3 and send it to tmp
49
- exec 3>"${tmp}"
50
-fi
51
-
15
info() {
16
echo >&3 "$(date) : INFO: " "${@}"
17
}
@@ -61,19 +24,31 @@ error() {
24
failed() {
25
error "FAILED TO UPDATE NETDATA : ${1}"
26
64
- if [ -n "${tmp}" ]; then
65
- cat >&2 "${tmp}"
66
- rm "${tmp}"
27
+ if [ -n "${logfile}" ]; then
28
+ cat >&2 "${logfile}"
29
+ rm "${logfile}"
30
fi
31
exit 1
32
}
33
34
+download() {
35
+ url="${1}"
36
+ dest="${2}"
37
+ if command -v wget >/dev/null 2>&1; then
38
+ wget -O - "${url}" >"${dest}" 2>&3 || echo >&2 "Cannot download ${url}" >&3 2>&3
39
+ elif command -v curl >/dev/null 2>&1; then
40
+ curl "${url}" >"${dest}" 2>&3 || echo "Cannot download ${url}" >&3 2>&3
41
+ else
42
+ failed "curl or wget is needed to proceed, but neither is available on this system."
43
+ fi
44
+}
45
+
46
update() {
72
- [ -z "${tmp}" ] && info "Running on a terminal - (this script also supports running headless from crontab)"
47
+ [ -z "${logfile}" ] && info "Running on a terminal - (this script also supports running headless from crontab)"
48
49
# Check if tmp is mounted as noexec
50
if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
76
- pattern="/opt/netdata-updater-XXXXXX"
51
+ pattern="$(pwd)/netdata-updater-XXXXXX"
52
else
53
pattern="/tmp/netdata-updater-XXXXXX"
54
fi
@@ -82,13 +57,13 @@ update() {
57
58
cd "$dir"
59
85
- wget "${NETDATA_TARBALL_CHECKSUM_URL}" -O sha256sum.txt >&3 2>&3
60
+ download "${NETDATA_TARBALL_CHECKSUM_URL}" "${dir}/sha256sum.txt" >&3 2>&3
61
if grep "${NETDATA_TARBALL_CHECKSUM}" sha256sum.txt >&3 2>&3; then
62
info "Newest version is already installed"
63
exit 0
64
fi
65
91
- wget "${NETDATA_TARBALL_URL}" -O netdata-latest.tar.gz >&3 2>&3
66
+ download "${NETDATA_TARBALL_URL}" "${dir}/netdata-latest.tar.gz"
67
if ! grep netdata-latest.tar.gz sha256sum.txt | sha256sum --check - >&3 2>&3; then
68
failed "Tarball checksum validation failed. Stopping netdata upgrade and leaving tarball in ${dir}"
69
fi
@@ -97,8 +72,20 @@ update() {
72
rm netdata-latest.tar.gz >&3 2>&3
73
cd netdata-*
74
75
+ # signal netdata to start saving its database
76
+ # this is handy if your database is big
77
+ pids=$(pidof netdata)
78
+ do_not_start=
79
+ if [ -n "${pids}" ]; then
80
+ #shellcheck disable=SC2086
81
+ kill -USR1 ${pids}
82
+ else
83
+ # netdata is currently not running, so do not start it after updating
84
+ do_not_start="--dont-start-it"
85
+ fi
86
+
87
info "Re-installing netdata..."
101
- ${REINSTALL_COMMAND} --dont-wait ${do_not_start} >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA"
88
+ eval "${REINSTALL_COMMAND} --dont-wait ${do_not_start}" >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA"
89
sed -i '/NETDATA_TARBALL/d' "${ENVIRONMENT_FILE}"
90
cat <<EOF >>"${ENVIRONMENT_FILE}"
91
NETDATA_TARBALL_URL="$NETDATA_TARBALL_URL"
@@ -107,9 +94,34 @@ NETDATA_TARBALL_CHECKSUM="$NEW_CHECKSUM"
94
EOF
95
96
rm -rf "${dir}" >&3 2>&3
110
- [ -n "${tmp}" ] && rm "${tmp}" && tmp=
97
+ [ -n "${logfile}" ] && rm "${logfile}" && logfile=
98
return 0
99
}
100
101
+# Usually stored in /etc/netdata/.environment
102
+: "${ENVIRONMENT_FILE:=THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT}"
103
+
104
+# shellcheck source=/dev/null
105
+source "${ENVIRONMENT_FILE}" || exit 1
106
+
107
+if [ "${INSTALL_UID}" != "$(id -u)" ]; then
108
+ 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)"
109
+ exit 1
110
+fi
111
+
112
+logfile=
113
+if [ -t 2 ]; then
114
+ # we are running on a terminal
115
+ # open fd 3 and send it to stderr
116
+ exec 3>&2
117
+else
118
+ # we are headless
119
+ # create a temporary file for the log
120
+ logfile=$(mktemp ${logfile}/netdata-updater.log.XXXXXX)
121
+ # open fd 3 and send it to logfile
122
+ exec 3>"${logfile}"
123
+fi
124
+
125
+
126
# the installer updates this script - so we run and exit in a single line
127
update && exit 0