@cryptotaxi247 / netdata-1 / commits / 7a98b56ad

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