summaryrefslogtreecommitdiffstats
path: root/netdata-installer.sh
diff options
context:
space:
mode:
Diffstat (limited to 'netdata-installer.sh')
-rwxr-xr-xnetdata-installer.sh486
1 files changed, 212 insertions, 274 deletions
diff --git a/netdata-installer.sh b/netdata-installer.sh
index 374fbf3a..ed4ead7e 100755
--- a/netdata-installer.sh
+++ b/netdata-installer.sh
@@ -1,43 +1,47 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-3.0-or-later
-# shellcheck disable=SC1090,SC1091,SC1117,SC2002,SC2034,SC2044,SC2046,SC2086,SC2129,SC2162,SC2166,SC2181
+# shellcheck disable=SC2046,SC2086,SC2166
export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
uniquepath() {
local path=""
- while read; do
+ while read -r; do
if [[ ! ${path} =~ (^|:)"${REPLY}"(:|$) ]]; then
- [ ! -z "${path}" ] && path="${path}:"
+ [ -n "${path}" ] && path="${path}:"
path="${path}${REPLY}"
fi
- done < <(echo "${PATH}" | tr ":" "\n")
+ done < <(echo "${PATH}" | tr ":" "\\n")
- [ ! -z "${path}" ] && [[ ${PATH} =~ /bin ]] && [[ ${PATH} =~ /sbin ]] && export PATH="${path}"
+ [ -n "${path}" ] && [[ ${PATH} =~ /bin ]] && [[ ${PATH} =~ /sbin ]] && export PATH="${path}"
}
uniquepath
-netdata_source_dir="$(pwd)"
-installer_dir="$(dirname "${0}")"
+PROGRAM="$0"
+NETDATA_SOURCE_DIR="$(pwd)"
+INSTALLER_DIR="$(dirname "${PROGRAM}")"
-if [ "${netdata_source_dir}" != "${installer_dir}" -a "${installer_dir}" != "." ]; then
- echo >&2 "Warning: you are currently in '${netdata_source_dir}' but the installer is in '${installer_dir}'."
+if [ "${NETDATA_SOURCE_DIR}" != "${INSTALLER_DIR}" ] && [ "${INSTALLER_DIR}" != "." ]; then
+ echo >&2 "Warning: you are currently in '${NETDATA_SOURCE_DIR}' but the installer is in '${INSTALLER_DIR}'."
fi
# -----------------------------------------------------------------------------
# reload the user profile
+# shellcheck source=/dev/null
[ -f /etc/profile ] && . /etc/profile
# make sure /etc/profile does not change our current directory
-cd "${netdata_source_dir}" || exit 1
+cd "${NETDATA_SOURCE_DIR}" || exit 1
# -----------------------------------------------------------------------------
# load the required functions
-if [ -f "${installer_dir}/packaging/installer/functions.sh" ]; then
- source "${installer_dir}/packaging/installer/functions.sh" || exit 1
+if [ -f "${INSTALLER_DIR}/packaging/installer/functions.sh" ]; then
+ # shellcheck source=packaging/installer/functions.sh
+ source "${INSTALLER_DIR}/packaging/installer/functions.sh" || exit 1
else
- source "${netdata_source_dir}/packaging/installer/functions.sh" || exit 1
+ # shellcheck source=packaging/installer/functions.sh
+ source "${NETDATA_SOURCE_DIR}/packaging/installer/functions.sh" || exit 1
fi
download() {
@@ -74,187 +78,164 @@ CFLAGS="${CFLAGS--O2}"
[ "z${CFLAGS}" = "z-O3" ] && CFLAGS="-O2"
# keep a log of this command
-printf "\n# " >>netdata-installer.log
+# shellcheck disable=SC2129
+printf "\\n# " >>netdata-installer.log
date >>netdata-installer.log
printf 'CFLAGS="%s" ' "${CFLAGS}" >>netdata-installer.log
-printf "%q " "$0" "${@}" >>netdata-installer.log
-printf "\n" >>netdata-installer.log
+printf "%q " "${PROGRAM}" "${@}" >>netdata-installer.log
+printf "\\n" >>netdata-installer.log
-REINSTALL_PWD="${PWD}"
REINSTALL_COMMAND="$(
- printf "%q " "$0" "${@}"
- printf "\n"
+ printf "%q " "${PROGRAM}" "${@}"
+ printf "\\n"
)"
# remove options that shown not be inherited by netdata-updater.sh
REINSTALL_COMMAND="${REINSTALL_COMMAND// --dont-wait/}"
REINSTALL_COMMAND="${REINSTALL_COMMAND// --dont-start-it/}"
-[ "${REINSTALL_COMMAND:0:1}" != "." -a "${REINSTALL_COMMAND:0:1}" != "/" -a -f "./${0}" ] && REINSTALL_COMMAND="./${REINSTALL_COMMAND}"
-
-# shellcheck disable=SC2230
-setcap="$(which setcap 2>/dev/null || command -v setcap 2>/dev/null)"
-
-ME="$0"
-DONOTSTART=0
-DONOTWAIT=0
-AUTOUPDATE=0
-NETDATA_PREFIX=
-LIBS_ARE_HERE=0
-NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS-}"
-RELEASE_CHANNEL="nightly"
-
-usage() {
- netdata_banner "installer command line options"
- cat <<USAGE
-
-${ME} <installer options>
-
-Valid <installer options> are:
-
- --install /PATH/TO/INSTALL
-
- If you give: --install /opt
- netdata will be installed in /opt/netdata
-
- --dont-start-it
-
- Do not (re)start netdata.
- Just install it.
-
- --dont-wait
-
- Do not wait for the user to press ENTER.
- Start immediately building it.
-
- --auto-update | -u
-
- Install netdata-updater to cron,
- to update netdata automatically once per day
-
- --stable-channel
+if [ "${REINSTALL_COMMAND:0:1}" != "." ] && [ "${REINSTALL_COMMAND:0:1}" != "/" ] && [ -f "./${PROGRAM}" ]; then
+ REINSTALL_COMMAND="./${REINSTALL_COMMAND}"
+fi
- Auto-updater will update netdata only when new release is published
- in GitHub release pages. This results in less frequent updates.
- Default: Use packages from GCS (nightly release channel).
+banner_nonroot_install() {
+ cat <<NONROOTNOPREFIX
- --enable-plugin-freeipmi
- --disable-plugin-freeipmi
+ ${TPUT_RED}${TPUT_BOLD}Sorry! This will fail!${TPUT_RESET}
- Enable/disable the FreeIPMI plugin.
- Default: enable it when libipmimonitoring is available.
+ You are attempting to install netdata as non-root, but you plan
+ to install it in system paths.
- --enable-plugin-nfacct
- --disable-plugin-nfacct
+ Please set an installation prefix, like this:
- Enable/disable the nfacct plugin.
- Default: enable it when libmnl and libnetfilter_acct are available.
+ $PROGRAM ${@} --install /tmp
- --enable-lto
- --disable-lto
+ or, run the installer as root:
- Enable/disable Link-Time-Optimization
- Default: enabled
+ sudo $PROGRAM ${@}
- --disable-x86-sse
+ We suggest to install it as root, or certain data collectors will
+ not be able to work. Netdata drops root privileges when running.
+ So, if you plan to keep it, install it as root to get the full
+ functionality.
- Disable SSE instructions
- Default: enabled
+NONROOTNOPREFIX
+}
- --zlib-is-really-here
- --libs-are-really-here
+banner_root_notify() {
+ cat <<NONROOT
- If you get errors about missing zlib,
- or libuuid but you know it is available,
- you have a broken pkg-config.
- Use this option to allow it continue
- without checking pkg-config.
+ ${TPUT_RED}${TPUT_BOLD}IMPORTANT${TPUT_RESET}:
+ You are about to install netdata as a non-root user.
+ Netdata will work, but a few data collection modules that
+ require root access will fail.
- --disable-telemetry
+ If you installing netdata permanently on your system, run
+ the installer like this:
- Use this flag to opt-out from our anonymous telemetry progam.
+ ${TPUT_YELLOW}${TPUT_BOLD}sudo $PROGRAM ${@}${TPUT_RESET}
- --disable-go
+NONROOT
+}
- Flag to disable installation of go.d.plugin
+usage() {
+ netdata_banner "installer command line options"
+ cat <<HEREDOC
+
+USAGE: ${PROGRAM} [options]
+ where options include:
+
+ --install <path> Install netdata in <path>. Ex. --install /opt will put netdata in /opt/netdata
+ --dont-start-it Do not (re)start netdata after installation
+ --dont-wait Run installation in non-interactive mode
+ --auto-update or -u Install netdata-updater in cron to update netdata automatically once per day
+ --stable-channel Use packages from GitHub release pages instead of GCS (nightly updates).
+ This results in less frequent updates.
+ --disable-go Disable installation of go.d.plugin.
+ --enable-plugin-freeipmi Enable the FreeIPMI plugin. Default: enable it when libipmimonitoring is available.
+ --disable-plugin-freeipmi
+ --enable-plugin-nfacct Enable nfacct plugin. Default: enable it when libmnl and libnetfilter_acct are available.
+ --disable-plugin-nfacct
+ --enable-plugin-xenstat Enable the xenstat plugin. Default: enable it when libxenstat and libyajl are available
+ --disable-plugin-xenstat Disable the xenstat plugin.
+ --enable-lto Enable Link-Time-Optimization. Default: enabled
+ --disable-lto
+ --disable-x86-sse Disable SSE instructions. By default SSE optimizations are enabled.
+ --zlib-is-really-here or
+ --libs-are-really-here If you get errors about missing zlib or libuuid but you know it is available, you might
+ have a broken pkg-config. Use this option to proceed without checking pkg-config.
+ --disable-telemetry Use this flag to opt-out from our anonymous telemetry progam.
Netdata will by default be compiled with gcc optimization -O2
If you need to pass different CFLAGS, use something like this:
- CFLAGS="<gcc options>" ${ME} <installer options>
+ CFLAGS="<gcc options>" ${PROGRAM} [options]
-For the installer to complete successfully, you will need
-these packages installed:
+For the installer to complete successfully, you will need these packages installed:
- gcc make autoconf automake pkg-config zlib1g-dev (or zlib-devel)
- uuid-dev (or libuuid-devel)
+ gcc make autoconf automake pkg-config zlib1g-dev (or zlib-devel) uuid-dev (or libuuid-devel)
For the plugins, you will at least need:
- curl, bash v4+, python v2 or v3, node.js
+ curl, bash v4+, python v2 or v3, node.js
-USAGE
+HEREDOC
}
-while [ ! -z "${1}" ]; do
- if [ "$1" = "--install" ]; then
- NETDATA_PREFIX="${2}/netdata"
- shift 2
- elif [ "$1" = "--zlib-is-really-here" -o "$1" = "--libs-are-really-here" ]; then
- LIBS_ARE_HERE=1
- shift 1
- elif [ "$1" = "--dont-start-it" ]; then
- DONOTSTART=1
- shift 1
- elif [ "$1" = "--dont-wait" ]; then
- DONOTWAIT=1
- shift 1
- elif [ "$1" = "--auto-update" -o "$1" = "-u" ]; then
- AUTOUPDATE=1
- shift 1
- elif [ "$1" = "--stable-channel" ]; then
- RELEASE_CHANNEL="stable"
- shift 1
- elif [ "$1" = "--enable-plugin-freeipmi" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-plugin-freeipmi/} --enable-plugin-freeipmi"
- shift 1
- elif [ "$1" = "--disable-plugin-freeipmi" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-plugin-freeipmi/} --disable-plugin-freeipmi"
- shift 1
- elif [ "$1" = "--enable-plugin-nfacct" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-plugin-nfacct/} --enable-plugin-nfacct"
- shift 1
- elif [ "$1" = "--disable-plugin-nfacct" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-plugin-nfacct/} --disable-plugin-nfacct"
- shift 1
- elif [ "$1" = "--enable-lto" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-lto/} --enable-lto"
- shift 1
- elif [ "$1" = "--disable-lto" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-lto/} --disable-lto"
- shift 1
- elif [ "$1" = "--disable-x86-sse" ]; then
- NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-x86-sse/} --disable-x86-sse"
- shift 1
- elif [ "$1" = "--disable-telemetry" ]; then
- NETDATA_DISABLE_TELEMETRY=1
- shift 1
- elif [ "$1" = "--disable-go" ]; then
- NETDATA_DISABLE_GO=1
- shift 1
- elif [ "$1" = "--help" -o "$1" = "-h" ]; then
- usage
- exit 1
- else
- echo >&2
- echo >&2 "ERROR:"
- echo >&2 "I cannot understand option '$1'."
- usage
- exit 1
- fi
+DONOTSTART=0
+DONOTWAIT=0
+AUTOUPDATE=0
+NETDATA_PREFIX=
+LIBS_ARE_HERE=0
+NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS-}"
+RELEASE_CHANNEL="nightly"
+while [ -n "${1}" ]; do
+ case "${1}" in
+ "--zlib-is-really-here") LIBS_ARE_HERE=1;;
+ "--libs-are-really-here") LIBS_ARE_HERE=1;;
+ "--dont-start-it") DONOTSTART=1;;
+ "--dont-wait") DONOTWAIT=1;;
+ "--auto-update"|"-u") AUTOUPDATE=1;;
+ "--stable-channel") RELEASE_CHANNEL="stable";;
+ "--enable-plugin-freeipmi") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-plugin-freeipmi/} --enable-plugin-freeipmi";;
+ "--disable-plugin-freeipmi") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-plugin-freeipmi/} --disable-plugin-freeipmi";;
+ "--enable-plugin-nfacct") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-plugin-nfacct/} --enable-plugin-nfacct";;
+ "--disable-plugin-nfacct") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-plugin-nfacct/} --disable-plugin-nfacct";;
+ "--enable-plugin-xenstat") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-plugin-xenstat/} --enable-plugin-xenstat";;
+ "--disable-plugin-xenstat") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-plugin-xenstat/} --disable-plugin-xenstat";;
+ "--enable-lto") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--enable-lto/} --enable-lto";;
+ "--disable-lto") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-lto/} --disable-lto";;
+ "--disable-x86-sse") NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS//--disable-x86-sse/} --disable-x86-sse";;
+ "--disable-telemetry") NETDATA_DISABLE_TELEMETRY=1;;
+ "--disable-go") NETDATA_DISABLE_GO=1;;
+ "--install")
+ NETDATA_PREFIX="${2}/netdata"
+ shift 1
+ ;;
+ "--help"|"-h")
+ usage
+ exit 1
+ ;;
+ *)
+ run_failed "I cannot understand option '$1'."
+ usage
+ exit 1
+ ;;
+ esac
+ shift 1
done
# replace multiple spaces with a single space
NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS// / }"
+if [ "${UID}" -ne 0 ]; then
+ if [ -z "${NETDATA_PREFIX}" ]; then
+ netdata_banner "wrong command line options!"
+ banner_nonroot_install "${@}"
+ exit 1
+ else
+ banner_root_notify "${@}"
+ fi
+fi
+
netdata_banner "real-time performance monitoring, done right!"
cat <<BANNER1
@@ -283,49 +264,6 @@ cat <<BANNER3
BANNER3
-if [ "${UID}" -ne 0 ]; then
- if [ -z "${NETDATA_PREFIX}" ]; then
- netdata_banner "wrong command line options!"
- cat <<NONROOTNOPREFIX
-
- ${TPUT_RED}${TPUT_BOLD}Sorry! This will fail!${TPUT_RESET}
-
- You are attempting to install netdata as non-root, but you plan
- to install it in system paths.
-
- Please set an installation prefix, like this:
-
- $0 ${@} --install /tmp
-
- or, run the installer as root:
-
- sudo $0 ${@}
-
- We suggest to install it as root, or certain data collectors will
- not be able to work. Netdata drops root privileges when running.
- So, if you plan to keep it, install it as root to get the full
- functionality.
-
-NONROOTNOPREFIX
- exit 1
-
- else
- cat <<NONROOT
-
- ${TPUT_RED}${TPUT_BOLD}IMPORTANT${TPUT_RESET}:
- You are about to install netdata as a non-root user.
- Netdata will work, but a few data collection modules that
- require root access will fail.
-
- If you installing netdata permanently on your system, run
- the installer like this:
-
- ${TPUT_YELLOW}${TPUT_BOLD}sudo $0 ${@}${TPUT_RESET}
-
-NONROOT
- fi
-fi
-
have_autotools=
if [ "$(type autoreconf 2>/dev/null)" ]; then
autoconf_maj_min() {
@@ -369,13 +307,16 @@ EOF
fi
if [ ${DONOTWAIT} -eq 0 ]; then
- if [ ! -z "${NETDATA_PREFIX}" ]; then
- eval "read >&2 -ep \$'\001${TPUT_BOLD}${TPUT_GREEN}\002Press ENTER to build and install netdata to \'\001${TPUT_CYAN}\002${NETDATA_PREFIX}\001${TPUT_YELLOW}\002\'\001${TPUT_RESET}\002 > ' -e -r REPLY"
- [ $? -ne 0 ] && exit 1
+ if [ -n "${NETDATA_PREFIX}" ]; then
+ echo -n "${TPUT_BOLD}${TPUT_GREEN}Press ENTER to build and install netdata to '${TPUT_CYAN}${NETDATA_PREFIX}${TPUT_YELLOW}'${TPUT_RESET} > "
else
- eval "read >&2 -ep \$'\001${TPUT_BOLD}${TPUT_GREEN}\002Press ENTER to build and install netdata to your system\001${TPUT_RESET}\002 > ' -e -r REPLY"
- [ $? -ne 0 ] && exit 1
+ echo -n "${TPUT_BOLD}${TPUT_GREEN}Press ENTER to build and install netdata to your system${TPUT_RESET} > "
+ fi
+ read -ern1
+ if [ "$REPLY" != '' ]; then
+ exit 1
fi
+
fi
build_error() {
@@ -454,7 +395,7 @@ run make clean
# -----------------------------------------------------------------------------
progress "Compile netdata"
-run make -j${SYSTEM_CPUS} || exit 1
+run make -j$(find_processors) || exit 1
# -----------------------------------------------------------------------------
progress "Migrate configuration files for node.d.plugin and charts.d.plugin"
@@ -494,7 +435,7 @@ fi
# -----------------------------------------------------------------------------
# shellcheck disable=SC2230
-md5sum="$(which md5sum 2>/dev/null || command -v md5sum 2>/dev/null || command -v md5 2>/dev/null)"
+md5sum="$(command -v md5sum 2>/dev/null || command -v md5 2>/dev/null)"
deleted_stock_configs=0
if [ ! -f "${NETDATA_PREFIX}/etc/netdata/.installer-cleanup-of-stock-configs-done" ]; then
@@ -525,7 +466,7 @@ if [ ! -f "${NETDATA_PREFIX}/etc/netdata/.installer-cleanup-of-stock-configs-don
}
# clean up stock config files from the user configuration directory
- for x in $(find -L "${NETDATA_PREFIX}/etc/netdata" -type f); do
+ for x in $(find -L "${NETDATA_PREFIX}/etc/netdata" -type f -not -path '*/\.*' -not -path "${NETDATA_PREFIX}/etc/netdata/orig/*" \( -name '*.conf.old' -o -name '*.conf' -o -name '*.conf.orig' -o -name '*.conf.installer_backup.*' \)); do
if [ -f "${x}" ]; then
# find it relative filename
f="${x/${NETDATA_PREFIX}\/etc\/netdata\//}"
@@ -534,6 +475,7 @@ if [ ! -f "${NETDATA_PREFIX}/etc/netdata/.installer-cleanup-of-stock-configs-don
t="${f/.conf.installer_backup.*/.conf}"
t="${t/.conf.old/.conf}"
t="${t/.conf.orig/.conf}"
+ t="${t/orig\//}"
if [ -z "${md5sum}" -o ! -x "${md5sum}" ]; then
# we don't have md5sum - keep it
@@ -549,7 +491,7 @@ if [ ! -f "${NETDATA_PREFIX}/etc/netdata/.installer-cleanup-of-stock-configs-don
deleted_stock_configs=$((deleted_stock_configs + 1))
else
# edited by user - keep it
- echo >&2 "File '${TPUT_CYAN}${x}${TPUT_RESET}' ${TPUT_RED} does not match stock of '${t}'${TPUT_RESET}. Keeping it."
+ echo >&2 "File '${TPUT_CYAN}${x}${TPUT_RESET}' ${TPUT_RED} does not match stock of${TPUT_RESET} ${TPUT_CYAN}'${t}'${TPUT_RESET}. Keeping it."
fi
fi
fi
@@ -570,9 +512,19 @@ run find ./system/ -type f -a \! -name \*.in -a \! -name Makefile\* -a \! -name
# -----------------------------------------------------------------------------
progress "Add user netdata to required user groups"
-homedir="${NETDATA_PREFIX}/var/lib/netdata"
-[ ! -z "${NETDATA_PREFIX}" ] && homedir="${NETDATA_PREFIX}"
-add_netdata_user_and_group "${homedir}" || run_failed "The installer does not run as root."
+NETDATA_WANTED_GROUPS="docker nginx varnish haproxy adm nsd proxy squid ceph nobody"
+NETDATA_ADDED_TO_GROUPS=""
+if [ "${UID}" -eq 0 ]; then
+ portable_add_group netdata || :
+ portable_add_user netdata "${NETDATA_PREFIX}/var/lib/netdata" || :
+
+ for g in ${NETDATA_WANTED_GROUPS}; do
+ # shellcheck disable=SC2086
+ portable_add_user_to_group ${g} netdata && NETDATA_ADDED_TO_GROUPS="${NETDATA_ADDED_TO_GROUPS} ${g}"
+ done
+else
+ run_failed "The installer does not run as root."
+fi
# -----------------------------------------------------------------------------
progress "Install logrotate configuration for netdata"
@@ -608,14 +560,14 @@ else
NETDATA_USER="${USER}"
ROOT_USER="${NETDATA_USER}"
fi
-NETDATA_GROUP="$(id -g -n ${NETDATA_USER})"
+NETDATA_GROUP="$(id -g -n "${NETDATA_USER}")"
[ -z "${NETDATA_GROUP}" ] && NETDATA_GROUP="${NETDATA_USER}"
# the owners of the web files
NETDATA_WEB_USER="$(config_option "web" "web files owner" "${NETDATA_USER}")"
NETDATA_WEB_GROUP="${NETDATA_GROUP}"
-if [ "${UID}" = "0" -a "${NETDATA_USER}" != "${NETDATA_WEB_USER}" ]; then
- NETDATA_WEB_GROUP="$(id -g -n ${NETDATA_WEB_USER})"
+if [ "${UID}" = "0" ] && [ "${NETDATA_USER}" != "${NETDATA_WEB_USER}" ]; then
+ NETDATA_WEB_GROUP="$(id -g -n "${NETDATA_WEB_USER}")"
[ -z "${NETDATA_WEB_GROUP}" ] && NETDATA_WEB_GROUP="${NETDATA_WEB_USER}"
fi
NETDATA_WEB_GROUP="$(config_option "web" "web files group" "${NETDATA_WEB_GROUP}")"
@@ -720,7 +672,7 @@ run chmod 755 "${NETDATA_LOG_DIR}"
# --- plugins ----
-if [ ${UID} -eq 0 ]; then
+if [ "${UID}" -eq 0 ]; then
# find the admin group
admin_group=
test -z "${admin_group}" && getent group root >/dev/null 2>&1 && admin_group="root"
@@ -728,55 +680,51 @@ if [ ${UID} -eq 0 ]; then
test -z "${admin_group}" && admin_group="${NETDATA_GROUP}"
run chown "${NETDATA_USER}:${admin_group}" "${NETDATA_LOG_DIR}"
- run chown -R root "${NETDATA_PREFIX}/usr/libexec/netdata"
+ run chown -R "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata"
run find "${NETDATA_PREFIX}/usr/libexec/netdata" -type d -exec chmod 0755 {} \;
run find "${NETDATA_PREFIX}/usr/libexec/netdata" -type f -exec chmod 0644 {} \;
run find "${NETDATA_PREFIX}/usr/libexec/netdata" -type f -a -name \*.plugin -exec chmod 0755 {} \;
run find "${NETDATA_PREFIX}/usr/libexec/netdata" -type f -a -name \*.sh -exec chmod 0755 {} \;
if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" ]; then
- setcap_ret=1
- if ! iscontainer; then
- if [ ! -z "${setcap}" ]; then
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
- run chmod 0750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
- run setcap cap_dac_read_search,cap_sys_ptrace+ep "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
- setcap_ret=$?
- fi
-
- if [ ${setcap_ret} -eq 0 ]; then
- # if we managed to setcap
- # but we fail to execute apps.plugin
- # trigger setuid to root
- "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" -t >/dev/null 2>&1
- setcap_ret=$?
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+ capabilities=0
+ if ! iscontainer && command -v setcap 1>/dev/null 2>&1; then
+ run chmod 0750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+ if run setcap cap_dac_read_search,cap_sys_ptrace+ep "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"; then
+ # if we managed to setcap, but we fail to execute apps.plugin setuid to root
+ "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" -t >/dev/null 2>&1 && capabilities=1 || capabilities=0
fi
fi
- if [ ${setcap_ret} -ne 0 ]; then
+ if [ $capabilities -eq 0 ]; then
# fix apps.plugin to be setuid to root
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
fi
fi
if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin" ]; then
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin"
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin"
run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin"
fi
- if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin" ]; then
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin"
- run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin"
+ if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin" ]; then
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin"
+ run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/nfacct.plugin"
+ fi
+
+ if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/xenstat.plugin" ]; then
+ run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/xenstat.plugin"
+ run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/xenstat.plugin"
fi
if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network" ]; then
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network"
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network"
run chmod 4750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network"
fi
if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network-helper.sh" ]; then
- run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network-helper.sh"
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network-helper.sh"
run chmod 0550 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/cgroup-network-helper.sh"
fi
@@ -792,7 +740,7 @@ fi
install_go() {
# When updating this value, ensure correct checksums in packaging/go.d.checksums
- GO_PACKAGE_VERSION="v0.2.0"
+ GO_PACKAGE_VERSION="v0.3.1"
ARCH_MAP=(
'i386::386'
'i686::386'
@@ -823,8 +771,8 @@ install_go() {
download "https://github.com/netdata/go.d.plugin/releases/download/$GO_PACKAGE_VERSION/$GO_PACKAGE_BASENAME" "${tmp}/$GO_PACKAGE_BASENAME"
download "https://github.com/netdata/go.d.plugin/releases/download/$GO_PACKAGE_VERSION/config.tar.gz" "${tmp}/config.tar.gz"
- grep "${GO_PACKAGE_BASENAME}\$" "${installer_dir}/packaging/go.d.checksums" > "${tmp}/sha256sums.txt" 2>/dev/null
- grep "config.tar.gz" "${installer_dir}/packaging/go.d.checksums" >> "${tmp}/sha256sums.txt" 2>/dev/null
+ grep "${GO_PACKAGE_BASENAME}\$" "${INSTALLER_DIR}/packaging/go.d.checksums" > "${tmp}/sha256sums.txt" 2>/dev/null
+ grep "config.tar.gz" "${INSTALLER_DIR}/packaging/go.d.checksums" >> "${tmp}/sha256sums.txt" 2>/dev/null
# Checksum validation
if ! (cd "${tmp}" && sha256sum -c "sha256sums.txt"); then
@@ -839,8 +787,8 @@ install_go() {
run chown -R "${ROOT_USER}:${NETDATA_GROUP}" "${NETDATA_STOCK_CONFIG_DIR}"
run mv "${tmp}/$GO_PACKAGE_BASENAME" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/go.d.plugin"
- if [ ${UID} -eq 0 ]; then
- run chown root:${NETDATA_GROUP} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/go.d.plugin"
+ if [ "${UID}" -eq 0 ]; then
+ run chown "root:${NETDATA_GROUP}" "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/go.d.plugin"
fi
run chmod 0750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/go.d.plugin"
fi
@@ -848,11 +796,6 @@ install_go() {
}
install_go
-# --- fix #1292 bug ---
-
-[ -d "${NETDATA_PREFIX}/usr/libexec" ] && run chmod a+rX "${NETDATA_PREFIX}/usr/libexec"
-[ -d "${NETDATA_PREFIX}/usr/share/netdata" ] && run chmod a+rX "${NETDATA_PREFIX}/usr/share/netdata"
-
# -----------------------------------------------------------------------------
progress "Install netdata at system init"
@@ -862,28 +805,23 @@ install_netdata_service || run_failed "Cannot install netdata init service."
# -----------------------------------------------------------------------------
# check if we can re-start netdata
+# TODO(paulfantom): Creation of configuration file should be handled by a build system. Additionally we shouldn't touch configuration files in /etc/netdata/...
started=0
if [ ${DONOTSTART} -eq 1 ]; then
- generate_netdata_conf "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf" "http://localhost:${NETDATA_PORT}/netdata.conf"
-
+ create_netdata_conf "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
else
- restart_netdata ${NETDATA_PREFIX}/usr/sbin/netdata "${@}"
- if [ $? -ne 0 ]; then
- echo >&2
- echo >&2 "SORRY! FAILED TO START NETDATA!"
- echo >&2
- exit 1
+ if ! restart_netdata "${NETDATA_PREFIX}/usr/sbin/netdata" "${@}"; then
+ fatal "Cannot start netdata!"
fi
started=1
- echo >&2 "OK. NetData Started!"
- echo >&2
-
- # -----------------------------------------------------------------------------
- # save a config file, if it is not already there
-
- download_netdata_conf "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf" "http://localhost:${NETDATA_PORT}/netdata.conf"
+ run_ok "netdata started!"
+ create_netdata_conf "${NETDATA_PREFIX}/etc/netdata/netdata.conf" "http://localhost:${NETDATA_PORT}/netdata.conf"
+fi
+if [ "${UID}" -eq 0 ]; then
+ run chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
fi
+run chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
if [ "$(uname)" = "Linux" ]; then
# -------------------------------------------------------------------------
@@ -923,7 +861,7 @@ KSM2
}
if [ -f "/sys/kernel/mm/ksm/run" ]; then
- if [ $(cat "/sys/kernel/mm/ksm/run") != "1" ]; then
+ if [ "$(cat "/sys/kernel/mm/ksm/run")" != "1" ]; then
ksm_is_available_but_disabled
fi
else
@@ -983,6 +921,11 @@ SETUID_WARNING
fi
# -----------------------------------------------------------------------------
+progress "Copy uninstaller"
+sed "s|ENVIRONMENT_FILE=\"/etc/netdata/.environment\"|ENVIRONMENT_FILE=\"${NETDATA_PREFIX}/etc/netdata/.environment\"|" packaging/installer/netdata-uninstaller.sh > ${NETDATA_PREFIX}/usr/libexec/netdata-uninstaller.sh
+chmod 750 ${NETDATA_PREFIX}/usr/libexec/netdata-uninstaller.sh
+
+# -----------------------------------------------------------------------------
progress "Basic netdata instructions"
cat <<END
@@ -1002,6 +945,7 @@ To start netdata run:
END
+echo >&2 "Uninstall script copied to: ${TPUT_RED}${TPUT_BOLD}${NETDATA_PREFIX}/usr/libexec/netdata-uninstaller.sh${TPUT_RESET}"
if [ "${AUTOUPDATE}" = "1" ]; then
if [ "${UID}" -ne "0" ]; then
@@ -1020,17 +964,11 @@ if [ "${AUTOUPDATE}" = "1" ]; then
fi
progress "Installing new netdata-updater in cron"
- rm ${installer_dir}/netdata-updater.sh || : #TODO(paulfantom): this workaround should be removed after v1.13.0-rc1. It just needs to be propagated
-
rm -f "${crondir}/netdata-updater"
- if [ -f "${installer_dir}/packaging/installer/netdata-updater.sh" ]; then
- sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${installer_dir}/packaging/installer/netdata-updater.sh" > ${crondir}/netdata-updater || exit 1
- #TODO(paulfantom): Following line is a workaround and should be removed after v1.13.0-rc1. It just needs time to be propagated.
- sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${installer_dir}/packaging/installer/netdata-updater.sh" > ${installer_dir}/netdata-updater.sh || exit 1
+ if [ -f "${INSTALLER_DIR}/packaging/installer/netdata-updater.sh" ]; then
+ sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${INSTALLER_DIR}/packaging/installer/netdata-updater.sh" > "${crondir}/netdata-updater" || exit 1
else
- sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${netdata_source_dir}/packaging/installer/netdata-updater.sh" > ${crondir}/netdata-updater || exit 1
- #TODO(paulfantom): Following line is a workaround and should be removed after v1.13.0-rc1. It just needs time to be propagated.
- sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${netdata_source_dir}/packaging/installer/netdata-updater.sh" > ${installer_source_dir}/netdata-updater.sh || exit 1
+ sed "s|THIS_SHOULD_BE_REPLACED_BY_INSTALLER_SCRIPT|${NETDATA_USER_CONFIG_DIR}/.environment|" "${NETDATA_SOURCE_DIR}/packaging/installer/netdata-updater.sh" > "${crondir}/netdata-updater" || exit 1
fi
chmod 0755 ${crondir}/netdata-updater
@@ -1043,7 +981,7 @@ if [ "${AUTOUPDATE}" = "1" ]; then
fi
# Save environment variables
-cat <<EOF > ${NETDATA_USER_CONFIG_DIR}/.environment
+cat <<EOF > "${NETDATA_USER_CONFIG_DIR}/.environment"
# Created by installer
PATH="${PATH}"
CFLAGS="${CFLAGS}"
@@ -1059,7 +997,7 @@ EOF
# Opt-out from telemetry program
if [ -n "${NETDATA_DISABLE_TELEMETRY+x}" ]; then
- touch ${NETDATA_USER_CONFIG_DIR}/.opt-out-from-anonymous-statistics
+ touch "${NETDATA_USER_CONFIG_DIR}/.opt-out-from-anonymous-statistics"
fi
# -----------------------------------------------------------------------------