-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.sh
executable file
·344 lines (321 loc) · 9.77 KB
/
install.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
#!/usr/bin/env bash
#===============================================================================
#
# FILE: install.sh
# USAGE: install.sh
# DESCRIPTION: Installation script for snob utility.
#
# OPTIONS: ---
# REQUIREMENTS:
#
# BUGS: ---
# NOTES: #
# AUTHOR: Lewis E. Bogan
# COMPANY: Earthsea@Home
# CREATED: 2019-05-03 09:39
# COPYRIGHT: (C) 2021 Lewis E. Bogan <[email protected]>
# Distributed under terms of the MIT license.
#===============================================================================
# Global vars
install_dir=/usr/local/bin
mandir=/usr/local/share/man
data_dir=$HOME/.snob
name=snob
# Color constants using tput
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
normal=$(tput sgr0)
# Source operating system information as environment variables
if [ -f /etc/os-release ]; then
source /etc/os-release
OS=$PRETTY_NAME
SYSID=$ID
fi
#===============================================================================
# Waits for any key to be pressed, no echo, one character.
# Locals:
# None
# Arguments:
# None
#===============================================================================
pause() {
read -srn1 -p "Press any key to continue"
}
#===============================================================================
# Displays a menu of installation options.
# Locals:
# choice
# Arguments:
# None
#===============================================================================
show_menu() {
local choice
clear
echo "--------------------------------------------------"
echo "Installation script for snob utility"
echo "--------------------------------------------------"
echo "a. Install supplied binary (Ubuntu only)"
echo "b. Update supplied binary from repo (Ubuntu only)"
echo "c. Build/install from source (except RaspberryPi)"
echo "d. Update from git source (except RaspberryPi)"
echo "e. Install binary for RaspberryPi 4 (armv7l)"
echo "f. Install binary for RaspberryPi 3 (armv6k)"
echo "g. Install binary for RedHat-based distros"
echo "h. Install binary for Debian-based distros"
echo "i. Install binary for RaspberryPi (aarch64)"
echo "j. Uninstall all (except data files)"
echo "q. Quit"
echo
read -r -p "Enter choice [Q/q to quit]: " choice
case $choice in
"a") install_binary ;;
"b") update_binary ;;
"c") build_source ;;
"d") update_source ;;
"e") build_raspi4 ;;
"f") build_raspi3 ;;
"g") build_redhat ;;
"h") build_debian ;;
"i") build_aarch64 ;;
"j") uninstall_all ;;
"q" | "Q") exit 0 ;;
esac
}
#===============================================================================
# Installs a symbolic soft link to ${install_dir} and man files.
# Locals:
# None
# Arguments:
# None
#===============================================================================
install_binary() {
if [ -f ${install_dir}/${name} ]; then
cat <<WARNING
${red}Warning: ${normal}${install_dir}/${name} already exists!
Try uninstall option first and reinstall binary, or
try 'update binary' or 'build from source' instead!
WARNING
exit 1
else
sudo ln -s "$(realpath ./bin/snob) ${install_dir}/snob"
sudo install -m 0755 -d ${mandir}/man1
sudo install -m 0755 -d ${mandir}/man5
sudo install -m 0644 man/${name}.1 ${mandir}/man1
sudo install -m 0644 man/${name}rc.yml.5 ${mandir}/man5
install_snmp
finish_msg
fi
}
#===============================================================================
# Pulls a fresh copy from repo server for use with the symbolic soft link.
# Locals:
# None
# Arguments:
# None
#===============================================================================
update_binary() {
git pull
echo "${yellow}${name} binary upgraded.${normal}"
exit 0
}
#===============================================================================
# Compiles and installs binary and docs using Crystal compiler.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_source() {
shards install
make clean
make
sudo make install
install_snmp
finish_msg
}
#===============================================================================
# Recompiles and installs binary and docs using Crystal compiler.
# Locals:
# None
# Arguments:
# None
#===============================================================================
update_source() {
git pull
shards update
make clean
make
sudo make install
echo "${yellow}${name} updated from source.${normal}"
}
#===============================================================================
# Generic function to install a list of snmp utilities with no noise.
# Locals:
# None
# Arguments:
# None
#===============================================================================
install_snmp() {
case $SYSID in
ubuntu | raspbian | debian)
sudo apt update -y
sudo apt-get install -y snmp snmp-mibs-downloader >/dev/null 2>&1
if grep '^mibs :' /etc/snmp/snmp.conf; then
sudo sed -i -e "s/mibs :/#mibs :/" /etc/snmp/snmp.conf
fi
;;
centos | rocky | almalinux)
sudo dnf install -y snmp snmp-mibs-downloader >/dev/null 2>&1
;;
*)
echo "${green}I'm on $OS - no install available${normal}!"
;;
esac
}
#===============================================================================
# Installs libraries for Debian-based OS's
# Locals:
# None
# Arguments:
# $@
#===============================================================================
install_deb_libs() {
sudo apt-get install -y "$@" >/dev/null 2>&1
}
#===============================================================================
# Installs libraries for Redhat-based OS's
# Locals:
# None
# Arguments:
# $@
#===============================================================================
install_rpm_libs() {
sudo dnf config-manager --set-enabled powertools
sudo dnf install -y "$@" >/dev/null 2>&1
}
#===============================================================================
# Builds binary for RaspberryPi Model 4 running Raspbian (armv7l) by linking the
# cross-compiled object file.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_raspi4() {
git stash
git pull
make clean
install_snmp
install_deb_libs gcc make libssl-dev libpcre3-dev libevent-dev libgc-dev libyaml-dev libreadline-dev
bash scripts/rpibuild4.sh
sudo make install
finish_msg
}
#===============================================================================
# Builds binary for RaspberryPi Model 4 running Ubuntu (armv7l) by linking the
# cross-compiled object file.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_aarch64() {
git stash
git pull
make clean
install_snmp
install_deb_libs gcc make libssl-dev libpcre3-dev libevent-dev libgc-dev libyaml-dev libreadline-dev
bash scripts/rpibuild64.sh
sudo make install
finish_msg
}
#===============================================================================
# Builds binary for RaspberryPi Model 3 running Raspbian (armv6k) by linking the
# cross-compiled object file.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_raspi3() {
git stash
git pull
make clean
install_snmp
install_deb_libs gcc make libssl-dev libpcre3-dev libevent-dev libgc-dev libyaml-dev libreadline-dev
bash scripts/rpibuild3.sh
sudo make install
finish_msg
}
#===============================================================================
# Builds binary for Rpm-based OS's by linking the cross-compiled object file.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_redhat() {
git stash
git pull
make clean
install_snmp
install_rpm_libs gcc make readline-devel pcre-devel gc-devel libevent-devel
bash scripts/redhatbuild.sh
sudo make install
finish_msg
}
#===============================================================================
# Builds binary for Debian-based OS's by linking the cross-compiled object file.
# Locals:
# None
# Arguments:
# None
#===============================================================================
build_debian() {
git stash
git pull
make clean
install_snmp
install_deb_libs gcc make libssl-dev libpcre3-dev libevent-dev libgc-dev libyaml-dev libreadline-dev
bash scripts/debianbuild.sh
sudo make install
finish_msg
}
#===============================================================================
# Removes binary, links, and docs.
# Locals:
# None
# Arguments:
# None
#===============================================================================
uninstall_all() {
make clean
sudo make uninstall
cat <<UNINSTALL
${yellow}The config directory ${data_dir} was not deleted.
Do that manually if you wish to totally remove the snob
application.${normal}
UNINSTALL
}
#===============================================================================
# Displays post installation info on application.
# Locals:
# None
# Arguments:
# None
#===============================================================================
finish_msg() {
cat <<FINISH
--------------------------------------------------------------------------
Application, ${name}, has been installed. First run will generate a config
file. Make sure net-snmp is installed and functional. ${red}Use over the public
internet is NOT recommended!${normal}
${green}See ${name} --help for further info as needed.
See also the man files ${name}.1 and ${name}rc.yml.5.${normal}.
Breaking changes are listed in the CHANGELOG.md. Follow any instructions
included.
--------------------------------------------------------------------------
FINISH
}
show_menu