]> arthur.barton.de Git - netdata.git/commitdiff
allowed to install netdata as any user (without root) #149; now the installer preserv...
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sun, 17 Apr 2016 14:32:40 +0000 (17:32 +0300)
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>
Sun, 17 Apr 2016 14:32:40 +0000 (17:32 +0300)
netdata-installer.sh

index caa428085cd20653e8c78556643d95df2e158b1f..06a283df9a4f9be426730a562422bba0909fd4c8 100755 (executable)
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+# reload the user profile
+[ -f /etc/profile ] && . /etc/profile
+
 LC_ALL=C
 
 # you can set CFLAGS before running installer
@@ -118,14 +121,47 @@ Press Control-C and run the same command with --help for help.
 
 BANNER
 
-if [ ! "${UID}" = 0 -o "$1" = "-h" -o "$1" = "--help" ]
+if [ "${UID}" -ne 0 ]
        then
-       echo >&2
-       echo >&2 "You have to run netdata as root."
-       echo >&2 "The netdata daemon will drop priviliges"
-       echo >&2 "but you have to start it as root."
-       echo >&2
-       exit 1
+       if [ -z "${NETDATA_PREFIX}" ]
+               then
+               cat <<NONROOTNOPREFIX
+
+Sorry! This will wrong!
+
+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
+
+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 ${@}
+
+NONROOT
+       fi
 fi
 
 have_autotools=
@@ -163,6 +199,9 @@ then
        else
                cat <<-"EOF"
 
+       -------------------------------------------------------------------------------
+       autotools 2.60 or later is required
+
        Sorry, you do not seem to have autotools 2.60 or later, which is
        required to build from the git sources of netdata.
 
@@ -190,9 +229,6 @@ if [ ${DONOTWAIT} -eq 0 ]
        fi
 fi
 
-# reload the profile
-[ -f /etc/profile ] && . /etc/profile
-
 build_error() {
        cat <<EOF
 
@@ -213,6 +249,7 @@ You many need to check these:
 3. If your system cannot find ZLIB, although it is installed
    run me with the option:  --zlib-is-really-here
 
+
 If you still cannot get it to build, ask for help at github:
 
    https://github.com/firehol/netdata/issues
@@ -224,6 +261,7 @@ EOF
 }
 
 run() {
+       printf >&2 "\n"
        printf >&2 ":-----------------------------------------------------------------------------\n"
        printf >&2 "Running command:\n"
        printf >&2 "\n"
@@ -246,11 +284,9 @@ trap build_error EXIT
 
 if [ "$have_autotools" ]
 then
-       echo >&2 "Running ./autogen.sh ..."
        run ./autogen.sh || exit 1
 fi
 
-echo >&2 "Running ./configure ..."
 run ./configure \
        --prefix="${NETDATA_PREFIX}/usr" \
        --sysconfdir="${NETDATA_PREFIX}/etc" \
@@ -270,15 +306,35 @@ fi
 echo >&2 "Compiling netdata ..."
 run make || exit 1
 
+# backup user configurations
+for x in apps_groups.conf charts.d.conf
+do
+       if [ -f "${NETDATA_PREFIX}/etc/netdata/${x}" ]
+               then
+               cp -p "${NETDATA_PREFIX}/etc/netdata/${x}" "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup"
+       fi
+done
+
 echo >&2 "Installing netdata ..."
 run make install || exit 1
 
-echo >&2 "Adding netdata user group ..."
-getent group netdata > /dev/null || run groupadd -r netdata
+# restore user configurations
+for x in apps_groups.conf charts.d.conf
+do
+       if [ -f "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup" ]
+               then
+               cp -p "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup" "${NETDATA_PREFIX}/etc/netdata/${x}"
+       fi
+done
 
-echo >&2 "Adding netdata user account ..."
-getent passwd netdata > /dev/null || run useradd -r -g netdata -c netdata -s /sbin/nologin -d / netdata
+if [ ${UID} -eq 0 ]
+       then
+       echo >&2 "Adding netdata user group ..."
+       getent group netdata > /dev/null || run groupadd -r netdata
 
+       echo >&2 "Adding netdata user account ..."
+       getent passwd netdata > /dev/null || run useradd -r -g netdata -c netdata -s /sbin/nologin -d / netdata
+fi
 
 
 # -----------------------------------------------------------------------------
@@ -305,6 +361,9 @@ defuser="netdata"
 [ ! "${UID}" = "0" ] && defuser="${USER}"
 NETDATA_USER="$( config_option "run as user" "${defuser}" )"
 
+NETDATA_WEB_USER="$( config_option "web files owner" "${defuser}" )"
+NETDATA_WEB_GROUP="$( config_option "web files group" "${NETDATA_WEB_USER}" )"
+
 # debug flags
 defdebug=0
 NETDATA_DEBUG="$( config_option "debug flags" ${defdebug} )"
@@ -330,7 +389,7 @@ if [ ! -d "${NETDATA_RUN_DIR}" ]
        mkdir -p "${NETDATA_RUN_DIR}" || exit 1
 fi
 
-echo >&2 "Fixing directory permissions for user ${NETDATA_USER}..."
+echo >&2 "Fixing directories (user: ${NETDATA_USER})..."
 for x in "${NETDATA_WEB_DIR}" "${NETDATA_CONF_DIR}" "${NETDATA_CACHE_DIR}" "${NETDATA_LOG_DIR}"
 do
        if [ ! -d "${x}" ]
@@ -338,14 +397,26 @@ do
                echo >&2 "Creating directory '${x}'"
                run mkdir -p "${x}" || exit 1
        fi
-       run chown -R "${NETDATA_USER}:${NETDATA_USER}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_USER}..."
+
+       if [ ${UID} -eq 0 ]
+               then
+               if [ "${x}" = "${NETDATA_WEB_DIR}" ]
+                       then
+                       run chown -R "${NETDATA_WEB_USER}:${NETDATA_WEB_GROUP}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_WEB_USER}:${NETDATA_WEB_GROUP}..."
+               else
+                       run chown -R "${NETDATA_USER}:${NETDATA_USER}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_USER}..."
+               fi
+       fi
+
        run chmod 0775 "${x}" || echo >&2 "WARNING: Cannot change the permissions of the directory ${x} to 0755..."
 done
 
-# fix apps.plugin to be setuid to root
-run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
-
+if [ ${UID} -eq 0 ]
+       then
+       # fix apps.plugin to be setuid to root
+       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
 
 # -----------------------------------------------------------------------------
 # check if we can re-start netdata
@@ -356,7 +427,11 @@ if [ ${DONOTSTART} -eq 1 ]
                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"
-               chown "${NETDATA_USER}" "${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"
        fi
        echo >&2 "OK. It is now installed and ready."
@@ -454,7 +529,10 @@ if [ ! -s "${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"
 
-               chown "${NETDATA_USER}" "${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'"
@@ -462,36 +540,14 @@ if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
        fi
 fi
 
-# -----------------------------------------------------------------------------
-
-cat <<END
-
-
--------------------------------------------------------------------------------
-
-ok. NetData is installed and is running.
-
-Hit http://localhost:${NETDATA_PORT}/ from your browser.
-
-To stop netdata, just kill it, with:
-
-  killall netdata
-
-To start it, just run it:
-
-  ${NETDATA_PREFIX}/usr/sbin/netdata
-
-Enjoy!
-
-END
-
 # -----------------------------------------------------------------------------
 # Check for KSM
 
 ksm_is_available_but_disabled() {
        cat <<KSM1
 
-INFORMATION:
+-------------------------------------------------------------------------------
+Memory de-duplication instructions
 
 I see you have kernel memory de-duper (called Kernel Same-page Merging,
 or KSM) available, but it is not currently enabled.
@@ -501,7 +557,7 @@ To enable it run:
 echo 1 >/sys/kernel/mm/ksm/run
 echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
 
-If you enable it, you will save 20-60% of netdata memory.
+If you enable it, you will save 40-60% of netdata memory.
 
 KSM1
 }
@@ -509,14 +565,15 @@ KSM1
 ksm_is_not_available() {
        cat <<KSM2
 
-INFORMATION:
+-------------------------------------------------------------------------------
+Memory de-duplication not present in your kernel
 
-I see you do not have kernel memory de-duper (called Kernel Same-page
+It seems you do not have kernel memory de-duper (called Kernel Same-page
 Merging, or KSM) available.
 
 To enable it, you need a kernel built with CONFIG_KSM=y
 
-If you can have it, you will save 20-60% of netdata memory.
+If you can have it, you will save 40-60% of netdata memory.
 
 KSM2
 }
@@ -538,20 +595,46 @@ if [ ! -s web/version.txt ]
        then
 cat <<VERMSG
 
-VERSION UPDATE CHECK:
+-------------------------------------------------------------------------------
+Version update check warning
 
-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.
 
 If you want to have version update check, please re-install it
 following the procedure in:
 
 https://github.com/firehol/netdata/wiki/Installation
 
-
 VERMSG
 fi
 
+# -----------------------------------------------------------------------------
+# apps.plugin warning
+
+if [ "${UID}" -ne 0 ]
+       then
+cat <<SETUID_WARNING
+
+-------------------------------------------------------------------------------
+apps.plugin needs privileges
+
+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
+these commands:
+
+       sudo chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+       sudo chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
+
+The commands allow apps.plugin to run as root.
+
+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
+any task, so it is pretty safe to do this.
+
+SETUID_WARNING
+fi
+
 # -----------------------------------------------------------------------------
 # Keep un-install info
 
@@ -623,4 +706,35 @@ fi
 UNINSTALL
 chmod 750 netdata-uninstaller.sh
 
+# -----------------------------------------------------------------------------
+
+cat <<END
+
+
+-------------------------------------------------------------------------------
+
+OK. NetData is installed and it is running.
+
+-------------------------------------------------------------------------------
+
+
+Hit http://localhost:${NETDATA_PORT}/ from your browser.
+
+To stop netdata, just kill it, with:
+
+  killall netdata
+
+To start it, just run it:
+
+  ${NETDATA_PREFIX}/usr/sbin/netdata
+
+
+Enjoy!
+
+                 Give netdata a Github Star, at:
+
+             https://github.com/firehol/netdata/wiki
+
+
+END
 echo >&2 "Uninstall script generated: ./netdata-uninstaller.sh"