introduce stable installation channel (#5487)
[patch]
Paweł Krupa committed
Feb 28, 2019 at 16:19 UTC
7a98b56ad9c5d708894189d1c95756f031991c60
5 files changed
+155
-105
netdata-installer.sh
+1
-3
@@ -1053,9 +1053,7 @@ NETDATA_ADDED_TO_GROUPS="${NETDATA_ADDED_TO_GROUPS}"
1053
INSTALL_UID="${UID}"
1054
REINSTALL_COMMAND="${REINSTALL_COMMAND}"
1055
RELEASE_CHANNEL="${RELEASE_CHANNEL}"
1056
-# next 3 values are meant to be populated by autoupdater (if enabled)
1057
-NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz"
1058
-NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
1056
+# This value is meant to be populated by autoupdater (if enabled)
1057
NETDATA_TARBALL_CHECKSUM="new_installation"
1058
EOF
1059
packaging/installer/README.md
+2
-2
@@ -41,7 +41,7 @@ bash <(curl -Ss https://my-netdata.io/kickstart.sh)
41
Verify the integrity of the script with this:
42
43
```bash
44
-[ "b06a2d788c7da5998cb34c30b0a132d8" = "$(curl -Ss https://my-netdata.io/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID"
44
+[ "b66c99c065abe1cf104c11236d4e8747" = "$(curl -Ss https://my-netdata.io/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID"
45
```
46
*It should print `OK, VALID` if the script is the one we ship.*
47
@@ -95,7 +95,7 @@ To install Netdata with a binary package on any Linux distro, any kernel version
95
Verify the integrity of the script with this:
96
97
```bash
98
-[ "e3819fc861f2383521423deb69f6cab7" = "$(curl -Ss https://my-netdata.io/kickstart-static64.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID"
98
+[ "8e6df9b6f6cc7de0d73f6e5e51a3c8c2" = "$(curl -Ss https://my-netdata.io/kickstart-static64.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID"
99
```
100
101
*It should print `OK, VALID` if the script is the one we ship.*
packaging/installer/kickstart-static64.sh
+46
-33
@@ -2,10 +2,6 @@
2
# SPDX-License-Identifier: GPL-3.0-or-later
3
# shellcheck disable=SC1117,SC2039,SC2059,SC2086
4
5
-# External files
6
-NIGHTLY_PACKAGE_TARBALL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.gz.run"
7
-NIGHTLY_PACKAGE_CHECKSUM="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
8
-
5
# ---------------------------------------------------------------------------------------------------------------------
6
# library functions copied from packaging/installer/functions.sh
7
@@ -73,13 +69,22 @@ run() {
69
return ${ret}
70
}
71
76
-# ---------------------------------------------------------------------------------------------------------------------
77
-
72
fatal() {
73
printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n"
74
exit 1
75
}
76
77
+create_tmp_directory() {
78
+ # Check if tmp is mounted as noexec
79
+ if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
80
+ pattern="$(pwd)/netdata-kickstart-XXXXXX"
81
+ else
82
+ pattern="/tmp/netdata-kickstart-XXXXXX"
83
+ fi
84
+
85
+ mktemp -d $pattern
86
+}
87
+
88
download() {
89
url="${1}"
90
dest="${2}"
@@ -92,6 +97,21 @@ download() {
97
fi
98
}
99
100
+set_tarball_urls() {
101
+ if [ "$1" == "stable" ]; then
102
+ local latest
103
+ # Simple version
104
+ # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)"
105
+ latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)"
106
+ export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.gz.run"
107
+ export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt"
108
+ else
109
+ export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.gz.run"
110
+ export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
111
+ fi
112
+}
113
+
114
+# ---------------------------------------------------------------------------------------------------------------------
115
umask 022
116
117
sudo=""
@@ -101,7 +121,6 @@ sudo=""
121
setup_terminal || echo >/dev/null
122
123
# ---------------------------------------------------------------------------------------------------------------------
104
-
124
if [ "$(uname -m)" != "x86_64" ]; then
125
fatal "Static binary versions of netdata are available only for 64bit Intel/AMD CPUs (x86_64), but yours is: $(uname -m)."
126
fi
@@ -111,51 +130,45 @@ if [ "$(uname -s)" != "Linux" ]; then
130
fi
131
132
# ---------------------------------------------------------------------------------------------------------------------
114
-
115
-# Check if tmp is mounted as noexec
116
-if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
117
- pattern="$(pwd)/netdata-kickstart-static-XXXXXX"
118
-else
119
- pattern="/tmp/netdata-kickstart-static-XXXXXX"
120
-fi
121
-
122
-tmpdir="$(mktemp -d $pattern)"
123
-cd "${tmpdir}" || :
124
-
125
-progress "Downloading static netdata binary: ${NIGHTLY_PACKAGE_TARBALL}"
126
-
127
-download "${NIGHTLY_PACKAGE_CHECKSUM}" "${tmpdir}/sha256sum.txt"
128
-download "${NIGHTLY_PACKAGE_TARBALL}" "${tmpdir}/netdata-latest.gz.run"
129
-if ! grep netdata-latest.gz.run sha256sum.txt | sha256sum --check - >/dev/null 2>&1; then
130
- failed "Static binary checksum validation failed. Stopping netdata installation and leaving binary in ${tmpdir}"
131
-fi
132
-
133
-# ---------------------------------------------------------------------------------------------------------------------
134
-
133
opts=
134
inner_opts=
137
-while [ ! -z "${1}" ]; do
135
+RELEASE_CHANNEL="nightly"
136
+while [ -n "${1}" ]; do
137
if [ "${1}" = "--dont-wait" ] || [ "${1}" = "--non-interactive" ] || [ "${1}" = "--accept" ]; then
138
opts="${opts} --accept"
139
elif [ "${1}" = "--dont-start-it" ]; then
140
inner_opts="${inner_opts} ${1}"
141
+ elif [ "${1}" = "--stable-channel" ]; then
142
+ RELEASE_CHANNEL="stable"
143
else
144
echo >&2 "Unknown option '${1}'"
145
exit 1
146
fi
147
shift
148
done
148
-[ ! -z "${inner_opts}" ] && inner_opts="-- ${inner_opts}"
149
+[ -n "${inner_opts}" ] && inner_opts="-- ${inner_opts}"
150
151
# ---------------------------------------------------------------------------------------------------------------------
152
+TMPDIR=$(create_tmp_directory)
153
+cd "${TMPDIR}" || :
154
+
155
+set_tarball_urls "${RELEASE_CHANNEL}"
156
+progress "Downloading static netdata binary: ${NETDATA_TARBALL_URL}"
157
158
+download "${NETDATA_TARBALL_CHECKSUM_URL}" "${TMPDIR}/sha256sum.txt"
159
+download "${NETDATA_TARBALL_URL}" "${TMPDIR}/netdata-latest.gz.run"
160
+if ! grep netdata-latest.gz.run "${TMPDIR}/sha256sum.txt" | sha256sum --check - >/dev/null 2>&1; then
161
+ fatal "Static binary checksum validation failed. Stopping netdata installation and leaving binary in ${TMPDIR}"
162
+fi
163
+
164
+# ---------------------------------------------------------------------------------------------------------------------
165
progress "Installing netdata"
166
154
-run ${sudo} sh "${tmpdir}/netdata-latest.gz.run" ${opts} ${inner_opts}
167
+run ${sudo} sh "${TMPDIR}/netdata-latest.gz.run" ${opts} ${inner_opts}
168
169
#shellcheck disable=SC2181
170
if [ $? -eq 0 ]; then
158
- rm "${tmpdir}/netdata-latest.gz.run"
171
+ rm "${TMPDIR}/netdata-latest.gz.run"
172
else
160
- echo >&2 "NOTE: did not remove: ${tmpdir}/netdata-latest.gz.run"
173
+ echo >&2 "NOTE: did not remove: ${TMPDIR}/netdata-latest.gz.run"
174
fi
packaging/installer/kickstart.sh
+78
-56
@@ -27,8 +27,6 @@
27
28
# External files
29
PACKAGES_SCRIPT="https://raw.githubusercontent.com/netdata/netdata-demo-site/master/install-required-packages.sh"
30
-NIGHTLY_PACKAGE_TARBALL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz"
31
-NIGHTLY_PACKAGE_CHECKSUM="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
30
31
# ---------------------------------------------------------------------------------------------------------------------
32
# library functions copied from packaging/installer/functions.sh
@@ -97,6 +95,11 @@ run() {
95
return ${ret}
96
}
97
98
+fatal() {
99
+ printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n"
100
+ exit 1
101
+}
102
+
103
warning() {
104
printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} WARNING ${TPUT_RESET} ${*} \n\n"
105
if [ "${INTERACTIVE}" = "0" ]; then
@@ -107,9 +110,15 @@ warning() {
110
fi
111
}
112
110
-fatal() {
111
- printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n"
112
- exit 1
113
+create_tmp_directory() {
114
+ # Check if tmp is mounted as noexec
115
+ if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
116
+ pattern="$(pwd)/netdata-kickstart-XXXXXX"
117
+ else
118
+ pattern="/tmp/netdata-kickstart-XXXXXX"
119
+ fi
120
+
121
+ mktemp -d $pattern
122
}
123
124
download() {
@@ -124,6 +133,20 @@ download() {
133
fi
134
}
135
136
+set_tarball_urls() {
137
+ if [ "$1" == "stable" ]; then
138
+ local latest
139
+ # Simple version
140
+ # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)"
141
+ latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)"
142
+ export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.tar.gz"
143
+ export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt"
144
+ else
145
+ export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz"
146
+ export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
147
+ fi
148
+}
149
+
150
detect_bash4() {
151
bash="${1}"
152
if [ -z "${BASH_VERSION}" ]; then
@@ -147,6 +170,40 @@ detect_bash4() {
170
return 0
171
}
172
173
+dependencies() {
174
+ SYSTEM="$(uname -s)"
175
+ OS="$(uname -o)"
176
+ MACHINE="$(uname -m)"
177
+
178
+ echo "System : ${SYSTEM}"
179
+ echo "Operating System : ${OS}"
180
+ echo "Machine : ${MACHINE}"
181
+ echo "BASH major version: ${BASH_MAJOR_VERSION}"
182
+
183
+ if [ "${OS}" != "GNU/Linux" ] && [ "${SYSTEM}" != "Linux" ]; then
184
+ warning "Cannot detect the packages to be installed on a ${SYSTEM} - ${OS} system."
185
+ else
186
+ bash="$(command -v bash 2>/dev/null)"
187
+ if ! detect_bash4 "${bash}"; then
188
+ warning "Cannot detect packages to be installed in this system, without BASH v4+."
189
+ else
190
+ progress "Downloading script to detect required packages..."
191
+ download "${PACKAGES_SCRIPT}" "${TMPDIR}/install-required-packages.sh"
192
+ if [ ! -s "${TMPDIR}/install-required-packages.sh" ]; then
193
+ warning "Downloaded dependency installation script is empty."
194
+ else
195
+ progress "Running downloaded script to detect required packages..."
196
+ run ${sudo} "${bash}" "${TMPDIR}/install-required-packages.sh" ${PACKAGES_INSTALLER_OPTIONS}
197
+ # shellcheck disable=SC2181
198
+ if [ $? -ne 0 ] ; then
199
+ warning "It failed to install all the required packages, but installation might still be possible."
200
+ fi
201
+ fi
202
+
203
+ fi
204
+ fi
205
+}
206
+
207
umask 022
208
209
sudo=""
@@ -181,6 +238,7 @@ INTERACTIVE=1
238
PACKAGES_INSTALLER_OPTIONS="netdata"
239
NETDATA_INSTALLER_OPTIONS=""
240
NETDATA_UPDATES="--auto-update"
241
+RELEASE_CHANNEL="nightly"
242
while [ -n "${1}" ]; do
243
if [ "${1}" = "all" ]; then
244
PACKAGES_INSTALLER_OPTIONS="netdata-all"
@@ -192,6 +250,9 @@ while [ -n "${1}" ]; do
250
# echo >&2 "netdata will not auto-update"
251
NETDATA_UPDATES=
252
shift 1
253
+ elif [ "${1}" = "--stable-channel" ]; then
254
+ RELEASE_CHANNEL="stable"
255
+ shift 1
256
else
257
break
258
fi
@@ -202,59 +263,20 @@ if [ "${INTERACTIVE}" = "0" ]; then
263
NETDATA_INSTALLER_OPTIONS="--dont-wait"
264
fi
265
205
-# ---------------------------------------------------------------------------------------------------------------------
206
-# detect system parameters and install dependencies
207
-
208
-SYSTEM="$(uname -s)"
209
-OS="$(uname -o)"
210
-MACHINE="$(uname -m)"
211
-
212
-cat <<EOF
213
-System : ${SYSTEM}
214
-Operating System : ${OS}
215
-Machine : ${MACHINE}
216
-BASH major version: ${BASH_MAJOR_VERSION}
217
-EOF
218
-
219
-# Check if tmp is mounted as noexec
220
-if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
221
- pattern="$(pwd)/netdata-kickstart-XXXXXX"
222
-else
223
- pattern="/tmp/netdata-kickstart-XXXXXX"
224
-fi
266
+TMPDIR=$(create_tmp_directory)
267
+cd ${TMPDIR} || :
268
226
-tmpdir="$(mktemp -d $pattern)"
227
-cd "${tmpdir}" || :
228
-
229
-if [ "${OS}" != "GNU/Linux" ] && [ "${SYSTEM}" != "Linux" ]; then
230
- warning "Cannot detect the packages to be installed on a ${SYSTEM} - ${OS} system."
231
-else
232
- bash="$(command -v bash 2>/dev/null)"
233
- if ! detect_bash4 "${bash}"; then
234
- warning "Cannot detect packages to be installed in this system, without BASH v4+."
235
- else
236
- progress "Downloading script to detect required packages..."
237
- download "${PACKAGES_SCRIPT}" "${tmpdir}/install-required-packages.sh"
238
- if [ ! -s "${tmpdir}/install-required-packages.sh" ]; then
239
- warning "Downloaded dependency installation script is empty."
240
- else
241
- progress "Running downloaded script to detect required packages..."
242
- run ${sudo} "${bash}" "${tmpdir}/install-required-packages.sh" ${PACKAGES_INSTALLER_OPTIONS}
243
- if [ $? -ne 0 ] ; then
244
- warning "It failed to install all the required packages, but installation might still be possible."
245
- fi
246
- fi
247
-
248
- fi
249
-fi
269
+dependencies
270
271
# ---------------------------------------------------------------------------------------------------------------------
252
-# download netdata nightly package
272
+# download netdata package
273
+
274
+set_tarball_urls "${RELEASE_CHANNEL}"
275
254
-download "${NIGHTLY_PACKAGE_CHECKSUM}" "${tmpdir}/sha256sum.txt"
255
-download "${NIGHTLY_PACKAGE_TARBALL}" "${tmpdir}/netdata-latest.tar.gz"
256
-if ! grep netdata-latest.tar.gz sha256sum.txt | sha256sum --check - >/dev/null 2>&1; then
257
- failed "Tarball checksum validation failed. Stopping netdata installation and leaving tarball in ${tmpdir}"
276
+download "${NETDATA_TARBALL_CHECKSUM_URL}" "${TMPDIR}/sha256sum.txt"
277
+download "${NETDATA_TARBALL_URL}" "${TMPDIR}/netdata-latest.tar.gz"
278
+if ! grep netdata-latest.tar.gz "${TMPDIR}/sha256sum.txt" | sha256sum --check - >/dev/null 2>&1; then
279
+ fatal "Tarball checksum validation failed. Stopping netdata installation and leaving tarball in ${TMPDIR}"
280
fi
281
run tar -xf netdata-latest.tar.gz
282
rm -rf netdata-latest.tar.gz >/dev/null 2>&1
@@ -266,7 +288,7 @@ cd netdata-* || fatal "Cannot cd to netdata source tree"
288
if [ -x netdata-installer.sh ]; then
289
progress "Installing netdata..."
290
run ${sudo} ./netdata-installer.sh ${NETDATA_UPDATES} ${NETDATA_INSTALLER_OPTIONS} "${@}" || fatal "netdata-installer.sh exited with error"
269
- rm -rf "${tmpdir}" >/dev/null 2>&1
291
+ rm -rf "${TMPDIR}" >/dev/null 2>&1
292
else
271
- fatal "Cannot install netdata from source (the source directory does not include netdata-installer.sh). Leaving all files in ${tmpdir}"
293
+ fatal "Cannot install netdata from source (the source directory does not include netdata-installer.sh). Leaving all files in ${TMPDIR}"
294
fi
packaging/installer/netdata-updater.sh
+28
-11
@@ -31,6 +31,17 @@ fatal() {
31
exit 1
32
}
33
34
+create_tmp_directory() {
35
+ # Check if tmp is mounted as noexec
36
+ if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
37
+ pattern="$(pwd)/netdata-updater-XXXXXX"
38
+ else
39
+ pattern="/tmp/netdata-updater-XXXXXX"
40
+ fi
41
+
42
+ mktemp -d "$pattern"
43
+}
44
+
45
download() {
46
url="${1}"
47
dest="${2}"
@@ -43,18 +54,24 @@ download() {
54
fi
55
}
56
46
-update() {
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
51
- pattern="$(pwd)/netdata-updater-XXXXXX"
57
+set_tarball_urls() {
58
+ if [ "$1" == "stable" ]; then
59
+ local latest
60
+ # Simple version
61
+ # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)"
62
+ latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)"
63
+ export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.tar.gz"
64
+ export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt"
65
else
53
- pattern="/tmp/netdata-updater-XXXXXX"
66
+ export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz"
67
+ export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
68
fi
69
+}
70
56
- dir=$(mktemp -d "$pattern")
71
+update() {
72
+ [ -z "${logfile}" ] && info "Running on a terminal - (this script also supports running headless from crontab)"
73
74
+ dir=$(create_tmp_directory)
75
cd "$dir"
76
77
download "${NETDATA_TARBALL_CHECKSUM_URL}" "${dir}/sha256sum.txt" >&3 2>&3
@@ -85,11 +102,9 @@ update() {
102
fi
103
104
info "Re-installing netdata..."
88
- eval "${REINSTALL_COMMAND} --dont-wait ${do_not_start}" >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA"
105
+ eval "${REINSTALL_COMMAND} --dont-wait ${do_not_start}" >&3 2>&3 || fatal "FAILED TO COMPILE/INSTALL NETDATA"
106
sed -i '/NETDATA_TARBALL/d' "${ENVIRONMENT_FILE}"
107
cat <<EOF >>"${ENVIRONMENT_FILE}"
91
-NETDATA_TARBALL_URL="$NETDATA_TARBALL_URL"
92
-NETDATA_TARBALL_CHECKSUM_URL="$NETDATA_TARBALL_CHECKSUM_URL"
108
NETDATA_TARBALL_CHECKSUM="$NEW_CHECKSUM"
109
EOF
110
@@ -121,5 +136,7 @@ else
136
exec 3>"${logfile}"
137
fi
138
139
+set_tarball_urls "${RELEASE_CHANNEL}"
140
+
141
# the installer updates this script - so we run and exit in a single line
142
update && exit 0