3 # reload the user profile
4 [ -f /etc/profile ] && . /etc/profile
6 # fix PKG_CHECK_MODULES error
7 export ACLOCAL_PATH=/usr/share/aclocal
11 # you can set CFLAGS before running installer
12 CFLAGS="${CFLAGS--O3}"
14 # keep a log of this command
15 printf "\n# " >>netdata-installer.log
16 date >>netdata-installer.log
17 printf "CFLAGS=\"%s\" " "${CFLAGS}" >>netdata-installer.log
18 printf "%q " "$0" "${@}" >>netdata-installer.log
19 printf "\n" >>netdata-installer.log
30 ${ME} <installer options>
32 Valid <installer options> are:
34 --install /PATH/TO/INSTALL
36 If your give: --install /opt
37 netdata will be installed in /opt/netdata
41 Do not (re)start netdata.
46 Do not wait for the user to press ENTER.
47 Start immediately building it.
51 If you get errors about missing zlib,
52 but you know it is available,
53 you have a broken pkg-config.
54 Use this option to allow it continue
55 without checking pkg-config.
57 Netdata will by default be compiled with gcc optimization -O3
58 If you need to pass different CFLAGS, use something like this:
60 CFLAGS="<gcc options>" $ME <installer options>
62 For the installer to complete successfully, you will need
63 these packages installed:
65 gcc make autoconf automake pkg-config zlib1g-dev
67 For the plugins, you will at least need:
76 if [ "$1" = "--install" ]
78 NETDATA_PREFIX="${2}/netdata"
80 elif [ "$1" = "--zlib-is-really-here" ]
84 elif [ "$1" = "--dont-start-it" ]
88 elif [ "$1" = "--dont-wait" ]
92 elif [ "$1" = "--help" -o "$1" = "-h" ]
99 echo >&2 "I cannot understand option '$1'."
108 Nice to see you are giving it a try!
110 You are about to build and install netdata to your system.
112 It will be installed at these locations:
114 - the daemon at ${NETDATA_PREFIX}/usr/sbin/netdata
115 - config files at ${NETDATA_PREFIX}/etc/netdata
116 - web files at ${NETDATA_PREFIX}/usr/share/netdata
117 - plugins at ${NETDATA_PREFIX}/usr/libexec/netdata
118 - cache files at ${NETDATA_PREFIX}/var/cache/netdata
119 - log files at ${NETDATA_PREFIX}/var/log/netdata
120 - pid file at ${NETDATA_PREFIX}/var/run
122 This installer allows you to change the installation path.
123 Press Control-C and run the same command with --help for help.
127 if [ "${UID}" -ne 0 ]
129 if [ -z "${NETDATA_PREFIX}" ]
131 cat <<NONROOTNOPREFIX
133 Sorry! This will wrong!
135 You are attempting to install netdata as non-root, but you plan to install it
138 Please set an installation prefix, like this:
140 $0 ${@} --install /tmp
142 or, run the installer as root:
146 We suggest to install it as root, or certain data collectors will not be able
147 to work. Netdata drops root privileges when running. So, if you plan to keep
148 it, install it as root to get the full functionality.
157 You are about to install netdata as a non-root user.
158 Netdata will work, but a few data collection modules that
159 require root access will fail.
161 If you installing permanently on your system, run the
171 if [ "$(type autoreconf 2> /dev/null)" ]
179 set -- $(autoreconf -V | sed -ne '1s/.* \([^ ]*\)$/\1/p')
180 eval $maj=\$1 $min=\$2
182 autoconf_maj_min AMAJ AMIN
187 elif [ "$AMAJ" -eq 2 -a "$AMIN" -ge 60 ]
191 echo "Found autotools $AMAJ.$AMIN"
194 echo "No autotools found"
197 if [ ! "$have_autotools" ]
201 echo "Will skip autoreconf step"
205 -------------------------------------------------------------------------------
206 autotools 2.60 or later is required
208 Sorry, you do not seem to have autotools 2.60 or later, which is
209 required to build from the git sources of netdata.
211 You can either install a suitable version of autotools and automake
212 or download a netdata package which does not have these dependencies.
214 Source packages where autotools have already been run are available
216 https://firehol.org/download/netdata/
218 The unsigned/master folder tracks the head of the git tree and released
219 packages are also available.
225 if [ ${DONOTWAIT} -eq 0 ]
227 if [ ! -z "${NETDATA_PREFIX}" ]
229 read -p "Press ENTER to build and install netdata to '${NETDATA_PREFIX}' > "
231 read -p "Press ENTER to build and install netdata to your system > "
238 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
240 Sorry! NetData failed to build...
242 You many need to check these:
244 1. The package zlib1g-dev has to be installed.
246 2. You need basic build tools installed, like:
248 gcc make autoconf automake pkg-config
250 Autoconf version 2.60 or higher is required
252 3. If your system cannot find ZLIB, although it is installed
253 run me with the option: --zlib-is-really-here
256 If you still cannot get it to build, ask for help at github:
258 https://github.com/firehol/netdata/issues
268 printf >&2 ":-----------------------------------------------------------------------------\n"
269 printf >&2 "Running command:\n"
271 printf >&2 "%q " "${@}"
278 if [ ${ZLIB_IS_HERE} -eq 1 ]
281 echo >&2 "ok, assuming zlib is really installed."
282 export ZLIB_CFLAGS=" "
283 export ZLIB_LIBS="-lz"
286 trap build_error EXIT
288 if [ "$have_autotools" ]
290 run ./autogen.sh || exit 1
294 --prefix="${NETDATA_PREFIX}/usr" \
295 --sysconfdir="${NETDATA_PREFIX}/etc" \
296 --localstatedir="${NETDATA_PREFIX}/var" \
297 --with-zlib --with-math --with-user=netdata \
298 CFLAGS="${CFLAGS}" || exit 1
300 # remove the build_error hook
303 if [ -f src/netdata ]
305 echo >&2 "Cleaning a possibly old compilation ..."
309 echo >&2 "Compiling netdata ..."
312 # backup user configurations
313 for x in apps_groups.conf charts.d.conf
315 if [ -f "${NETDATA_PREFIX}/etc/netdata/${x}" ]
317 cp -p "${NETDATA_PREFIX}/etc/netdata/${x}" "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup"
321 echo >&2 "Installing netdata ..."
322 run make install || exit 1
324 # restore user configurations
325 for x in apps_groups.conf charts.d.conf
327 if [ -f "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup" ]
329 cp -p "${NETDATA_PREFIX}/etc/netdata/${x}.installer_backup" "${NETDATA_PREFIX}/etc/netdata/${x}"
335 echo >&2 "Adding netdata user group ..."
336 getent group netdata > /dev/null || run groupadd -r netdata
338 echo >&2 "Adding netdata user account ..."
339 getent passwd netdata > /dev/null || run useradd -r -g netdata -c netdata -s /sbin/nologin -d / netdata
343 # -----------------------------------------------------------------------------
344 # load options from the configuration file
346 # create an empty config if it does not exist
347 [ ! -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ] && touch "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
349 # function to extract values from the config file
351 local key="${1}" value="${2}" line=
353 if [ -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
355 line="$( grep "^[[:space:]]*${key}[[:space:]]*=[[:space:]]*" "${NETDATA_PREFIX}/etc/netdata/netdata.conf" | head -n 1 )"
356 [ ! -z "${line}" ] && value="$( echo "${line}" | cut -d '=' -f 2 | sed -e "s/^[[:space:]]\+//g" -e "s/[[:space:]]\+$//g" )"
364 [ ! "${UID}" = "0" ] && defuser="${USER}"
365 NETDATA_USER="$( config_option "run as user" "${defuser}" )"
367 NETDATA_WEB_USER="$( config_option "web files owner" "${defuser}" )"
368 NETDATA_WEB_GROUP="$( config_option "web files group" "${NETDATA_WEB_USER}" )"
372 NETDATA_DEBUG="$( config_option "debug flags" ${defdebug} )"
376 NETDATA_PORT="$( config_option "port" ${defport} )"
379 NETDATA_CACHE_DIR="$( config_option "cache directory" "${NETDATA_PREFIX}/var/cache/netdata" )"
380 NETDATA_WEB_DIR="$( config_option "web files directory" "${NETDATA_PREFIX}/usr/share/netdata/web" )"
381 NETDATA_LOG_DIR="$( config_option "log directory" "${NETDATA_PREFIX}/var/log/netdata" )"
382 NETDATA_CONF_DIR="$( config_option "config directory" "${NETDATA_PREFIX}/etc/netdata" )"
383 NETDATA_RUN_DIR="${NETDATA_PREFIX}/var/run"
386 # -----------------------------------------------------------------------------
387 # prepare the directories
389 # this is needed if NETDATA_PREFIX is not empty
390 if [ ! -d "${NETDATA_RUN_DIR}" ]
392 mkdir -p "${NETDATA_RUN_DIR}" || exit 1
395 echo >&2 "Fixing directories (user: ${NETDATA_USER})..."
396 for x in "${NETDATA_WEB_DIR}" "${NETDATA_CONF_DIR}" "${NETDATA_CACHE_DIR}" "${NETDATA_LOG_DIR}"
400 echo >&2 "Creating directory '${x}'"
401 run mkdir -p "${x}" || exit 1
406 if [ "${x}" = "${NETDATA_WEB_DIR}" ]
408 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}..."
410 run chown -R "${NETDATA_USER}:${NETDATA_USER}" "${x}" || echo >&2 "WARNING: Cannot change the ownership of the files in directory ${x} to ${NETDATA_USER}..."
414 run chmod 0775 "${x}" || echo >&2 "WARNING: Cannot change the permissions of the directory ${x} to 0755..."
419 # fix apps.plugin to be setuid to root
420 run chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
421 run chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
424 # -----------------------------------------------------------------------------
425 # check if we can re-start netdata
427 if [ ${DONOTSTART} -eq 1 ]
429 if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
431 echo >&2 "Generating empty config file in: ${NETDATA_PREFIX}/etc/netdata/netdata.conf"
432 echo "# Get config from http://127.0.0.1:${NETDATA_PORT}/netdata.conf" >"${NETDATA_PREFIX}/etc/netdata/netdata.conf"
434 if [ "${UID}" -eq 0 ]
436 chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
438 chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
440 echo >&2 "OK. It is now installed and ready."
444 # -----------------------------------------------------------------------------
445 # stop a running netdata
448 [ -z "$1" -o ! -f "/proc/$1/stat" ] && return 1
449 [ "$(cat "/proc/$1/stat" | cut -d '(' -f 2 | cut -d ')' -f 1)" = "netdata" ] && return 0
454 printf >&2 "Stopping a (possibly) running netdata..."
461 echo >&2 "Cannot stop the running netdata."
467 pid=$(cat "${NETDATA_RUN_DIR}/netdata.pid" 2>/dev/null)
468 # backwards compatibility
469 [ -z "${pid}" ] && pid=$(cat /var/run/netdata.pid 2>/dev/null)
470 [ -z "${pid}" ] && pid=$(cat /var/run/netdata/netdata.pid 2>/dev/null)
472 isnetdata $pid || pid=
475 run kill $pid 2>/dev/null
478 run killall netdata 2>/dev/null
482 test $ret -eq 0 && printf >&2 "." && sleep 2
488 # -----------------------------------------------------------------------------
491 echo >&2 "Starting netdata..."
492 run ${NETDATA_PREFIX}/usr/sbin/netdata -pidfile ${NETDATA_RUN_DIR}/netdata.pid "${@}"
497 echo >&2 "SORRY! FAILED TO START NETDATA!"
500 echo >&2 "OK. NetData Started!"
504 # -----------------------------------------------------------------------------
505 # save a config file, if it is not already there
507 if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
509 echo >&2 "Downloading default configuration from netdata..."
512 # remove a possibly obsolete download
513 [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
515 # disable a proxy to get data from the local netdata
520 wget 2>/dev/null -O "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
524 if [ $ret -ne 0 -o ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
526 curl -s -o "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "http://localhost:${NETDATA_PORT}/netdata.conf"
530 if [ $ret -eq 0 -a -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ]
532 mv "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
533 echo >&2 "New configuration saved for you to edit at ${NETDATA_PREFIX}/etc/netdata/netdata.conf"
535 if [ "${UID}" -eq 0 ]
537 chown "${NETDATA_USER}" "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
539 chmod 0664 "${NETDATA_PREFIX}/etc/netdata/netdata.conf"
541 echo >&2 "Cannnot download configuration from netdata daemon using url 'http://localhost:${NETDATA_PORT}/netdata.conf'"
542 [ -f "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new" ] && rm "${NETDATA_PREFIX}/etc/netdata/netdata.conf.new"
546 # -----------------------------------------------------------------------------
549 ksm_is_available_but_disabled() {
552 -------------------------------------------------------------------------------
553 Memory de-duplication instructions
555 I see you have kernel memory de-duper (called Kernel Same-page Merging,
556 or KSM) available, but it is not currently enabled.
560 echo 1 >/sys/kernel/mm/ksm/run
561 echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs
563 If you enable it, you will save 40-60% of netdata memory.
568 ksm_is_not_available() {
571 -------------------------------------------------------------------------------
572 Memory de-duplication not present in your kernel
574 It seems you do not have kernel memory de-duper (called Kernel Same-page
575 Merging, or KSM) available.
577 To enable it, you need a kernel built with CONFIG_KSM=y
579 If you can have it, you will save 40-60% of netdata memory.
584 if [ -f "/sys/kernel/mm/ksm/run" ]
586 if [ $(cat "/sys/kernel/mm/ksm/run") != "1" ]
588 ksm_is_available_but_disabled
594 # -----------------------------------------------------------------------------
595 # Check for version.txt
597 if [ ! -s web/version.txt ]
601 -------------------------------------------------------------------------------
602 Version update check warning
604 The way you downloaded netdata, we cannot find its version. This means the
605 Update check on the dashboard, will not work.
607 If you want to have version update check, please re-install it
608 following the procedure in:
610 https://github.com/firehol/netdata/wiki/Installation
615 # -----------------------------------------------------------------------------
616 # apps.plugin warning
618 if [ "${UID}" -ne 0 ]
622 -------------------------------------------------------------------------------
623 apps.plugin needs privileges
625 Since you have installed netdata as a normal user, to have apps.plugin collect
626 all the needed data, you have to give it the access rights it needs, by running
629 sudo chown root "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
630 sudo chmod 4755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin"
632 The commands allow apps.plugin to run as root.
634 apps.plugin is performing a hard-coded function of data collection for all
635 running processes. It cannot be instructed from the netdata daemon to perform
636 any task, so it is pretty safe to do this.
641 # -----------------------------------------------------------------------------
642 # Keep un-install info
644 cat >netdata-uninstaller.sh <<UNINSTALL
647 # this script will uninstall netdata
649 if [ "\$1" != "--force" ]
651 echo >&2 "This script will REMOVE netdata from your system."
652 echo >&2 "Run it again with --force to do it."
656 echo >&2 "Stopping a possibly running netdata..."
661 if [ ! -z "\$1" -a -d "\$1" ]
664 echo "Deleting directory '\$1' ..."
669 if [ ! -z "${NETDATA_PREFIX}" -a -d "${NETDATA_PREFIX}" ]
671 # installation prefix was given
673 deletedir "${NETDATA_PREFIX}"
676 # installation prefix was NOT given
678 if [ -f "${NETDATA_PREFIX}/usr/sbin/netdata" ]
680 echo "Deleting ${NETDATA_PREFIX}/usr/sbin/netdata ..."
681 rm -i "${NETDATA_PREFIX}/usr/sbin/netdata"
684 deletedir "${NETDATA_PREFIX}/etc/netdata"
685 deletedir "${NETDATA_PREFIX}/usr/share/netdata"
686 deletedir "${NETDATA_PREFIX}/usr/libexec/netdata"
687 deletedir "${NETDATA_PREFIX}/var/cache/netdata"
688 deletedir "${NETDATA_PREFIX}/var/log/netdata"
691 getent passwd netdata > /dev/null
695 echo "You may also want to remove the user netdata"
697 echo " userdel netdata"
700 getent group netdata > /dev/null
704 echo "You may also want to remove the group netdata"
706 echo " groupdel netdata"
710 chmod 750 netdata-uninstaller.sh
712 # -----------------------------------------------------------------------------
717 -------------------------------------------------------------------------------
719 OK. NetData is installed and it is running.
721 -------------------------------------------------------------------------------
724 Hit http://localhost:${NETDATA_PORT}/ from your browser.
726 To stop netdata, just kill it, with:
730 To start it, just run it:
732 ${NETDATA_PREFIX}/usr/sbin/netdata
737 Give netdata a Github Star, at:
739 https://github.com/firehol/netdata/wiki
743 echo >&2 "Uninstall script generated: ./netdata-uninstaller.sh"