master
sh 152 lines 4.5 KB
Raw
1 #!/bin/sh
2 #
3 # Invoked by the package builder images to actually build native packages.
4
5 set -e
6
7 PKG_TYPE="${1}"
8 BUILD_DIR="${2}"
9 SCRIPT_SOURCE="$(
10 self=${0}
11 while [ -L "${self}" ]
12 do
13 cd "${self%/*}" || exit 1
14 self=$(readlink "${self}")
15 done
16 cd "${self%/*}" || exit 1
17 echo "$(pwd -P)/${self##*/}"
18 )"
19 SOURCE_DIR="$(dirname "$(dirname "${SCRIPT_SOURCE}")")"
20
21 . /etc/os-release
22
23 # Keep one argument per line so POSIX sh preserves embedded spaces
24 # without relying on arrays or eval.
25 CMAKE_ARGS="-S
26 ${SOURCE_DIR}
27 -B
28 ${BUILD_DIR}
29 -G
30 Ninja"
31
32 add_cmake_option() {
33 CMAKE_ARGS="${CMAKE_ARGS}
34 -D${1}=${2}"
35 }
36
37 run_cmake() {
38 (
39 set --
40 while IFS= read -r arg; do
41 [ -n "${arg}" ] || continue
42 set -- "$@" "${arg}"
43 done <<EOF
44 ${CMAKE_ARGS}
45 EOF
46 cmake "$@"
47 )
48 }
49
50 add_cmake_option CMAKE_BUILD_TYPE RelWithDebInfo
51 add_cmake_option CMAKE_INSTALL_PREFIX /
52 add_cmake_option ENABLE_DASHBOARD on
53 add_cmake_option ENABLE_DBENGINE On
54 add_cmake_option ENABLE_ML On
55
56 add_cmake_option ENABLE_PLUGIN_APPS On
57 add_cmake_option ENABLE_PLUGIN_CGROUP_NETWORK On
58 add_cmake_option ENABLE_PLUGIN_DEBUGFS On
59 add_cmake_option ENABLE_PLUGIN_FREEIPMI On
60 add_cmake_option ENABLE_PLUGIN_GO On
61 add_cmake_option ENABLE_PLUGIN_SCRIPTS On
62 add_cmake_option ENABLE_PLUGIN_PYTHON On
63 add_cmake_option ENABLE_PLUGIN_CHARTS On
64 add_cmake_option ENABLE_PLUGIN_LOCAL_LISTENERS On
65 add_cmake_option ENABLE_PLUGIN_NFACCT On
66 add_cmake_option ENABLE_PLUGIN_NETFLOW On
67 add_cmake_option ENABLE_PLUGIN_OTEL On
68 add_cmake_option ENABLE_PLUGIN_PERF On
69 add_cmake_option ENABLE_PLUGIN_SLABINFO On
70 add_cmake_option ENABLE_PLUGIN_SYSTEMD_JOURNAL On
71 add_cmake_option ENABLE_PLUGIN_SYSTEMD_UNITS On
72
73 add_cmake_option ENABLE_EXPORTER_PROMETHEUS_REMOTE_WRITE On
74
75 add_cmake_option ENABLE_BUNDLED_PROTOBUF Off
76 add_cmake_option ENABLE_BUNDLED_JSONC Off
77 add_cmake_option ENABLE_BUNDLED_YAML Off
78
79 add_cmake_option ENABLE_LIBBACKTRACE On
80
81 add_cmake_option BUILD_FOR_PACKAGING On
82
83 [ -d "${SOURCE_DIR}/tmp/ibm_mq" ] && add_cmake_option FETCHCONTENT_SOURCE_DIR_IBM_MQ "${SOURCE_DIR}/tmp/ibm_mq"
84 if [ -n "${NETDATA_TOPOLOGY_IP_INTEL_STOCK_DIR}" ]; then
85 if [ ! -d "${NETDATA_TOPOLOGY_IP_INTEL_STOCK_DIR}" ]; then
86 echo "Missing topology IP intelligence stock directory: ${NETDATA_TOPOLOGY_IP_INTEL_STOCK_DIR}"
87 exit 1
88 fi
89 add_cmake_option NETDATA_TOPOLOGY_IP_INTEL_STOCK_DIR "${NETDATA_TOPOLOGY_IP_INTEL_STOCK_DIR}"
90 fi
91
92 case "${PKG_TYPE}" in
93 DEB)
94 case "$(dpkg-architecture -q DEB_TARGET_ARCH)" in
95 amd64)
96 add_cmake_option ENABLE_PLUGIN_XENSTAT On
97 add_cmake_option ENABLE_PLUGIN_EBPF On
98 add_cmake_option ENABLE_PLUGIN_IBM On
99 ;;
100 arm64)
101 add_cmake_option ENABLE_PLUGIN_XENSTAT On
102 add_cmake_option ENABLE_PLUGIN_EBPF Off
103 add_cmake_option ENABLE_PLUGIN_IBM Off
104 ;;
105 armhf)
106 add_cmake_option ENABLE_PLUGIN_XENSTAT Off
107 add_cmake_option ENABLE_PLUGIN_EBPF Off
108 add_cmake_option ENABLE_PLUGIN_IBM Off
109 ;;
110 *)
111 add_cmake_option ENABLE_PLUGIN_XENSTAT Off
112 add_cmake_option ENABLE_PLUGIN_EBPF Off
113 add_cmake_option ENABLE_PLUGIN_IBM Off
114 ;;
115 esac
116
117 if [ "${ID}" = "ubuntu" ]; then
118 case "${VERSION_ID}" in
119 20.04|22.04|24.04) add_cmake_option ENABLE_EXPORTER_MONGODB Off ;;
120 *) add_cmake_option ENABLE_EXPORTER_MONGODB On ;;
121 esac
122 else
123 add_cmake_option ENABLE_EXPORTER_MONGODB On
124 fi
125 ;;
126 RPM) ;;
127 *) echo "Unrecognized package type ${PKG_TYPE}." ; exit 1 ;;
128 esac
129
130 if [ "${ENABLE_SENTRY}" = "true" ]; then
131 if [ -z "${SENTRY_DSN}" ]; then
132 echo "ERROR: Sentry enabled but no DSN specified, exiting."
133 exit 1
134 fi
135
136 add_cmake_option ENABLE_SENTRY On
137 add_cmake_option NETDATA_SENTRY_ENVIRONMENT "${RELEASE_PIPELINE:-Unknown}"
138 add_cmake_option NETDATA_SENTRY_DIST "${BUILD_DESTINATION:-Unknown}"
139 add_cmake_option NETDATA_SENTRY_DSN "${SENTRY_DSN}"
140 else
141 add_cmake_option ENABLE_SENTRY Off
142 fi
143
144 run_cmake
145 cmake --build "${BUILD_DIR}" --parallel "$(nproc)" -- -k 1
146
147 if [ "${ENABLE_SENTRY}" = "true" ] && [ "${UPLOAD_SENTRY}" = "true" ]; then
148 sentry-cli debug-files upload -o netdata-inc -p netdata-agent --force-foreground --log-level=debug --wait --include-sources build/netdata
149 fi
150
151 cd "${BUILD_DIR}" || exit 1
152 cpack -V -G "${PKG_TYPE}"