detect stock versions of config files and replace them with the newer versions
Costa Tsaousis committed
Jul 14, 2016 at 18:26 UTC
ce770094cac4028ea72d0bf18ab29161e5891ee5
2 files changed
+152
-1
configs.signatures
new
+86
@@ -0,0 +1,86 @@
1
+declare -A configs_signatures=(
2
+ ['0056936ce99788ed9ae1c611c87aa6d8']='apps_groups.conf'
3
+ ['18ee1c6197a4381b1c1631ef6129824f']='apps_groups.conf'
4
+ ['2f4a85fedecce1bf425fa1039f6b021e']='apps_groups.conf'
5
+ ['3af522d65b50a5e447607ffb28c81ff5']='apps_groups.conf'
6
+ ['4a448831776de8acf2e0bdc4cc994cb4']='apps_groups.conf'
7
+ ['5bf51bb24fb41db9b1e448bd060d3f8c']='apps_groups.conf'
8
+ ['636d032928ea0f4741eab264fb49c099']='apps_groups.conf'
9
+ ['647361e99b5f4e0d73470c569bb9461c']='apps_groups.conf'
10
+ ['6a47af861ad3dd112124c37fbf09672b']='apps_groups.conf'
11
+ ['79a37756869d9b4629285922572d6b9b']='apps_groups.conf'
12
+ ['99c1617448abbdc493976ab9bda5ce02']='apps_groups.conf'
13
+ ['9c0185ceff15415bc59b2ce2c1f04367']='apps_groups.conf'
14
+ ['a0ee8f351f213c0e8af9eb7a4a09cb95']='apps_groups.conf'
15
+ ['a7cceeafb1e6ef1ead503ab65f687902']='apps_groups.conf'
16
+ ['a837986be634fd7648bcdf939019424a']='apps_groups.conf'
17
+ ['a9cd91675467c5426f5b51c47602c889']='apps_groups.conf'
18
+ ['acaa6731a272f6d251afb357e99b518f']='apps_groups.conf'
19
+ ['bb51112d01ff20053196a57632df8962']='apps_groups.conf'
20
+ ['d9258e671d0d0b6498af1ce16ef030d2']='apps_groups.conf'
21
+ ['ebd0612ccc5807524ebb2b647e3e56c9']='apps_groups.conf'
22
+ ['f2f1b8656f5011e965ac45b818cf668d']='apps_groups.conf'
23
+ ['fdea185e0e52b459b48852aa37f20e0f']='apps_groups.conf'
24
+ ['4ccb06fff1ce06dc5bc80e0a9f568f6e']='charts.d.conf'
25
+ ['4e995acb0d6fd77403a2a9dca984b55b']='charts.d.conf'
26
+ ['535e5113b07b0fc6f3abd59546c276f6']='charts.d.conf'
27
+ ['a02d14124b19c635c1426cee2e98bac5']='charts.d.conf'
28
+ ['ca026d7c779f0a7cb7787713c5be5c47']='charts.d.conf'
29
+ ['6b917300747e7e8314844237e2462261']='python.d/apache_cache.conf'
30
+ ['e0e96cc47ed61d6492416be5236cd4d3']='python.d/apache_cache.conf'
31
+ ['5278ebbae19c60db600f0a119cb3664e']='python.d/apache.conf'
32
+ ['5829812db29598db5857c9f433e96fef']='python.d/apache.conf'
33
+ ['6bf0de6e3b251b765b10a71d8c5c319d']='python.d/apache.conf'
34
+ ['38d1bf04fe9901481dd6febcc0404a86']='python.d.conf'
35
+ ['4b775fb31342f1478b3773d041a72911']='python.d.conf'
36
+ ['99a3de85d1e7826ed64a5f8576712e5d']='python.d.conf'
37
+ ['9e0553ebdc21b64295873fc104cfa79d']='python.d.conf'
38
+ ['a2944a309f8ce1a3195451856478d6ae']='python.d.conf'
39
+ ['af44cc53aa2bc5cc8935667119567522']='python.d.conf'
40
+ ['b27f10a38a95edbbec20f44a4728b7c4']='python.d.conf'
41
+ ['b32164929eda7449a9677044e11151bf']='python.d.conf'
42
+ ['b8969be5b3ceb4a99477937119bd4323']='python.d.conf'
43
+ ['d55be5bb5e108da1e7645da007c53cd4']='python.d.conf'
44
+ ['f82924563e41d99cdae5431f0af69155']='python.d.conf'
45
+ ['7830066c46a7e5f9682b8d3f4566b4e5']='python.d/cpufreq.conf'
46
+ ['b5b5a8d6d991fb1cef8d80afa23ba114']='python.d/cpufreq.conf'
47
+ ['dc0d2b96378f290eec3fcf98b89ad824']='python.d/cpufreq.conf'
48
+ ['a8bb4e1d0525f59692778ad8f675a77a']='python.d/example.conf'
49
+ ['ae5ac0a3521e50aa6f6eda2a330b4075']='python.d/example.conf'
50
+ ['e5f32f54d6d6728f21f9ac26f37d6573']='python.d/example.conf'
51
+ ['15e32114994b92be7853b88091e7c6fb']='python.d/exim.conf'
52
+ ['73125ae64d5c6e9361944cd9bd14844e']='python.d/exim.conf'
53
+ ['a94af1c808aafdf00537d85ff2197ec8']='python.d/exim.conf'
54
+ ['2a0794fd43eadf30a51805bc9ba2c64d']='python.d/hddtemp.conf'
55
+ ['731a1fcfe9b2da1b9d685056a59541b8']='python.d/hddtemp.conf'
56
+ ['d74dc63fbe631dab9a2ff1b0f5d71719']='python.d/hddtemp.conf'
57
+ ['1ea8e8ef1fa8a3a0fcdfba236f4cb195']='python.d/mysql.conf'
58
+ ['5379cdc26d7725e2b0d688d785816cef']='python.d/mysql.conf'
59
+ ['7deb236ec68a512b9bdd18e6a51d76f7']='python.d/mysql.conf'
60
+ ['88f77865f75c9fb61c97d700bd4561ee']='python.d/mysql.conf'
61
+ ['b0f0a0ac415e4b1a82187b80d211e83b']='python.d/mysql.conf'
62
+ ['df381f3a7ca9fb2b4b43ae7cb7a4c492']='python.d/mysql.conf'
63
+ ['061c45b0e34170d357e47883166ecf40']='python.d/nginx.conf'
64
+ ['21924a6ab8008d16ffac340f226ebad9']='python.d/nginx.conf'
65
+ ['c61948101e0e6846679682794ee48c5b']='python.d/nginx.conf'
66
+ ['3ca696189911fb38a0319ddd71e9a395']='python.d/phpfpm.conf'
67
+ ['8c1d41e2c88aeca78bc319ed74c8748c']='python.d/phpfpm.conf'
68
+ ['b8b87574fd496a66ede884c5336493bd']='python.d/phpfpm.conf'
69
+ ['c88fb430f35b7d8f08775d84debffbd2']='python.d/phpfpm.conf'
70
+ ['d7e0bd12d4a60a761dcab3531a841711']='python.d/phpfpm.conf'
71
+ ['142a5b693d34b0308bb0b8aec71fad79']='python.d/postfix.conf'
72
+ ['ca249db7a0637d55abb938d969f9b486']='python.d/postfix.conf'
73
+ ['39571e9fad9b759200c5d5b2ee13feb4']='python.d/redis.conf'
74
+ ['b915126262d08aa9da81de539a58a3fb']='python.d/redis.conf'
75
+ ['837480f77ba1a85677a36747fbc2cd2e']='python.d/sensors.conf'
76
+ ['cfecf298bdafaa7e0a3a263548e82132']='python.d/sensors.conf'
77
+ ['64070d856ab1b47a18ec871e49bbc13b']='python.d/squid.conf'
78
+ ['78bb08809dffcb62e9bc493840f9c039']='python.d/squid.conf'
79
+ ['78e0065738394f5bf15023f41d66ed4b']='python.d/squid.conf'
80
+ ['7d8bd884ec26cb35d16c4fc05f969799']='python.d/squid.conf'
81
+ ['91cf3b3d42cac969b8b3fd4f531ecfb3']='python.d/squid.conf'
82
+ ['ade389c1b6efe0cff47c33e662731f0a']='python.d/squid.conf'
83
+ ['e3e5bc57335c489f01b8559f5c70e112']='python.d/squid.conf'
84
+ ['0388b873d0d7e47c19005b7241db77d8']='python.d/tomcat.conf'
85
+ ['f7a99e94231beda85c6254912d8d31c1']='python.d/tomcat.conf'
86
+)
netdata-installer.sh
+66
-1
@@ -78,6 +78,48 @@ usage() {
78
USAGE
79
}
80
81
+md5sum="$(which md5sum 2>/dev/null || command -v md5sum 2>/dev/null)"
82
+get_git_config_signatures() {
83
+ local x s file md5
84
+
85
+ [ ! -d "conf.d" ] && echo >&2 "Wrong directory." && return 1
86
+ [ -z "${md5sum}" -o ! -x "${md5sum}" ] && echo >&2 "No md5sum command." && return 1
87
+
88
+ echo >configs.signatures.tmp
89
+
90
+ for x in $(find conf.d -name \*.conf)
91
+ do
92
+ x="${x/conf.d\//}"
93
+ echo "${x}"
94
+ for c in $(git log --follow "conf.d/${x}" | grep ^commit | cut -d ' ' -f 2)
95
+ do
96
+ git checkout ${c} "conf.d/${x}" || continue
97
+ s="$(cat "conf.d/${x}" | md5sum | cut -d ' ' -f 1)"
98
+ echo >>configs.signatures.tmp "${x}:${s}"
99
+ echo " ${s}"
100
+ done
101
+ git checkout HEAD "conf.d/${x}" || break
102
+ done
103
+
104
+ cat configs.signatures.tmp |\
105
+ grep -v "^$" |\
106
+ sort -u |\
107
+ {
108
+ echo "declare -A configs_signatures=("
109
+ IFS=":"
110
+ while read file md5
111
+ do
112
+ echo " ['${md5}']='${file}'"
113
+ done
114
+ echo ")"
115
+ } >configs.signatures
116
+
117
+ rm configs.signatures.tmp
118
+
119
+ return 0
120
+}
121
+
122
+
123
while [ ! -z "${1}" ]
124
do
125
if [ "$1" = "--install" ]
@@ -100,6 +142,10 @@ do
142
then
143
usage
144
exit 1
145
+ elif [ "$1" = "get_git_config_signatures" ]
146
+ then
147
+ get_git_config_signatures && exit 0
148
+ exit 1
149
else
150
echo >&2
151
echo >&2 "ERROR:"
@@ -336,13 +382,32 @@ fi
382
echo >&2 "Compiling netdata ..."
383
run make || exit 1
384
385
+declare -A configs_signatures=()
386
+if [ -f "configs.signatures" ]
387
+ then
388
+ source "configs.signatures" || echo >&2 "ERROR: Failed to load configs.signatures !"
389
+fi
390
+
391
# backup user configurations
392
installer_backup_suffix="${PID}.${RANDOM}"
393
for x in $(find "${NETDATA_PREFIX}/etc/netdata/" -name '*.conf' -type f)
394
do
395
if [ -f "${x}" ]
396
then
345
- cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
397
+ if [ -z "${md5sum}" -o ! -x "${md5sum}" ]
398
+ then
399
+ cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
400
+ else
401
+ f="${x/*\/etc\/netdata\//}"
402
+ md5="$(cat "${x}" | ${md5sum} | cut -d ' ' -f 1)"
403
+ if [ "${configs_signatures[${md5}]}" = "${f}" ]
404
+ then
405
+ echo >&2 "File '${x}' is stock version."
406
+ else
407
+ echo >&2 "File '${x}' has been edited by user."
408
+ cp -p "${x}" "${x}.installer_backup.${installer_backup_suffix}"
409
+ fi
410
+ fi
411
412
elif [ -f "${x}.installer_backup.${installer_backup_suffix}" ]
413
then