3
0
Fork 0
forked from mirrors/nixpkgs

Merge pull request #148535 from martinetd/bpf

bpf update: bcc remove linux kernel dep + devendor libbpf again, bpftrace 0.13.0 -> 0.14.0 + remove kernel dep, pahole 1.20 -> 1.22 + remove submodule, libbpf revert 0.6.0 -> 0.5.0 (unusable)
This commit is contained in:
Jörg Thalheim 2021-12-06 08:33:14 +00:00 committed by GitHub
commit c7fa870f5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 125 additions and 68 deletions

View file

@ -7238,6 +7238,12 @@
githubId = 623509; githubId = 623509;
name = "Martijn Vermaat"; name = "Martijn Vermaat";
}; };
martinetd = {
email = "f.ktfhrvnznqxacf@noclue.notk.org";
github = "martinetd";
githubId = 1729331;
name = "Dominique Martinet";
};
martingms = { martingms = {
email = "martin@mg.am"; email = "martin@mg.am";
github = "martingms"; github = "martingms";

View file

@ -1,9 +1,9 @@
{ config, lib, ... }: { config, pkgs, lib, ... }:
{ {
options.programs.bcc.enable = lib.mkEnableOption "bcc"; options.programs.bcc.enable = lib.mkEnableOption "bcc";
config = lib.mkIf config.programs.bcc.enable { config = lib.mkIf config.programs.bcc.enable {
environment.systemPackages = [ config.boot.kernelPackages.bcc ]; environment.systemPackages = [ pkgs.bcc ];
boot.extraModulePackages = [ config.boot.kernelPackages.bcc ]; boot.extraModulePackages = [ pkgs.bcc ];
}; };
} }

View file

@ -44,6 +44,7 @@ in
boot-stage1 = handleTest ./boot-stage1.nix {}; boot-stage1 = handleTest ./boot-stage1.nix {};
borgbackup = handleTest ./borgbackup.nix {}; borgbackup = handleTest ./borgbackup.nix {};
botamusique = handleTest ./botamusique.nix {}; botamusique = handleTest ./botamusique.nix {};
bpf = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bpf.nix {};
btrbk = handleTest ./btrbk.nix {}; btrbk = handleTest ./btrbk.nix {};
buildbot = handleTest ./buildbot.nix {}; buildbot = handleTest ./buildbot.nix {};
buildkite-agents = handleTest ./buildkite-agents.nix {}; buildkite-agents = handleTest ./buildkite-agents.nix {};

25
nixos/tests/bpf.nix Normal file
View file

@ -0,0 +1,25 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "bpf";
meta.maintainers = with pkgs.lib.maintainers; [ martinetd ];
machine = { pkgs, ... }: {
programs.bcc.enable = true;
environment.systemPackages = with pkgs; [ bpftrace ];
};
testScript = ''
## bcc
# syscount -d 1 stops 1s after probe started so is good for that
print(machine.succeed("syscount -d 1"))
## bpftrace
# list probes
machine.succeed("bpftrace -l")
# simple BEGIN probe (user probe on bpftrace itself)
print(machine.succeed("bpftrace -e 'BEGIN { print(\"ok\"); exit(); }'"))
# tracepoint
print(machine.succeed("bpftrace -e 'tracepoint:syscalls:sys_enter_* { print(probe); exit(); }'"))
# kprobe
print(machine.succeed("bpftrace -e 'kprobe:schedule { print(probe); exit() }'"))
'';
})

View file

@ -1,20 +1,19 @@
{ lib, stdenv, fetchgit, cmake, elfutils, zlib }: { lib, stdenv, fetchgit, pkg-config, libbpf, cmake, elfutils, zlib }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "pahole"; pname = "pahole";
version = "1.20"; version = "1.22";
src = fetchgit { src = fetchgit {
url = "https://git.kernel.org/pub/scm/devel/pahole/pahole.git"; url = "https://git.kernel.org/pub/scm/devel/pahole/pahole.git";
rev = "v${version}"; rev = "v${version}";
sha256 = "11q9dpfi4qj2v8z0nlf8c0079mlv10ljhh0d1yr0j4ds3saacd15"; sha256 = "sha256-U1/i9WNlLphPIcNysC476sqil/q9tMYmu+Y6psga8I0=";
fetchSubmodules = true;
}; };
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ elfutils zlib ]; buildInputs = [ elfutils zlib libbpf ];
# Put libraries in "lib" subdirectory, not top level of $out # Put libraries in "lib" subdirectory, not top level of $out
cmakeFlags = [ "-D__LIB=lib" ]; cmakeFlags = [ "-D__LIB=lib" "-DLIBBPF_EMBEDDED=OFF" ];
meta = with lib; { meta = with lib; {
homepage = "https://git.kernel.org/cgit/devel/pahole/pahole.git/"; homepage = "https://git.kernel.org/cgit/devel/pahole/pahole.git/";
@ -22,6 +21,6 @@ stdenv.mkDerivation rec {
license = licenses.gpl2Only; license = licenses.gpl2Only;
platforms = platforms.linux; platforms = platforms.linux;
maintainers = [ maintainers.bosu ]; maintainers = with maintainers; [ bosu martinetd ];
}; };
} }

View file

@ -1,7 +1,7 @@
{ lib, stdenv, fetchFromGitHub { lib, stdenv, fetchFromGitHub
, makeWrapper, cmake, llvmPackages, kernel , makeWrapper, cmake, llvmPackages
, flex, bison, elfutils, python, luajit, netperf, iperf, libelf , flex, bison, elfutils, python, luajit, netperf, iperf, libelf
, systemtap, bash , bash, libbpf, nixosTests
}: }:
python.pkgs.buildPythonApplication rec { python.pkgs.buildPythonApplication rec {
@ -14,15 +14,14 @@ python.pkgs.buildPythonApplication rec {
owner = "iovisor"; owner = "iovisor";
repo = "bcc"; repo = "bcc";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-4zfjr3VLg26uZ4xNKA1wayti7f2tqGvYSbwoZnr+Ygk="; sha256 = "sha256-iLVUwJTDQ8Bn38sgHOcIR8TYxIB+gIlfTgr9+gPU0gE=";
fetchSubmodules = true;
}; };
format = "other"; format = "other";
buildInputs = with llvmPackages; [ buildInputs = with llvmPackages; [
llvm llvm.dev libclang kernel llvm llvm.dev libclang
elfutils luajit netperf iperf elfutils luajit netperf iperf
systemtap.stapBuild flex bash flex bash libbpf
]; ];
patches = [ patches = [
@ -32,15 +31,14 @@ python.pkgs.buildPythonApplication rec {
]; ];
propagatedBuildInputs = [ python.pkgs.netaddr ]; propagatedBuildInputs = [ python.pkgs.netaddr ];
nativeBuildInputs = [ makeWrapper cmake flex bison llvmPackages.llvm.dev ] nativeBuildInputs = [ makeWrapper cmake flex bison llvmPackages.llvm.dev ];
# libelf is incompatible with elfutils-libelf
++ lib.filter (x: x != libelf) kernel.moduleBuildDependencies;
cmakeFlags = [ cmakeFlags = [
"-DBCC_KERNEL_MODULES_DIR=${kernel.dev}/lib/modules" "-DBCC_KERNEL_MODULES_DIR=/run/booted-system/kernel-modules/lib/modules"
"-DREVISION=${version}" "-DREVISION=${version}"
"-DENABLE_USDT=ON" "-DENABLE_USDT=ON"
"-DENABLE_CPP_API=ON" "-DENABLE_CPP_API=ON"
"-DCMAKE_USE_LIBBPF_PACKAGE=ON"
]; ];
postPatch = '' postPatch = ''
@ -71,10 +69,14 @@ python.pkgs.buildPythonApplication rec {
wrapPythonProgramsIn "$out/share/bcc/tools" "$out $pythonPath" wrapPythonProgramsIn "$out/share/bcc/tools" "$out $pythonPath"
''; '';
passthru.tests = {
bpf = nixosTests.bpf;
};
meta = with lib; { meta = with lib; {
description = "Dynamic Tracing Tools for Linux"; description = "Dynamic Tracing Tools for Linux";
homepage = "https://iovisor.github.io/bcc/"; homepage = "https://iovisor.github.io/bcc/";
license = licenses.asl20; license = licenses.asl20;
maintainers = with maintainers; [ ragge mic92 thoughtpolice ]; maintainers = with maintainers; [ ragge mic92 thoughtpolice martinetd ];
}; };
} }

View file

@ -0,0 +1,39 @@
diff -ur source/src/btf.cpp new/src/btf.cpp
--- source/src/btf.cpp 1970-01-01 09:00:01.000000000 +0900
+++ new/src/btf.cpp 2021-12-04 21:46:59.337023489 +0900
@@ -225,7 +225,7 @@
char err_buf[256];
int err;
- dump = btf_dump__new(btf, nullptr, &opts, dump_printf);
+ dump = btf_dump__new_deprecated(btf, nullptr, &opts, dump_printf);
err = libbpf_get_error(dump);
if (err)
{
@@ -496,7 +496,7 @@
char err_buf[256];
int err;
- dump = btf_dump__new(btf, nullptr, &opts, dump_printf);
+ dump = btf_dump__new_deprecated(btf, nullptr, &opts, dump_printf);
err = libbpf_get_error(dump);
if (err)
{
@@ -554,7 +554,7 @@
char err_buf[256];
int err;
- dump = btf_dump__new(btf, nullptr, &opts, dump_printf);
+ dump = btf_dump__new_deprecated(btf, nullptr, &opts, dump_printf);
err = libbpf_get_error(dump);
if (err)
{
@@ -648,7 +648,7 @@
char err_buf[256];
int err;
- dump = btf_dump__new(btf, nullptr, &opts, dump_printf);
+ dump = btf_dump__new_deprecated(btf, nullptr, &opts, dump_printf);
err = libbpf_get_error(dump);
if (err)
{

View file

@ -1,38 +1,35 @@
{ lib, stdenv, fetchFromGitHub { lib, stdenv, fetchFromGitHub
, cmake, pkg-config, flex, bison , cmake, pkg-config, flex, bison
, llvmPackages, kernel, elfutils , llvmPackages, elfutils
, libelf, libbfd, libbpf, libopcodes, bcc , libelf, libbfd, libbpf, libopcodes, bcc
, cereal, asciidoctor
, nixosTests
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
pname = "bpftrace"; pname = "bpftrace";
version = "0.13.0"; version = "0.14.0";
src = fetchFromGitHub { src = fetchFromGitHub {
owner = "iovisor"; owner = "iovisor";
repo = "bpftrace"; repo = "bpftrace";
rev = "v${version}"; rev = "v${version}";
sha256 = "sha256-BKWBdFzj0j7rAfG30A0fwyYCpOG/5NFRPODW46EP1u0="; sha256 = "sha256-rlaajNfpoiMtU/4aNAnbQ0VixPz9/302TZMarGzsb58=";
}; };
# libbpf 0.6.0 relies on typeof in bpf/btf.h to pick the right version of
# btf_dump__new() but that's not valid c++.
# see https://github.com/iovisor/bpftrace/issues/2068
patches = [ ./btf-dump-new-0.6.0.patch ];
buildInputs = with llvmPackages; buildInputs = with llvmPackages;
[ llvm libclang [ llvm libclang
kernel elfutils libelf bcc elfutils libelf bcc
libbpf libbfd libopcodes libbpf libbfd libopcodes
cereal asciidoctor
]; ];
nativeBuildInputs = [ cmake pkg-config flex bison llvmPackages.llvm.dev ] nativeBuildInputs = [ cmake pkg-config flex bison llvmPackages.llvm.dev ];
# libelf is incompatible with elfutils-libelf
++ lib.filter (x: x != libelf) kernel.moduleBuildDependencies;
# patch the source, *then* substitute on @NIX_KERNEL_SRC@ in the result. we could
# also in theory make this an environment variable around bpftrace, but this works
# nicely without wrappers.
patchPhase = ''
patch -p1 < ${./fix-kernel-include-dir.patch}
substituteInPlace ./src/utils.cpp \
--subst-var-by NIX_KERNEL_SRC '${kernel.dev}/lib/modules/${kernel.modDirVersion}'
'';
# tests aren't built, due to gtest shenanigans. see: # tests aren't built, due to gtest shenanigans. see:
# #
@ -52,10 +49,14 @@ stdenv.mkDerivation rec {
outputs = [ "out" "man" ]; outputs = [ "out" "man" ];
passthru.tests = {
bpf = nixosTests.bpf;
};
meta = with lib; { meta = with lib; {
description = "High-level tracing language for Linux eBPF"; description = "High-level tracing language for Linux eBPF";
homepage = "https://github.com/iovisor/bpftrace"; homepage = "https://github.com/iovisor/bpftrace";
license = licenses.asl20; license = licenses.asl20;
maintainers = with maintainers; [ rvl thoughtpolice ]; maintainers = with maintainers; [ rvl thoughtpolice martinetd ];
}; };
} }

View file

@ -1,22 +0,0 @@
commit b6172952c0150d84912fa6f09bab782dd0549f1e
Author: Austin Seipp <aseipp@pobox.com>
Date: Fri May 3 00:47:12 2019 -0500
src: special case nix build directories for clang
Signed-off-by: Austin Seipp <aseipp@pobox.com>
diff --git a/src/clang_parser.cpp b/src/clang_parser.cpp
index b1db8ff..0cfb01f 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -140,6 +140,9 @@ static bool is_dir(const std::string& path)
// Both ksrc and kobj are guaranteed to be != "", if at least some trace of kernel sources was found.
std::tuple<std::string, std::string> get_kernel_dirs(const struct utsname& utsname)
{
+ // NB (aseipp): special case the kernel directory for nix
+ return { "@NIX_KERNEL_SRC@/source", "@NIX_KERNEL_SRC@/build" };
+
#ifdef KERNEL_HEADERS_DIR
return {KERNEL_HEADERS_DIR, KERNEL_HEADERS_DIR};
#endif

View file

@ -23,6 +23,11 @@ stdenv.mkDerivation rec {
enableParallelBuilding = true; enableParallelBuilding = true;
makeFlags = [ "PREFIX=$(out)" ]; makeFlags = [ "PREFIX=$(out)" ];
postInstall = ''
# install linux's libbpf-compatible linux/btf.h
install -Dm444 ../include/uapi/linux/btf.h -t $out/include/linux
'';
# FIXME: Multi-output requires some fixes to the way the pkg-config file is # FIXME: Multi-output requires some fixes to the way the pkg-config file is
# constructed (it gets put in $out instead of $dev for some reason, with # constructed (it gets put in $out instead of $dev for some reason, with
# improper paths embedded). Don't enable it for now. # improper paths embedded). Don't enable it for now.
@ -33,7 +38,7 @@ stdenv.mkDerivation rec {
description = "Upstream mirror of libbpf"; description = "Upstream mirror of libbpf";
homepage = "https://github.com/libbpf/libbpf"; homepage = "https://github.com/libbpf/libbpf";
license = with licenses; [ lgpl21 /* or */ bsd2 ]; license = with licenses; [ lgpl21 /* or */ bsd2 ];
maintainers = with maintainers; [ thoughtpolice vcunat saschagrunert ]; maintainers = with maintainers; [ thoughtpolice vcunat saschagrunert martinetd ];
platforms = platforms.linux; platforms = platforms.linux;
}; };
} }

View file

@ -14167,6 +14167,12 @@ with pkgs;
bpftools = callPackage ../os-specific/linux/bpftools { }; bpftools = callPackage ../os-specific/linux/bpftools { };
bcc = callPackage ../os-specific/linux/bcc {
python = pkgs.python3;
};
bpftrace = callPackage ../os-specific/linux/bpftrace { };
bpm-tools = callPackage ../tools/audio/bpm-tools { }; bpm-tools = callPackage ../tools/audio/bpm-tools { };
byacc = callPackage ../development/tools/parsing/byacc { }; byacc = callPackage ../development/tools/parsing/byacc { };

View file

@ -250,6 +250,7 @@ in {
inherit (kernel) kernelOlder kernelAtLeast; inherit (kernel) kernelOlder kernelAtLeast;
# Obsolete aliases (these packages do not depend on the kernel). # Obsolete aliases (these packages do not depend on the kernel).
inherit (pkgs) odp-dpdk pktgen; # added 2018-05 inherit (pkgs) odp-dpdk pktgen; # added 2018-05
inherit (pkgs) bcc bpftrace; # added 2021-12
acpi_call = callPackage ../os-specific/linux/acpi-call {}; acpi_call = callPackage ../os-specific/linux/acpi-call {};
@ -263,12 +264,6 @@ in {
batman_adv = callPackage ../os-specific/linux/batman-adv {}; batman_adv = callPackage ../os-specific/linux/batman-adv {};
bcc = callPackage ../os-specific/linux/bcc {
python = pkgs.python3;
};
bpftrace = callPackage ../os-specific/linux/bpftrace { };
bbswitch = callPackage ../os-specific/linux/bbswitch {}; bbswitch = callPackage ../os-specific/linux/bbswitch {};
chipsec = callPackage ../tools/security/chipsec { chipsec = callPackage ../tools/security/chipsec {