diff options
author | Costa Tsaousis <costa@tsaousis.gr> | 2016-05-14 00:10:38 +0300 |
---|---|---|
committer | Costa Tsaousis <costa@tsaousis.gr> | 2016-05-14 00:10:38 +0300 |
commit | 06c43af4d934e0ae890af83076f9fe56243bfdf9 (patch) | |
tree | 936d82bcb6f3280fdfc6f822fda3fc9537b308f6 /netdata-installer.sh | |
parent | 2377959d99ccda5e7f6ccf02536276ff1e615ad4 (diff) |
apps.plugin now runs with linux capabilites instead of setuid to root
Diffstat (limited to 'netdata-installer.sh')
-rwxr-xr-x | netdata-installer.sh | 424 |
1 files changed, 227 insertions, 197 deletions
diff --git a/netdata-installer.sh b/netdata-installer.sh index d8c073ae57..3b094d4420 100755 --- a/netdata-installer.sh +++ b/netdata-installer.sh @@ -30,48 +30,48 @@ NETDATA_PREFIX= ZLIB_IS_HERE=0 usage() { - cat <<USAGE + cat <<-USAGE -${ME} <installer options> + ${ME} <installer options> -Valid <installer options> are: + Valid <installer options> are: - --install /PATH/TO/INSTALL + --install /PATH/TO/INSTALL - If your give: --install /opt - netdata will be installed in /opt/netdata + If your give: --install /opt + netdata will be installed in /opt/netdata - --dont-start-it + --dont-start-it - Do not (re)start netdata. - Just install it. + Do not (re)start netdata. + Just install it. - --dont-wait + --dont-wait - 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. - --zlib-is-really-here + --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. + 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: + 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> + CFLAGS="<gcc options>" ${ME} <installer options> -For the installer to complete successfully, you will need -these packages installed: + For the installer to complete successfully, you will need + these packages installed: - gcc make autoconf automake pkg-config zlib1g-dev uuid-dev + gcc make autoconf automake pkg-config zlib1g-dev uuid-dev -For the plugins, you will at least need: + For the plugins, you will at least need: - curl node + curl nodejs USAGE } @@ -107,26 +107,26 @@ do fi done -cat <<BANNER +cat <<-BANNER -Welcome to netdata! -Nice to see you are giving it a try! + Welcome to netdata! + Nice to see you are giving it a try! -You are about to build and install netdata to your system. + You are about to build and install netdata to your system. -It will be installed at these locations: + 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 ${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 -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 @@ -134,40 +134,40 @@ if [ "${UID}" -ne 0 ] then if [ -z "${NETDATA_PREFIX}" ] then - cat <<NONROOTNOPREFIX + cat <<-NONROOTNOPREFIX -Sorry! This will fail! + Sorry! This will fail! -You are attempting to install netdata as non-root, but you plan to install it -in system paths. + 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: + Please set an installation prefix, like this: - $0 ${@} --install /tmp + $0 ${@} --install /tmp -or, run the installer as root: + or, run the installer as root: - sudo $0 ${@} + 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. + 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 + 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. + 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: + If you installing permanently on your system, run the + installer like this: - sudo $0 ${@} + sudo $0 ${@} NONROOT fi @@ -208,22 +208,22 @@ then else cat <<-"EOF" - ------------------------------------------------------------------------------- - autotools 2.60 or later is required + ------------------------------------------------------------------------------- + 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. + Sorry, you do not seem to have autotools 2.60 or later, which is + required to build from the git sources of netdata. - You can either install a suitable version of autotools and automake - or download a netdata package which does not have these dependencies. + You can either install a suitable version of autotools and automake + or download a netdata package which does not have these dependencies. - Source packages where autotools have already been run are available - here: - https://firehol.org/download/netdata/ + Source packages where autotools have already been run are available + here: + https://firehol.org/download/netdata/ - The unsigned/master folder tracks the head of the git tree and released - packages are also available. - EOF + The unsigned/master folder tracks the head of the git tree and released + packages are also available. +EOF exit 1 fi fi @@ -239,30 +239,30 @@ if [ ${DONOTWAIT} -eq 0 ] fi build_error() { - cat <<EOF + cat <<-EOF -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Sorry! NetData failed to build... + Sorry! NetData failed to build... -You many need to check these: + You many need to check these: -1. The package zlib1g-dev has to be installed. + 1. The package uuid-dev has to be installed. - If your system cannot find ZLIB, although it is installed - run me with the option: --zlib-is-really-here + 2. The package zlib1g-dev has to be installed. -2. The package uuid-dev has to be installed. + If your system cannot find ZLIB, although it is installed + run me with the option: --zlib-is-really-here -3. You need basic build tools installed, like: + 3. You need basic build tools installed, like: - gcc make autoconf automake pkg-config + gcc make autoconf automake pkg-config - Autoconf version 2.60 or higher is required. + Autoconf version 2.60 or higher is required. -If you still cannot get it to build, ask for help at github: + If you still cannot get it to build, ask for help at github: - https://github.com/firehol/netdata/issues + https://github.com/firehol/netdata/issues EOF @@ -271,15 +271,28 @@ EOF } 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" - 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 [ ${ZLIB_IS_HERE} -eq 1 ] @@ -452,9 +465,15 @@ done 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" + run chmod 0755 "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" + run setcap cap_dac_read_search,cap_sys_ptrace+ep "${NETDATA_PREFIX}/usr/libexec/netdata/plugins.d/apps.plugin" + if [ $? -ne 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 fi # ----------------------------------------------------------------------------- @@ -487,6 +506,9 @@ isnetdata() { } +echo >&2 +echo >&2 "-------------------------------------------------------------------------------" +echo >&2 printf >&2 "Stopping a (possibly) running netdata..." ret=0 count=0 @@ -583,36 +605,36 @@ fi # Check for KSM ksm_is_available_but_disabled() { - cat <<KSM1 + cat <<-KSM1 -------------------------------------------------------------------------------- -Memory de-duplication instructions + ------------------------------------------------------------------------------- + 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. + 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: + To enable it run: -echo 1 >/sys/kernel/mm/ksm/run -echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs + echo 1 >/sys/kernel/mm/ksm/run + echo 1000 >/sys/kernel/mm/ksm/sleep_millisecs -If you enable it, you will save 40-60% of netdata memory. + If you enable it, you will save 40-60% of netdata memory. KSM1 } ksm_is_not_available() { - cat <<KSM2 + cat <<-KSM2 -------------------------------------------------------------------------------- -Memory de-duplication not present in your kernel + ------------------------------------------------------------------------------- + Memory de-duplication not present in your kernel -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. -To enable it, you need a kernel built with CONFIG_KSM=y + To enable it, you need a kernel built with CONFIG_KSM=y -If you can have it, you will save 40-60% of netdata memory. + If you can have it, you will save 40-60% of netdata memory. KSM2 } @@ -632,18 +654,18 @@ fi if [ ! -s web/version.txt ] then -cat <<VERMSG + cat <<-VERMSG -------------------------------------------------------------------------------- -Version update check warning + ------------------------------------------------------------------------------- + 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: + If you want to have version update check, please re-install it + following the procedure in: -https://github.com/firehol/netdata/wiki/Installation + https://github.com/firehol/netdata/wiki/Installation VERMSG fi @@ -653,23 +675,31 @@ fi if [ "${UID}" -ne 0 ] then -cat <<SETUID_WARNING + cat <<-SETUID_WARNING -------------------------------------------------------------------------------- -apps.plugin needs privileges + ------------------------------------------------------------------------------- + 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 + either of the following sets of commands: + + 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" -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: + 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" + 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. + These 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. + 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 @@ -677,80 +707,80 @@ fi # ----------------------------------------------------------------------------- # Keep un-install info -cat >netdata-uninstaller.sh <<UNINSTALL -#!/bin/bash +cat >netdata-uninstaller.sh <<-UNINSTALL + #!/bin/bash -# this script will uninstall netdata + # this script will uninstall netdata -if [ "\$1" != "--force" ] - then - echo >&2 "This script will REMOVE netdata from your system." - echo >&2 "Run it again with --force to do it." - exit 1 -fi + if [ "\$1" != "--force" ] + then + echo >&2 "This script will REMOVE netdata from your system." + echo >&2 "Run it again with --force to do it." + exit 1 + fi + + echo >&2 "Stopping a possibly running netdata..." + killall netdata + sleep 2 -echo >&2 "Stopping a possibly running netdata..." -killall netdata -sleep 2 + deletedir() { + if [ ! -z "\$1" -a -d "\$1" ] + then + echo + echo "Deleting directory '\$1' ..." + rm -I -R "\$1" + fi + } -deletedir() { - if [ ! -z "\$1" -a -d "\$1" ] + if [ ! -z "${NETDATA_PREFIX}" -a -d "${NETDATA_PREFIX}" ] then - echo - echo "Deleting directory '\$1' ..." - rm -I -R "\$1" - fi -} + # installation prefix was given -if [ ! -z "${NETDATA_PREFIX}" -a -d "${NETDATA_PREFIX}" ] - then - # installation prefix was given + deletedir "${NETDATA_PREFIX}" - deletedir "${NETDATA_PREFIX}" + else + # installation prefix was NOT given -else - # installation prefix was NOT given + if [ -f "${NETDATA_PREFIX}/usr/sbin/netdata" ] + then + echo "Deleting ${NETDATA_PREFIX}/usr/sbin/netdata ..." + rm -i "${NETDATA_PREFIX}/usr/sbin/netdata" + fi - if [ -f "${NETDATA_PREFIX}/usr/sbin/netdata" ] - then - echo "Deleting ${NETDATA_PREFIX}/usr/sbin/netdata ..." - rm -i "${NETDATA_PREFIX}/usr/sbin/netdata" + deletedir "${NETDATA_PREFIX}/etc/netdata" + deletedir "${NETDATA_PREFIX}/usr/share/netdata" + deletedir "${NETDATA_PREFIX}/usr/libexec/netdata" + deletedir "${NETDATA_PREFIX}/var/lib/netdata" + deletedir "${NETDATA_PREFIX}/var/cache/netdata" + deletedir "${NETDATA_PREFIX}/var/log/netdata" fi - deletedir "${NETDATA_PREFIX}/etc/netdata" - deletedir "${NETDATA_PREFIX}/usr/share/netdata" - deletedir "${NETDATA_PREFIX}/usr/libexec/netdata" - deletedir "${NETDATA_PREFIX}/var/lib/netdata" - deletedir "${NETDATA_PREFIX}/var/cache/netdata" - deletedir "${NETDATA_PREFIX}/var/log/netdata" -fi - -getent passwd netdata > /dev/null -if [ $? -eq 0 ] - then - echo - echo "You may also want to remove the user netdata" - echo "by running:" - echo " userdel netdata" -fi + getent passwd netdata > /dev/null + if [ $? -eq 0 ] + then + echo + echo "You may also want to remove the user netdata" + echo "by running:" + echo " userdel netdata" + fi -getent group netdata > /dev/null -if [ $? -eq 0 ] - then - echo - echo "You may also want to remove the group netdata" - echo "by running:" - echo " groupdel netdata" -fi + getent group netdata > /dev/null + if [ $? -eq 0 ] + then + echo + echo "You may also want to remove the group netdata" + echo "by running:" + echo " groupdel netdata" + fi -getent group docker > /dev/null -if [ $? -eq 0 -a "${NETDATA_ADDED_TO_DOCKER}" = "1" ] - then - echo - echo "You may also want to remove the netdata user from the docker group" - echo "by running:" - echo " gpasswd -d netdata docker" -fi + getent group docker > /dev/null + if [ $? -eq 0 -a "${NETDATA_ADDED_TO_DOCKER}" = "1" ] + then + echo + echo "You may also want to remove the netdata user from the docker group" + echo "by running:" + echo " gpasswd -d netdata docker" + fi UNINSTALL chmod 750 netdata-uninstaller.sh @@ -764,32 +794,32 @@ else access="${NETDATA_BIND}" fi -cat <<END +cat <<-END -------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- -OK. NetData is installed and it is running (listening to ${NETDATA_BIND}:${NETDATA_PORT}). + OK. NetData is installed and it is running (listening to ${NETDATA_BIND}:${NETDATA_PORT}). -------------------------------------------------------------------------------- + ------------------------------------------------------------------------------- -Hit http://${access}:${NETDATA_PORT}/ from your browser. + Hit http://${access}:${NETDATA_PORT}/ from your browser. -To stop netdata, just kill it, with: + To stop netdata, just kill it, with: - killall netdata + killall netdata -To start it, just run it: + To start it, just run it: - ${NETDATA_PREFIX}/usr/sbin/netdata + ${NETDATA_PREFIX}/usr/sbin/netdata -Enjoy! + Enjoy! - Give netdata a Github Star, at: + Give netdata a Github Star, at: - https://github.com/firehol/netdata/wiki + https://github.com/firehol/netdata/wiki END |