]> arthur.barton.de Git - netdata.git/blobdiff - netdata.start
build: remove uselss code
[netdata.git] / netdata.start
index b4dbbff8a0aec6eaf9e9f533a3be45991eee87a3..94c2f35f2a4150f866f3c1ef36a7c1881ffeed71 100755 (executable)
 #!/bin/bash
 
+netdata=$(which netdata)
 
-base="`dirname "$0"`"
-
-if [ ! -d "$base" -o ! -f "$base/netdata.c" ]
+if [ -z "${netdata}" -o ! -f src/netdata ]
 then
-       echo >&2 "Cannot find my home directory '${base}'."
-       exit 1
+        echo >&2 "Running ./autogen.sh ..."
+        ./autogen.sh || exit 1
+
+        echo >&2 "Running ./configure ..."
+        ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-zlib --with-math --with-user=netdata CFLAGS="-march=native -O3 -Wall -Wextra" || exit 1
+
+        echo >&2 "Cleaning a possibly old compilation ..."
+        make clean || exit 1
+
+        echo >&2 "Compiling netdata ..."
+        make || exit 1
 fi
-cd "$base" || exit 1
 
-NETDATA_UPDATE_EVERY=1
-if [ -f all.config ]
+if [ -z "${netdata}" -o src/netdata -nt "${netdata}" ]
 then
-       source all.config
+        echo >&2 "Installing netdata ..."
+        make install
+
+        echo >&2 "Adding netdata group ..."
+        getent group netdata > /dev/null || groupadd -r netdata
+
+        echo >&2 "Adding netdata user ..."
+        getent passwd netdata > /dev/null || useradd -r -g netdata -c netdata -s /sbin/nologin -d / netdata
 fi
 
-echo "Creating a directory for netdata..."
-data=
-for x in /run/netdata /var/run/netdata /tmp/netdata
-do
-       echo "  Trying '${x}'..."
-       if [ ! -d "${x}" ]
-       then
-               mkdir "${x}"
-               if [ $? -eq 0 ]
-               then
-                       echo "  OK. '${x}' works."
-                       data="${x}"
-                       break
-               fi
-       else
-               echo "  OK. '${x}' works."
-               data="${x}"
-               break
-       fi
-done
+netdata=$(which netdata)
 
-if [ -z "${data}" ]
+base="`dirname "$0"`"
+
+if [ ! -d "${base}" ]
 then
-       echo >&2 "Cannot find where to put JSON files."
+       echo >&2 "Cannot find my home directory '${base}'."
        exit 1
 fi
+cd "${base}" || exit 1
 
-cat <<EOFHTACCESS >"${data}/.htaccess"
 
-ExpiresActive on
-ExpiresDefault A0
-ExpiresByType application/json A0
+# -----------------------------------------------------------------------------
+# load options from the configuration file
 
-Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
-Header set Pragma "no-cache"
+# create an empty config if it does not exist
+[ ! -f conf.d/netdata.conf ] && touch conf.d/netdata.conf
 
-EOFHTACCESS
+# function to extract values from the config file
+config_option() {
+       local key="${1}" value="${2}" line=
 
-rm "${data}"/*.json
+       if [ -s "/etc/netdata/netdata.conf" ]
+               then
+               line="$( grep "^[[:space:]]*${key}[[:space:]]*=[[:space:]]*" "conf.d/netdata.conf" | head -n 1 )"
+               [ ! -z "${line}" ] && value="$( echo "${line}" | cut -d '=' -f 2 | sed -e "s/^[[:space:]]\+//g" -e "s/[[:space:]]\+$//g" )"
+       fi
 
-echo "Stopping a (possibly) running netdata..."
-killall netdata 2>/dev/null
+       echo "${value}"
+}
 
-echo "Compiling netdata"
-gcc -O3 -o netdata netdata.c || exit 1
+# user
+defuser="netdata"
+[ ! "${UID}" = "0" ] && defuser="${USER}"
+NETDATA_USER="$( config_option "run as user" "${defuser}" )"
 
-echo "Starting netdata"
-./netdata -d -u $NETDATA_UPDATE_EVERY -l $[60*NETDATA_UPDATE_EVERY] -o "${data}" || exit 1
+# debug flags
+defdebug=0
+NETDATA_DEBUG="$( config_option "debug flags" ${defdebug} )"
 
-echo "Waiting 2 seconds for the JSON files"
-# wait 2 seconds for the JSON files to be generated
-sleep 2
+# port
+defport=19999
+NETDATA_PORT="$( config_option "port" ${defport} )"
 
-if [ -h data ]
-then
-       echo "Removing existing $base/data link"
-       rm data || exit 1
-fi
+# directories
+NETDATA_CACHE_DIR="$( config_option "database directory" "/var/cache/netdata" )"
+NETDATA_WEB_DIR="$( config_option "web files directory" "/usr/share/netdata/web" )"
+NETDATA_LOG_DIR="log"
+NETDATA_CONF_DIR="conf.d"
 
-if [ ! -d data ]
-then
-       echo "Linking '${data}' to $base/data"
-       ln -s "${data}" data || exit 1
-else
-       echo >&2 "Directory $base/data already exists. Not touching it, however it should be a link '${data}'."
-fi
 
-echo "Finding proper parameters for dashboard..."
+# -----------------------------------------------------------------------------
+# prepare the directories
 
-# count all JSON files
-all=`ls "${data}" | grep .json$ | sed "s/\.json$//g"`
-count=0
-for x in $all
+echo >&2 "Fixing directory permissions for user ${NETDATA_USER}..."
+for x in "${NETDATA_WEB_DIR}" "${NETDATA_CONF_DIR}" "${NETDATA_CACHE_DIR}" "${NETDATA_LOG_DIR}"
 do
-       y=`echo "$x" | tr "-" "_"`
-       eval "t=\${NETDATA_PRIORITY_${y}}"
-       if [ ! "$t" = "IGNORE" ]
-       then
-               count=$[count + 1]
+       if [ ! -d "${x}" ]
+               then
+               mkdir "${x}" || exit 1
        fi
+       chown -R "${NETDATA_USER}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_USER}..."
+       chmod 0775 "${x}" "${x}" || echo >&2 "WARNING: Cannot change the permissions of the directory ${x} to 0755..."
 done
 
-# find the optimal graphs per page
-w=1
-h=1
-a=1
-while [ $a -lt $count ]
-do
-       if [ $[h+1] -le $w ]
-       then
-               h=$[h+1]
-       else
-               w=$[w+1]
-               h=$[h-1]
-       fi
-       a=$[w*h]
-done
+# fix apps.plugin to be setuid to root
+chown root '/usr/libexec/netdata/plugins.d/apps.plugin' && chmod 4755 '/usr/libexec/netdata/plugins.d/apps.plugin'
 
-# prefer to have wider graphs
-while [ $w -ge $h ]
-do
-       w=$[w-1]
-       h=$[h+1]
-done
 
-# make sure we don't display too small graphs
-if [ $w -gt 10 ]
-then
-       w=10
-fi
-if [ $h -gt 10 ]
-then
-       h=10
-fi
+# -----------------------------------------------------------------------------
+# stop a running netdata
 
-echo "Generating all.html"
-host="`hostname`"
-cat >all.html <<EOF
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<style>
-        * {font-family:Arial}
-        div {float: left; margin: 0 0 0 0; }
-</style>
-<title>${host} netdata</title>
-<head>
-       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-
-       <!--Load the AJAX API-->
-       <script type="text/javascript" src="https://www.google.com/jsapi"></script>
-       <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
-       <script type="text/javascript" src="netdata.js"></script>
-       <script type="text/javascript">
-       
-       // Set a callback to run when the Google Visualization API is loaded.
-       google.setOnLoadCallback(drawCharts);
-       
-       function drawCharts() {
-               var width = $w; // if zero, auto-adjusts to 50% of screen, 1-10 goes 1/width of screen
-               var height = $h;
-               
-               // EDIT: add one line per interface you have
-               // EDIT: 
-               // EDIT:   name    div id                    json data           graph title
-               // EDIT: --------------------------------------------------------------------------------
-EOF
-
-for x in $all
+printf >&2 "Stopping a (possibly) running netdata..."
+ret=0
+count=0
+while [ $ret -eq 0 ]
 do
-       y=`echo "$x" | tr "-" "_"`
-       eval "NETDATA_TITLE_${y}=\${NETDATA_TITLE_${y}:-Live Network Usage for ${x}}"
-       eval "t=\${NETDATA_TITLE_${y}}"
-       
-       eval "p=\${NETDATA_PRIORITY_${y}}"
-       if [ ! "$p" = "IGNORE" ]
-       then
-               cat >>all.html <<EOF2
-               drawChart('${x}', '${x}_div', width, height, "data/${x}.json", "${t}");
-EOF2
+       if [ $count -gt 15 ]
+               then
+               echo >&2 "Cannot stop the running netdata."
+               exit 1
        fi
+
+       count=$((count + 1))
+       killall netdata 2>/dev/null
+       ret=$?
+       test $ret -eq 0 && printf >&2 "." && sleep 2
 done
+echo >&2
 
-ref=$[4 * NETDATA_UPDATE_EVERY]
-tim=$[1000 * NETDATA_UPDATE_EVERY]
-if [ $count -gt 4 ]
-then
-       ref=1
-       tim=$[1000 * NETDATA_UPDATE_EVERY / count]
-       if [ $tim -lt $[100 * NETDATA_UPDATE_EVERY] ]
+
+# -----------------------------------------------------------------------------
+# run netdata
+
+# avoid extended stat(/etc/localtime)
+# http://stackoverflow.com/questions/4554271/how-to-avoid-excessive-stat-etc-localtime-calls-in-strftime-on-linux
+export TZ=":/etc/localtime"
+
+echo >&2 "Starting netdata..."
+netdata "${@}"
+
+if [ $? -ne 0 ]
        then
-               tim=$[100 * NETDATA_UPDATE_EVERY]
-       fi
+       echo >&2
+       echo >&2 "SORRY! FAILED TO START NETDATA!"
+       exit 1
+else
+       echo >&2 "OK. NetData Started!"
 fi
 
-cat >>all.html <<EOF3
-       }
-       
-        function myChartsRefresh() {
-               // refresh up to 4 charts per second
-                refreshCharts($ref);
-        }
-
-        // EDIT: how often the charts are updated, in milliseconds
-        setInterval(myChartsRefresh, $tim);
-       </script>
-</head>
-
-<body>
-       <!--
-               EDIT: add one div per interface you have
-               EDIT: use the same id above and bellow!
-       -->
-EOF3
-
-tmp="/tmp/$RANDOM.netdata.$$.$RANDOM"
-for x in $all
-do
-       y=`echo "$x" | tr "-" "_"`
-       eval "NETDATA_PRIORITY_${y}=\${NETDATA_PRIORITY_${y}:-${x}}"
-       eval "t=\${NETDATA_PRIORITY_${y}}"
-       if [ ! "$t" = "IGNORE" ]
+
+# -----------------------------------------------------------------------------
+# save a config file, if it is not already there
+
+if [ ! -s /etc/netdata/netdata.conf ]
        then
-               echo "${t}.${x}"
-       fi
-done >"${tmp}"
+       echo >&2 "Downloading default configuration from netdata..."
+       sleep 5
 
-for x in `cat "${tmp}" | sort`
-do
-       n="`echo "$x" | cut -d '.' -f 2-`"
-       cat >>all.html <<EOF4
-       <div id="${n}_div"></div>
-EOF4
-done
-rm -f "${tmp}"
+       # remove a possibly obsolete download
+       [ -f /etc/netdata/netdata.conf.new ] && rm /etc/netdata/netdata.conf.new
+
+       # try wget
+       wget 2>/dev/null -O /etc/netdata/netdata.conf.new "http://localhost:${NETDATA_PORT}/netdata.conf"
+       ret=$?
 
-cat >>all.html <<EOF5
- </body>
-</html>
-EOF5
+       # try curl
+       if [ $ret -ne 0 -o ! -s /etc/netdata/netdata.conf.net ]
+               then
+               curl -s -o /etc/netdata/netdata.conf.new "http://localhost:${NETDATA_PORT}/netdata.conf"
+               ret=$?
+       fi
 
-set|grep ^NETDATA_ >all.config
+       if [ $ret -eq 0 -a -s /etc/netdata/netdata.conf.new ]
+               then
+               mv /etc/netdata/netdata.conf.new /etc/netdata/netdata.conf
+               echo >&2 "New configuration saved for you to edit at /etc/netdata/netdata.conf"
 
-echo "All Done."
-echo "Just hit all.html from your browser."
+               chown "${NETDATA_USER}" /etc/netdata/netdata.conf
+               chmod 0664 /etc/netdata/netdata.conf
+       else
+               echo >&2 "Cannnot download configuration from netdata daemon using url 'http://localhost:${NETDATA_PORT}/netdata.conf'"
+               [ -f /etc/netdata/netdata.conf.new ] && rm /etc/netdata/netdata.conf.new
+       fi
+fi
 
+echo >&2
+echo >&2 "Hit http://localhost:${NETDATA_PORT}/ from your browser."
+echo >&2
+echo >&2 "Enjoy..."
+echo >&2