]> arthur.barton.de Git - netdata.git/blobdiff - netdata-installer.sh
Merge pull request #172 from mcnewton/infiles
[netdata.git] / netdata-installer.sh
index 95409b885c3c05aec58c42736e61410bdd6b6752..7a00a56cecf97bf67a973e4951c9ae866911a807 100755 (executable)
 
 LC_ALL=C
 
-cat <<BANNER
+# you can set CFLAGS before running installer
+CFLAGS="${CFLAGS--O3}"
+
+ME="$0"
+DONOTSTART=0
+DONOTWAIT=0
+NETDATA_PREFIX=
+ZLIB_IS_HERE=0
+
+usage() {
+       cat <<USAGE
+
+${ME} <installer options>
+
+Valid <installer options> are:
+
+   --install /PATH/TO/INSTALL
+
+        If your 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.
+
+   --zlib-is-really-here
+
+        If you get errors about missing zlib,
+        but you know it is available,
+        you have a broken pkg-config.
+        Use this option to allow it continue
+        without checking pkg-config.
+
+Netdata will by default be compiled with gcc optimization -O3
+If you need to pass different CFLAGS, use something like this:
+
+  CFLAGS="<gcc options>" $ME <installer options>
+
+For the installer to complete successfully, you will need
+these packages installed:
+
+   gcc make autoconf automake pkg-config zlib1g-dev
+
+For the plugins, you will at least need:
+
+   curl node
+
+USAGE
+}
 
+while [ ! -z "${1}" ]
+do
+       if [ "$1" = "--install" ]
+               then
+               NETDATA_PREFIX="${2}/netdata"
+               shift 2
+       elif [ "$1" = "--zlib-is-really-here" ]
+               then
+               ZLIB_IS_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" = "--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
+done
 
-This script will build and install netdata to your system.
+cat <<BANNER
 
-By default netdata will be installed as any other package.
-If you want to install it to another directory, run me
-with the option:
+Welcome to netdata!
+Nice to see you are giving it a try!
 
-$0 --install /path/to/install
+You are about to build and install netdata to your system.
 
-A new directory called netdata will be created as
+It will be installed at these locations:
 
-/path/to/install/netdata
+  - 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
+  - log files     at ${NETDATA_PREFIX}/var/log/netdata
 
+This installer allows you to change the installation path.
+Press Control-C and run the same command with --help for help.
 
 BANNER
 
@@ -30,18 +120,14 @@ if [ ! "${UID}" = 0 -o "$1" = "-h" -o "$1" = "--help" ]
        exit 1
 fi
 
-NETDATA_PREFIX=
-if [ "$1" = "--install" ]
-       then
-       NETDATA_PREFIX="${2}/netdata"
-       shift 2
-fi
-
-if [ ! -z "${NETDATA_PREFIX}" ]
+if [ ${DONOTWAIT} -eq 0 ]
        then
-       read -p "Press ENTER to build and install netdata to '${NETDATA_PREFIX}' > "
-else
-       read -p "Press ENTER to build and install netdata to your system > "
+       if [ ! -z "${NETDATA_PREFIX}" ]
+               then
+               read -p "Press ENTER to build and install netdata to '${NETDATA_PREFIX}' > "
+       else
+               read -p "Press ENTER to build and install netdata to your system > "
+       fi
 fi
 
 # reload the profile
@@ -52,7 +138,7 @@ build_error() {
 
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-We are very sorry! NetData failed to build...
+Sorry! NetData failed to build...
 
 You many need to check these:
 
@@ -86,7 +172,7 @@ run() {
        "${@}"
 }
 
-if [ "$1" = "--zlib-is-really-here" ]
+if [ ${ZLIB_IS_HERE} -eq 1 ]
        then
        shift
        echo >&2 "ok, assuming zlib is really installed."
@@ -105,7 +191,7 @@ run ./configure \
        --sysconfdir="${NETDATA_PREFIX}/etc" \
        --localstatedir="${NETDATA_PREFIX}/var" \
        --with-zlib --with-math --with-user=netdata \
-       CFLAGS="-O3" || exit 1
+       CFLAGS="${CFLAGS}" || exit 1
 
 # remove the build_error hook
 trap - EXIT
@@ -189,9 +275,32 @@ run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
 run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
 
 
+# -----------------------------------------------------------------------------
+# check if we can re-start netdata
+
+if [ ${DONOTSTART} -eq 1 ]
+       then
+       if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
+               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"
+               chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
+       fi
+       echo >&2 "OK. It is now installed and ready."
+       exit 0
+fi
+
 # -----------------------------------------------------------------------------
 # stop a running netdata
 
+isnetdata() {
+       [ -z "$1" -o ! -f "/proc/$1/stat" ] && return 1
+       [ "$(cat "/proc/$1/stat" | cut -d '(' -f 2 | cut -d ')' -f 1)" = "netdata" ] && return 0
+       return 1
+}
+
+
 printf >&2 "Stopping a (possibly) running netdata..."
 ret=0
 count=0
@@ -204,8 +313,21 @@ do
        fi
 
        count=$((count + 1))
-       run killall netdata 2>/dev/null
-       ret=$?
+
+       pid=$(cat /var/run/netdata.pid 2>/dev/null)
+       # backwards compatibility
+       [ -z "${pid}" ] && pid=$(cat /var/run/netdata/netdata.pid 2>/dev/null)
+       
+       isnetdata $pid || pid=
+       if [ ! -z "${pid}" ]
+               then
+               run kill $pid 2>/dev/null
+               ret=$?
+       else
+               run killall netdata 2>/dev/null
+               ret=$?
+       fi
+
        test $ret -eq 0 && printf >&2 "." && sleep 2
 done
 echo >&2
@@ -215,7 +337,7 @@ echo >&2
 # run netdata
 
 echo >&2 "Starting netdata..."
-run ${NETDATA_PREFIX}/usr/sbin/netdata "${@}"
+run ${NETDATA_PREFIX}/usr/sbin/netdata -pidfile /var/run/netdata.pid "${@}"
 
 if [ $? -ne 0 ]
        then
@@ -238,6 +360,10 @@ if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
        # remove a possibly obsolete download
        [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
 
+       # disable a proxy to get data from the local netdata
+       export http_proxy=
+       export https_proxy=
+
        # try wget
        wget 2>/dev/null -O "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
        ret=$?
@@ -282,3 +408,46 @@ To start it, just run it:
 Enjoy!
 
 END
+
+ksm_is_available_but_disabled() {
+       cat <<KSM1
+
+INFORMATION:
+
+I see 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
+
+If you enable it, you will save 20-60% of netdata memory.
+
+KSM1
+}
+
+ksm_is_not_available() {
+       cat <<KSM2
+
+INFORMATION:
+
+I see 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.
+
+KSM2
+}
+
+if [ -f "/sys/kernel/mm/ksm/run" ]
+       then
+       if [ $(cat "/sys/kernel/mm/ksm/run") != "1" ]
+               then
+               ksm_is_available_but_disabled
+       fi
+else
+       ksm_is_not_available
+fi