master
sh 155 lines 3.26 KB
Raw
1 #!/usr/bin/env bash
2 # Package tree used for installing netdata on distribution:
3 # << Oracle Linux: [8, 9] >>
4
5 set -e
6
7 NON_INTERACTIVE=0
8 DONT_WAIT=0
9
10 declare -a package_tree=(
11 bison
12 cmake
13 curl
14 elfutils-libelf-devel
15 flex
16 gcc
17 gcc-c++
18 git
19 gzip
20 json-c-devel
21 libatomic
22 libmnl-devel
23 libuuid-devel
24 libuv-devel
25 libyaml-devel
26 lz4-devel
27 make
28 openssl-devel
29 pkgconfig
30 python3
31 systemd-devel
32 tar
33 zlib-devel
34 )
35
36 prompt() {
37 if [ "${NON_INTERACTIVE}" -eq 1 ]; then
38 echo >&2 "Running in non-interactive mode, assuming yes (y)"
39 echo >&2 " > Would have prompted for ${1} ..."
40 return 0
41 fi
42
43 while true; do
44 read -r -p "${1} [y/n] " yn
45 case $yn in
46 [Yy]*) return 0 ;;
47 [Nn]*) return 1 ;;
48 *) echo >&2 "Please answer with yes (y) or no (n)." ;;
49 esac
50 done
51 }
52
53 usage() {
54 cat << EOF
55 OPTIONS:
56 [--dont-wait] [--non-interactive] [ ]
57 EOF
58 }
59
60 check_flags() {
61 while [ -n "${1}" ]; do
62 case "${1}" in
63 dont-wait | --dont-wait | -n)
64 DONT_WAIT=1
65 ;;
66
67 non-interactive | --non-interactive | -y)
68 NON_INTERACTIVE=1
69 ;;
70
71 help | -h | --help)
72 usage
73 exit 1
74 ;;
75 *)
76 echo >&2 "ERROR: Cannot understand option '${1}'"
77 echo >&2
78 usage
79 exit 1
80 ;;
81 esac
82 shift
83 done
84
85 if [ "${DONT_WAIT}" -eq 0 ] && [ "${NON_INTERACTIVE}" -eq 0 ]; then
86 read -r -p "Press ENTER to run it > " || exit 1
87 fi
88 }
89
90 validate_tree_ol() {
91 opts=
92 if [ "${NON_INTERACTIVE}" -eq 1 ]; then
93 echo >&2 "Running in non-interactive mode"
94 opts="-y"
95 fi
96
97 # shellcheck disable=SC1091
98 source /etc/os-release
99
100 # shellcheck disable=SC2153
101 version="$(echo "${VERSION}" | cut -f 1 -d '.')"
102
103 echo >&2 " > Checking for config-manager ..."
104 if ! dnf config-manager &> /dev/null; then
105 if prompt "config-manager not found, shall I install it?"; then
106 dnf ${opts} install 'dnf-command(config-manager)'
107 fi
108 fi
109
110 echo " > Checking for CodeReady Builder ..."
111 if [[ "${version}" =~ ^8(\..*)?$ ]]; then
112 if ! dnf repolist enabled | grep ol8_codeready_builder; then
113 if prompt "CodeReadyBuilder not found, shall I install it?"; then
114 dnf ${opts} config-manager --set-enabled ol8_codeready_builder || enable_repo
115 fi
116 fi
117 elif [[ "${version}" =~ ^9(\..*)?$ ]]; then
118 if ! dnf repolist enabled | grep ol9_codeready_builder; then
119 if prompt "CodeReadyBuilder not found, shall I install it?"; then
120 dnf ${opts} config-manager --set-enabled ol9_codeready_builder || enable_repo
121 fi
122 fi
123 fi
124
125 dnf makecache --refresh
126 }
127
128 # shellcheck disable=SC2068
129 check_flags ${@}
130 validate_tree_ol
131
132 packages_to_install=
133
134 # shellcheck disable=SC2068
135 for package in ${package_tree[@]}; do
136 if rpm -q "$package" &> /dev/null; then
137 echo "Package '${package}' is installed"
138 else
139 echo "Package '$package' is NOT installed"
140 packages_to_install="$packages_to_install $package"
141 fi
142 done
143
144 if [[ -z $packages_to_install ]]; then
145 echo "All required packages are already installed. Skipping .."
146 else
147 opts=
148 if [ "${NON_INTERACTIVE}" -eq 1 ]; then
149 echo >&2 "Running in non-interactive mode"
150 opts="-y"
151 fi
152 echo "packages_to_install:" "${packages_to_install[@]}"
153 # shellcheck disable=SC2068
154 dnf install ${opts} ${packages_to_install[@]}
155 fi