@cryptotaxi247 / netdata-1 / commits / 2710a3134

Fix (and improve) Coverity scanning. (#16605)

* Split feature detection code to functions. This lets us reuse it in places like the coverity scan script. * Add ninja to the coverity build environment. * Restructure coverity scan script to use cmake. * Fix incorrect function name. * Add extra plugin deps for coverity scan environment. * Fix new issues introduced in coverity script. * Fix things broken by previous fix. * Fix Docker image builds. * Assorted fixes. * Correctly handle common case of set but empty prefix.

Austin S. Hemmelgarn committed Jan 8, 2024 at 08:40 UTC 2710a3134d33aa02d14fd08d0446b187e5527662
5 files changed +127 -131
.github/workflows/coverity.yml
+2 -1
@@ -33,7 +33,8 @@ jobs:
33 sudo apt-get install -y libjson-c-dev libyaml-dev libipmimonitoring-dev \
34 libcups2-dev libsnappy-dev libprotobuf-dev \
35 libprotoc-dev libssl-dev protobuf-compiler \
36 - libnetfilter-acct-dev
36 + libnetfilter-acct-dev libmongoc-dev libxen-dev \
37 + libsystemd-dev ninja-build
38 - name: Run coverity-scan
39 id: run
40 env:
coverity-scan.sh
+17 -23
@@ -42,11 +42,19 @@ INSTALL_DIR="/opt"
42 # the version of coverity to use
43 COVERITY_BUILD_VERSION="${COVERITY_BUILD_VERSION:-cov-analysis-linux64-2023.6.2}"
44
45 -# TODO: For some reasons this does not fully load on Debian 10 (Haven't checked if it happens on other distros yet), it breaks
46 -source packaging/installer/functions.sh || echo "Failed to fully load the functions library"
45 +. packaging/installer/functions.sh
46
48 -cpus=$(find_processors)
49 -[ -z "${cpus}" ] && cpus=1
47 +JOBS=$(find_processors)
48 +[ -z "${JOBS}" ] && JOBS=1
49 +
50 +if command -v ninja 2>&1; then
51 + ninja="$(command -v ninja)"
52 +fi
53 +
54 +CMAKE_OPTS="${ninja:+-G Ninja}"
55 +BUILD_OPTS="VERBOSE=1"
56 +[ -n "${ninja}" ] && BUILD_OPTS="-v"
57 +NETDATA_BUILD_DIR="${NETDATA_BUILD_DIR:-./cmake-build-release/}"
58
59 if [ -f ".coverity-scan.conf" ]; then
60 source ".coverity-scan.conf"
@@ -102,19 +110,20 @@ scanit() {
110 progress "Working on netdata version: ${version}"
111
112 progress "Cleaning up old builds..."
105 - run make clean || echo >&2 "Nothing to clean"
113 + rm -rf "${NETDATA_BUILD_DIR}"
114
115 [ -d "cov-int" ] && rm -rf "cov-int"
116
117 [ -f netdata-coverity-analysis.tgz ] && run rm netdata-coverity-analysis.tgz
118
119 progress "Configuring netdata source..."
120 + USE_SYSTEM_PROTOBUF=1
121 + prepare_cmake_options
122
113 - run autoreconf -ivf
114 - run ./configure ${OTHER_OPTIONS}
123 + run cmake ${NETDATA_CMAKE_OPTIONS}
124
125 progress "Analyzing netdata..."
117 - run "${covbuild}" --dir cov-int make -j${cpus}
126 + run "${covbuild}" --dir cov-int cmake --build "${NETDATA_BUILD_DIR}" --parallel ${JOBS} -- ${BUILD_OPTS}
127
128 echo >&2 "Compressing analysis..."
129 run tar czvf netdata-coverity-analysis.tgz cov-int
@@ -170,21 +179,6 @@ installit() {
179 return 0
180 }
181
173 -OTHER_OPTIONS="--disable-lto"
174 -OTHER_OPTIONS+=" --with-zlib"
175 -OTHER_OPTIONS+=" --with-math"
176 -OTHER_OPTIONS+=" --enable-lz4"
177 -OTHER_OPTIONS+=" --enable-openssl"
178 -OTHER_OPTIONS+=" --enable-jsonc"
179 -OTHER_OPTIONS+=" --enable-plugin-nfacct"
180 -OTHER_OPTIONS+=" --enable-plugin-freeipmi"
181 -OTHER_OPTIONS+=" --enable-plugin-cups"
182 -OTHER_OPTIONS+=" --enable-exporting-prometheus-remote-write"
183 -# TODO: enable these plugins too
184 -#OTHER_OPTIONS+=" --enable-plugin-xenstat"
185 -#OTHER_OPTIONS+=" --enable-exporting-kinesis"
186 -#OTHER_OPTIONS+=" --enable-exporting-mongodb"
187 -
182 FOUND_OPTS="NO"
183 while [ -n "${1}" ]; do
184 if [ "${1}" = "--with-install" ]; then
netdata-installer.sh
+1 -106
@@ -454,15 +454,6 @@ if [ "$(uname -s)" = "Linux" ] && [ -f /proc/meminfo ]; then
454 fi
455 fi
456
457 -enable_feature() {
458 - NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed -e "s/-DENABLE_${1}=Off[[:space:]]*//g" -e "s/-DENABLE_${1}=On[[:space:]]*//g")"
459 - if [ "${2}" -eq 1 ]; then
460 - NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed "s/$/ -DENABLE_${1}=On/")"
461 - else
462 - NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed "s/$/ -DENABLE_${1}=Off/")"
463 - fi
464 -}
465 -
457 # set default make options
458 if [ -z "${MAKEOPTS}" ]; then
459 MAKEOPTS="-j$(find_processors)"
@@ -1104,35 +1095,6 @@ echo >&2
1095 NETDATA_BUILD_DIR="${NETDATA_BUILD_DIR:-./cmake-build-release/}"
1096 rm -rf "${NETDATA_BUILD_DIR}"
1097
1107 -check_for_module() {
1108 - if [ -z "${pkgconf}" ]; then
1109 - pkgconf="$(command -v pkgconf 2>/dev/null)"
1110 - [ -z "${pkgconf}" ] && pkgconf="$(command -v pkg-config 2>/dev/null)"
1111 - [ -z "${pkgconf}" ] && fatal "Unable to find a usable pkgconf/pkg-config command, cannot build Netdata." I0013
1112 - fi
1113 -
1114 - "${pkgconf}" "${1}"
1115 - return "${?}"
1116 -}
1117 -
1118 -check_for_feature() {
1119 - feature_name="${1}"
1120 - feature_state="${2}"
1121 - shift 2
1122 - feature_modules="${*}"
1123 -
1124 - if [ -z "${feature_state}" ]; then
1125 - # shellcheck disable=SC2086
1126 - if check_for_module ${feature_modules}; then
1127 - enable_feature "${feature_name}" 1
1128 - else
1129 - enable_feature "${feature_name}" 0
1130 - fi
1131 - else
1132 - enable_feature "${feature_name}" "${feature_state}"
1133 - fi
1134 -}
1135 -
1098 # function to extract values from the config file
1099 config_option() {
1100 section="${1}"
@@ -1161,74 +1123,7 @@ NETDATA_GROUP="$(id -g -n "${NETDATA_USER}" 2> /dev/null)"
1123 [ -z "${NETDATA_GROUP}" ] && NETDATA_GROUP="${NETDATA_USER}"
1124 echo >&2 "Netdata user and group set to: ${NETDATA_USER}/${NETDATA_GROUP}"
1125
1164 -NETDATA_CMAKE_OPTIONS="-S ./ -B ${NETDATA_BUILD_DIR} ${CMAKE_OPTS} -DCMAKE_INSTALL_PREFIX=${NETDATA_PREFIX} ${NETDATA_USER:+-DNETDATA_USER=${NETDATA_USER}} ${NETDATA_CMAKE_OPTIONS} "
1165 -
1166 -# Feature autodetection code starts here
1167 -
1168 -if [ "${USE_SYSTEM_PROTOBUF}" -eq 1 ]; then
1169 - enable_feature BUNDLED_PROTOBUF 0
1170 -else
1171 - enable_feature BUNDLED_PROTOBUF 1
1172 -fi
1173 -
1174 -if [ -z "${ENABLE_SYSTEMD_PLUGIN}" ]; then
1175 - if check_for_module libsystemd; then
1176 - if check_for_module libelogind; then
1177 - ENABLE_SYSTEMD_JOURNAL=0
1178 - else
1179 - ENABLE_SYSTEMD_JOURNAL=1
1180 - fi
1181 - else
1182 - ENABLE_SYSTEMD_JOURNAL=0
1183 - fi
1184 -fi
1185 -
1186 -enable_feature PLUGIN_SYSTEMD_JOURNAL "${ENABLE_SYSTEMD_JOURNAL}"
1187 -
1188 -[ -z "${NETDATA_ENABLE_ML}" ] && NETDATA_ENABLE_ML=1
1189 -enable_feature ML "${NETDATA_ENABLE_ML}"
1190 -
1191 -if command -v cups-config >/dev/null 2>&1 || check_for_module libcups || check_for_module cups; then
1192 - ENABLE_CUPS=1
1193 -else
1194 - ENABLE_CUPS=0
1195 -fi
1196 -
1197 -enable_feature PLUGIN_CUPS "${ENABLE_CUPS}"
1198 -
1199 -IS_LINUX=0
1200 -[ "$(uname -s)" = "Linux" ] && IS_LINUX=1
1201 -enable_feature PLUGIN_DEBUGFS "${IS_LINUX}"
1202 -enable_feature PLUGIN_PERF "${IS_LINUX}"
1203 -enable_feature PLUGIN_SLABINFO "${IS_LINUX}"
1204 -enable_feature PLUGIN_CGROUP_NETWORK "${IS_LINUX}"
1205 -enable_feature PLUGIN_LOCAL_LISTENERS "${IS_LINUX}"
1206 -enable_feature PLUGIN_LOGS_MANAGEMENT "${ENABLE_LOGS_MANAGEMENT}"
1207 -enable_feature LOGS_MANAGEMENT_TESTS "${ENABLE_LOGS_MANAGEMENT_TESTS}"
1208 -
1209 -enable_feature ACLK "${ENABLE_CLOUD}"
1210 -enable_feature CLOUD "${ENABLE_CLOUD}"
1211 -enable_feature BUNDLED_JSONC "${NETDATA_BUILD_JSON_C}"
1212 -enable_feature BUNDLED_YAML "${BUNDLE_YAML}"
1213 -enable_feature DBENGINE "${ENABLE_DBENGINE}"
1214 -enable_feature H2O "${ENABLE_H2O}"
1215 -enable_feature PLUGIN_EBPF "${ENABLE_EBPF}"
1216 -
1217 -ENABLE_APPS=0
1218 -
1219 -if [ "${IS_LINUX}" = 1 ] || [ "$(uname -s)" = "FreeBSD" ]; then
1220 - ENABLE_APPS=1
1221 -fi
1222 -
1223 -enable_feature PLUGIN_APPS "${ENABLE_APPS}"
1224 -
1225 -check_for_feature EXPORTER_PROMETHEUS_REMOTE_WRITE "${EXPORTER_PROMETHEUS}" snappy
1226 -check_for_feature EXPORTER_MONGODB "${EXPORTER_MONGODB}" libmongoc-1.0
1227 -check_for_feature PLUGIN_FREEIPMI "${ENABLE_FREEIPMI}" libipmimonitoring
1228 -check_for_feature PLUGIN_NFACCT "${ENABLE_NFACCT}" libnetfilter_acct libnml
1229 -check_for_feature PLUGIN_XENSTAT "${ENABLE_XENSTAT}" xenstat xenlight
1230 -
1231 -# End of feature autodetection code
1126 +prepare_cmake_options
1127
1128 if [ -n "${NETDATA_PREPARE_ONLY}" ]; then
1129 progress "Exiting before building Netdata as requested."
packaging/docker/Dockerfile
+1 -1
@@ -29,7 +29,7 @@ RUN chmod +x netdata-installer.sh && \
29 cp -rp /deps/* /usr/local/ && \
30 /bin/echo -e "INSTALL_TYPE='oci'\nPREBUILT_ARCH='$(uname -m)'" > ./system/.install-type && \
31 CFLAGS="$(packaging/docker/gen-cflags.sh)" LDFLAGS="-Wl,--gc-sections" ./netdata-installer.sh --dont-wait --dont-start-it --use-system-protobuf \
32 - ${EXTRA_INSTALL_OPTS} --disable-ebpf --one-time-build --enable-lto "$([ "$RELEASE_CHANNEL" = stable ] && echo --stable-channel)"
32 + ${EXTRA_INSTALL_OPTS} --disable-ebpf --install-no-prefix / "$([ "$RELEASE_CHANNEL" = stable ] && echo --stable-channel)"
33
34 # files to one directory
35 RUN mkdir -p /app/usr/sbin/ \
packaging/installer/functions.sh
+106
@@ -191,6 +191,112 @@ netdata_banner() {
191 echo >&2
192 }
193
194 +# -----------------------------------------------------------------------------
195 +# Feature management and configuration commands
196 +
197 +enable_feature() {
198 + NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed -e "s/-DENABLE_${1}=Off[[:space:]]*//g" -e "s/-DENABLE_${1}=On[[:space:]]*//g")"
199 + if [ "${2}" -eq 1 ]; then
200 + NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed "s/$/ -DENABLE_${1}=On/")"
201 + else
202 + NETDATA_CMAKE_OPTIONS="$(echo "${NETDATA_CMAKE_OPTIONS}" | sed "s/$/ -DENABLE_${1}=Off/")"
203 + fi
204 +}
205 +
206 +check_for_module() {
207 + if [ -z "${pkgconf}" ]; then
208 + pkgconf="$(command -v pkgconf 2>/dev/null)"
209 + [ -z "${pkgconf}" ] && pkgconf="$(command -v pkg-config 2>/dev/null)"
210 + [ -z "${pkgconf}" ] && fatal "Unable to find a usable pkgconf/pkg-config command, cannot build Netdata." I0013
211 + fi
212 +
213 + "${pkgconf}" "${1}"
214 + return "${?}"
215 +}
216 +
217 +check_for_feature() {
218 + feature_name="${1}"
219 + feature_state="${2}"
220 + shift 2
221 + feature_modules="${*}"
222 +
223 + if [ -z "${feature_state}" ]; then
224 + # shellcheck disable=SC2086
225 + if check_for_module ${feature_modules}; then
226 + enable_feature "${feature_name}" 1
227 + else
228 + enable_feature "${feature_name}" 0
229 + fi
230 + else
231 + enable_feature "${feature_name}" "${feature_state}"
232 + fi
233 +}
234 +
235 +prepare_cmake_options() {
236 + NETDATA_CMAKE_OPTIONS="-S ./ -B ${NETDATA_BUILD_DIR} ${CMAKE_OPTS} ${NETDATA_PREFIX+-DCMAKE_INSTALL_PREFIX="${NETDATA_PREFIX}"} ${NETDATA_USER:+-DNETDATA_USER=${NETDATA_USER}} ${NETDATA_CMAKE_OPTIONS} "
237 +
238 + if [ "${USE_SYSTEM_PROTOBUF:-1}" -eq 1 ]; then
239 + enable_feature BUNDLED_PROTOBUF 0
240 + else
241 + enable_feature BUNDLED_PROTOBUF 1
242 + fi
243 +
244 + if [ -z "${ENABLE_SYSTEMD_JOURNAL}" ]; then
245 + if check_for_module libsystemd; then
246 + if check_for_module libelogind; then
247 + ENABLE_SYSTEMD_JOURNAL=0
248 + else
249 + ENABLE_SYSTEMD_JOURNAL=1
250 + fi
251 + else
252 + ENABLE_SYSTEMD_JOURNAL=0
253 + fi
254 + fi
255 +
256 + enable_feature PLUGIN_SYSTEMD_JOURNAL "${ENABLE_SYSTEMD_JOURNAL}"
257 +
258 + if command -v cups-config >/dev/null 2>&1 || check_for_module libcups || check_for_module cups; then
259 + ENABLE_CUPS=1
260 + else
261 + ENABLE_CUPS=0
262 + fi
263 +
264 + enable_feature PLUGIN_CUPS "${ENABLE_CUPS}"
265 +
266 + IS_LINUX=0
267 + [ "$(uname -s)" = "Linux" ] && IS_LINUX=1
268 + enable_feature PLUGIN_DEBUGFS "${IS_LINUX}"
269 + enable_feature PLUGIN_PERF "${IS_LINUX}"
270 + enable_feature PLUGIN_SLABINFO "${IS_LINUX}"
271 + enable_feature PLUGIN_CGROUP_NETWORK "${IS_LINUX}"
272 + enable_feature PLUGIN_LOCAL_LISTENERS "${IS_LINUX}"
273 + enable_feature PLUGIN_EBPF "${ENABLE_EBPF:-0}"
274 + enable_feature PLUGIN_LOGS_MANAGEMENT "${ENABLE_LOGS_MANAGEMENT:-0}"
275 + enable_feature LOGS_MANAGEMENT_TESTS "${ENABLE_LOGS_MANAGEMENT_TESTS:-0}"
276 +
277 + enable_feature ACLK "${ENABLE_CLOUD:-1}"
278 + enable_feature CLOUD "${ENABLE_CLOUD:-1}"
279 + enable_feature BUNDLED_JSONC "${NETDATA_BUILD_JSON_C:-0}"
280 + enable_feature BUNDLED_YAML "${BUNDLE_YAML:-0}"
281 + enable_feature DBENGINE "${ENABLE_DBENGINE:-1}"
282 + enable_feature H2O "${ENABLE_H2O:-1}"
283 + enable_feature ML "${NETDATA_ENABLE_ML:-1}"
284 +
285 + ENABLE_APPS=0
286 +
287 + if [ "${IS_LINUX}" = 1 ] || [ "$(uname -s)" = "FreeBSD" ]; then
288 + ENABLE_APPS=1
289 + fi
290 +
291 + enable_feature PLUGIN_APPS "${ENABLE_APPS}"
292 +
293 + check_for_feature EXPORTER_PROMETHEUS_REMOTE_WRITE "${EXPORTER_PROMETHEUS}" snappy
294 + check_for_feature EXPORTER_MONGODB "${EXPORTER_MONGODB}" libmongoc-1.0
295 + check_for_feature PLUGIN_FREEIPMI "${ENABLE_FREEIPMI}" libipmimonitoring
296 + check_for_feature PLUGIN_NFACCT "${ENABLE_NFACCT}" libnetfilter_acct libnml
297 + check_for_feature PLUGIN_XENSTAT "${ENABLE_XENSTAT}" xenstat xenlight
298 +}
299 +
300 # -----------------------------------------------------------------------------
301 # portable service command
302