summaryrefslogtreecommitdiffstats
path: root/packaging/installer/kickstart-static64.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xpackaging/installer/kickstart-static64.sh303
1 files changed, 106 insertions, 197 deletions
diff --git a/packaging/installer/kickstart-static64.sh b/packaging/installer/kickstart-static64.sh
index cd13c4190..3a6b2653e 100755
--- a/packaging/installer/kickstart-static64.sh
+++ b/packaging/installer/kickstart-static64.sh
@@ -1,238 +1,149 @@
#!/usr/bin/env sh
# SPDX-License-Identifier: GPL-3.0-or-later
-# shellcheck disable=SC1117,SC2016,SC2034,SC2039,SC2059,SC2086,SC2119,SC2120,SC2129,SC2162,SC2166,SC2181
+# shellcheck disable=SC1117,SC2039,SC2059,SC2086
-umask 022
-
-# make sure UID is set
-# shellcheck disable=SC2155
-[ -z "${UID}" ] && export UID="$(id -u)"
+# External files
+NIGHTLY_PACKAGE_TARBALL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.gz.run"
+NIGHTLY_PACKAGE_CHECKSUM="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt"
# ---------------------------------------------------------------------------------------------------------------------
# library functions copied from packaging/installer/functions.sh
-which_cmd() {
- # shellcheck disable=SC2230
- which "${1}" 2>/dev/null || command -v "${1}" 2>/dev/null
-}
-
-check_cmd() {
- which_cmd "${1}" >/dev/null 2>&1 && return 0
- return 1
-}
-
setup_terminal() {
- TPUT_RESET=""
- TPUT_BLACK=""
- TPUT_RED=""
- TPUT_GREEN=""
- TPUT_YELLOW=""
- TPUT_BLUE=""
- TPUT_PURPLE=""
- TPUT_CYAN=""
- TPUT_WHITE=""
- TPUT_BGBLACK=""
- TPUT_BGRED=""
- TPUT_BGGREEN=""
- TPUT_BGYELLOW=""
- TPUT_BGBLUE=""
- TPUT_BGPURPLE=""
- TPUT_BGCYAN=""
- TPUT_BGWHITE=""
- TPUT_BOLD=""
- TPUT_DIM=""
- TPUT_UNDERLINED=""
- TPUT_BLINK=""
- TPUT_INVERTED=""
- TPUT_STANDOUT=""
- TPUT_BELL=""
- TPUT_CLEAR=""
-
- # Is stderr on the terminal? If not, then fail
- test -t 2 || return 1
-
- if check_cmd tput
- then
- if [ $(( $(tput colors 2>/dev/null) )) -ge 8 ]
- then
- # Enable colors
- TPUT_RESET="$(tput sgr 0)"
- TPUT_BLACK="$(tput setaf 0)"
- TPUT_RED="$(tput setaf 1)"
- TPUT_GREEN="$(tput setaf 2)"
- TPUT_YELLOW="$(tput setaf 3)"
- TPUT_BLUE="$(tput setaf 4)"
- TPUT_PURPLE="$(tput setaf 5)"
- TPUT_CYAN="$(tput setaf 6)"
- TPUT_WHITE="$(tput setaf 7)"
- TPUT_BGBLACK="$(tput setab 0)"
- TPUT_BGRED="$(tput setab 1)"
- TPUT_BGGREEN="$(tput setab 2)"
- TPUT_BGYELLOW="$(tput setab 3)"
- TPUT_BGBLUE="$(tput setab 4)"
- TPUT_BGPURPLE="$(tput setab 5)"
- TPUT_BGCYAN="$(tput setab 6)"
- TPUT_BGWHITE="$(tput setab 7)"
- TPUT_BOLD="$(tput bold)"
- TPUT_DIM="$(tput dim)"
- TPUT_UNDERLINED="$(tput smul)"
- TPUT_BLINK="$(tput blink)"
- TPUT_INVERTED="$(tput rev)"
- TPUT_STANDOUT="$(tput smso)"
- TPUT_BELL="$(tput bel)"
- TPUT_CLEAR="$(tput clear)"
- fi
- fi
-
- return 0
+ TPUT_RESET=""
+ TPUT_YELLOW=""
+ TPUT_WHITE=""
+ TPUT_BGRED=""
+ TPUT_BGGREEN=""
+ TPUT_BOLD=""
+ TPUT_DIM=""
+
+ # Is stderr on the terminal? If not, then fail
+ test -t 2 || return 1
+
+ if command -v tput >/dev/null 2>&1; then
+ if [ $(($(tput colors 2>/dev/null))) -ge 8 ]; then
+ # Enable colors
+ TPUT_RESET="$(tput sgr 0)"
+ TPUT_YELLOW="$(tput setaf 3)"
+ TPUT_WHITE="$(tput setaf 7)"
+ TPUT_BGRED="$(tput setab 1)"
+ TPUT_BGGREEN="$(tput setab 2)"
+ TPUT_BOLD="$(tput bold)"
+ TPUT_DIM="$(tput dim)"
+ fi
+ fi
+
+ return 0
}
-setup_terminal || echo >/dev/null
progress() {
- echo >&2 " --- ${TPUT_DIM}${TPUT_BOLD}${*}${TPUT_RESET} --- "
-}
-
-run_ok() {
- printf >&2 "${TPUT_BGGREEN}${TPUT_WHITE}${TPUT_BOLD} OK ${TPUT_RESET} ${*} \n\n"
-}
-
-run_failed() {
- printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} FAILED ${TPUT_RESET} ${*} \n\n"
+ echo >&2 " --- ${TPUT_DIM}${TPUT_BOLD}${*}${TPUT_RESET} --- "
}
-ESCAPED_PRINT_METHOD=
-printf "%q " test >/dev/null 2>&1
-[ $? -eq 0 ] && ESCAPED_PRINT_METHOD="printfq"
escaped_print() {
- if [ "${ESCAPED_PRINT_METHOD}" = "printfq" ]
- then
- printf "%q " "${@}"
- else
- printf "%s" "${*}"
- fi
- return 0
+ if printf "%q " test >/dev/null 2>&1; then
+ printf "%q " "${@}"
+ else
+ printf "%s" "${*}"
+ fi
+ return 0
}
-run_logfile="/dev/null"
run() {
- local user="${USER--}" dir="${PWD}" info info_console
-
- if [ "${UID}" = "0" ]
- then
- info="[root ${dir}]# "
- info_console="[${TPUT_DIM}${dir}${TPUT_RESET}]# "
- else
- info="[${user} ${dir}]$ "
- info_console="[${TPUT_DIM}${dir}${TPUT_RESET}]$ "
- fi
-
- printf >> "${run_logfile}" "${info}"
- escaped_print >> "${run_logfile}" "${@}"
- printf >> "${run_logfile}" " ... "
-
- printf >&2 "${info_console}${TPUT_BOLD}${TPUT_YELLOW}"
- escaped_print >&2 "${@}"
- printf >&2 "${TPUT_RESET}\n"
-
- "${@}"
-
- local ret=$?
- if [ ${ret} -ne 0 ]
- then
- run_failed
- printf >> "${run_logfile}" "FAILED with exit code ${ret}\n"
- else
- run_ok
- printf >> "${run_logfile}" "OK\n"
- fi
-
- return ${ret}
-}
+ local dir="${PWD}" info_console
+ if [ "${UID}" = "0" ]; then
+ info_console="[${TPUT_DIM}${dir}${TPUT_RESET}]# "
+ else
+ info_console="[${TPUT_DIM}${dir}${TPUT_RESET}]$ "
+ fi
-# ---------------------------------------------------------------------------------------------------------------------
+ escaped_print "${info_console}${TPUT_BOLD}${TPUT_YELLOW}" "${@}" "${TPUT_RESET}\n" >&2
-fatal() {
- printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n"
- exit 1
+ "${@}"
+
+ local ret=$?
+ if [ ${ret} -ne 0 ]; then
+ printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} FAILED ${TPUT_RESET} ${*} \n\n"
+ else
+ printf >&2 "${TPUT_BGGREEN}${TPUT_WHITE}${TPUT_BOLD} OK ${TPUT_RESET} ${*} \n\n"
+ fi
+
+ return ${ret}
}
# ---------------------------------------------------------------------------------------------------------------------
-if [ "$(uname -m)" != "x86_64" ]
- then
- fatal "Static binary versions of netdata are available only for 64bit Intel/AMD CPUs (x86_64), but yours is: $(uname -m)."
-fi
+fatal() {
+ printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n"
+ exit 1
+}
-if [ "$(uname -s)" != "Linux" ]
- then
- fatal "Static binary versions of netdata are available only for Linux, but this system is $(uname -s)"
-fi
+download() {
+ url="${1}"
+ dest="${2}"
+ if command -v curl >/dev/null 2>&1; then
+ run curl -L --connect-timeout 5 --retry 3 "${url}" >"${dest}" || fatal "Cannot download ${url}"
+ elif command -v wget >/dev/null 2>&1; then
+ run wget -T 15 -O - "${url}" >"${dest}" || fatal "Cannot download ${url}"
+ else
+ fatal "I need curl or wget to proceed, but neither is available on this system."
+ fi
+}
-curl="$(which_cmd curl)"
-wget="$(which_cmd wget)"
+umask 022
-# ---------------------------------------------------------------------------------------------------------------------
+sudo=""
+[ -z "${UID}" ] && UID="$(id -u)"
+[ "${UID}" -ne "0" ] && sudo="sudo"
-progress "Checking the latest version of static build..."
+setup_terminal || echo >/dev/null
-BASE='https://raw.githubusercontent.com/netdata/binary-packages/master'
+# ---------------------------------------------------------------------------------------------------------------------
-LATEST=
-if [ ! -z "${curl}" -a -x "${curl}" ]
-then
- LATEST="$(run ${curl} "${BASE}/netdata-latest.gz.run")"
-elif [ ! -z "${wget}" -a -x "${wget}" ]
-then
- LATEST="$(run ${wget} -O - "${BASE}/netdata-latest.gz.run")"
-else
- fatal "curl or wget are needed for this script to work."
+if [ "$(uname -m)" != "x86_64" ]; then
+ fatal "Static binary versions of netdata are available only for 64bit Intel/AMD CPUs (x86_64), but yours is: $(uname -m)."
fi
-if [ -z "${LATEST}" ]
- then
- fatal "Cannot find the latest static binary version of netdata."
+if [ "$(uname -s)" != "Linux" ]; then
+ fatal "Static binary versions of netdata are available only for Linux, but this system is $(uname -s)"
fi
# ---------------------------------------------------------------------------------------------------------------------
-progress "Downloading static netdata binary: ${LATEST}"
-
-ret=1
-if [ ! -z "${curl}" -a -x "${curl}" ]
-then
- run ${curl} "${BASE}/${LATEST}" >"/tmp/${LATEST}"
- ret=$?
-elif [ ! -z "${wget}" -a -x "${wget}" ]
-then
- run ${wget} -O "/tmp/${LATEST}" "${BASE}/${LATEST}"
- ret=$?
+# Check if tmp is mounted as noexec
+if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then
+ pattern="$(pwd)/netdata-kickstart-static-XXXXXX"
else
- fatal "curl or wget are needed for this script to work."
+ pattern="/tmp/netdata-kickstart-static-XXXXXX"
fi
-if [ ${ret} -ne 0 -o ! -s "/tmp/${LATEST}" ]
- then
- fatal "Failed to download the latest static binary version of netdata."
+tmpdir="$(mktemp -d $pattern)"
+cd "${tmpdir}" || :
+
+progress "Downloading static netdata binary: ${NIGHTLY_PACKAGE_TARBALL}"
+
+download "${NIGHTLY_PACKAGE_CHECKSUM}" "${tmpdir}/sha256sum.txt"
+download "${NIGHTLY_PACKAGE_TARBALL}" "${tmpdir}/netdata-latest.gz.run"
+if ! grep netdata-latest.gz.run sha256sum.txt | sha256sum --check - >/dev/null 2>&1; then
+ failed "Static binary checksum validation failed. Stopping netdata installation and leaving binary in ${tmpdir}"
fi
# ---------------------------------------------------------------------------------------------------------------------
opts=
inner_opts=
-while [ ! -z "${1}" ]
-do
- if [ "${1}" = "--dont-wait" -o "${1}" = "--non-interactive" -o "${1}" = "--accept" ]
- then
- opts="${opts} --accept"
- elif [ "${1}" = "--dont-start-it" ]
- then
- inner_opts="${inner_opts} ${1}"
- else
- echo >&2 "Unknown option '${1}'"
- exit 1
- fi
- shift
+while [ ! -z "${1}" ]; do
+ if [ "${1}" = "--dont-wait" ] || [ "${1}" = "--non-interactive" ] || [ "${1}" = "--accept" ]; then
+ opts="${opts} --accept"
+ elif [ "${1}" = "--dont-start-it" ]; then
+ inner_opts="${inner_opts} ${1}"
+ else
+ echo >&2 "Unknown option '${1}'"
+ exit 1
+ fi
+ shift
done
[ ! -z "${inner_opts}" ] && inner_opts="-- ${inner_opts}"
@@ -240,13 +151,11 @@ done
progress "Installing netdata"
-sudo=
-[ "${UID}" != "0" ] && sudo="sudo"
-run ${sudo} sh "/tmp/${LATEST}" ${opts} ${inner_opts}
+run ${sudo} sh "${tmpdir}/netdata-latest.gz.run" ${opts} ${inner_opts}
-if [ $? -eq 0 ]
- then
- rm "/tmp/${LATEST}"
+#shellcheck disable=SC2181
+if [ $? -eq 0 ]; then
+ rm "${tmpdir}/netdata-latest.gz.run"
else
- echo >&2 "NOTE: did not remove: /tmp/${LATEST}"
+ echo >&2 "NOTE: did not remove: ${tmpdir}/netdata-latest.gz.run"
fi