@cryptotaxi247 / netdata-1 / commits / a26a03158

Added ARM binary package builds to CI. (#10769)

* Added ARM binary package builds to CI. * Tidy-up workflow so it runs faster. * Update cmake options for LWS. * Package build process tweaks. * Add Fedora 34 32-bit ARM package build. * Disable eBPF in ARM package builds. * Fix conditional in DEB package build. * Fix RPM architecture handling. * Really fix conditional in DEB package build. * Fix handling of eBPF in DEB packages. * Fix RPM libbpf bundling. * Differentiate uploaded artifacts by architecture. * Add CentOS 8 ARMv8 package build.

Austin S. Hemmelgarn committed Oct 4, 2021 at 08:38 UTC a26a03158f911c511c7e9554c781963b5da02656
4 files changed +52 -6
.github/workflows/packaging.yml
+21 -2
@@ -28,20 +28,39 @@ jobs:
28 include:
29 - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
30 - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/i386, arch: i386}
31 + - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf}
32 + - {distro: debian, version: "9", pkgclouddistro: debian/stretch, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64}
33 - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/amd64, arch: amd64}
34 - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/i386, arch: i386}
35 + - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf}
36 + - {distro: debian, version: "10", pkgclouddistro: debian/buster, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64}
37 - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/amd64, arch: amd64, alias: bullseye}
38 - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/i386, arch: i386, alias: bullseye}
39 + - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/arm/v7, arch: armhf, alias: bullseye}
40 + - {distro: debian, version: "11", pkgclouddistro: debian/bullseye, format: deb, base_image: debian, platform: linux/arm64/v8, arch: arm64, alias: bullseye}
41 - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
42 - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/i386, arch: i386}
43 + - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
44 + - {distro: ubuntu, version: "18.04", pkgclouddistro: ubuntu/bionic, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
45 - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
46 + - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
47 + - {distro: ubuntu, version: "20.04", pkgclouddistro: ubuntu/focal, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
48 - {distro: ubuntu, version: "21.04", pkgclouddistro: ubuntu/hirsute, format: deb, base_image: ubuntu, platform: linux/amd64, arch: amd64}
49 + - {distro: ubuntu, version: "21.04", pkgclouddistro: ubuntu/hirsute, format: deb, base_image: ubuntu, platform: linux/arm/v7, arch: armhf}
50 + - {distro: ubuntu, version: "21.04", pkgclouddistro: ubuntu/hirsute, format: deb, base_image: ubuntu, platform: linux/arm64/v8, arch: arm64}
51 - {distro: centos, version: "7", pkgclouddistro: el/7, format: rpm, base_image: centos, platform: linux/amd64, arch: amd64}
52 - {distro: centos, version: "8", pkgclouddistro: el/8, format: rpm, base_image: centos, platform: linux/amd64, arch: amd64}
53 + - {distro: centos, version: "8", pkgclouddistro: el/8, format: rpm, base_image: centos, platform: linux/arm64/v8, arch: arm64}
54 - {distro: fedora, version: "33", pkgclouddistro: fedora/33, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
55 + - {distro: fedora, version: "33", pkgclouddistro: fedora/33, format: rpm, base_image: fedora, platform: linux/arm/v7, arch: armhf}
56 + - {distro: fedora, version: "33", pkgclouddistro: fedora/33, format: rpm, base_image: fedora, platform: linux/arm64/v8, arch: arm64}
57 - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/amd64, arch: amd64}
58 + - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/arm/v7, arch: armhf}
59 + - {distro: fedora, version: "34", pkgclouddistro: fedora/34, format: rpm, base_image: fedora, platform: linux/arm64/v8, arch: arm64}
60 - {distro: opensuse, version: "15.2", pkgclouddistro: opensuse/15.2, format: rpm, base_image: opensuse/leap, platform: linux/amd64, arch: amd64}
61 + - {distro: opensuse, version: "15.2", pkgclouddistro: opensuse/15.2, format: rpm, base_image: opensuse/leap, platform: linux/arm64/v8, arch: arm64}
62 - {distro: opensuse, version: "15.3", pkgclouddistro: opensuse/15.3, format: rpm, base_image: opensuse/leap, platform: linux/amd64, arch: amd64}
63 + - {distro: opensuse, version: "15.3", pkgclouddistro: opensuse/15.3, format: rpm, base_image: opensuse/leap, platform: linux/arm64/v8, arch: arm64}
64 # We intentiaonally disable the fail-fast behavior so that a
65 # build failure for one version doesn't prevent us from publishing
66 # successfully built and tested packages for another version.
@@ -87,7 +106,7 @@ jobs:
106 echo "pkg_version=$(cut -d'-' -f 1 packaging/version | sed -e 's/^v//')" >> $GITHUB_ENV
107 fi
108 - name: Setup QEMU
90 - if: matrix.platform != 'linux/amd64'
109 + if: matrix.platform != 'linux/amd64' && matrix.platform != 'linux/i386'
110 uses: docker/setup-qemu-action@v1
111 - name: Prepare Docker Environment
112 shell: bash
@@ -113,7 +132,7 @@ jobs:
132 - name: Save Packages
133 uses: actions/upload-artifact@v2
134 with:
116 - name: ${{ matrix.distro }}-${{ matrix.version }}-packages
135 + name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-packages
136 path: ${{ github.workspace }}/artifacts/*
137 - name: Upload to PackageCloud
138 if: github.event_name == 'workflow_dispatch'
contrib/debian/rules
+14 -3
@@ -15,6 +15,13 @@ else
15 SYSTEMD_UNIT = system/netdata.service
16 endif
17
18 +ifeq ($(shell test `uname -m` != "x86_64" && echo "1"), 1)
19 +HAVE_EBPF = 0
20 +EBPF_CONFIG = --disable-ebpf
21 +else
22 +HAVE_EBPF = 1
23 +endif
24 +
25 %:
26 # For jessie and beyond
27 #
@@ -36,11 +43,13 @@ override_dh_installinit:
43 override_dh_auto_configure:
44 packaging/bundle-mosquitto.sh .
45 packaging/bundle-lws.sh .
39 - packaging/bundle-libbpf.sh .
46 + if [ $(HAVE_EBPF) -eq 1 ]; then \
47 + packaging/bundle-libbpf.sh . ${TOP}/usr/libexec/netdata/plugins.d; \
48 + fi
49 autoreconf -ivf
50 dh_auto_configure -- --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib \
51 --libexecdir=/usr/libexec --with-user=netdata --with-math --with-zlib --with-webdir=/var/lib/netdata/www \
43 - --with-bundled-lws
52 + --with-bundled-lws $(EBPF_CONFIG)
53
54 override_dh_install:
55 cp -v $(BASE_CONFIG) debian/netdata.conf
@@ -77,7 +86,9 @@ override_dh_install:
86 ln -s "/usr/share/netdata/www/$$D" "$(TOP)/var/lib/netdata/www/$$D"; \
87 done
88
80 - packaging/bundle-ebpf.sh . ${TOP}/usr/libexec/netdata/plugins.d
89 + if [ $(HAVE_EBPF) -eq 1 ]; then \
90 + packaging/bundle-ebpf.sh . ${TOP}/usr/libexec/netdata/plugins.d; \
91 + fi
92
93 # Install go
94 #
netdata.spec.in
+16
@@ -15,6 +15,13 @@ AutoReqProv: yes
15 # error.
16 %global __os_install_post %{nil}
17
18 +# Disable eBPF for architectures other than x86
19 +%ifarch x86_64 i386
20 +%global _have_ebpf 1
21 +%else
22 +%global _have_ebpf 0
23 +%endif
24 +
25 # Mitigate the cross-distro mayhem by strictly defining the libexec destination
26 %define _prefix /usr
27 %define _sysconfdir /etc
@@ -222,12 +229,17 @@ export CFLAGS="${CFLAGS} -fPIC" && ${RPM_BUILD_DIR}/%{name}-%{version}/packaging
229 %if 0%{!?fedora:1} && 0%{!?suse_version:1}
230 export CFLAGS="${CFLAGS} -fPIC" && ${RPM_BUILD_DIR}/%{name}-%{version}/packaging/bundle-judy.sh ${RPM_BUILD_DIR}/%{name}-%{version}
231 %endif
232 +%if 0%{?_have_ebpf}
233 export CFLAGS="${CFLAGS} -fPIC" && ${RPM_BUILD_DIR}/%{name}-%{version}/packaging/bundle-libbpf.sh ${RPM_BUILD_DIR}/%{name}-%{version}
234 +%endif
235
236 %build
237 # Conf step
238 autoreconf -ivf
239 %configure \
240 + %if 0%{!?_have_ebpf}
241 + --disable-ebpf
242 + %endif
243 %if 0%{!?fedora:1} && 0%{!?suse_version:1}
244 --with-bundled-libJudy \
245 %endif
@@ -274,7 +286,9 @@ install -m 4750 -p perf.plugin "${RPM_BUILD_ROOT}%{_libexecdir}/%{name}/plugins.
286
287 # ###########################################################
288 # Install ebpf.plugin
289 +%if 0%{?_have_ebpf}
290 install -m 4750 -p ebpf.plugin "${RPM_BUILD_ROOT}%{_libexecdir}/%{name}/plugins.d/ebpf.plugin"
291 +%endif
292
293 # ###########################################################
294 # Install cups.plugin
@@ -401,7 +415,9 @@ install_go() {
415 install_go
416 install -m 0640 -p go.d.plugin "${RPM_BUILD_ROOT}%{_libexecdir}/%{name}/plugins.d/go.d.plugin"
417
418 +%if 0%{?_have_ebpf}
419 ${RPM_BUILD_DIR}/%{name}-%{version}/packaging/bundle-ebpf.sh ${RPM_BUILD_DIR}/%{name}-%{version} ${RPM_BUILD_ROOT}%{_libexecdir}/%{name}/plugins.d
420 +%endif
421
422 %pre
423
packaging/bundle-lws.sh
+1 -1
@@ -10,7 +10,7 @@ curl -sSL --connect-timeout 10 --retry 3 "https://github.com/warmcat/libwebsocke
10 sha256sum -c "${1}/packaging/libwebsockets.checksums" || exit 1
11 tar -xzf "${LWS_TARBALL}" -C "${1}/externaldeps/libwebsockets" || exit 1
12 cd "${LWS_BUILD_PATH}" || exit 1
13 -cmake -D LWS_WITH_SOCKS5:boolean=YES . || exit 1
13 +cmake -Wno-dev -Wno-deprecated -D LWS_WITH_SOCKS5:boolean=YES -D WITHOUT_LWS_TESTAPPS:boolean=YES . || exit 1
14 make || exit 1
15 cd "${startdir}" || exit 1
16 cp -a "${LWS_BUILD_PATH}/lib/libwebsockets.a" "${1}/externaldeps/libwebsockets" || exit 1