From e47b46715488b2bd386ea5faf269cb40af6337db Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Sun, 25 Oct 2026 21:53:18 +0000 Subject: [PATCH 1/3] fix_previous_pr: Fix issues with arena --- includes/netdata_arena_common.h | 35 +++++++++++++++++++++++++++++---- kernel/Makefile | 6 ++++-- kernel/cachestat_arena_kern.c | 5 ++++- kernel/dc_arena_kern.c | 5 ++++- kernel/dns_arena_kern.c | 5 ++++- kernel/fd_arena_kern.c | 5 ++++- kernel/oomkill_arena_kern.c | 5 ++++- kernel/process_arena_kern.c | 5 ++++- kernel/shm_arena_kern.c | 5 ++++- kernel/socket_arena_kern.c | 5 ++++- kernel/swap_arena_kern.c | 5 ++++- kernel/vfs_arena_kern.c | 5 ++++- 12 files changed, 75 insertions(+), 16 deletions(-) diff --git a/includes/netdata_arena_common.h b/includes/netdata_arena_common.h index 126fbd45..8727fb49 100644 --- a/includes/netdata_arena_common.h +++ b/includes/netdata_arena_common.h @@ -19,6 +19,9 @@ #define NETDATA_ARENA_MAP_PAGES 256 #define NETDATA_ARENA_EVENT_SLOTS 1024 +/* NDAQ: reserve a bounded slot, publish it, then release it from userspace. */ +#define NETDATA_ARENA_QUEUE_VERSION 0x4e444151U +#define NETDATA_ARENA_RESERVE_RETRIES 8 /* Mark the relocated userspace address as PTR_TO_ARENA before dereferencing. */ #ifndef netdata_bpf_addr_space_cast @@ -51,19 +54,43 @@ } NAME SEC(".maps") #define NETDATA_ARENA_QUEUE_DECL(PREFIX, EVENT_TYPE, SLOT_COUNT) \ + struct netdata_##PREFIX##_arena_slot_t { \ + __u32 ready; \ + EVENT_TYPE event; \ + }; \ struct netdata_##PREFIX##_arena_state_t { \ __u32 head; \ - EVENT_TYPE events[SLOT_COUNT]; \ + __u32 tail; \ + __u32 version; \ + __u32 reserved; \ + __u64 dropped; \ + struct netdata_##PREFIX##_arena_slot_t slots[SLOT_COUNT]; \ }; \ extern __arena struct netdata_##PREFIX##_arena_state_t PREFIX##_arena_state; \ static __always_inline __arena EVENT_TYPE *netdata_##PREFIX##_arena_reserve(void) { \ __arena struct netdata_##PREFIX##_arena_state_t *state = &PREFIX##_arena_state; \ netdata_bpf_addr_space_cast(state, 0, 1); \ - __u32 idx = state->head++; \ - return &state->events[idx % SLOT_COUNT]; \ + for (int attempt = 0; attempt < NETDATA_ARENA_RESERVE_RETRIES; attempt++) { \ + __u32 tail = *(volatile __arena __u32 *)&state->tail; \ + __u32 head = *(volatile __arena __u32 *)&state->head; \ + if ((__s32)(head - tail) < 0) \ + continue; \ + if (head - tail >= SLOT_COUNT) { \ + __sync_fetch_and_add(&state->dropped, 1); \ + return 0; \ + } \ + if (__sync_val_compare_and_swap(&state->head, head, head + 1) == head) \ + return &state->slots[head % SLOT_COUNT].event; \ + } \ + __sync_fetch_and_add(&state->dropped, 1); \ + return 0; \ } \ static __always_inline void netdata_##PREFIX##_arena_submit(__arena EVENT_TYPE *ev) { \ - (void)ev; \ + __arena struct netdata_##PREFIX##_arena_slot_t *slot = \ + (__arena struct netdata_##PREFIX##_arena_slot_t *) \ + ((__arena char *)ev - __builtin_offsetof(struct netdata_##PREFIX##_arena_slot_t, event)); \ + /* Every reservation must publish or the consumer cannot advance. */ \ + __sync_lock_test_and_set(&slot->ready, 1); \ } #endif /* _NETDATA_ARENA_COMMON_ */ diff --git a/kernel/Makefile b/kernel/Makefile index 70359904..0c50c3be 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -241,6 +241,8 @@ tester: libbpf cd ../tests && $(MAKE) tester endif +%_arena_kern.o: BPF_CPU_FLAGS = -mcpu=v3 + %_kern.o: %_kern.c $(NETDATA_KERNEL_HEADERS) libbpf $(CLANG) $(EXTRA_CFLAGS) -S -nostdinc $(LINUXINCLUDE) $(LLVM_INCLUDES) \ -D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \ @@ -256,7 +258,7 @@ endif -D__TARGET_ARCH_$(ARCH) \ -include ../includes/netdata_asm_goto.h \ -O2 -g -emit-llvm $< -o $(<:.c=.ll) - $(LLC) -march=bpf -filetype=obj -o r$@ $(<:.c=.ll) + $(LLC) -march=bpf $(BPF_CPU_FLAGS) -filetype=obj -o r$@ $(<:.c=.ll) $(CLANG) $(EXTRA_CFLAGS) -S -nostdinc $(LINUXINCLUDE) $(LLVM_INCLUDES) \ -D__KERNEL__ -D__ASM_SYSREG_H -Wno-unused-value -Wno-pointer-sign \ -Wno-compare-distinct-pointer-types \ @@ -271,7 +273,7 @@ endif -D__TARGET_ARCH_$(ARCH) \ -include ../includes/netdata_asm_goto.h \ -O2 -g -emit-llvm $< -o $(<:.c=.ll) - $(LLC) -march=bpf -filetype=obj -o p$@ $(<:.c=.ll) + $(LLC) -march=bpf $(BPF_CPU_FLAGS) -filetype=obj -o p$@ $(<:.c=.ll) /bin/bash rename_binaries.sh "$(VER_MAJOR)" "$(VER_MINOR)" "$@" "$(RHF)" "$(KERNEL_VERSION)" ifeq ($(VER_MAJOR).$(VER_MINOR),3.10) diff --git a/kernel/cachestat_arena_kern.c b/kernel/cachestat_arena_kern.c index 1457f5aa..7df4d7b1 100644 --- a/kernel/cachestat_arena_kern.c +++ b/kernel/cachestat_arena_kern.c @@ -12,9 +12,12 @@ #include "netdata_arena_common.h" #include "netdata_cachestat_arena.h" -struct netdata_cachestat_arena_state_t cachestat_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_cachestat_arena_state_t cachestat_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_cachestat_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_cachestat_arena_submit(EV) diff --git a/kernel/dc_arena_kern.c b/kernel/dc_arena_kern.c index 1a90312c..0f237ac0 100644 --- a/kernel/dc_arena_kern.c +++ b/kernel/dc_arena_kern.c @@ -12,9 +12,12 @@ #include "netdata_arena_common.h" #include "netdata_dc_arena.h" -struct netdata_dc_arena_state_t dc_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_dc_arena_state_t dc_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_dc_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_dc_arena_submit(EV) diff --git a/kernel/dns_arena_kern.c b/kernel/dns_arena_kern.c index 8d6200bb..d95f9aac 100644 --- a/kernel/dns_arena_kern.c +++ b/kernel/dns_arena_kern.c @@ -15,9 +15,12 @@ #include "netdata_arena_common.h" #include "netdata_dns_arena.h" -struct netdata_dns_arena_state_t dns_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_dns_arena_state_t dns_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_dns_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_dns_arena_submit(EV) diff --git a/kernel/fd_arena_kern.c b/kernel/fd_arena_kern.c index d67c0205..d17063b3 100644 --- a/kernel/fd_arena_kern.c +++ b/kernel/fd_arena_kern.c @@ -16,9 +16,12 @@ #include "netdata_arena_common.h" #include "netdata_fd_arena.h" -struct netdata_fd_arena_state_t fd_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_fd_arena_state_t fd_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_fd_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_fd_arena_submit(EV) diff --git a/kernel/oomkill_arena_kern.c b/kernel/oomkill_arena_kern.c index 0552d060..142ec4e2 100644 --- a/kernel/oomkill_arena_kern.c +++ b/kernel/oomkill_arena_kern.c @@ -12,9 +12,12 @@ #include "netdata_arena_common.h" #include "netdata_oomkill_arena.h" -struct netdata_oomkill_arena_state_t oomkill_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_oomkill_arena_state_t oomkill_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_oomkill_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_oomkill_arena_submit(EV) diff --git a/kernel/process_arena_kern.c b/kernel/process_arena_kern.c index 404377d8..cdd08123 100644 --- a/kernel/process_arena_kern.c +++ b/kernel/process_arena_kern.c @@ -16,9 +16,12 @@ #include "netdata_arena_common.h" #include "netdata_process_arena.h" -struct netdata_process_arena_state_t process_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_process_arena_state_t process_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_process_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_process_arena_submit(EV) diff --git a/kernel/shm_arena_kern.c b/kernel/shm_arena_kern.c index 0a602b22..774773ed 100644 --- a/kernel/shm_arena_kern.c +++ b/kernel/shm_arena_kern.c @@ -12,9 +12,12 @@ #include "netdata_arena_common.h" #include "netdata_shm_arena.h" -struct netdata_shm_arena_state_t shm_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_shm_arena_state_t shm_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_shm_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_shm_arena_submit(EV) diff --git a/kernel/socket_arena_kern.c b/kernel/socket_arena_kern.c index fe0580d0..a9c0d98b 100644 --- a/kernel/socket_arena_kern.c +++ b/kernel/socket_arena_kern.c @@ -20,9 +20,12 @@ #include "netdata_arena_common.h" #include "netdata_socket_arena.h" -struct netdata_socket_arena_state_t socket_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_socket_arena_state_t socket_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_socket_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_socket_arena_submit(EV) diff --git a/kernel/swap_arena_kern.c b/kernel/swap_arena_kern.c index cd3104ae..6bc1c3d7 100644 --- a/kernel/swap_arena_kern.c +++ b/kernel/swap_arena_kern.c @@ -12,9 +12,12 @@ #include "netdata_arena_common.h" #include "netdata_swap_arena.h" -struct netdata_swap_arena_state_t swap_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_swap_arena_state_t swap_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_swap_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_swap_arena_submit(EV) diff --git a/kernel/vfs_arena_kern.c b/kernel/vfs_arena_kern.c index 8a469656..df6dbd6e 100644 --- a/kernel/vfs_arena_kern.c +++ b/kernel/vfs_arena_kern.c @@ -16,9 +16,12 @@ #include "netdata_arena_common.h" #include "netdata_vfs_arena.h" -struct netdata_vfs_arena_state_t vfs_arena_state __arena_global; #define NETDATA_BPF_RINGBUF_DEF(NAME, MAX_ENTRIES) NETDATA_BPF_ARENA_DEF(NAME, MAX_ENTRIES) +struct netdata_vfs_arena_state_t vfs_arena_state __arena_global = { + .version = NETDATA_ARENA_QUEUE_VERSION, +}; + #define bpf_ringbuf_reserve(MAP, SIZE, FLAGS) netdata_vfs_arena_reserve() #define bpf_ringbuf_submit(EV, FLAGS) netdata_vfs_arena_submit(EV) From 43f9d1c75cb5d53e173e916420dbad65fbd42233 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Sun, 25 Oct 2026 22:27:39 +0000 Subject: [PATCH 2/3] fix_previous_pr: Return release of RH8 files --- .github/scripts/verify-rhf-artifact.sh | 16 +++++++++++----- .github/workflows/build.yml | 4 ++++ .github/workflows/release.yml | 7 +++++++ build.sh | 8 ++++++++ 4 files changed, 30 insertions(+), 5 deletions(-) diff --git a/.github/scripts/verify-rhf-artifact.sh b/.github/scripts/verify-rhf-artifact.sh index 0fd37f49..a82d9def 100755 --- a/.github/scripts/verify-rhf-artifact.sh +++ b/.github/scripts/verify-rhf-artifact.sh @@ -2,10 +2,13 @@ set -euo pipefail repo_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd) -archive=${1:?usage: verify-rhf-artifact.sh [rhf|generic] [6.12.0|6.16.2]} +archive=${1:?usage: verify-rhf-artifact.sh [rhf|generic] [4.18.0|5.4.17|5.14.0|6.12.0|6.16.2]} family=${2:-rhf} kernel_version=${3:-6.12.0} case "$kernel_version" in + 4.18.0) object_version=4.18 ;; + 5.4.17) object_version=5.4 ;; + 5.14.0) object_version=5.14 ;; 6.12.0) object_version=6.12 ;; 6.16.2) object_version=6.16.2 ;; *) printf 'unsupported artifact kernel version: %s\n' "$kernel_version" >&2; exit 1 ;; @@ -18,14 +21,17 @@ case "$family" in esac inventory=$(make -s -C "$repo_root/kernel" \ - --eval='print-ebpf-inventory:;@printf "%s\\n%s\\n%s\\n" "$(NETDATA_APPS)" "$(NETDATA_RINGBUF_APPS)" "$(NETDATA_ARENA_APPS)"' \ + --eval='print-ebpf-inventory:;@printf "%s\\n%s\\n%s\\nEND\\n" "$(NETDATA_APPS)" "$(NETDATA_RINGBUF_APPS)" "$(NETDATA_ARENA_APPS)"' \ print-ebpf-inventory KERNEL_VERSION="$kernel_version" RHF="$make_rhf") mapfile -t app_families <<< "$inventory" -((${#app_families[@]} == 3)) || { printf 'could not read expected object families from kernel/Makefile\n' >&2; exit 1; } +((${#app_families[@]} == 4)) && [[ ${app_families[3]} == END ]] || { + printf 'could not read expected object families from kernel/Makefile\n' >&2 + exit 1 +} -archive_list=$(tar -tf "$archive") +archive_list=$(tar -tf "$archive" | sed 's#^\./##') expected_object_count=0 -for family in "${app_families[@]}"; do +for family in "${app_families[@]:0:3}"; do read -r -a apps <<< "$family" expected_object_count=$((expected_object_count + ${#apps[@]})) for app in "${apps[@]}"; do diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85ea7ce4..f2bd59aa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -69,6 +69,10 @@ jobs: artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.12.rhf-*.tar' -print -quit) test -n "$artifact" .github/scripts/verify-rhf-artifact.sh "$artifact" + elif [ "${{ matrix.kernel_version }}" = "4.18.0" ] || [ "${{ matrix.kernel_version }}" = "5.14.0" ] || [ "${{ matrix.kernel_version }}" = "5.4.17" ]; then + artifact=$(find artifacts -maxdepth 1 -type f -name '*_*.rhf-*.tar' -print -quit) + test -n "$artifact" + .github/scripts/verify-rhf-artifact.sh "$artifact" rhf "${{ matrix.kernel_version }}" elif [ "${{ matrix.kernel_version }}" = "6.16.2" ]; then artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.16-*.tar' -print -quit) test -n "$artifact" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fe0ac970..269fdb5e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -78,6 +78,10 @@ jobs: artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.12.rhf-*.tar' -print -quit) test -n "$artifact" .github/scripts/verify-rhf-artifact.sh "$artifact" + elif [ "${{ matrix.kernel_version }}" = "4.18.0" ] || [ "${{ matrix.kernel_version }}" = "5.14.0" ] || [ "${{ matrix.kernel_version }}" = "5.4.17" ]; then + artifact=$(find artifacts -maxdepth 1 -type f -name '*_*.rhf-*.tar' -print -quit) + test -n "$artifact" + .github/scripts/verify-rhf-artifact.sh "$artifact" rhf "${{ matrix.kernel_version }}" elif [ "${{ matrix.kernel_version }}" = "6.16.2" ]; then artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.16-*.tar' -print -quit) test -n "$artifact" @@ -167,6 +171,9 @@ jobs: done < <(tar -tf "${exact_archive}" | grep -E '^[pr]netdata_ebpf_.*\.6\.16\.2\.o$') if [ "${libc}" == "static" ] || [ "${libc}" == "glibc" ]; then cp -R CentOS7/* "packages/netdata-kernel-collector-${libc}-${RELEASE_TAG}"; fi tar -C "packages/netdata-kernel-collector-${libc}-${RELEASE_TAG}" -Jcvf "final-artifacts/netdata-kernel-collector-${libc}-${RELEASE_TAG}.tar.xz" ./ + for kernel_version in 4.18.0 5.4.17 5.14.0 6.12.0; do + .github/scripts/verify-rhf-artifact.sh "final-artifacts/netdata-kernel-collector-${libc}-${RELEASE_TAG}.tar.xz" rhf "${kernel_version}" + done done cd final-artifacts && sha256sum ./*.tar.xz > sha256sums.txt - name: Create Release diff --git a/build.sh b/build.sh index 2e7feefe..62669a8e 100755 --- a/build.sh +++ b/build.sh @@ -24,6 +24,12 @@ KERNEL_VERSION="${1}" LIBC="${2:-glibc}" OS="${3:-generic}" +case "$OS" in + centos8|centos9|centos10|oracle8) RHF=.rhf ;; + generic) RHF= ;; + *) fail "Unsupported OS family: $OS" ;; +esac + TAG="kernel-collector:$(echo "${KERNEL_VERSION}" | tr '.' '_')_${LIBC}_${OS}" # Treat a LIBC=static as a static build (STATIC=1) @@ -54,6 +60,7 @@ if [ -t 1 ]; then --security-opt seccomp=unconfined \ -e DEBUG \ -e STATIC \ + -e "RHF=${RHF}" \ "${TAG}" | tee build.log else docker run \ @@ -63,5 +70,6 @@ else --security-opt seccomp=unconfined \ -e DEBUG \ -e STATIC \ + -e "RHF=${RHF}" \ "${TAG}" | tee build.log fi From 38102ac1df4c0b74187577eea62aeb14e8d4dd22 Mon Sep 17 00:00:00 2001 From: Thiago Marques Date: Sun, 25 Oct 2026 22:46:29 +0000 Subject: [PATCH 3/3] fix_previous_pr: Return release of Oracle --- .github/scripts/verify-rhf-artifact.sh | 13 +++++++-- .github/workflows/build.yml | 25 +++++------------ .github/workflows/release.yml | 38 ++++++++++++-------------- Dockerfile.musl.oracle8 | 9 ++++-- Dockerfile.static.oracle8 | 9 ++++-- 5 files changed, 50 insertions(+), 44 deletions(-) diff --git a/.github/scripts/verify-rhf-artifact.sh b/.github/scripts/verify-rhf-artifact.sh index a82d9def..281308e9 100755 --- a/.github/scripts/verify-rhf-artifact.sh +++ b/.github/scripts/verify-rhf-artifact.sh @@ -2,15 +2,24 @@ set -euo pipefail repo_root=$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd) -archive=${1:?usage: verify-rhf-artifact.sh [rhf|generic] [4.18.0|5.4.17|5.14.0|6.12.0|6.16.2]} +archive=${1:?usage: verify-rhf-artifact.sh [rhf|generic] } family=${2:-rhf} kernel_version=${3:-6.12.0} case "$kernel_version" in + 4.14.291) object_version=4.14 ;; + 4.16.18) object_version=4.16 ;; 4.18.0) object_version=4.18 ;; - 5.4.17) object_version=5.4 ;; + 5.4.17|5.4.210) object_version=5.4 ;; + 5.10.139) object_version=5.10 ;; + 5.11.19) object_version=5.11 ;; 5.14.0) object_version=5.14 ;; + 5.15.63) object_version=5.15 ;; + 5.16.18) object_version=5.16 ;; + 5.17.15) object_version=5.17 ;; + 6.8.2) object_version=6.8 ;; 6.12.0) object_version=6.12 ;; 6.16.2) object_version=6.16.2 ;; + 7.2.8) object_version=7.0 ;; *) printf 'unsupported artifact kernel version: %s\n' "$kernel_version" >&2; exit 1 ;; esac [[ -f "$archive" ]] || { printf 'artifact not found: %s\n' "$archive" >&2; exit 1; } diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f2bd59aa..d0518544 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,11 +31,6 @@ jobs: - static - glibc - musl - exclude: - - kernel_version: 5.4.17 - libc: static - - kernel_version: 5.4.17 - libc: musl include: - kernel_version: '7.2.8' libc: glibc @@ -65,19 +60,13 @@ jobs: run: | ls -lah artifacts test -f artifacts/netdata_ebpf-*.tar - if [ "${{ matrix.kernel_version }}" = "6.12.0" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.12.rhf-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" - elif [ "${{ matrix.kernel_version }}" = "4.18.0" ] || [ "${{ matrix.kernel_version }}" = "5.14.0" ] || [ "${{ matrix.kernel_version }}" = "5.4.17" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_*.rhf-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" rhf "${{ matrix.kernel_version }}" - elif [ "${{ matrix.kernel_version }}" = "6.16.2" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.16-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" generic 6.16.2 - fi + case "${{ matrix.kernel_version }}" in + 4.18.0|5.4.17|5.14.0|6.12.0) family=rhf ;; + *) family=generic ;; + esac + artifact=$(find artifacts -maxdepth 1 -type f -name 'netdata_ebpf-*.tar' -print -quit) + test -n "$artifact" + .github/scripts/verify-rhf-artifact.sh "$artifact" "$family" "${{ matrix.kernel_version }}" - name: Upload Artifacts uses: actions/upload-artifact@v6 if: success() diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 269fdb5e..804f2159 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,11 +33,6 @@ jobs: - static - glibc - musl - exclude: - - kernel_version: 5.4.17 - libc: static - - kernel_version: 5.4.17 - libc: musl runs-on: ubuntu-latest steps: - name: Checkout @@ -74,19 +69,13 @@ jobs: run: | ls -lah artifacts test -f artifacts/netdata_ebpf-*.tar - if [ "${{ matrix.kernel_version }}" = "6.12.0" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.12.rhf-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" - elif [ "${{ matrix.kernel_version }}" = "4.18.0" ] || [ "${{ matrix.kernel_version }}" = "5.14.0" ] || [ "${{ matrix.kernel_version }}" = "5.4.17" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_*.rhf-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" rhf "${{ matrix.kernel_version }}" - elif [ "${{ matrix.kernel_version }}" = "6.16.2" ]; then - artifact=$(find artifacts -maxdepth 1 -type f -name '*_6.16-*.tar' -print -quit) - test -n "$artifact" - .github/scripts/verify-rhf-artifact.sh "$artifact" generic 6.16.2 - fi + case "${{ matrix.kernel_version }}" in + 4.18.0|5.4.17|5.14.0|6.12.0) family=rhf ;; + *) family=generic ;; + esac + artifact=$(find artifacts -maxdepth 1 -type f -name 'netdata_ebpf-*.tar' -print -quit) + test -n "$artifact" + .github/scripts/verify-rhf-artifact.sh "$artifact" "$family" "${{ matrix.kernel_version }}" - name: Upload Artifacts uses: actions/upload-artifact@v6 if: success() @@ -145,6 +134,7 @@ jobs: echo "RELEASE_TAG=${GITHUB_REF##*/}" >> $GITHUB_ENV - name: Consolidate Artifacts run: | + set -euo pipefail mkdir -p final-artifacts for libc in static glibc musl; do package="packages/netdata-kernel-collector-${libc}-${RELEASE_TAG}" @@ -170,9 +160,17 @@ jobs: cmp <(tar -xOf "${exact_archive}" "${object}") "${package}/${object}" done < <(tar -tf "${exact_archive}" | grep -E '^[pr]netdata_ebpf_.*\.6\.16\.2\.o$') if [ "${libc}" == "static" ] || [ "${libc}" == "glibc" ]; then cp -R CentOS7/* "packages/netdata-kernel-collector-${libc}-${RELEASE_TAG}"; fi - tar -C "packages/netdata-kernel-collector-${libc}-${RELEASE_TAG}" -Jcvf "final-artifacts/netdata-kernel-collector-${libc}-${RELEASE_TAG}.tar.xz" ./ + final_archive="final-artifacts/netdata-kernel-collector-${libc}-${RELEASE_TAG}.tar.xz" + tar -C "${package}" -Jcvf "${final_archive}" ./ + expected_objects=$(while IFS= read -r archive; do tar -tf "${archive}"; done < <(find artifacts -mindepth 2 -maxdepth 2 -type f -name "netdata_ebpf-*_*-${libc}.tar" -print | sort) | sed 's#^\./##' | grep -E '^[pr]netdata_ebpf_.*\.o$' | sort -u) + packaged_objects=$(tar -tf "${final_archive}" | sed 's#^\./##' | grep -E '^[pr]netdata_ebpf_.*\.o$' | sort -u) + missing_objects=$(comm -23 <(printf '%s\n' "${expected_objects}") <(printf '%s\n' "${packaged_objects}")) + if [ -n "${missing_objects}" ]; then + printf 'Objects missing from %s:\n%s\n' "${final_archive}" "${missing_objects}" >&2 + exit 1 + fi for kernel_version in 4.18.0 5.4.17 5.14.0 6.12.0; do - .github/scripts/verify-rhf-artifact.sh "final-artifacts/netdata-kernel-collector-${libc}-${RELEASE_TAG}.tar.xz" rhf "${kernel_version}" + .github/scripts/verify-rhf-artifact.sh "${final_archive}" rhf "${kernel_version}" done done cd final-artifacts && sha256sum ./*.tar.xz > sha256sums.txt diff --git a/Dockerfile.musl.oracle8 b/Dockerfile.musl.oracle8 index e36ae51c..bb459516 100644 --- a/Dockerfile.musl.oracle8 +++ b/Dockerfile.musl.oracle8 @@ -4,6 +4,7 @@ ARG ARCH=x86 ENV ARCH=$ARCH ARG LOCAL_KERNEL_VERSION=5.4.17 +ENV KERNEL_VERSION=${LOCAL_KERNEL_VERSION} ENV _LIBC=musl @@ -15,8 +16,8 @@ RUN apk add --no-cache -U build-base autoconf automake coreutils pkgconfig \ # hadolint ignore=DL3003,SC3009 RUN mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} && \ echo "%_topdir %(echo $HOME)/rpmbuild" > ~/.rpmmacros && \ - wget -q https://oss.oracle.com/ol8/SRPMS-updates/kernel-uek-${LOCAL_KERNEL_VERSION}-2136.316.7.el8uek.src.rpm && \ - rpm -i kernel-uek-${LOCAL_KERNEL_VERSION}-2136.316.7.el8uek.src.rpm && \ + wget -q https://oss.oracle.com/ol8/SRPMS-updates/kernel-uek-${LOCAL_KERNEL_VERSION}-2136.328.3.el8uek.src.rpm && \ + rpm -i kernel-uek-${LOCAL_KERNEL_VERSION}-2136.328.3.el8uek.src.rpm && \ cd ~/rpmbuild/SOURCES && \ tar -xf linux-${LOCAL_KERNEL_VERSION}.tar.bz2 && \ mkdir -p /usr/src/kernels && \ @@ -24,6 +25,10 @@ RUN mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} && \ ln -s ~/rpmbuild/SOURCES/linux-${LOCAL_KERNEL_VERSION} linux && \ ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/15.2.0/include/stdarg.h /usr/src/linux/include/ +COPY kernel-patches/${KERNEL_VERSION} /usr/src/linux-${KERNEL_VERSION}-patches +COPY .dockerfiles/patch_kernel.sh /patch_kernel.sh +RUN /patch_kernel.sh + WORKDIR /kernel-collector COPY .dockerfiles/build.sh /build.sh diff --git a/Dockerfile.static.oracle8 b/Dockerfile.static.oracle8 index 8010ca36..0117070b 100644 --- a/Dockerfile.static.oracle8 +++ b/Dockerfile.static.oracle8 @@ -4,6 +4,7 @@ ARG ARCH=x86 ENV ARCH=$ARCH ARG LOCAL_KERNEL_VERSION=5.4.17 +ENV KERNEL_VERSION=${LOCAL_KERNEL_VERSION} ENV _LIBC=static @@ -15,8 +16,8 @@ RUN apk add --no-cache -U build-base autoconf automake coreutils pkgconfig \ # hadolint ignore=DL3003,SC3009 RUN mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} && \ echo "%_topdir %(echo $HOME)/rpmbuild" > ~/.rpmmacros && \ - wget -q https://oss.oracle.com/ol8/SRPMS-updates/kernel-uek-${LOCAL_KERNEL_VERSION}-2136.316.7.el8uek.src.rpm && \ - rpm -i kernel-uek-${LOCAL_KERNEL_VERSION}-2136.316.7.el8uek.src.rpm && \ + wget -q https://oss.oracle.com/ol8/SRPMS-updates/kernel-uek-${LOCAL_KERNEL_VERSION}-2136.328.3.el8uek.src.rpm && \ + rpm -i kernel-uek-${LOCAL_KERNEL_VERSION}-2136.328.3.el8uek.src.rpm && \ cd ~/rpmbuild/SOURCES && \ tar -xf linux-${LOCAL_KERNEL_VERSION}.tar.bz2 && \ mkdir -p /usr/src/kernels && \ @@ -24,6 +25,10 @@ RUN mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} && \ ln -s ~/rpmbuild/SOURCES/linux-${LOCAL_KERNEL_VERSION} linux && \ ln -s /usr/lib/gcc/x86_64-alpine-linux-musl/15.2.0/include/stdarg.h /usr/src/linux/include/ +COPY kernel-patches/${KERNEL_VERSION} /usr/src/linux-${KERNEL_VERSION}-patches +COPY .dockerfiles/patch_kernel.sh /patch_kernel.sh +RUN /patch_kernel.sh + WORKDIR /kernel-collector COPY .dockerfiles/build.sh /build.sh