123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- #!/usr/bin/env bash
- # SPDX-License-Identifier: GPL-3.0-or-later
- . $(dirname "${0}")/functions.sh
- export LC_ALL=C
- umask 002
- # Be nice on production environments
- renice 19 $$ >/dev/null 2>/dev/null
- # -----------------------------------------------------------------------------
- STARTIT=1
- while [ ! -z "${1}" ]
- do
- if [ "${1}" = "--dont-start-it" ]
- then
- STARTIT=0
- else
- echo >&2 "Unknown option '${1}'. Ignoring it."
- fi
- shift
- done
- deleted_stock_configs=0
- if [ ! -f "etc/netdata/.installer-cleanup-of-stock-configs-done" ]
- then
- # -----------------------------------------------------------------------------
- progress "Deleting stock configuration files from user configuration directory"
- declare -A configs_signatures=()
- source "system/configs.signatures"
- if [ ! -d etc/netdata ]
- then
- run mkdir -p etc/netdata
- fi
- md5sum="$(which md5sum 2>/dev/null || command -v md5sum 2>/dev/null || command -v md5 2>/dev/null)"
- for x in $(find etc -type f)
- do
- # find it relative filename
- f="${x/etc\/netdata\//}"
- # find the stock filename
- t="${f/.conf.old/.conf}"
- t="${t/.conf.orig/.conf}"
- if [ ! -z "${md5sum}" ]
- then
- # find the checksum of the existing file
- md5="$( ${md5sum} <"${x}" | cut -d ' ' -f 1)"
- #echo >&2 "md5: ${md5}"
- # check if it matches
- if [ "${configs_signatures[${md5}]}" = "${t}" ]
- then
- # it matches the default
- run rm -f "${x}"
- deleted_stock_configs=$(( deleted_stock_configs + 1 ))
- fi
- fi
- done
- touch "etc/netdata/.installer-cleanup-of-stock-configs-done"
- fi
- # -----------------------------------------------------------------------------
- progress "Add user netdata to required user groups"
- NETDATA_WANTED_GROUPS="docker nginx varnish haproxy adm nsd proxy squid ceph nobody"
- NETDATA_ADDED_TO_GROUPS=""
- if [ "${UID}" -eq 0 ]; then
- if ! portable_add_group netdata; then
- run_failed "Failed to add netdata group"
- NETDATA_GROUP="root"
- fi
- if ! portable_add_user netdata "/opt/netdata"; then
- run_failed "Failed to add netdata user"
- NETDATA_USER="root"
- fi
- for g in ${NETDATA_WANTED_GROUPS}; do
- # shellcheck disable=SC2086
- portable_add_user_to_group ${g} netdata && NETDATA_ADDED_TO_GROUPS="${NETDATA_ADDED_TO_GROUPS} ${g}" || run_failed "Failed to add netdata user to secondary groups"
- done
- else
- run_failed "Failed to add netdata user and group"
- run_failed "The installer does not run as root."
- fi
- # -----------------------------------------------------------------------------
- progress "Check SSL certificates paths"
- if [ ! -f "/etc/ssl/certs/ca-certificates.crt" ]
- then
- if [ ! -f /opt/netdata/.curlrc ]
- then
- cacert=
- # CentOS
- [ -f "/etc/ssl/certs/ca-bundle.crt" ] && cacert="/etc/ssl/certs/ca-bundle.crt"
- if [ ! -z "${cacert}" ]
- then
- echo "Creating /opt/netdata/.curlrc with cacert=${cacert}"
- echo >/opt/netdata/.curlrc "cacert=${cacert}"
- else
- run_failed "Failed to find /etc/ssl/certs/ca-certificates.crt"
- fi
- fi
- fi
- # -----------------------------------------------------------------------------
- progress "Install logrotate configuration for netdata"
- install_netdata_logrotate || run_failed "Cannot install logrotate file for netdata."
- # -----------------------------------------------------------------------------
- progress "Install netdata at system init"
- install_netdata_service || run_failed "Cannot install netdata init service."
- # -----------------------------------------------------------------------------
- progress "creating quick links"
- dir_should_be_link() {
- local p="${1}" t="${2}" d="${3}" old
- old="${PWD}"
- cd "${p}" || return 0
- if [ -e "${d}" ]
- then
- if [ -h "${d}" ]
- then
- run rm "${d}"
- else
- run mv -f "${d}" "${d}.old.$$"
- fi
- fi
- run ln -s "${t}" "${d}"
- cd "${old}"
- }
- dir_should_be_link . bin sbin
- dir_should_be_link usr ../bin bin
- dir_should_be_link usr ../bin sbin
- dir_should_be_link usr . local
- dir_should_be_link . etc/netdata netdata-configs
- dir_should_be_link . usr/share/netdata/web netdata-web-files
- dir_should_be_link . usr/libexec/netdata netdata-plugins
- dir_should_be_link . var/lib/netdata netdata-dbs
- dir_should_be_link . var/cache/netdata netdata-metrics
- dir_should_be_link . var/log/netdata netdata-logs
- dir_should_be_link etc/netdata ../../usr/lib/netdata/conf.d orig
- if [ ${deleted_stock_configs} -gt 0 ]
- then
- dir_should_be_link etc/netdata ../../usr/lib/netdata/conf.d "000.-.USE.THE.orig.LINK.TO.COPY.AND.EDIT.STOCK.CONFIG.FILES"
- fi
- # -----------------------------------------------------------------------------
- progress "create user config directories"
- for x in "python.d" "charts.d" "node.d" "health.d" "statsd.d"
- do
- if [ ! -d "etc/netdata/${x}" ]
- then
- run mkdir -p "etc/netdata/${x}" || exit 1
- fi
- done
- # -----------------------------------------------------------------------------
- progress "fix permissions"
- run chmod g+rx,o+rx /opt
- run chown -R ${NETDATA_USER}:${NETDATA_GROUP} /opt/netdata
- # -----------------------------------------------------------------------------
- progress "fix plugin permissions"
- for x in apps.plugin freeipmi.plugin cgroup-network
- do
- f="usr/libexec/netdata/plugins.d/${x}"
- if [ -f "${f}" ]
- then
- run chown root:${NETDATA_GROUP} "${f}"
- run chmod 4750 "${f}"
- fi
- done
- # fix the fping binary
- if [ -f bin/fping ]
- then
- run chown root:${NETDATA_GROUP} bin/fping
- run chmod 4750 bin/fping
- fi
- # -----------------------------------------------------------------------------
- if [ ${STARTIT} -eq 0 ]; then
- create_netdata_conf "/opt/netdata/etc/netdata/netdata.conf"
- netdata_banner "is installed now!"
- else
- progress "starting netdata"
- if ! restart_netdata "/opt/netdata/bin/netdata"; then
- create_netdata_conf "/opt/netdata/etc/netdata/netdata.conf"
- netdata_banner "is installed and running now!"
- else
- create_netdata_conf "/opt/netdata/etc/netdata/netdata.conf" "http://localhost:19999/netdata.conf"
- netdata_banner "is installed now!"
- fi
- fi
- run chown "${NETDATA_USER}:${NETDATA_GROUP}" "/opt/netdata/etc/netdata/netdata.conf"
- run chmod 0664 "/opt/netdata/etc/netdata/netdata.conf"
|