]> arthur.barton.de Git - netdata.git/blobdiff - netdata-installer.sh
Merge pull request #1968 from ktsaou/master
[netdata.git] / netdata-installer.sh
index fa69de196d1076dd2a48551639685b4431e334a4..f926f14f2809ed7610673729ece7dd2fc8cdf973 100755 (executable)
@@ -1,11 +1,42 @@
 #!/usr/bin/env bash
 
 #!/usr/bin/env bash
 
+export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
+
+netdata_source_dir="$(pwd)"
+installer_dir="$(dirname "${0}")"
+
+if [ "${netdata_source_dir}" != "${installer_dir}" -a "${installer_dir}" != "." ]
+    then
+    echo >&2 "Warninng: you are currently in '${netdata_source_dir}' but the installer is in '${installer_dir}'."
+fi
+
+
+# -----------------------------------------------------------------------------
 # reload the user profile
 # reload the user profile
+
 [ -f /etc/profile ] && . /etc/profile
 
 [ -f /etc/profile ] && . /etc/profile
 
-export PATH="${PATH}:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
+# make sure /etc/profile does not change our current directory
+cd "${netdata_source_dir}" || exit 1
+
 
 
+# -----------------------------------------------------------------------------
+# load the required functions
+
+if [ -f "${installer_dir}/installer/functions.sh" ]
+    then
+    source "${installer_dir}/installer/functions.sh" || exit 1
+else
+    source "${netdata_source_dir}/installer/functions.sh" || exit 1
+fi
+
+# make sure we save all commands we run
+run_logfile="netdata-installer.log"
+
+
+# -----------------------------------------------------------------------------
 # fix PKG_CHECK_MODULES error
 # fix PKG_CHECK_MODULES error
+
 if [ -d /usr/share/aclocal ]
 then
         ACLOCAL_PATH=${ACLOCAL_PATH-/usr/share/aclocal}
 if [ -d /usr/share/aclocal ]
 then
         ACLOCAL_PATH=${ACLOCAL_PATH-/usr/share/aclocal}
@@ -18,7 +49,7 @@ umask 002
 # Be nice on production environments
 renice 19 $$ >/dev/null 2>/dev/null
 
 # Be nice on production environments
 renice 19 $$ >/dev/null 2>/dev/null
 
-processors=$(cat /proc/cpuinfo  | grep ^processor | wc -l)
+processors=$(cat /proc/cpuinfo 2>/dev/null | grep ^processor | wc -l)
 [ $(( processors )) -lt 1 ] && processors=1
 
 # you can set CFLAGS before running installer
 [ $(( processors )) -lt 1 ] && processors=1
 
 # you can set CFLAGS before running installer
@@ -35,54 +66,17 @@ printf "\n" >>netdata-installer.log
 REINSTALL_PWD="${PWD}"
 REINSTALL_COMMAND="$(printf "%q " "$0" "${@}"; printf "\n")"
 
 REINSTALL_PWD="${PWD}"
 REINSTALL_COMMAND="$(printf "%q " "$0" "${@}"; printf "\n")"
 
-banner() {
-    local   l1="  ^"                                                                      \
-            l2="  |.-.   .-.   .-.   .-.   .-.   .-.   .-.   .-.   .-.   .-.   .-.   .-.   .-"  \
-            l3="  |   '-'   '-'   '-'   '-'   '-'   '-'   '-'   '-'   '-'   '-'   '-'   '-'  "  \
-            l4="  +----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+--->" \
-            sp="                                                                        " \
-            netdata="netdata" start end msg="${*}"
-
-    [ ${#msg} -lt ${#netdata} ] && msg="${msg}${sp:0:$(( ${#netdata} - ${#msg}))}"
-    [ ${#msg} -gt $(( ${#l2} - 20 )) ] && msg="${msg:0:$(( ${#l2} - 23 ))}..."
-
-    start="$(( ${#l2} / 2 - 4 ))"
-    [ $(( start + ${#msg} + 4 )) -gt ${#l2} ] && start=$((${#l2} - ${#msg} - 4))
-    end=$(( ${start} + ${#msg} + 4 ))
-
-    echo >&2
-    echo >&2 "${l1}"
-    echo >&2 "${l2:0:start}${sp:0:2}${netdata}${sp:0:$((end - start - 2 - ${#netdata}))}${l2:end:$((${#l2} - end))}"
-    echo >&2 "${l3:0:start}${sp:0:2}${msg}${sp:0:2}${l3:end:$((${#l2} - end))}"
-    echo >&2 "${l4}"
-    echo >&2
-}
-
-service="$(which service 2>/dev/null || command -v service 2>/dev/null)"
-systemctl="$(which systemctl 2>/dev/null || command -v systemctl 2>/dev/null)"
-service() {
-    local cmd="${1}" action="${2}"
-
-    if [ ! -z "${service}" ]
-    then
-        run "${service}" "${cmd}" "${action}"
-        return $?
-    elif [ ! -z "${systemctl}" ]
-    then
-        run "${systemctl}" "${action}" "${cmd}"
-        return $?
-    fi
-    return 1
-}
+setcap="$(which setcap 2>/dev/null || command -v setcap 2>/dev/null)"
 
 ME="$0"
 DONOTSTART=0
 DONOTWAIT=0
 NETDATA_PREFIX=
 LIBS_ARE_HERE=0
 
 ME="$0"
 DONOTSTART=0
 DONOTWAIT=0
 NETDATA_PREFIX=
 LIBS_ARE_HERE=0
+NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS-}"
 
 usage() {
 
 usage() {
-    banner "installer command line options"
+    netdata_banner "installer command line options"
     cat <<USAGE
 
 ${ME} <installer options>
     cat <<USAGE
 
 ${ME} <installer options>
@@ -91,7 +85,7 @@ Valid <installer options> are:
 
    --install /PATH/TO/INSTALL
 
 
    --install /PATH/TO/INSTALL
 
-        If your give: --install /opt
+        If you give: --install /opt
         netdata will be installed in /opt/netdata
 
    --dont-start-it
         netdata will be installed in /opt/netdata
 
    --dont-start-it
@@ -104,6 +98,24 @@ Valid <installer options> are:
         Do not wait for the user to press ENTER.
         Start immediately building it.
 
         Do not wait for the user to press ENTER.
         Start immediately building it.
 
+   --enable-plugin-freeipmi
+   --disable-plugin-freeipmi
+
+        Enable/disable the FreeIPMI plugin.
+        Default: enable it when libipmimonitoring is available.
+
+   --enable-plugin-nfacct
+   --disable-plugin-nfacct
+
+        Enable/disable the nfacct plugin.
+        Default: enable it when libmnl and libnetfilter_acct are available.
+
+   --enable-lto
+   --disable-lto
+
+        Enable/disable Link-Time-Optimization
+        Default: enabled
+
    --zlib-is-really-here
    --libs-are-really-here
 
    --zlib-is-really-here
    --libs-are-really-here
 
@@ -131,7 +143,7 @@ For the plugins, you will at least need:
 USAGE
 }
 
 USAGE
 }
 
-md5sum="$(which md5sum 2>/dev/null || command -v md5sum 2>/dev/null)"
+md5sum="$(which md5sum 2>/dev/null || command -v md5sum 2>/dev/null || command -v md5 2>/dev/null)"
 get_git_config_signatures() {
     local x s file md5
 
 get_git_config_signatures() {
     local x s file md5
 
@@ -147,7 +159,7 @@ get_git_config_signatures() {
             for c in $(git log --follow "conf.d/${x}" | grep ^commit | cut -d ' ' -f 2)
             do
                     git checkout ${c} "conf.d/${x}" || continue
             for c in $(git log --follow "conf.d/${x}" | grep ^commit | cut -d ' ' -f 2)
             do
                     git checkout ${c} "conf.d/${x}" || continue
-                    s="$(cat "conf.d/${x}" | md5sum | cut -d ' ' -f 1)"
+                    s="$(cat "conf.d/${x}" | ${md5sum} | cut -d ' ' -f 1)"
                     echo >>configs.signatures.tmp "${s}:${x}"
                     echo "    ${s}"
             done
                     echo >>configs.signatures.tmp "${s}:${x}"
                     echo "    ${s}"
             done
@@ -191,6 +203,30 @@ do
         then
         DONOTWAIT=1
         shift 1
         then
         DONOTWAIT=1
         shift 1
+    elif [ "$1" = "--enable-plugin-freeipmi" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --enable-plugin-freeipmi"
+        shift 1
+    elif [ "$1" = "--disable-plugin-freeipmi" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --disable-plugin-freeipmi"
+        shift 1
+    elif [ "$1" = "--enable-plugin-nfacct" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --enable-plugin-nfacct"
+        shift 1
+    elif [ "$1" = "--disable-plugin-nfacct" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --disable-plugin-nfacct"
+        shift 1
+    elif [ "$1" = "--enable-lto" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --enable-lto"
+        shift 1
+    elif [ "$1" = "--disable-lto" ]
+        then
+        NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS} --disable-lto"
+        shift 1
     elif [ "$1" = "--help" -o "$1" = "-h" ]
         then
         usage
     elif [ "$1" = "--help" -o "$1" = "-h" ]
         then
         usage
@@ -208,66 +244,74 @@ do
     fi
 done
 
     fi
 done
 
-banner "real-time performance monitoring, done right!"
-cat <<BANNER
+netdata_banner "real-time performance monitoring, done right!"
+cat <<BANNER1
 
   You are about to build and install netdata to your system.
 
   It will be installed at these locations:
 
 
   You are about to build and install netdata to your system.
 
   It will be installed at these locations:
 
-   - the daemon    at ${NETDATA_PREFIX}/usr/sbin/netdata
-   - config files  at ${NETDATA_PREFIX}/etc/netdata
-   - web files     at ${NETDATA_PREFIX}/usr/share/netdata
-   - plugins       at ${NETDATA_PREFIX}/usr/libexec/netdata
-   - cache files   at ${NETDATA_PREFIX}/var/cache/netdata
-   - db files      at ${NETDATA_PREFIX}/var/lib/netdata
-   - log files     at ${NETDATA_PREFIX}/var/log/netdata
-   - pid file      at ${NETDATA_PREFIX}/var/run
+   - the daemon     at ${TPUT_CYAN}${NETDATA_PREFIX}/usr/sbin/netdata${TPUT_RESET}
+   - config files   in ${TPUT_CYAN}${NETDATA_PREFIX}/etc/netdata${TPUT_RESET}
+   - web files      in ${TPUT_CYAN}${NETDATA_PREFIX}/usr/share/netdata${TPUT_RESET}
+   - plugins        in ${TPUT_CYAN}${NETDATA_PREFIX}/usr/libexec/netdata${TPUT_RESET}
+   - cache files    in ${TPUT_CYAN}${NETDATA_PREFIX}/var/cache/netdata${TPUT_RESET}
+   - db files       in ${TPUT_CYAN}${NETDATA_PREFIX}/var/lib/netdata${TPUT_RESET}
+   - log files      in ${TPUT_CYAN}${NETDATA_PREFIX}/var/log/netdata${TPUT_RESET}
+BANNER1
+
+[ "${UID}" -eq 0 ] && cat <<BANNER2
+   - pid file       at ${TPUT_CYAN}${NETDATA_PREFIX}/var/run/netdata.pid${TPUT_RESET}
+   - logrotate file at ${TPUT_CYAN}/etc/logrotate.d/netdata${TPUT_RESET}
+BANNER2
+
+cat <<BANNER3
 
   This installer allows you to change the installation path.
   Press Control-C and run the same command with --help for help.
 
 
   This installer allows you to change the installation path.
   Press Control-C and run the same command with --help for help.
 
-BANNER
+BANNER3
 
 if [ "${UID}" -ne 0 ]
     then
     if [ -z "${NETDATA_PREFIX}" ]
         then
 
 if [ "${UID}" -ne 0 ]
     then
     if [ -z "${NETDATA_PREFIX}" ]
         then
-        banner "wrong command line options!"
+        netdata_banner "wrong command line options!"
         cat <<NONROOTNOPREFIX
         cat <<NONROOTNOPREFIX
-
-Sorry! This will fail!
-
-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.
-
+  
+  ${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
 NONROOTNOPREFIX
         exit 1
 
     else
         cat <<NONROOT
-
-IMPORTANT:
-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 permanently on your system, run the
-installer like this:
-
-    sudo $0 ${@}
+  ${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
 
 NONROOT
     fi
@@ -306,7 +350,7 @@ then
     then
         echo "Will skip autoreconf step"
     else
     then
         echo "Will skip autoreconf step"
     else
-        banner "autotools v2.60 required"
+        netdata_banner "autotools v2.60 required"
         cat <<"EOF"
 
 -------------------------------------------------------------------------------
         cat <<"EOF"
 
 -------------------------------------------------------------------------------
@@ -333,14 +377,14 @@ if [ ${DONOTWAIT} -eq 0 ]
     then
     if [ ! -z "${NETDATA_PREFIX}" ]
         then
     then
     if [ ! -z "${NETDATA_PREFIX}" ]
         then
-        read -p "Press ENTER to build and install netdata to '${NETDATA_PREFIX}' > "
+        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"
     else
     else
-        read -p "Press ENTER to build and install netdata to your system > "
+        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"
     fi
 fi
 
 build_error() {
     fi
 fi
 
 build_error() {
-    banner "sorry, it failed to build..."
+    netdata_banner "sorry, it failed to build..."
     cat <<EOF
 
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     cat <<EOF
 
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -375,31 +419,6 @@ EOF
     exit 1
 }
 
     exit 1
 }
 
-run() {
-    printf >>netdata-installer.log "# "
-    printf >>netdata-installer.log "%q " "${@}"
-    printf >>netdata-installer.log " ... "
-
-    printf >&2 "\n"
-    printf >&2 ":-----------------------------------------------------------------------------\n"
-    printf >&2 "Running command:\n"
-    printf >&2 "\n"
-    printf >&2 "%q " "${@}"
-    printf >&2 "\n"
-
-    "${@}"
-
-    local ret=$?
-    if [ ${ret} -ne 0 ]
-        then
-        printf >>netdata-installer.log "FAILED!\n"
-    else
-        printf >>netdata-installer.log "OK\n"
-    fi
-
-    return ${ret}
-}
-
 if [ ${LIBS_ARE_HERE} -eq 1 ]
     then
     shift
 if [ ${LIBS_ARE_HERE} -eq 1 ]
     then
     shift
@@ -412,6 +431,11 @@ fi
 
 trap build_error EXIT
 
 
 trap build_error EXIT
 
+
+# -----------------------------------------------------------------------------
+echo >&2
+progress "Run autotools to configure the build environment"
+
 if [ "$have_autotools" ]
 then
     run ./autogen.sh || exit 1
 if [ "$have_autotools" ]
 then
     run ./autogen.sh || exit 1
@@ -421,29 +445,28 @@ run ./configure \
     --prefix="${NETDATA_PREFIX}/usr" \
     --sysconfdir="${NETDATA_PREFIX}/etc" \
     --localstatedir="${NETDATA_PREFIX}/var" \
     --prefix="${NETDATA_PREFIX}/usr" \
     --sysconfdir="${NETDATA_PREFIX}/etc" \
     --localstatedir="${NETDATA_PREFIX}/var" \
-    --with-zlib --with-math --with-user=netdata \
+    --with-zlib \
+    --with-math \
+    --with-user=netdata \
+    ${NETDATA_CONFIGURE_OPTIONS} \
     CFLAGS="${CFLAGS}" || exit 1
 
 # remove the build_error hook
 trap - EXIT
 
     CFLAGS="${CFLAGS}" || exit 1
 
 # remove the build_error hook
 trap - EXIT
 
-if [ -f src/netdata ]
-    then
-    echo >&2 "Cleaning a possibly old compilation ..."
-    run make clean
-fi
+# -----------------------------------------------------------------------------
+progress "Cleanup compilation directory"
+
+[ -f src/netdata ] && run make clean
+
+# -----------------------------------------------------------------------------
+progress "Compile netdata"
 
 
-echo >&2 "Compiling netdata ..."
 run make -j${processors} || exit 1
 
 run make -j${processors} || exit 1
 
-if [ "${BASH_VERSINFO[0]}" -ge "4" ]
-then
-    declare -A configs_signatures=()
-    if [ -f "configs.signatures" ]
-        then
-        source "configs.signatures" || echo >&2 "ERROR: Failed to load configs.signatures !"
-    fi
-fi
+
+# -----------------------------------------------------------------------------
+progress "Migrate configuration files for node.d.plugin and charts.d.plugin"
 
 # migrate existing configuration files
 # for node.d and charts.d
 
 # migrate existing configuration files
 # for node.d and charts.d
@@ -486,6 +509,36 @@ if [ -d "${NETDATA_PREFIX}/etc/netdata" ]
     done
 fi
 
     done
 fi
 
+# -----------------------------------------------------------------------------
+progress "Backup existing netdata configuration before installing it"
+
+if [ "${BASH_VERSINFO[0]}" -ge "4" ]
+then
+    declare -A configs_signatures=()
+    if [ -f "configs.signatures" ]
+        then
+        source "configs.signatures" || echo >&2 "ERROR: Failed to load configs.signatures !"
+    fi
+fi
+
+config_signature_matches() {
+    local md5="${1}" file="${2}"
+
+    if [ "${BASH_VERSINFO[0]}" -ge "4" ]
+        then
+        [ "${configs_signatures[${md5}]}" = "${file}" ] && return 0
+        return 1
+    fi
+
+    if [ -f "configs.signatures" ]
+        then
+        grep "\['${md5}'\]='${file}'" "configs.signatures" >/dev/null
+        return $?
+    fi
+
+    return 1
+}
+
 # backup user configurations
 installer_backup_suffix="${PID}.${RANDOM}"
 for x in $(find "${NETDATA_PREFIX}/etc/netdata/" -name '*.conf' -type f)
 # backup user configurations
 installer_backup_suffix="${PID}.${RANDOM}"
 for x in $(find "${NETDATA_PREFIX}/etc/netdata/" -name '*.conf' -type f)
@@ -498,7 +551,8 @@ do
         if [ -z "${md5sum}" -o ! -x "${md5sum}" ]
             then
             # we don't have md5sum - keep it
         if [ -z "${md5sum}" -o ! -x "${md5sum}" ]
             then
             # we don't have md5sum - keep it
-            cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
+            echo >&2 "File '${TPUT_CYAN}${x}${TPUT_RESET}' ${TPUT_RET}is not known to distribution${TPUT_RESET}. Keeping it."
+            run cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
         else
             # find it relative filename
             f="${x/*\/etc\/netdata\//}"
         else
             # find it relative filename
             f="${x/*\/etc\/netdata\//}"
@@ -512,20 +566,14 @@ do
                 cp "conf.d/${f}" "${x}.orig"
             fi
 
                 cp "conf.d/${f}" "${x}.orig"
             fi
 
-            if [ "${BASH_VERSINFO[0]}" -ge "4" ]
-            then
-                if [ "${configs_signatures[${md5}]}" = "${f}" ]
+            if config_signature_matches "${md5}" "${f}"
                 then
                 then
-                    # it is a stock version - don't keep it
-                    echo >&2 "File '${x}' is stock version."
-                else
-                    # edited by user - keep it
-                    echo >&2 "File '${x}' has been edited by user."
-                    cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
-                fi
+                # it is a stock version - don't keep it
+                echo >&2 "File '${TPUT_CYAN}${x}${TPUT_RESET}' is stock version."
             else
             else
-                echo >&2 "File '${x}' cannot be check for custom edits."
-                cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
+                # edited by user - keep it
+                echo >&2 "File '${TPUT_CYAN}${x}${TPUT_RESET}' ${TPUT_RED} has been edited by user${TPUT_RESET}. Keeping it."
+                run cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
             fi
         fi
 
             fi
         fi
 
@@ -535,194 +583,79 @@ do
     fi
 done
 
     fi
 done
 
-echo >&2 "Installing netdata ..."
+
+# -----------------------------------------------------------------------------
+progress "Install netdata"
+
 run make install || exit 1
 
 run make install || exit 1
 
-# restore user configurations
+
+# -----------------------------------------------------------------------------
+progress "Restore user edited netdata configuration files"
+
 for x in $(find "${NETDATA_PREFIX}/etc/netdata/" -name '*.conf' -type f)
 do
     if [ -f "${x}.installer_backup.${installer_backup_suffix}" ]
         then
 for x in $(find "${NETDATA_PREFIX}/etc/netdata/" -name '*.conf' -type f)
 do
     if [ -f "${x}.installer_backup.${installer_backup_suffix}" ]
         then
-        cp -p "${x}.installer_backup.${installer_backup_suffix}" "${x}"
-        rm -f "${x}.installer_backup.${installer_backup_suffix}"
+        run cp -p "${x}.installer_backup.${installer_backup_suffix}" "${x}" && \
+            run rm -f "${x}.installer_backup.${installer_backup_suffix}"
     fi
 done
 
     fi
 done
 
-echo >&2 "Fixing permissions ..."
-
-check_cmd() {
-    which "${1}" >/dev/null 2>&1 && return 0
-    command -v "${1}" >/dev/null 2>&1 && return 0
-    return 1
-}
-
-portable_add_user() {
-    local username="${1}"
-
-    getent passwd "${username}" > /dev/null 2>&1
-    [ $? -eq 0 ] && return 0
-
-    echo >&2 "Adding ${username} user account ..."
-
-    local nologin="$(which nologin 2>/dev/null || command -v nologin 2>/dev/null || echo '/bin/false')"
-
-    # Linux
-    if check_cmd useradd
-    then
-        run useradd -r -g "${username}" -c "${username}" -s "${nologin}" -d / "${username}" && return 0
-    fi
-
-    # FreeBSD
-    if check_cmd pw
-    then
-        run pw useradd "${username}" -d / -g "${username}" -s "${nologin}" && return 0
-    fi
-
-    # BusyBox
-    if check_cmd adduser
-    then
-        run adduser -D -G "${username}" "${username}" && return 0
-    fi
-
-    echo >&2 "Failed to add ${username} user account !"
-
-    return 1
-}
-
-portable_add_group() {
-    local groupname="${1}"
-
-    getent group "${groupname}" > /dev/null 2>&1
-    [ $? -eq 0 ] && return 0
-
-    echo >&2 "Adding ${groupname} user group ..."
-
-    # Linux
-    if check_cmd groupadd
-    then
-        run groupadd -r "${groupname}" && return 0
-    fi
-
-    # FreeBSD
-    if check_cmd pw
-    then
-        run pw groupadd "${groupname}" && return 0
-    fi
-
-    # BusyBox
-    if check_cmd addgroup
-    then
-        run addgroup "${groupname}" && return 0
-    fi
-
-    echo >&2 "Failed to add ${groupname} user group !"
-    return 1
-}
-
-portable_add_user_to_group() {
-    local groupname="${1}" username="${2}"
-
-    getent group "${groupname}" > /dev/null 2>&1
-    [ $? -ne 0 ] && return 1
-
-    # find the user is already in the group
-    local users=$(getent group "${groupname}" | cut -d ':' -f 4)
-    if [[ ",${users}," =~ ,${username}, ]]
-        then
-        # username is already there
-        return 0
-    else
-        # username is not in group
-        echo >&2 "Adding ${username} user to the ${groupname} group ..."
-
-        # Linux
-        if check_cmd usermod
-        then
-            run usermod -a -G "${groupname}" "${username}" && return 0
-        fi
 
 
-        # FreeBSD
-        if check_cmd pw
-        then
-            run pw groupmod "${groupname}" -m "${username}" && return 0
-        fi
-
-        # BusyBox
-        if check_cmd addgroup
-        then
-            run addgroup "${username}" "${groupname}" && return 0
-        fi
-
-        echo >&2 "Failed to add user ${username} to group ${groupname} !"
-        return 1
-    fi
-}
-
-iscontainer() {
-    # man systemd-detect-virt
-    local cmd=$(which systemd-detect-virt 2>/dev/null || command -v systemd-detect-virt 2>/dev/null)
-    if [ ! -z "${cmd}" -a -x "${cmd}" ]
-        then
-        "${cmd}" --container >/dev/null 2>&1 && return 0
-    fi
-
-    # /proc/1/sched exposes the host's pid of our init !
-    # http://stackoverflow.com/a/37016302
-    local pid=$( cat /proc/1/sched | head -n 1 | { IFS='(),#:' read name pid th threads; echo $pid; } )
-    local p=$(( pid + 0 ))
-    [ ${pid} -ne 1 ] && return 0
-
-    # lxc sets environment variable 'container'
-    [ ! -z "${container}" ] && return 0
-
-    # docker creates /.dockerenv
-    # http://stackoverflow.com/a/25518345
-    [ -f "/.dockerenv" ] && return 0
+# -----------------------------------------------------------------------------
+progress "Fix generated files permissions"
 
 
-    # ubuntu and debian supply /bin/running-in-container
-    # https://www.apt-browse.org/browse/ubuntu/trusty/main/i386/upstart/1.12.1-0ubuntu4/file/bin/running-in-container
-    if [ -x "/bin/running-in-container" ]
-        then
-        "/bin/running-in-container" >/dev/null 2>&1 && return 0
-    fi
+run find ./system/ -type f -a \! -name \*.in -a \! -name Makefile\* -a \! -name \*.conf -a \! -name \*.service -a \! -name \*.logrotate -exec chmod 755 {} \;
 
 
-    return 1
-}
 
 
-run find ./system/ -type f -a \! -name \*.in -a \! -name Makefile\* -a \! -name \*.conf -a \! -name \*.service -a \! -name \*.logrotate -exec chmod 755 {} \;
+# -----------------------------------------------------------------------------
+progress "Add user netdata to required user groups"
 
 NETDATA_ADDED_TO_DOCKER=0
 NETDATA_ADDED_TO_NGINX=0
 NETDATA_ADDED_TO_VARNISH=0
 NETDATA_ADDED_TO_HAPROXY=0
 
 NETDATA_ADDED_TO_DOCKER=0
 NETDATA_ADDED_TO_NGINX=0
 NETDATA_ADDED_TO_VARNISH=0
 NETDATA_ADDED_TO_HAPROXY=0
+NETDATA_ADDED_TO_ADM=0
+NETDATA_ADDED_TO_NSD=0
 if [ ${UID} -eq 0 ]
     then
     portable_add_group netdata
     portable_add_user netdata
 if [ ${UID} -eq 0 ]
     then
     portable_add_group netdata
     portable_add_user netdata
-    portable_add_user_to_group docker netdata && NETDATA_ADDED_TO_DOCKER=1
-    portable_add_user_to_group nginx  netdata && NETDATA_ADDED_TO_NGINX=1
+    portable_add_user_to_group docker   netdata && NETDATA_ADDED_TO_DOCKER=1
+    portable_add_user_to_group nginx    netdata && NETDATA_ADDED_TO_NGINX=1
     portable_add_user_to_group varnish  netdata && NETDATA_ADDED_TO_VARNISH=1
     portable_add_user_to_group haproxy  netdata && NETDATA_ADDED_TO_HAPROXY=1
     portable_add_user_to_group varnish  netdata && NETDATA_ADDED_TO_VARNISH=1
     portable_add_user_to_group haproxy  netdata && NETDATA_ADDED_TO_HAPROXY=1
+    portable_add_user_to_group adm      netdata && NETDATA_ADDED_TO_ADM=1
+    portable_add_user_to_group nsd      netdata && NETDATA_ADDED_TO_NSD=1
+    run_ok
+else
+    run_failed "The installer does not run as root."
+fi
 
 
+# -----------------------------------------------------------------------------
+progress "Install logrotate configuration for netdata"
+
+if [ ${UID} -eq 0 ]
+    then
     if [ -d /etc/logrotate.d -a ! -f /etc/logrotate.d/netdata ]
         then
     if [ -d /etc/logrotate.d -a ! -f /etc/logrotate.d/netdata ]
         then
-        echo >&2 "Adding netdata logrotate configuration ..."
         run cp system/netdata.logrotate /etc/logrotate.d/netdata
     fi
     
     if [ -f /etc/logrotate.d/netdata ]
         then
         run cp system/netdata.logrotate /etc/logrotate.d/netdata
     fi
     
     if [ -f /etc/logrotate.d/netdata ]
         then
-        echo >&2 "Fixing netdata logrotate permissions ..."
         run chmod 644 /etc/logrotate.d/netdata
     fi
 fi
 
 
 # -----------------------------------------------------------------------------
         run chmod 644 /etc/logrotate.d/netdata
     fi
 fi
 
 
 # -----------------------------------------------------------------------------
-# load options from the configuration file
+progress "Read installation options from netdata.conf"
 
 # create an empty config if it does not exist
 
 # create an empty config if it does not exist
-[ ! -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ] && touch "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+[ ! -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ] && \
+    touch "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
 
 # function to extract values from the config file
 config_option() {
 
 # function to extract values from the config file
 config_option() {
@@ -775,17 +708,14 @@ NETDATA_RUN_DIR="${NETDATA_PREFIX}/var/run"
 
 
 # -----------------------------------------------------------------------------
 
 
 # -----------------------------------------------------------------------------
-# prepare the directories
+progress "Fix permissions of netdata directories (using user '${NETDATA_USER}')"
 
 
-# this is needed if NETDATA_PREFIX is not empty
 if [ ! -d "${NETDATA_RUN_DIR}" ]
     then
 if [ ! -d "${NETDATA_RUN_DIR}" ]
     then
-    mkdir -p "${NETDATA_RUN_DIR}" || exit 1
+    # this is needed if NETDATA_PREFIX is not empty
+    run mkdir -p "${NETDATA_RUN_DIR}" || exit 1
 fi
 
 fi
 
-echo >&2
-echo >&2 "Fixing directories (user: ${NETDATA_USER})..."
-
 # --- conf dir ----
 
 for x in "python.d" "charts.d" "node.d"
 # --- conf dir ----
 
 for x in "python.d" "charts.d" "node.d"
@@ -832,7 +762,13 @@ run chmod 755 "${NETDATA_LOG_DIR}"
 
 if [ ${UID} -eq 0 ]
     then
 
 if [ ${UID} -eq 0 ]
     then
-    run chown "${NETDATA_USER}:root" "${NETDATA_LOG_DIR}"
+    # find the admin group
+    admin_group=
+    test -z "${admin_group}" && getent group root >/dev/null 2>&1 && admin_group="root"
+    test -z "${admin_group}" && getent group daemon >/dev/null 2>&1 && admin_group="daemon"
+    test -z "${admin_group}" && admin_group="${NETDATA_USER}"
+
+    run chown "${NETDATA_USER}:${admin_group}" "${NETDATA_LOG_DIR}"
     run chown -R root "${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 chown -R root "${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 {} \;
@@ -842,15 +778,18 @@ if [ ${UID} -eq 0 ]
     setcap_ret=1
     if ! iscontainer
         then
     setcap_ret=1
     if ! iscontainer
         then
-        run setcap cap_dac_read_search,cap_sys_ptrace+ep "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-        setcap_ret=$?
+        if [ ! -z "${setcap}" ]
+            then
+            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
 
         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" -v >/dev/null 2>&1
+            "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" -t >/dev/null 2>&1
             setcap_ret=$?
         fi
     fi
             setcap_ret=$?
         fi
     fi
@@ -861,6 +800,13 @@ if [ ${UID} -eq 0 ]
         run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
         run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
     fi
         run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
         run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
     fi
+
+    if [ -f "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin" ]
+        then
+        run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin"
+        run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/freeipmi.plugin"
+    fi
+
 else
     run chown "${NETDATA_USER}:${NETDATA_USER}" "${NETDATA_LOG_DIR}"
     run chown -R "${NETDATA_USER}:${NETDATA_USER}" "${NETDATA_PREFIX}/usr/libexec/netdata"
 else
     run chown "${NETDATA_USER}:${NETDATA_USER}" "${NETDATA_LOG_DIR}"
     run chown -R "${NETDATA_USER}:${NETDATA_USER}" "${NETDATA_PREFIX}/usr/libexec/netdata"
@@ -870,33 +816,82 @@ fi
 
 # --- fix #1292 bug ---
 
 
 # --- fix #1292 bug ---
 
-[ -d "${NETDATA_PREFIX}/usr/libexec" ] && run chmod a+rX "${NETDATA_PREFIX}/usr/libexec"
+[ -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"
 
 
 [ -d "${NETDATA_PREFIX}/usr/share/netdata" ] && run chmod a+rX "${NETDATA_PREFIX}/usr/share/netdata"
 
 
+
 # -----------------------------------------------------------------------------
 # -----------------------------------------------------------------------------
-# check if we can re-start netdata
+progress "Install netdata at system init"
 
 
-if [ ${DONOTSTART} -eq 1 ]
-    then
-    if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
+installed_init_d=0
+install_non_systemd_init() {
+    [ "${UID}" != 0 ] && return 1
+
+    local key="unknown"
+    if [ -f /etc/os-release ]
         then
         then
-        echo >&2 "Generating empty config file in: ${NETDATA_PREFIX}/etc/netdata/netdata.conf"
-        echo "# Get config from http://127.0.0.1:${NETDATA_PORT}/netdata.conf" >"${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+        source /etc/os-release || return 1
+        key="${ID}-${VERSION_ID}"
 
 
-        if [ "${UID}" -eq 0 ]
+    elif [ -f /etc/centos-release ]
+        then
+        key=$(</etc/centos-release)
+    fi
+
+    if [ -d /etc/init.d -a ! -f /etc/init.d/netdata ]
+        then
+        if [ "${key}" = "gentoo" ]
             then
             then
-            chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+            run cp system/netdata-openrc /etc/init.d/netdata && \
+            run chmod 755 /etc/init.d/netdata && \
+            run rc-update add netdata default && \
+            installed_init_d=1
+        
+        elif [ "${key}" = "ubuntu-12.04" -o "${key}" = "ubuntu-14.04" -o "${key}" = "debian-7" ]
+            then
+            run cp system/netdata-lsb /etc/init.d/netdata && \
+            run chmod 755 /etc/init.d/netdata && \
+            run update-rc.d netdata defaults && \
+            run update-rc.d netdata enable && \
+            installed_init_d=1
+
+        elif [ "${key}" = "CentOS release 6.8 (Final)" -o "${key}" = "amzn-2016.09" ]
+            then
+            run cp system/netdata-init-d /etc/init.d/netdata && \
+            run chmod 755 /etc/init.d/netdata && \
+            run chkconfig netdata on && \
+            installed_init_d=1
         fi
         fi
-        chmod 0644 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
     fi
     fi
-    banner "is installed now!"
-    echo >&2 "  enjoy real-time performance and health monitoring..."
-    exit 0
+
+    return 0
+}
+
+if [ "${UID}" -eq 0 ]
+    then
+
+    if issystemd
+    then
+        # systemd is running on this system
+
+        if [ ! -f /etc/systemd/system/netdata.service ]
+        then
+            echo >&2 "Installing systemd service..."
+            run cp system/netdata.service /etc/systemd/system/netdata.service && \
+                run systemctl daemon-reload && \
+                run systemctl enable netdata
+        fi
+    else
+        install_non_systemd_init
+    fi
 fi
 
 fi
 
+
 # -----------------------------------------------------------------------------
 # -----------------------------------------------------------------------------
-# stop a running netdata
+# check if we can re-start netdata
+
+started=0
 
 isnetdata() {
     if [ -d /proc/self ]
 
 isnetdata() {
     if [ -d /proc/self ]
@@ -946,7 +941,7 @@ stop_all_netdata() {
 
     myns="$(readlink /proc/self/ns/pid 2>/dev/null)"
 
 
     myns="$(readlink /proc/self/ns/pid 2>/dev/null)"
 
-    echo >&2 "Stopping a (possibly) running netdata..."
+    # echo >&2 "Stopping a (possibly) running netdata (namespace '${myns}')..."
 
     for p in $(cat "${NETDATA_RUN_DIR}/netdata.pid" 2>/dev/null) \
         $(cat /var/run/netdata.pid 2>/dev/null) \
 
     for p in $(cat "${NETDATA_RUN_DIR}/netdata.pid" 2>/dev/null) \
         $(cat /var/run/netdata.pid 2>/dev/null) \
@@ -962,111 +957,25 @@ stop_all_netdata() {
     done
 }
 
     done
 }
 
-# -----------------------------------------------------------------------------
-# check for systemd
-
-issystemd() {
-    local pids p myns ns systemctl
-
-    # if the directory /etc/systemd/system does not exit, it is not systemd
-    [ ! -d /etc/systemd/system ] && return 1
-
-    # if there is no systemctl command, it is not systemd
-    systemctl=$(which systemctl 2>/dev/null || command -v systemctl 2>/dev/null)
-    [ -z "${systemctl}" -o ! -x "${systemctl}" ] && return 1
-
-    # if pid 1 is systemd, it is systemd
-    [ "$(basename $(readlink /proc/1/exe) 2>/dev/null)" = "systemd" ] && return 0
-
-    # if systemd is not running, it is not systemd
-    pids=$(pidof systemd 2>/dev/null)
-    [ -z "${pids}" ] && return 1
-
-    # check if the running systemd processes are not in our namespace
-    myns="$(readlink /proc/self/ns/pid 2>/dev/null)"
-    for p in ${pids}
-    do
-        ns="$(readlink /proc/${p}/ns/pid 2>/dev/null)"
-
-        # if pid of systemd is in our namespace, it is systemd
-        [ ! -z "${myns}" && "${myns}" = "${ns}" ] && return 0
-    done
-
-    # else, it is not systemd
-    return 1
-}
-
-installed_init_d=0
-install_non_systemd_init() {
-    [ "${UID}" != 0 ] && return 1
-
-    local key="unknown"
-    if [ -f /etc/os-release ]
-        then
-        source /etc/os-release || return 1
-        key="${ID}-${VERSION_ID}"
-
-    elif [ -f /etc/centos-release ]
-        then
-        key=$(</etc/centos-release)
-    fi
-
-    if [ -d /etc/init.d -a ! -f /etc/init.d/netdata ]
+if [ ${DONOTSTART} -eq 1 ]
+    then
+    if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
         then
         then
-        if [ "${key}" = "gentoo" ]
-            then
-            run cp system/netdata-openrc /etc/init.d/netdata && \
-            run chmod 755 /etc/init.d/netdata && \
-            run rc-update add netdata default && \
-            installed_init_d=1
-        
-        elif [ "${key}" = "ubuntu-12.04" -o "${key}" = "ubuntu-14.04" -o "${key}" = "debian-7" ]
-            then
-            run cp system/netdata-lsb /etc/init.d/netdata && \
-            run chmod 755 /etc/init.d/netdata && \
-            run update-rc.d netdata defaults && \
-            run update-rc.d netdata enable && \
-            installed_init_d=1
+        echo "# Get config from http://127.0.0.1:${NETDATA_PORT}/netdata.conf" >"${NETDATA_PREFIX}/etc/netdata/netdata.conf"
 
 
-        elif [ "${key}" = "CentOS release 6.8 (Final)" -o "${key}" = "amzn-2016.09" ]
+        if [ "${UID}" -eq 0 ]
             then
             then
-            run cp system/netdata-init-d /etc/init.d/netdata && \
-            run chmod 755 /etc/init.d/netdata && \
-            run chkconfig netdata on && \
-            installed_init_d=1
+            chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
         fi
         fi
+        chmod 0644 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
     fi
 
     fi
 
-    return 0
-}
+else
 
 
-started=0
-if [ "${UID}" -eq 0 ]
-    then
+    progress "Start netdata"
 
 
-    if issystemd
-    then
-        # systemd is running on this system
-
-        if [ ! -f /etc/systemd/system/netdata.service ]
+    if [ "${UID}" -eq 0 ]
         then
         then
-            echo >&2 "Installing systemd service..."
-            run cp system/netdata.service /etc/systemd/system/netdata.service && \
-                run systemctl daemon-reload && \
-                run systemctl enable netdata
-        else
-            service netdata stop
-        fi
-
-        stop_all_netdata
-        service netdata restart && started=1
-    else
-        install_non_systemd_init
-    fi
-
-    if [ ${started} -eq 0 ]
-    then
-        # check if we can use the system service
         service netdata stop
         stop_all_netdata
         service netdata restart && started=1
         service netdata stop
         stop_all_netdata
         service netdata restart && started=1
@@ -1075,89 +984,88 @@ if [ "${UID}" -eq 0 ]
             service netdata start && started=1
         fi
     fi
             service netdata start && started=1
         fi
     fi
-fi
 
 
-if [ ${started} -eq 0 ]
-then
-    # still not started...
+    if [ ${started} -eq 0 ]
+    then
+        # still not started...
 
 
-    stop_all_netdata
+        stop_all_netdata
+
+        echo >&2 "Starting netdata..."
+        run ${NETDATA_PREFIX}/usr/sbin/netdata -P ${NETDATA_RUN_DIR}/netdata.pid "${@}"
+        if [ $? -ne 0 ]
+            then
+            echo >&2
+            echo >&2 "SORRY! FAILED TO START NETDATA!"
+            exit 1
+        else
+            echo >&2 "OK. NetData Started!"
+        fi
 
 
-    echo >&2 "Starting netdata..."
-    run ${NETDATA_PREFIX}/usr/sbin/netdata -P ${NETDATA_RUN_DIR}/netdata.pid "${@}"
-    if [ $? -ne 0 ]
-        then
         echo >&2
         echo >&2
-        echo >&2 "SORRY! FAILED TO START NETDATA!"
-        exit 1
-    else
-        echo >&2 "OK. NetData Started!"
     fi
 
     fi
 
-    echo >&2
-fi
-
-# -----------------------------------------------------------------------------
-# save a config file, if it is not already there
+    # -----------------------------------------------------------------------------
+    # save a config file, if it is not already there
 
 
-if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
-    then
-    echo >&2
-    echo >&2 "-------------------------------------------------------------------------------"
-    echo >&2
-    echo >&2 "Downloading default configuration from netdata..."
-    sleep 5
-
-    # remove a possibly obsolete download
-    [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
+    if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
+        then
+        echo >&2
+        echo >&2 "-------------------------------------------------------------------------------"
+        echo >&2
+        echo >&2 "Downloading default configuration from netdata..."
+        sleep 5
 
 
-    # disable a proxy to get data from the local netdata
-    export http_proxy=
-    export https_proxy=
+        # remove a possibly obsolete download
+        [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
 
 
-    # try wget
-    wget 2>/dev/null -O "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
-    ret=$?
+        # disable a proxy to get data from the local netdata
+        export http_proxy=
+        export https_proxy=
 
 
-    # try curl
-    if [ ${ret} -ne 0 -o ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
-        then
-        curl -s -o "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
+        # try wget
+        wget 2>/dev/null -O "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
         ret=$?
         ret=$?
-    fi
 
 
-    if [ ${ret} -eq 0 -a -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
-        then
-        mv "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
-        echo >&2 "New configuration saved for you to edit at ${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+        # try curl
+        if [ ${ret} -ne 0 -o ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
+            then
+            curl -s -o "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
+            ret=$?
+        fi
 
 
-        if [ "${UID}" -eq 0 ]
+        if [ ${ret} -eq 0 -a -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
             then
             then
-            chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+            mv "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+            echo >&2 "New configuration saved for you to edit at ${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+
+            if [ "${UID}" -eq 0 ]
+                then
+                chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+            fi
+            chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+        else
+            echo >&2 "Cannnot download configuration from netdata daemon using url 'http://localhost:${NETDATA_PORT}/netdata.conf'"
+            [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
         fi
         fi
-        chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
-    else
-        echo >&2 "Cannnot download configuration from netdata daemon using url 'http://localhost:${NETDATA_PORT}/netdata.conf'"
-        [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
     fi
 fi
 
 # -----------------------------------------------------------------------------
     fi
 fi
 
 # -----------------------------------------------------------------------------
-# Check for KSM
+progress "Check KSM (kernel memory deduper)"
 
 ksm_is_available_but_disabled() {
     cat <<KSM1
 
 
 ksm_is_available_but_disabled() {
     cat <<KSM1
 
--------------------------------------------------------------------------------
-Memory de-duplication instructions
+${TPUT_BOLD}Memory de-duplication instructions${TPUT_RESET}
 
 You have kernel memory de-duper (called Kernel Same-page Merging,
 or KSM) available, but it is not currently enabled.
 
 To enable it run:
 
 
 You have kernel memory de-duper (called Kernel Same-page Merging,
 or KSM) available, but it is not currently enabled.
 
 To enable it run:
 
-echo 1 >/sys/kernel/mm/ksm/run
-echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
+    ${TPUT_YELLOW}${TPUT_BOLD}echo 1 >/sys/kernel/mm/ksm/run${TPUT_RESET}
+    ${TPUT_YELLOW}${TPUT_BOLD}echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs${TPUT_RESET}
 
 If you enable it, you will save 40-60% of netdata memory.
 
 
 If you enable it, you will save 40-60% of netdata memory.
 
@@ -1167,8 +1075,7 @@ KSM1
 ksm_is_not_available() {
     cat <<KSM2
 
 ksm_is_not_available() {
     cat <<KSM2
 
--------------------------------------------------------------------------------
-Memory de-duplication not present in your kernel
+${TPUT_BOLD}Memory de-duplication not present in your kernel${TPUT_RESET}
 
 It seems you do not have kernel memory de-duper (called Kernel Same-page
 Merging, or KSM) available.
 
 It seems you do not have kernel memory de-duper (called Kernel Same-page
 Merging, or KSM) available.
@@ -1191,14 +1098,13 @@ else
 fi
 
 # -----------------------------------------------------------------------------
 fi
 
 # -----------------------------------------------------------------------------
-# Check for version.txt
+progress "Check version.txt"
 
 if [ ! -s web/version.txt ]
     then
     cat <<VERMSG
 
 
 if [ ! -s web/version.txt ]
     then
     cat <<VERMSG
 
--------------------------------------------------------------------------------
-Version update check warning
+${TPUT_BOLD}Version update check warning${TPUT_RESET}
 
 The way you downloaded netdata, we cannot find its version. This means the
 Update check on the dashboard, will not work.
 
 The way you downloaded netdata, we cannot find its version. This means the
 Update check on the dashboard, will not work.
@@ -1212,14 +1118,13 @@ VERMSG
 fi
 
 # -----------------------------------------------------------------------------
 fi
 
 # -----------------------------------------------------------------------------
-# apps.plugin warning
+progress "Check apps.plugin"
 
 if [ "${UID}" -ne 0 ]
     then
     cat <<SETUID_WARNING
 
 
 if [ "${UID}" -ne 0 ]
     then
     cat <<SETUID_WARNING
 
--------------------------------------------------------------------------------
-apps.plugin needs privileges
+${TPUT_BOLD}apps.plugin needs privileges${TPUT_RESET}
 
 Since you have installed netdata as a normal user, to have apps.plugin collect
 all the needed data, you have to give it the access rights it needs, by running
 
 Since you have installed netdata as a normal user, to have apps.plugin collect
 all the needed data, you have to give it the access rights it needs, by running
@@ -1227,14 +1132,14 @@ either of the following sets of commands:
 
 To run apps.plugin with escalated capabilities:
 
 
 To run apps.plugin with escalated capabilities:
 
-    sudo chown root:${NETDATA_USER} "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-    sudo chmod 0750 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-    sudo setcap cap_dac_read_search,cap_sys_ptrace+ep "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+    ${TPUT_YELLOW}${TPUT_BOLD}sudo chown root:${NETDATA_USER} \"${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin\"${TPUT_RESET}
+    ${TPUT_YELLOW}${TPUT_BOLD}sudo chmod 0750 \"${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin\"${TPUT_RESET}
+    ${TPUT_YELLOW}${TPUT_BOLD}sudo setcap cap_dac_read_search,cap_sys_ptrace+ep \"${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin\"${TPUT_RESET}
 
 or, to run apps.plugin as root:
 
 
 or, to run apps.plugin as root:
 
-    sudo chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-    sudo chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+    ${TPUT_YELLOW}${TPUT_BOLD}sudo chown root \"${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin\"${TPUT_RESET}
+    ${TPUT_YELLOW}${TPUT_BOLD}sudo chmod 4755 \"${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin\"${TPUT_RESET}
 
 apps.plugin is performing a hard-coded function of data collection for all
 running processes. It cannot be instructed from the netdata daemon to perform
 
 apps.plugin is performing a hard-coded function of data collection for all
 running processes. It cannot be instructed from the netdata daemon to perform
@@ -1244,7 +1149,7 @@ SETUID_WARNING
 fi
 
 # -----------------------------------------------------------------------------
 fi
 
 # -----------------------------------------------------------------------------
-# Keep un-install info
+progress "Generate netdata-uninstaller.sh"
 
 cat >netdata-uninstaller.sh <<UNINSTALL
 #!/usr/bin/env bash
 
 cat >netdata-uninstaller.sh <<UNINSTALL
 #!/usr/bin/env bash
@@ -1366,37 +1271,49 @@ if [ $? -eq 0 -a "${NETDATA_ADDED_TO_HAPROXY}" = "1" ]
     echo "   gpasswd -d netdata haproxy"
 fi
 
     echo "   gpasswd -d netdata haproxy"
 fi
 
+getent group adm > /dev/null
+if [ $? -eq 0 -a "${NETDATA_ADDED_TO_ADM}" = "1" ]
+    then
+    echo
+    echo "You may also want to remove the netdata user from the adm group"
+    echo "by running:"
+    echo "   gpasswd -d netdata adm"
+fi
+
+getent group nsd > /dev/null
+if [ $? -eq 0 -a "${NETDATA_ADDED_TO_NSD}" = "1" ]
+    then
+    echo
+    echo "You may also want to remove the netdata user from the nsd group"
+    echo "by running:"
+    echo "   gpasswd -d netdata nsd"
+fi
+
 
 UNINSTALL
 chmod 750 netdata-uninstaller.sh
 
 # -----------------------------------------------------------------------------
 
 UNINSTALL
 chmod 750 netdata-uninstaller.sh
 
 # -----------------------------------------------------------------------------
+progress "Basic netdata instructions"
 
 cat <<END
 
 
 cat <<END
 
-
--------------------------------------------------------------------------------
-
-OK. NetData is installed and it is running.
-
--------------------------------------------------------------------------------
-
-By default netdata listens on all IPs on port ${NETDATA_PORT},
+netdata by default listens on all IPs on port ${NETDATA_PORT},
 so you can access it with:
 
 so you can access it with:
 
-http://this.machine.ip:${NETDATA_PORT}/
+  ${TPUT_CYAN}${TPUT_BOLD}http://this.machine.ip:${NETDATA_PORT}/${TPUT_RESET}
 
 To stop netdata, just kill it, with:
 
 
 To stop netdata, just kill it, with:
 
-  killall netdata
+  ${TPUT_YELLOW}${TPUT_BOLD}killall netdata${TPUT_RESET}
 
 To start it, just run it:
 
 
 To start it, just run it:
 
-  ${NETDATA_PREFIX}/usr/sbin/netdata
+  ${TPUT_YELLOW}${TPUT_BOLD}${NETDATA_PREFIX}/usr/sbin/netdata${TPUT_RESET}
 
 
 END
 
 
 END
-echo >&2 "Uninstall script generated: ./netdata-uninstaller.sh"
+echo >&2 "Uninstall script generated: ${TPUT_RED}${TPUT_BOLD}./netdata-uninstaller.sh${TPUT_RESET}"
 
 if [ -d .git ]
     then
 
 if [ -d .git ]
     then
@@ -1408,6 +1325,7 @@ force=0
 
 export PATH="\${PATH}:${PATH}"
 export CFLAGS="${CFLAGS}"
 
 export PATH="\${PATH}:${PATH}"
 export CFLAGS="${CFLAGS}"
+export NETDATA_CONFIGURE_OPTIONS="${NETDATA_CONFIGURE_OPTIONS}"
 
 INSTALL_UID="${UID}"
 if [ "\${INSTALL_UID}" != "\${UID}" ]
 
 INSTALL_UID="${UID}"
 if [ "\${INSTALL_UID}" != "\${UID}" ]
@@ -1512,13 +1430,32 @@ update && exit 0
 REINSTALL
     chmod 755 netdata-updater.sh.new
     mv -f netdata-updater.sh.new netdata-updater.sh
 REINSTALL
     chmod 755 netdata-updater.sh.new
     mv -f netdata-updater.sh.new netdata-updater.sh
-    echo >&2 "Update script generated   : ./netdata-updater.sh"
+    echo >&2 "Update script generated   : ${TPUT_GREEN}${TPUT_BOLD}./netdata-updater.sh${TPUT_RESET}"
+    echo >&2
+    echo >&2 "${TPUT_DIM}${TPUT_BOLD}netdata-updater.sh${TPUT_RESET}${TPUT_DIM} can work from cron. It will trigger an email from cron"
+    echo >&2 "only if it fails (it does not print anything if it can update netdata).${TPUT_RESET}"
+    if [ "${UID}" -eq 0 -a -d "/etc/cron.daily" -a ! -f "/etc/cron.daily/netdata-updater.sh" ]
+        then
+        echo >&2 "${TPUT_DIM}Run this to automatically check and install netdata updates once per day:${TPUT_RESET}"
+        echo >&2
+        echo >&2 "${TPUT_YELLOW}${TPUT_BOLD}ln -s ${PWD}/netdata-updater.sh /etc/cron.daily/netdata-updater.sh${TPUT_RESET}"
+    fi
 elif [ -f "netdata-updater.sh" ]
     then
     rm "netdata-updater.sh"
 fi
 
 elif [ -f "netdata-updater.sh" ]
     then
     rm "netdata-updater.sh"
 fi
 
-banner "is installed and running now!"
+# -----------------------------------------------------------------------------
+echo >&2
+progress "We are done!"
+
+if [ ${started} -eq 1 ]
+    then
+    netdata_banner "is installed and running now!"
+else
+    netdata_banner "is installed now!"
+fi
+
 echo >&2 "  enjoy real-time performance and health monitoring..."
 echo >&2 
 exit 0
 echo >&2 "  enjoy real-time performance and health monitoring..."
 echo >&2 
 exit 0