protected configuration on updates; use supplied commands by default
Costa Tsaousis (ktsaou) committed
Apr 1, 2017 at 19:05 UTC
f3cce1e472a4204d5bc99eb9eeabba1d8d85bb0a
6 files changed
+145
-37
makeself/functions.sh
+11
@@ -11,8 +11,19 @@
11
[ -z "${PROCESSORS}" -o $((PROCESSORS)) -lt 1 ] && export PROCESSORS=1
12
export NULL=
13
14
+# make sure the path does not end with /
15
+if [ "${NETDATA_INSTALL_PATH:$(( ${#NETDATA_INSTALL_PATH} - 1)):1}" = "/" ]
16
+ then
17
+ export NETDATA_INSTALL_PATH="${NETDATA_INSTALL_PATH:0:$(( ${#NETDATA_INSTALL_PATH} - 1))}"
18
+fi
19
+
20
+# find the parent directory
21
+export NETDATA_INSTALL_PARENT="$(dirname "${NETDATA_INSTALL_PATH}")"
22
+
23
+
24
# debug
25
echo "ME=${0}"
26
+echo "NETDATA_INSTALL_PARENT=${NETDATA_INSTALL_PARENT}"
27
echo "NETDATA_INSTALL_PATH=${NETDATA_INSTALL_PATH}"
28
echo "NETDATA_MAKESELF_PATH=${NETDATA_MAKESELF_PATH}"
29
echo "NETDATA_SOURCE_PATH=${NETDATA_SOURCE_PATH}"
makeself/install-or-update.sh
+60
-7
@@ -2,6 +2,49 @@
2
3
. $(dirname "${0}")/functions.sh
4
5
+# -----------------------------------------------------------------------------
6
+progress "Checking new configuration files"
7
+
8
+declare -A configs_signatures=()
9
+. system/configs.signatures
10
+
11
+if [ ! -d etc/netdata ]
12
+ then
13
+ mkdir -p etc/netdata
14
+fi
15
+
16
+for x in $(find etc/netdata.new -name '*.conf' -type f)
17
+do
18
+ # find it relative filename
19
+ f="${x/*etc\/netdata.new\//}"
20
+ t="${x/*etc\/netdata.new\/etc\/netdata/}"
21
+ d=$(dirname "${d}")
22
+
23
+ if [ ! -d "${d}" ]
24
+ then
25
+ run mkdir -p "${d}"
26
+ fi
27
+
28
+ if [ ! -f "${t}" ]
29
+ then
30
+ run cp "${x}" "${t}"
31
+ continue
32
+ fi
33
+
34
+ # find the checksum of the existing file
35
+ md5="$(cat "${t}" | ${md5sum} | cut -d ' ' -f 1)"
36
+
37
+ # check if it matches
38
+ if [ "${configs_signatures[${md5}]}" = "${f}" ]
39
+ then
40
+ run cp "${x}" "${t}"
41
+ else
42
+ run cp "${x}" "${t}.orig"
43
+ fi
44
+done
45
+
46
+
47
+# -----------------------------------------------------------------------------
48
progress "Add user netdata to required user groups"
49
50
NETDATA_ADDED_TO_DOCKER=0
@@ -25,28 +68,38 @@ else
68
run_failed "The installer does not run as root."
69
fi
70
71
+
72
# -----------------------------------------------------------------------------
73
progress "Install logrotate configuration for netdata"
74
75
if [ ${UID} -eq 0 ]
76
then
33
- if [ -d /etc/logrotate.d -a ! -f /etc/logrotate.d/netdata ]
77
+ if [ -d /etc/logrotate.d ]
78
then
35
- run cp system/netdata.logrotate /etc/logrotate.d/netdata
36
- fi
79
+ if [ ! -f /etc/logrotate.d/netdata ]
80
+ then
81
+ run cp system/netdata.logrotate /etc/logrotate.d/netdata
82
+ fi
83
38
- if [ -f /etc/logrotate.d/netdata ]
39
- then
40
- run chmod 644 /etc/logrotate.d/netdata
84
+ if [ -f /etc/logrotate.d/netdata ]
85
+ then
86
+ run chmod 644 /etc/logrotate.d/netdata
87
+ fi
88
+ else
89
+ run_failed "logrotate dir /etc/logrotate.d is not available."
90
fi
91
+else
92
+ run_failed "The installer does not run as root."
93
fi
94
95
+
96
# -----------------------------------------------------------------------------
97
progress "Install netdata at system init"
98
99
if [ "${UID}" -eq 0 ]
100
then
101
install_netdata_service
102
+else
103
+ run_failed "The installer does not run as root."
104
fi
105
52
-
makeself/jobs/70-netdata-git.install.sh
+5
-16
@@ -2,23 +2,12 @@
2
3
. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
5
-cd .. || exit 1
5
+cd "${NETDATA_SOURCE_PATH}" || exit 1
6
7
export CFLAGS="-O3 -static"
8
-run ./netdata-installer.sh --install /opt --dont-wait --dont-start-it
8
10
-mkdir -p "${NETDATA_INSTALL_PATH}/system"
9
+run ./netdata-installer.sh --install "${NETDATA_INSTALL_PARENT}" \
10
+ --dont-wait \
11
+ --dont-start-it \
12
+ ${NULL}
13
12
-cp \
13
- system/netdata-init-d \
14
- system/netdata-lsb \
15
- system/netdata-openrc \
16
- system/netdata.logrotate \
17
- system/netdata.service \
18
- "${NETDATA_INSTALL_PATH}/system/"
19
-
20
-cp \
21
- makeself/post-installer.sh \
22
- makeself/install-or-update.sh \
23
- installer/functions.sh \
24
- "${NETDATA_INSTALL_PATH}/system/"
makeself/jobs/80-netdata-links.install.sh
deleted
-13
@@ -1,13 +0,0 @@
1
-#!/usr/bin/env bash
2
-
3
-. ${NETDATA_MAKESELF_PATH}/functions.sh "${@}" || exit 1
4
-
5
-run cd "${NETDATA_INSTALL_PATH}"
6
-run ln -s etc/netdata netdata-configs
7
-run ln -s usr/share/netdata/web netdata-web-files
8
-run ln -s usr/libexec/netdata netdata-plugins
9
-run ln -s var/lib/netdata netdata-dbs
10
-run ln -s var/cache/netdata netdata-metrics
11
-run ln -s var/log/netdata netdata-logs
12
-
13
-
makeself/jobs/99-makeself.install.sh
+62
-1
@@ -3,6 +3,68 @@
3
. $(dirname "${0}")/../functions.sh "${@}" || exit 1
4
5
6
+# -----------------------------------------------------------------------------
7
+# create a few quick links
8
+
9
+run cd "${NETDATA_INSTALL_PATH}"
10
+run ln -s etc/netdata netdata-configs
11
+run ln -s usr/share/netdata/web netdata-web-files
12
+run ln -s usr/libexec/netdata netdata-plugins
13
+run ln -s var/lib/netdata netdata-dbs
14
+run ln -s var/cache/netdata netdata-metrics
15
+run ln -s var/log/netdata netdata-logs
16
+
17
+
18
+# -----------------------------------------------------------------------------
19
+# copy the files needed by makeself installation
20
+
21
+run mkdir -p "${NETDATA_INSTALL_PATH}/system"
22
+run cd "${NETDATA_SOURCE_PATH}" || exit 1
23
+
24
+cp \
25
+ makeself/post-installer.sh \
26
+ makeself/install-or-update.sh \
27
+ installer/functions.sh \
28
+ configs.signatures \
29
+ system/netdata-init-d \
30
+ system/netdata-lsb \
31
+ system/netdata-openrc \
32
+ system/netdata.logrotate \
33
+ system/netdata.service \
34
+ "${NETDATA_INSTALL_PATH}/system/"
35
+
36
+
37
+# -----------------------------------------------------------------------------
38
+# create a wrapper to start our netdata with a modified path
39
+
40
+mv "${NETDATA_INSTALL_PATH}/bin/netdata" \
41
+ "${NETDATA_INSTALL_PATH}/bin/netdata.bin" || exit 1
42
+
43
+cat >"${NETDATA_INSTALL_PATH}/bin/netdata" <<EOF
44
+#!${NETDATA_INSTALL_PATH}/bin/bash
45
+export PATH="${NETDATA_INSTALL_PATH}/bin:${PATH}"
46
+exec "${NETDATA_INSTALL_PATH}/bin/netdata.bin" "${@}"
47
+EOF
48
+chmod 755 "${NETDATA_INSTALL_PATH}/bin/netdata"
49
+
50
+
51
+# -----------------------------------------------------------------------------
52
+# move etc to protect the destination when unpacked
53
+
54
+if [ -d "${NETDATA_INSTALL_PATH}/etc/netdata" ]
55
+ then
56
+ if [ -d "${NETDATA_INSTALL_PATH}/etc/netdata.new" ]
57
+ then
58
+ rm -rf "${NETDATA_INSTALL_PATH}/etc/netdata.new" || exit 1
59
+ fi
60
+
61
+ mv "${NETDATA_INSTALL_PATH}/etc/netdata" \
62
+ "${NETDATA_INSTALL_PATH}/etc/netdata.new" || exit 1
63
+fi
64
+
65
+
66
+# -----------------------------------------------------------------------------
67
+# create the makeself archive
68
69
"${NETDATA_MAKESELF_PATH}/makeself.sh" \
70
--gzip \
@@ -17,4 +79,3 @@
79
./system/post-installer.sh \
80
${NULL}
81
20
-
makeself/post-installer.sh
+7
@@ -1,3 +1,10 @@
1
#!/bin/sh
2
3
+# This script is started using the shell of the system
4
+# and executes our 'install-or-update.sh' script
5
+# using the netdata supplied, statically linked BASH
6
+#
7
+# so, at 'install-or-update.sh' we are always sure
8
+# we run under BASH v4.
9
+
10
./bin/bash system/install-or-update.sh "${@}"