diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2019-02-28 21:16:49 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2019-02-28 21:16:49 +0000 |
commit | c7191c291b318c93b4db058b7ff820cb7dc44cc7 (patch) | |
tree | 8caa842f47708dac599794745b87212e4d71df7b /packaging/installer | |
parent | Releasing debian version 1.12.1-2. (diff) | |
download | netdata-c7191c291b318c93b4db058b7ff820cb7dc44cc7.tar.xz netdata-c7191c291b318c93b4db058b7ff820cb7dc44cc7.zip |
Merging upstream version 1.12.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'packaging/installer')
-rw-r--r-- | packaging/installer/README.md | 4 | ||||
-rwxr-xr-x | packaging/installer/kickstart-static64.sh | 81 | ||||
-rwxr-xr-x | packaging/installer/kickstart.sh | 136 | ||||
-rwxr-xr-x | packaging/installer/netdata-uninstaller.sh | 169 | ||||
-rw-r--r-- | packaging/installer/netdata-updater.sh | 47 |
5 files changed, 328 insertions, 109 deletions
diff --git a/packaging/installer/README.md b/packaging/installer/README.md index 14b16bd45..d30ed3ec4 100644 --- a/packaging/installer/README.md +++ b/packaging/installer/README.md @@ -41,7 +41,7 @@ bash <(curl -Ss https://my-netdata.io/kickstart.sh) Verify the integrity of the script with this: ```bash -[ "7d16639b6ee14b0a33a8b90c979d3513" = "$(curl -Ss https://my-netdata.io/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" +[ "b66c99c065abe1cf104c11236d4e8747" = "$(curl -Ss https://my-netdata.io/kickstart.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" ``` *It should print `OK, VALID` if the script is the one we ship.* @@ -95,7 +95,7 @@ To install Netdata with a binary package on any Linux distro, any kernel version Verify the integrity of the script with this: ```bash -[ "61ed714ebe0edf03e90cb5cef59fa991" = "$(curl -Ss https://my-netdata.io/kickstart-static64.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" +[ "8e6df9b6f6cc7de0d73f6e5e51a3c8c2" = "$(curl -Ss https://my-netdata.io/kickstart-static64.sh | md5sum | cut -d ' ' -f 1)" ] && echo "OK, VALID" || echo "FAILED, INVALID" ``` *It should print `OK, VALID` if the script is the one we ship.* diff --git a/packaging/installer/kickstart-static64.sh b/packaging/installer/kickstart-static64.sh index 3a6b2653e..f6d0fc694 100755 --- a/packaging/installer/kickstart-static64.sh +++ b/packaging/installer/kickstart-static64.sh @@ -2,10 +2,6 @@ # SPDX-License-Identifier: GPL-3.0-or-later # shellcheck disable=SC1117,SC2039,SC2059,SC2086 -# 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 @@ -73,18 +69,27 @@ run() { return ${ret} } -# --------------------------------------------------------------------------------------------------------------------- - fatal() { printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n" exit 1 } +create_tmp_directory() { + # Check if tmp is mounted as noexec + if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then + pattern="$(pwd)/netdata-kickstart-XXXXXX" + else + pattern="/tmp/netdata-kickstart-XXXXXX" + fi + + mktemp -d $pattern +} + 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}" + run curl -sSL --connect-timeout 10 --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 @@ -92,6 +97,21 @@ download() { fi } +set_tarball_urls() { + if [ "$1" == "stable" ]; then + local latest + # Simple version + # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)" + latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)" + export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.gz.run" + export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt" + else + export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.gz.run" + export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt" + fi +} + +# --------------------------------------------------------------------------------------------------------------------- umask 022 sudo="" @@ -101,7 +121,6 @@ sudo="" setup_terminal || echo >/dev/null # --------------------------------------------------------------------------------------------------------------------- - 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 @@ -111,51 +130,45 @@ if [ "$(uname -s)" != "Linux" ]; then fi # --------------------------------------------------------------------------------------------------------------------- - -# Check if tmp is mounted as noexec -if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then - pattern="$(pwd)/netdata-kickstart-static-XXXXXX" -else - pattern="/tmp/netdata-kickstart-static-XXXXXX" -fi - -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 +RELEASE_CHANNEL="nightly" +while [ -n "${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}" + elif [ "${1}" = "--stable-channel" ]; then + RELEASE_CHANNEL="stable" else echo >&2 "Unknown option '${1}'" exit 1 fi shift done -[ ! -z "${inner_opts}" ] && inner_opts="-- ${inner_opts}" +[ -n "${inner_opts}" ] && inner_opts="-- ${inner_opts}" # --------------------------------------------------------------------------------------------------------------------- +TMPDIR=$(create_tmp_directory) +cd "${TMPDIR}" || : + +set_tarball_urls "${RELEASE_CHANNEL}" +progress "Downloading static netdata binary: ${NETDATA_TARBALL_URL}" +download "${NETDATA_TARBALL_CHECKSUM_URL}" "${TMPDIR}/sha256sum.txt" +download "${NETDATA_TARBALL_URL}" "${TMPDIR}/netdata-latest.gz.run" +if ! grep netdata-latest.gz.run "${TMPDIR}/sha256sum.txt" | sha256sum --check - >/dev/null 2>&1; then + fatal "Static binary checksum validation failed. Stopping netdata installation and leaving binary in ${TMPDIR}" +fi + +# --------------------------------------------------------------------------------------------------------------------- progress "Installing netdata" -run ${sudo} sh "${tmpdir}/netdata-latest.gz.run" ${opts} ${inner_opts} +run ${sudo} sh "${TMPDIR}/netdata-latest.gz.run" ${opts} ${inner_opts} #shellcheck disable=SC2181 if [ $? -eq 0 ]; then - rm "${tmpdir}/netdata-latest.gz.run" + rm "${TMPDIR}/netdata-latest.gz.run" else - echo >&2 "NOTE: did not remove: ${tmpdir}/netdata-latest.gz.run" + echo >&2 "NOTE: did not remove: ${TMPDIR}/netdata-latest.gz.run" fi diff --git a/packaging/installer/kickstart.sh b/packaging/installer/kickstart.sh index 9a5e848ba..196b75892 100755 --- a/packaging/installer/kickstart.sh +++ b/packaging/installer/kickstart.sh @@ -27,8 +27,6 @@ # External files PACKAGES_SCRIPT="https://raw.githubusercontent.com/netdata/netdata-demo-site/master/install-required-packages.sh" -NIGHTLY_PACKAGE_TARBALL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz" -NIGHTLY_PACKAGE_CHECKSUM="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt" # --------------------------------------------------------------------------------------------------------------------- # library functions copied from packaging/installer/functions.sh @@ -97,6 +95,11 @@ run() { return ${ret} } +fatal() { + printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n" + exit 1 +} + warning() { printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} WARNING ${TPUT_RESET} ${*} \n\n" if [ "${INTERACTIVE}" = "0" ]; then @@ -107,16 +110,22 @@ warning() { fi } -fatal() { - printf >&2 "${TPUT_BGRED}${TPUT_WHITE}${TPUT_BOLD} ABORTED ${TPUT_RESET} ${*} \n\n" - exit 1 +create_tmp_directory() { + # Check if tmp is mounted as noexec + if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then + pattern="$(pwd)/netdata-kickstart-XXXXXX" + else + pattern="/tmp/netdata-kickstart-XXXXXX" + fi + + mktemp -d $pattern } 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}" + run curl -sSL --connect-timeout 10 --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 @@ -124,6 +133,20 @@ download() { fi } +set_tarball_urls() { + if [ "$1" == "stable" ]; then + local latest + # Simple version + # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)" + latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)" + export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.tar.gz" + export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt" + else + export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz" + export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt" + fi +} + detect_bash4() { bash="${1}" if [ -z "${BASH_VERSION}" ]; then @@ -147,6 +170,40 @@ detect_bash4() { return 0 } +dependencies() { + SYSTEM="$(uname -s)" + OS="$(uname -o)" + MACHINE="$(uname -m)" + + echo "System : ${SYSTEM}" + echo "Operating System : ${OS}" + echo "Machine : ${MACHINE}" + echo "BASH major version: ${BASH_MAJOR_VERSION}" + + if [ "${OS}" != "GNU/Linux" ] && [ "${SYSTEM}" != "Linux" ]; then + warning "Cannot detect the packages to be installed on a ${SYSTEM} - ${OS} system." + else + bash="$(command -v bash 2>/dev/null)" + if ! detect_bash4 "${bash}"; then + warning "Cannot detect packages to be installed in this system, without BASH v4+." + else + progress "Downloading script to detect required packages..." + download "${PACKAGES_SCRIPT}" "${TMPDIR}/install-required-packages.sh" + if [ ! -s "${TMPDIR}/install-required-packages.sh" ]; then + warning "Downloaded dependency installation script is empty." + else + progress "Running downloaded script to detect required packages..." + run ${sudo} "${bash}" "${TMPDIR}/install-required-packages.sh" ${PACKAGES_INSTALLER_OPTIONS} + # shellcheck disable=SC2181 + if [ $? -ne 0 ] ; then + warning "It failed to install all the required packages, but installation might still be possible." + fi + fi + + fi + fi +} + umask 022 sudo="" @@ -181,6 +238,7 @@ INTERACTIVE=1 PACKAGES_INSTALLER_OPTIONS="netdata" NETDATA_INSTALLER_OPTIONS="" NETDATA_UPDATES="--auto-update" +RELEASE_CHANNEL="nightly" while [ -n "${1}" ]; do if [ "${1}" = "all" ]; then PACKAGES_INSTALLER_OPTIONS="netdata-all" @@ -192,6 +250,9 @@ while [ -n "${1}" ]; do # echo >&2 "netdata will not auto-update" NETDATA_UPDATES= shift 1 + elif [ "${1}" = "--stable-channel" ]; then + RELEASE_CHANNEL="stable" + shift 1 else break fi @@ -202,59 +263,20 @@ if [ "${INTERACTIVE}" = "0" ]; then NETDATA_INSTALLER_OPTIONS="--dont-wait" fi -# --------------------------------------------------------------------------------------------------------------------- -# detect system parameters and install dependencies - -SYSTEM="$(uname -s)" -OS="$(uname -o)" -MACHINE="$(uname -m)" - -cat <<EOF -System : ${SYSTEM} -Operating System : ${OS} -Machine : ${MACHINE} -BASH major version: ${BASH_MAJOR_VERSION} -EOF - -# Check if tmp is mounted as noexec -if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then - pattern="$(pwd)/netdata-kickstart-XXXXXX" -else - pattern="/tmp/netdata-kickstart-XXXXXX" -fi +TMPDIR=$(create_tmp_directory) +cd ${TMPDIR} || : -tmpdir="$(mktemp -d $pattern)" -cd "${tmpdir}" || : - -if [ "${OS}" != "GNU/Linux" ] && [ "${SYSTEM}" != "Linux" ]; then - warning "Cannot detect the packages to be installed on a ${SYSTEM} - ${OS} system." -else - bash="$(command -v bash 2>/dev/null)" - if ! detect_bash4 "${bash}"; then - warning "Cannot detect packages to be installed in this system, without BASH v4+." - else - progress "Downloading script to detect required packages..." - download "${PACKAGES_SCRIPT}" "${tmpdir}/install-required-packages.sh" - if [ ! -s "${tmpdir}/install-required-packages.sh" ]; then - warning "Downloaded dependency installation script is empty." - else - progress "Running downloaded script to detect required packages..." - run ${sudo} "${bash}" "${tmpdir}/install-required-packages.sh" ${PACKAGES_INSTALLER_OPTIONS} - if [ $? -ne 0 ] ; then - warning "It failed to install all the required packages, but installation might still be possible." - fi - fi - - fi -fi +dependencies # --------------------------------------------------------------------------------------------------------------------- -# download netdata nightly package +# download netdata package + +set_tarball_urls "${RELEASE_CHANNEL}" -download "${NIGHTLY_PACKAGE_CHECKSUM}" "${tmpdir}/sha256sum.txt" -download "${NIGHTLY_PACKAGE_TARBALL}" "${tmpdir}/netdata-latest.tar.gz" -if ! grep netdata-latest.tar.gz sha256sum.txt | sha256sum --check - >/dev/null 2>&1; then - failed "Tarball checksum validation failed. Stopping netdata installation and leaving tarball in ${tmpdir}" +download "${NETDATA_TARBALL_CHECKSUM_URL}" "${TMPDIR}/sha256sum.txt" +download "${NETDATA_TARBALL_URL}" "${TMPDIR}/netdata-latest.tar.gz" +if ! grep netdata-latest.tar.gz "${TMPDIR}/sha256sum.txt" | sha256sum --check - >/dev/null 2>&1; then + fatal "Tarball checksum validation failed. Stopping netdata installation and leaving tarball in ${TMPDIR}" fi run tar -xf netdata-latest.tar.gz rm -rf netdata-latest.tar.gz >/dev/null 2>&1 @@ -266,7 +288,7 @@ cd netdata-* || fatal "Cannot cd to netdata source tree" if [ -x netdata-installer.sh ]; then progress "Installing netdata..." run ${sudo} ./netdata-installer.sh ${NETDATA_UPDATES} ${NETDATA_INSTALLER_OPTIONS} "${@}" || fatal "netdata-installer.sh exited with error" - rm -rf "${tmpdir}" >/dev/null 2>&1 + rm -rf "${TMPDIR}" >/dev/null 2>&1 else - fatal "Cannot install netdata from source (the source directory does not include netdata-installer.sh). Leaving all files in ${tmpdir}" + fatal "Cannot install netdata from source (the source directory does not include netdata-installer.sh). Leaving all files in ${TMPDIR}" fi diff --git a/packaging/installer/netdata-uninstaller.sh b/packaging/installer/netdata-uninstaller.sh new file mode 100755 index 000000000..96dd62906 --- /dev/null +++ b/packaging/installer/netdata-uninstaller.sh @@ -0,0 +1,169 @@ +#!/usr/bin/env bash +#shellcheck disable=SC2181 + +# this script will uninstall netdata + +# Variables needed by script and taken from '.environment' file: +# - NETDATA_PREFIX +# - NETDATA_ADDED_TO_GROUPS + +usage="$(basename "$0") [-h] [-f ] -- program to calculate the answer to life, the universe and everything + +where: + -e, --env path to environment file (defauls to '/etc/netdata/.environment' + -f, --force force uninstallation and do not ask any questions + -h show this help text + -y, --yes flag needs to be set to proceed with uninstallation" + +FILE_REMOVAL_STATUS=0 +ENVIRONMENT_FILE="/etc/netdata/.environment" +INTERACTIVITY="-i" +YES=0 +while :; do + case "$1" in + -h | --help) + echo "$usage" >&2 + exit 1 + ;; + -f | --force) + INTERACTIVITY="-f" + shift + ;; + -y | --yes) + YES=1 + shift + ;; + -e | --env) + ENVIRONMENT_FILE="$2" + shift 2 + ;; + -*) + echo "$usage" >&2 + exit 1 + ;; + *) break ;; + esac +done + +if [ "$YES" != "1" ]; then + echo "This script will REMOVE netdata from your system." + echo "Run it again with --yes to do it." + exit 1 +fi + +if [[ $EUID -ne 0 ]]; then + echo "This script SHOULD be run as root or otherwise it won't delete all installed components." + key="n" + read -r -s -n 1 -p "Do you want to continue as non-root user [y/n] ? " key + if [ "$key" != "y" ] && [ "$key" != "Y" ]; then + exit 1 + fi +fi + +function quit_msg() { + echo + if [ "$FILE_REMOVAL_STATUS" -eq 0 ]; then + echo "Something went wrong :(" + else + echo "Netdata files were successfully removed from your system" + fi +} + +function user_input() { + TEXT="$1" + if [ "${INTERACTIVITY}" == "-i" ]; then + read -r -p "$TEXT" >&2 + fi +} + +function rm_file() { + FILE="$1" + if [ -f "${FILE}" ]; then + rm -v ${INTERACTIVITY} "${FILE}" + fi +} + +function rm_dir() { + DIR="$1" + if [ -n "$DIR" ] && [ -d "$DIR" ]; then + user_input "Press ENTER to recursively delete directory '$DIR' > " + rm -v -f -R "${DIR}" + fi +} + +netdata_pids() { + local p myns ns + myns="$(readlink /proc/self/ns/pid 2>/dev/null)" + for p in \ + $(cat /var/run/netdata.pid 2>/dev/null) \ + $(cat /var/run/netdata/netdata.pid 2>/dev/null) \ + $(pidof netdata 2>/dev/null); do + + ns="$(readlink "/proc/${p}/ns/pid" 2>/dev/null)" + #shellcheck disable=SC2002 + if [ -z "${myns}" ] || [ -z "${ns}" ] || [ "${myns}" = "${ns}" ]; then + name="$(cat "/proc/${p}/stat" 2>/dev/null | cut -d '(' -f 2 | cut -d ')' -f 1)" + if [ "${name}" = "netdata" ]; then + echo "${p}" + fi + fi + done +} + +trap quit_msg EXIT + +#shellcheck source=/dev/null +source "${ENVIRONMENT_FILE}" || exit 1 + +#### STOP NETDATA +echo "Stopping a possibly running netdata..." +for p in $(netdata_pids); do + i=0 + while kill "${p}" 2>/dev/null; do + if [ "$i" -gt 30 ]; then + echo "Forcefully stopping netdata with pid ${p}" + kill -9 "${p}" + sleep 2 + break + fi + sleep 1 + i=$((i + 1)) + done +done +sleep 2 + +#### REMOVE NETDATA FILES +rm_file /etc/logrotate.d/netdata +rm_file /etc/systemd/system/netdata.service +rm_file /lib/systemd/system/netdata.service +rm_file /usr/lib/systemd/system/netdata.service +rm_file /etc/init.d/netdata +rm_file /etc/periodic/daily/netdata-updater +rm_file /etc/cron.daily/netdata-updater + +if [ -n "${NETDATA_PREFIX}" ] && [ -d "${NETDATA_PREFIX}" ]; then + rm_dir "${NETDATA_PREFIX}" +else + rm_file "/usr/sbin/netdata" + rm_dir "/usr/share/netdata" + rm_dir "/usr/libexec/netdata" + rm_dir "/var/lib/netdata" + rm_dir "/var/cache/netdata" + rm_dir "/var/log/netdata" + rm_dir "/etc/netdata" +fi + +FILE_REMOVAL_STATUS=1 + +#### REMOVE NETDATA USER & GROUP +if [ -n "$NETDATA_ADDED_TO_GROUPS" ]; then + user_input "Press ENTER to delete 'netdata' from following groups: '$NETDATA_ADDED_TO_GROUPS' > " + for group in $NETDATA_ADDED_TO_GROUPS; do + gpasswd -d netdata "${group}" + done +fi + +user_input "Press ENTER to delete 'netdata' system user > " +userdel -f netdata || : +user_input "Press ENTER to delete 'netdata' system group > " +groupdel -f netdata || : diff --git a/packaging/installer/netdata-updater.sh b/packaging/installer/netdata-updater.sh index 7846ce8bf..2dce5efc1 100644 --- a/packaging/installer/netdata-updater.sh +++ b/packaging/installer/netdata-updater.sh @@ -21,7 +21,7 @@ error() { } # this is what we will do if it fails (head-less only) -failed() { +fatal() { error "FAILED TO UPDATE NETDATA : ${1}" if [ -n "${logfile}" ]; then @@ -31,30 +31,47 @@ failed() { exit 1 } +create_tmp_directory() { + # Check if tmp is mounted as noexec + if grep -Eq '^[^ ]+ /tmp [^ ]+ ([^ ]*,)?noexec[, ]' /proc/mounts; then + pattern="$(pwd)/netdata-updater-XXXXXX" + else + pattern="/tmp/netdata-updater-XXXXXX" + fi + + mktemp -d "$pattern" +} + download() { url="${1}" dest="${2}" if command -v curl >/dev/null 2>&1; then - curl -L --connect-timeout 5 --retry 3 "${url}" >"${dest}" || fatal "Cannot download ${url}" + curl -sSL --connect-timeout 10 --retry 3 "${url}" >"${dest}" || fatal "Cannot download ${url}" elif command -v wget >/dev/null 2>&1; then wget -T 15 -O - "${url}" >"${dest}" || fatal "Cannot download ${url}" else - failed "I need curl or wget to proceed, but neither is available on this system." + fatal "I need curl or wget to proceed, but neither is available on this system." fi } -update() { - [ -z "${logfile}" ] && 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="$(pwd)/netdata-updater-XXXXXX" +set_tarball_urls() { + if [ "$1" == "stable" ]; then + local latest + # Simple version + # latest="$(curl -sSL https://api.github.com/repos/netdata/netdata/releases/latest | grep tag_name | cut -d'"' -f4)" + latest="$(download "https://api.github.com/repos/netdata/netdata/releases/latest" /dev/stdout | grep tag_name | cut -d'"' -f4)" + export NETDATA_TARBALL_URL="https://github.com/netdata/netdata/releases/download/$latest/netdata-$latest.tar.gz" + export NETDATA_TARBALL_CHECKSUM_URL="https://github.com/netdata/netdata/releases/download/$latest/sha256sums.txt" else - pattern="/tmp/netdata-updater-XXXXXX" + export NETDATA_TARBALL_URL="https://storage.googleapis.com/netdata-nightlies/netdata-latest.tar.gz" + export NETDATA_TARBALL_CHECKSUM_URL="https://storage.googleapis.com/netdata-nightlies/sha256sums.txt" fi +} - dir=$(mktemp -d "$pattern") +update() { + [ -z "${logfile}" ] && info "Running on a terminal - (this script also supports running headless from crontab)" + dir=$(create_tmp_directory) cd "$dir" download "${NETDATA_TARBALL_CHECKSUM_URL}" "${dir}/sha256sum.txt" >&3 2>&3 @@ -85,11 +102,9 @@ update() { fi info "Re-installing netdata..." - eval "${REINSTALL_COMMAND} --dont-wait ${do_not_start}" >&3 2>&3 || failed "FAILED TO COMPILE/INSTALL NETDATA" + eval "${REINSTALL_COMMAND} --dont-wait ${do_not_start}" >&3 2>&3 || fatal "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 @@ -105,8 +120,7 @@ EOF 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 + fatal "You are running this script as user with uid $(id -u). We recommend to run this script as root (user with uid 0)" fi logfile= @@ -122,6 +136,7 @@ else exec 3>"${logfile}" fi +set_tarball_urls "${RELEASE_CHANNEL}" # the installer updates this script - so we run and exit in a single line update && exit 0 |