Browse Source

start netdata on install too

Costa Tsaousis (ktsaou) 8 years ago
parent
commit
e9a3df888c
4 changed files with 205 additions and 196 deletions
  1. 168 11
      installer/functions.sh
  2. 19 49
      makeself/install-or-update.sh
  3. 4 4
      makeself/jobs/99-makeself.install.sh
  4. 14 132
      netdata-installer.sh

+ 168 - 11
installer/functions.sh

@@ -399,24 +399,181 @@ install_non_systemd_init() {
 }
 
 install_netdata_service() {
-    if issystemd
+    if [ "${UID}" -eq 0 ]
     then
-        # systemd is running on this system
-        if [ ! -f /etc/systemd/system/netdata.service ]
+        if issystemd
         then
-            echo >&2 "Installing systemd service..."
-            run cp system/netdata.service /etc/systemd/system/netdata.service && \
-                run systemctl daemon-reload && \
-                run systemctl enable netdata && \
+            # systemd is running on this system
+            if [ ! -f /etc/systemd/system/netdata.service ]
+            then
+                echo >&2 "Installing systemd service..."
+                run cp system/netdata.service /etc/systemd/system/netdata.service && \
+                    run systemctl daemon-reload && \
+                    run systemctl enable netdata && \
+                    return 0
+            else
+                echo >&2 "file '/etc/systemd/system/netdata.service' already exists."
                 return 0
+            fi
         else
-            echo >&2 "file '/etc/systemd/system/netdata.service' already exists."
-            return 0
+            install_non_systemd_init
+            return $?
         fi
-    else
-        install_non_systemd_init
+    fi
+
+    return 1
+}
+
+
+# -----------------------------------------------------------------------------
+# stop netdata
+
+pidisnetdata() {
+    if [ -d /proc/self ]
+    then
+        [ -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
+    fi
+    return 0
+}
+
+stop_netdata_on_pid() {
+    local pid="${1}" ret=0 count=0
+
+    pidisnetdata ${pid} || return 0
+
+    printf >&2 "Stopping netdata on pid ${pid} ..."
+    while [ ! -z "$pid" -a ${ret} -eq 0 ]
+    do
+        if [ ${count} -gt 45 ]
+            then
+            echo >&2 "Cannot stop the running netdata on pid ${pid}."
+            return 1
+        fi
+
+        count=$(( count + 1 ))
+
+        run kill ${pid} 2>/dev/null
+        ret=$?
+
+        test ${ret} -eq 0 && printf >&2 "." && sleep 2
+    done
+
+    echo >&2
+    if [ ${ret} -eq 0 ]
+    then
+        echo >&2 "SORRY! CANNOT STOP netdata ON PID ${pid} !"
+        return 1
+    fi
+
+    echo >&2 "netdata on pid ${pid} stopped."
+    return 0
+}
+
+stop_all_netdata() {
+    local p myns ns
+
+    myns="$(readlink /proc/self/ns/pid 2>/dev/null)"
+
+    # echo >&2 "Stopping a (possibly) running netdata (namespace '${myns}')..."
+
+    for p in \
+        $(cat /var/run/netdata.pid 2>/dev/null) \
+        $(cat /var/run/netdata/netdata.pid 2>/dev/null) \
+        $(pidof netdata 2>/dev/null)
+    do
+        ns="$(readlink /proc/${p}/ns/pid 2>/dev/null)"
+
+        if [ -z "${myns}" -o -z "${ns}" -o "${myns}" = "${ns}" ]
+            then
+            stop_netdata_on_pid ${p}
+        fi
+    done
+}
+
+# -----------------------------------------------------------------------------
+# restart netdata
+
+restart_netdata() {
+    local netdata="${1}"
+    shift
+
+    local started=0
+
+    progress "Start netdata"
+
+    if [ "${UID}" -eq 0 ]
+        then
+        service netdata stop
+        stop_all_netdata
+        service netdata restart && started=1
+
+        if [ ${started} -eq 0 ]
+        then
+            service netdata start && started=1
+        fi
+    fi
+
+    if [ ${started} -eq 0 ]
+    then
+        # still not started...
+
+        stop_all_netdata
+        run "${netdata}" "${@}"
         return $?
     fi
 
+    return 0
+}
+
+# -----------------------------------------------------------------------------
+# install netdata logrotate
+
+install_netdata_logrotate() {
+    if [ ${UID} -eq 0 ]
+        then
+        if [ -d /etc/logrotate.d ]
+            then
+            if [ ! -f /etc/logrotate.d/netdata ]
+                then
+                run cp system/netdata.logrotate /etc/logrotate.d/netdata
+            fi
+            
+            if [ -f /etc/logrotate.d/netdata ]
+                then
+                run chmod 644 /etc/logrotate.d/netdata
+            fi
+
+            return 0
+        fi
+    fi
+    
+    return 1
+}
+
+# -----------------------------------------------------------------------------
+# add netdata user and group
+
+NETDATA_ADDED_TO_DOCKER=0
+NETDATA_ADDED_TO_NGINX=0
+NETDATA_ADDED_TO_VARNISH=0
+NETDATA_ADDED_TO_HAPROXY=0
+NETDATA_ADDED_TO_ADM=0
+NETDATA_ADDED_TO_NSD=0
+add_netdata_user_and_group() {
+    if [ ${UID} -eq 0 ]
+        then
+        portable_add_group netdata || return 1
+        portable_add_user netdata || return 1
+        portable_add_user_to_group docker   netdata && NETDATA_ADDED_TO_DOCKER=1
+        portable_add_user_to_group nginx    netdata && NETDATA_ADDED_TO_NGINX=1
+        portable_add_user_to_group varnish  netdata && NETDATA_ADDED_TO_VARNISH=1
+        portable_add_user_to_group haproxy  netdata && NETDATA_ADDED_TO_HAPROXY=1
+        portable_add_user_to_group adm      netdata && NETDATA_ADDED_TO_ADM=1
+        portable_add_user_to_group nsd      netdata && NETDATA_ADDED_TO_NSD=1
+        return 0
+    fi
+
     return 1
 }

+ 19 - 49
makeself/install-or-update.sh

@@ -2,6 +2,13 @@
 
 . $(dirname "${0}")/functions.sh
 
+export LC_ALL=C
+umask 002
+
+# Be nice on production environments
+renice 19 $$ >/dev/null 2>/dev/null
+
+
 # -----------------------------------------------------------------------------
 progress "Checking new configuration files"
 
@@ -53,63 +60,19 @@ run rm -rf etc/netdata.new
 # -----------------------------------------------------------------------------
 progress "Add user netdata to required user groups"
 
-NETDATA_USER=root
-NETDATA_GROUP=root
-NETDATA_ADDED_TO_DOCKER=0
-NETDATA_ADDED_TO_NGINX=0
-NETDATA_ADDED_TO_VARNISH=0
-NETDATA_ADDED_TO_HAPROXY=0
-NETDATA_ADDED_TO_ADM=0
-NETDATA_ADDED_TO_NSD=0
-if [ ${UID} -eq 0 ]
-    then
-    portable_add_group netdata && NETDATA_USER=netdata
-    portable_add_user  netdata && NETDATA_GROUP=netdata
-    portable_add_user_to_group docker   netdata && NETDATA_ADDED_TO_DOCKER=1
-    portable_add_user_to_group nginx    netdata && NETDATA_ADDED_TO_NGINX=1
-    portable_add_user_to_group varnish  netdata && NETDATA_ADDED_TO_VARNISH=1
-    portable_add_user_to_group haproxy  netdata && NETDATA_ADDED_TO_HAPROXY=1
-    portable_add_user_to_group adm      netdata && NETDATA_ADDED_TO_ADM=1
-    portable_add_user_to_group nsd      netdata && NETDATA_ADDED_TO_NSD=1
-    run_ok
-else
-    run_failed "The installer does not run as root."
-fi
+add_netdata_user_and_group || run_failed "The installer does not run as root."
 
 
 # -----------------------------------------------------------------------------
 progress "Install logrotate configuration for netdata"
 
-if [ ${UID} -eq 0 ]
-    then
-    if [ -d /etc/logrotate.d ]
-        then
-        if [ ! -f /etc/logrotate.d/netdata ]
-            then
-            run cp system/netdata.logrotate /etc/logrotate.d/netdata
-        fi
-
-        if [ -f /etc/logrotate.d/netdata ]
-            then
-            run chmod 644 /etc/logrotate.d/netdata
-        fi
-    else
-       run_failed "logrotate dir /etc/logrotate.d is not available."
-    fi
-else
-    run_failed "The installer does not run as root."
-fi
+install_netdata_logrotate || run_failed "Cannot install logrotate file for netdata."
 
 
 # -----------------------------------------------------------------------------
 progress "Install netdata at system init"
 
-if [ "${UID}" -eq 0 ]
-    then
-    install_netdata_service
-else
-    run_failed "The installer does not run as root."
-fi
+install_netdata_service || run_failed "Cannot install netdata init service."
 
 
 # -----------------------------------------------------------------------------
@@ -152,7 +115,6 @@ dir_should_be_link . var/log/netdata       netdata-logs
 progress "fix permissions"
 
 run chmod g+rx,o+rx /opt
-run chmod g+rx,o+rx /opt/netdata
 run chown -R ${NETDATA_USER}:${NETDATA_GROUP} /opt/netdata
 
 
@@ -172,4 +134,12 @@ done
 
 
 # -----------------------------------------------------------------------------
-netdata_banner "is installed now!"
+progress "starting netdata"
+
+restart_netdata
+if [ $? -eq 0 ]
+    then
+    netdata_banner "is installed and running now!"
+else
+    netdata_banner "is installed now!"
+fi

+ 4 - 4
makeself/jobs/99-makeself.install.sh

@@ -25,13 +25,15 @@ cp \
 # -----------------------------------------------------------------------------
 # create a wrapper to start our netdata with a modified path
 
+mkdir -p "${NETDATA_INSTALL_PATH}/bin/srv"
+
 mv "${NETDATA_INSTALL_PATH}/bin/netdata" \
-    "${NETDATA_INSTALL_PATH}/bin/netdata.bin" || exit 1
+    "${NETDATA_INSTALL_PATH}/bin/srv/netdata" || exit 1
 
 cat >"${NETDATA_INSTALL_PATH}/bin/netdata" <<EOF
 #!${NETDATA_INSTALL_PATH}/bin/bash
 export PATH="${NETDATA_INSTALL_PATH}/bin:\${PATH}"
-exec "${NETDATA_INSTALL_PATH}/bin/netdata.bin" "\${@}"
+exec "${NETDATA_INSTALL_PATH}/bin/srv/netdata" "\${@}"
 EOF
 chmod 755 "${NETDATA_INSTALL_PATH}/bin/netdata"
 
@@ -69,8 +71,6 @@ rm "${NETDATA_INSTALL_PATH}/sbin" \
     --notemp \
     --needroot \
     --target "${NETDATA_INSTALL_PATH}" \
-    --tar-extra "--overwrite" \
-    --keep-umask \
     --header "${NETDATA_MAKESELF_PATH}/makeself-header.sh" \
     --lsm "${NETDATA_MAKESELF_PATH}/makeself.lsm" \
     --license "${NETDATA_MAKESELF_PATH}/makeself-license.txt" \

+ 14 - 132
netdata-installer.sh

@@ -43,7 +43,7 @@ then
         export ACLOCAL_PATH
 fi
 
-LC_ALL=C
+export LC_ALL=C
 umask 002
 
 # Be nice on production environments
@@ -612,42 +612,13 @@ run find ./system/ -type f -a \! -name \*.in -a \! -name Makefile\* -a \! -name
 # -----------------------------------------------------------------------------
 progress "Add user netdata to required user groups"
 
-NETDATA_ADDED_TO_DOCKER=0
-NETDATA_ADDED_TO_NGINX=0
-NETDATA_ADDED_TO_VARNISH=0
-NETDATA_ADDED_TO_HAPROXY=0
-NETDATA_ADDED_TO_ADM=0
-NETDATA_ADDED_TO_NSD=0
-if [ ${UID} -eq 0 ]
-    then
-    portable_add_group netdata
-    portable_add_user netdata
-    portable_add_user_to_group docker   netdata && NETDATA_ADDED_TO_DOCKER=1
-    portable_add_user_to_group nginx    netdata && NETDATA_ADDED_TO_NGINX=1
-    portable_add_user_to_group varnish  netdata && NETDATA_ADDED_TO_VARNISH=1
-    portable_add_user_to_group haproxy  netdata && NETDATA_ADDED_TO_HAPROXY=1
-    portable_add_user_to_group adm      netdata && NETDATA_ADDED_TO_ADM=1
-    portable_add_user_to_group nsd      netdata && NETDATA_ADDED_TO_NSD=1
-    run_ok
-else
-    run_failed "The installer does not run as root."
-fi
+add_netdata_user_and_group || run_failed "The installer does not run as root."
+
 
 # -----------------------------------------------------------------------------
 progress "Install logrotate configuration for netdata"
 
-if [ ${UID} -eq 0 ]
-    then
-    if [ -d /etc/logrotate.d -a ! -f /etc/logrotate.d/netdata ]
-        then
-        run cp system/netdata.logrotate /etc/logrotate.d/netdata
-    fi
-    
-    if [ -f /etc/logrotate.d/netdata ]
-        then
-        run chmod 644 /etc/logrotate.d/netdata
-    fi
-fi
+install_netdata_logrotate
 
 
 # -----------------------------------------------------------------------------
@@ -824,81 +795,13 @@ fi
 # -----------------------------------------------------------------------------
 progress "Install netdata at system init"
 
-if [ "${UID}" -eq 0 ]
-    then
-    install_netdata_service
-fi
+install_netdata_service || run_failed "Cannot install netdata init service."
 
 
 # -----------------------------------------------------------------------------
 # check if we can re-start netdata
 
 started=0
-
-isnetdata() {
-    if [ -d /proc/self ]
-    then
-        [ -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
-    fi
-    return 0
-}
-
-stop_netdata_on_pid() {
-    local pid="${1}" ret=0 count=0
-
-    isnetdata ${pid} || return 0
-
-    printf >&2 "Stopping netdata on pid ${pid} ..."
-    while [ ! -z "$pid" -a ${ret} -eq 0 ]
-    do
-        if [ ${count} -gt 45 ]
-            then
-            echo >&2 "Cannot stop the running netdata on pid ${pid}."
-            return 1
-        fi
-
-        count=$(( count + 1 ))
-
-        run kill ${pid} 2>/dev/null
-        ret=$?
-
-        test ${ret} -eq 0 && printf >&2 "." && sleep 2
-    done
-
-    echo >&2
-    if [ ${ret} -eq 0 ]
-    then
-        echo >&2 "SORRY! CANNOT STOP netdata ON PID ${pid} !"
-        return 1
-    fi
-
-    echo >&2 "netdata on pid ${pid} stopped."
-    return 0
-}
-
-stop_all_netdata() {
-    local p myns ns
-
-    myns="$(readlink /proc/self/ns/pid 2>/dev/null)"
-
-    # echo >&2 "Stopping a (possibly) running netdata (namespace '${myns}')..."
-
-    for p in $(cat "${NETDATA_RUN_DIR}/netdata.pid" 2>/dev/null) \
-        $(cat /var/run/netdata.pid 2>/dev/null) \
-        $(cat /var/run/netdata/netdata.pid 2>/dev/null) \
-        $(pidof netdata 2>/dev/null)
-    do
-        ns="$(readlink /proc/${p}/ns/pid 2>/dev/null)"
-
-        if [ -z "${myns}" -o -z "${ns}" -o "${myns}" = "${ns}" ]
-            then
-            stop_netdata_on_pid ${p}
-        fi
-    done
-}
-
 if [ ${DONOTSTART} -eq 1 ]
     then
     if [ ! -s "${NETDATA_PREFIX}/etc/netdata/netdata.conf" ]
@@ -913,40 +816,19 @@ if [ ${DONOTSTART} -eq 1 ]
     fi
 
 else
-
-    progress "Start netdata"
-
-    if [ "${UID}" -eq 0 ]
-        then
-        service netdata stop
-        stop_all_netdata
-        service netdata restart && started=1
-        if [ ${started} -eq 0 ]
+    restart_netdata ${NETDATA_PREFIX}/usr/sbin/netdata "${@}"
+    if [ $? -ne 0 ]
         then
-            service netdata start && started=1
-        fi
-    fi
-
-    if [ ${started} -eq 0 ]
-    then
-        # still not started...
-
-        stop_all_netdata
-
-        echo >&2 "Starting netdata..."
-        run ${NETDATA_PREFIX}/usr/sbin/netdata -P ${NETDATA_RUN_DIR}/netdata.pid "${@}"
-        if [ $? -ne 0 ]
-            then
-            echo >&2
-            echo >&2 "SORRY! FAILED TO START NETDATA!"
-            exit 1
-        else
-            echo >&2 "OK. NetData Started!"
-        fi
-
         echo >&2
+        echo >&2 "SORRY! FAILED TO START NETDATA!"
+        echo >&2
+        exit 1
     fi
 
+    started=1
+    echo >&2 "OK. NetData Started!"
+    echo >&2
+
     # -----------------------------------------------------------------------------
     # save a config file, if it is not already there