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