# luajit is not available RHEL 8 %bcond_with lua %bcond_with llvm_static %if %{without llvm_static} %global with_llvm_shared 1 %endif Name: bcc Version: 0.25.0 Release: 2%{?dist} Summary: BPF Compiler Collection (BCC) License: ASL 2.0 URL: https://github.com/iovisor/bcc Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz Patch0: %{name}-%{version}-Manpages-remove-unstable-statement.patch Patch1: %{name}-%{version}-RHEL-libbpf-version-fixes.patch Patch2: %{name}-%{version}-libbpf-Allow-kernel_struct_has_field-to-reach-field-.patch Patch3: %{name}-%{version}-Fix-bpf_pseudo_fd-type-conversion-error.patch Patch4: %{name}-%{version}-Fix-clang-15-int-to-pointer-conversion-errors.patch Patch5: %{name}-%{version}-Revert-tools-tcpaccept-Fix-support-for-v5.6-kernels.patch Patch6: %{name}-%{version}-Fix-get_kprobe_functions.patch # Arches will be included as upstream support is added and dependencies are # satisfied in the respective arches ExcludeArch: i686 BuildRequires: bison BuildRequires: cmake >= 2.8.7 BuildRequires: flex BuildRequires: libxml2-devel BuildRequires: python3-devel BuildRequires: elfutils-libelf-devel BuildRequires: llvm-devel BuildRequires: clang-devel %if %{with llvm_static} BuildRequires: llvm-static %endif BuildRequires: ncurses-devel %if %{with lua} BuildRequires: pkgconfig(luajit) %endif BuildRequires: libbpf-devel >= 0.5.0, libbpf-static >= 0.5.0 Requires: libbpf >= 0.5.0 Requires: tar Recommends: kernel-devel Recommends: %{name}-tools = %{version}-%{release} %description BCC is a toolkit for creating efficient kernel tracing and manipulation programs, and includes several useful tools and examples. It makes use of extended BPF (Berkeley Packet Filters), formally known as eBPF, a new feature that was first added to Linux 3.15. BCC makes BPF programs easier to write, with kernel instrumentation in C (and includes a C wrapper around LLVM), and front-ends in Python and lua. It is suited for many tasks, including performance analysis and network traffic control. %package devel Summary: Shared library for BPF Compiler Collection (BCC) Requires: %{name}%{?_isa} = %{version}-%{release} %description devel The %{name}-devel package contains libraries and header files for developing application that use BPF Compiler Collection (BCC). %package doc Summary: Examples for BPF Compiler Collection (BCC) Recommends: python3-%{name} = %{version}-%{release} %if %{with lua} Recommends: %{name}-lua = %{version}-%{release} %endif BuildArch: noarch %description doc Examples for BPF Compiler Collection (BCC) %package -n python3-%{name} Summary: Python3 bindings for BPF Compiler Collection (BCC) Requires: %{name}%{?_isa} = %{version}-%{release} %{?python_provide:%python_provide python3-%{name}} %description -n python3-%{name} Python3 bindings for BPF Compiler Collection (BCC) %if %{with lua} %package lua Summary: Standalone tool to run BCC tracers written in Lua Requires: %{name}%{?_isa} = %{version}-%{release} %description lua Standalone tool to run BCC tracers written in Lua %endif %package tools Summary: Command line tools for BPF Compiler Collection (BCC) Requires: bcc = %{version}-%{release} Requires: python3-%{name} = %{version}-%{release} Requires: python3-netaddr %description tools Command line tools for BPF Compiler Collection (BCC) %prep %autosetup -p1 %build %cmake . \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DREVISION_LAST=%{version} -DREVISION=%{version} -DPYTHON_CMD=python3 \ -DCMAKE_USE_LIBBPF_PACKAGE:BOOL=TRUE \ %{?with_llvm_shared:-DENABLE_LLVM_SHARED=1} %make_build %install %make_install # Fix python shebangs # This messes the timestamp and rpmdiff complains about it # Let's set the all thing according to a reference file touch -r %{buildroot}%{_datadir}/%{name}/examples/hello_world.py %{_tmppath}/timestamp find %{buildroot}%{_datadir}/%{name}/{tools,examples} -type f -exec \ sed -i -e '1s=^#!/usr/bin/python\([0-9.]\+\)\?$=#!%{__python3}=' \ -e '1s=^#!/usr/bin/env python\([0-9.]\+\)\?$=#!%{__python3}=' \ -e '1s=^#!/usr/bin/env bcc-lua$=#!/usr/bin/bcc-lua=' {} \; for i in `find %{buildroot}%{_datadir}/%{name}/examples/` ; do touch -h -r %{_tmppath}/timestamp $i done # Move man pages to the right location mkdir -p %{buildroot}%{_mandir} mv %{buildroot}%{_datadir}/%{name}/man/* %{buildroot}%{_mandir}/ # Avoid conflict with other manpages # https://bugzilla.redhat.com/show_bug.cgi?id=1517408 for i in `find %{buildroot}%{_mandir} -name "*.gz"`; do tname=$(basename $i) rename $tname %{name}-$tname $i done # Fix the symlink too for i in `find %{buildroot}%{_mandir} -lname \*.gz` ; do target=`readlink $i`; ln -sf bcc-$target $i; done # We cannot run the test suit since it requires root and it makes changes to # the machine (e.g, IP address) #%check %ldconfig_scriptlets %files %doc README.md %license LICENSE.txt %{_libdir}/lib%{name}.so.* %{_libdir}/libbcc_bpf.so.* %files devel %exclude %{_libdir}/lib%{name}*.a %exclude %{_libdir}/lib%{name}*.la %{_libdir}/lib%{name}.so %{_libdir}/libbcc_bpf.so %{_libdir}/pkgconfig/lib%{name}.pc %{_includedir}/%{name}/ %files -n python3-%{name} %{python3_sitelib}/%{name}* %files doc # % dir % {_docdir}/% {name} %doc %{_datadir}/%{name}/examples/ %if %{without lua} %exclude %{_datadir}/%{name}/examples/lua %endif %files tools %dir %{_datadir}/%{name} %dir %{_datadir}/%{name}/tools %dir %{_datadir}/%{name}/introspection %{_datadir}/%{name}/tools/* %{_datadir}/%{name}/introspection/* %exclude %{_datadir}/%{name}/tools/old/ # inject relies on BPF_KPROBE_OVERRIDE which is not set on RHEL 8 %exclude %{_datadir}/%{name}/tools/inject %exclude %{_datadir}/%{name}/tools/doc/inject_example.txt %exclude %{_mandir}/man8/bcc-inject.8.gz # Neither btrfs nor zfs are available on RHEL8 %exclude %{_datadir}/%{name}/tools/btrfs* %exclude %{_datadir}/%{name}/tools/doc/btrfs* %exclude %{_mandir}/man8/bcc-btrfs* %exclude %{_datadir}/%{name}/tools/zfs* %exclude %{_datadir}/%{name}/tools/doc/zfs* %exclude %{_mandir}/man8/bcc-zfs* # criticalstat relies on CONFIG_PREEMPTIRQ_EVENTS which is disabled on RHEL 8 %exclude %{_datadir}/%{name}/tools/criticalstat %exclude %{_datadir}/%{name}/tools/doc/criticalstat_example.txt %exclude %{_mandir}/man8/bcc-criticalstat.8.gz # compactsnoop is only supported on x86_64 %ifnarch x86_64 %exclude %{_datadir}/%{name}/tools/compactsnoop %exclude %{_datadir}/%{name}/tools/doc/compactsnoop_example.txt %exclude %{_mandir}/man8/bcc-compactsnoop.8.gz %endif %{_mandir}/man8/* %if %{with lua} %files lua %{_bindir}/bcc-lua %endif %changelog * Tue Jan 10 2023 Jerome Marchand - 0.25.0-2 - Fix tcpdrop tool * Wed Nov 30 2022 Jerome Marchand - 0.25.0-1 - Rebase to bcc-0.25.0 - Rebuild on LLVM 15 * Thu Jun 23 2022 Jerome Marchand - 0.24.0-2 - Rebuild on libbpf 0.5.0 * Thu Jun 09 2022 Jerome Marchand - 0.24.0-1 - Rebase to bcc-0.24.0 - Rebuild on LLVM 14 * Mon Dec 06 2021 Jerome Marchand - 0.19.0-6 - Add excplicit requirement in bcc-tools for rpmdiff * Tue Nov 23 2021 Jerome Marchand - 0.19.0-5 - Handle the renaming of task_struct_>state field - Rebuild for LLVM 13 * Fri Jul 02 2021 Jerome Marchand - 0.19.0-4 - Build bcc from standard sources - Don't require bcc-tools by default * Wed Jun 09 2021 Jerome Marchand - 0.19.0-3 - Rebuild on LLVM 12 * Fri Apr 30 2021 Jerome Marchand - 0.19.0-2 - Fix BPF src_file. * Tue Apr 27 2021 Jerome Marchand - 0.19.0-1 - Rebased to version 0.19.0 - Remove hard dependency on kernel-devel * Fri Jan 22 2021 Jerome Marchand - 0.16.0-2 - Build with libbpf package - spec file cleanups * Mon Oct 26 2020 Jerome Marchand - 0.16.0-1 - Rebase on bcc-0.16.0 - Fix IPv6 ports * Wed Sep 02 2020 Jerome Marchand - 0.14.0-4 - Fix KFUNC_PROBE return value - Forbid trampolines on unsupported arches * Tue Jul 21 2020 Jerome Marchand - 0.14.0-3 - Add KBUILD_MODNAME flag to default cflags * Thu Jun 11 2020 Jerome Marchand - 0.14.0-2 - Remove criticalstat manpage - Remove compactsnoop on non x86_64 - Suggest to use --binary in deadlock - Remove non-existent argument from tcpconnect man page - Suggest to install the proper kernel-devel version - Fix dbstat and dbslower * Wed Apr 22 2020 Jerome Marchand - 0.14.0-1 - Rebase on bcc-0.14.0 * Wed Dec 04 2019 Jerome Marchand - 0.11.0-2 - Add -c option ton the synopsis of tcpretrans manpage * Tue Nov 26 2019 Jerome Marchand - 0.11.0-1 - Rebase to bcc-0.11.0 - Reinstate the unstable comment patch that has been removed by mistake * Thu Oct 17 2019 Jerome Marchand - 0.10.0-1 - Rebase to bcc-0.10.0 - Drop criticalstat - Fix regression on vfscount and runqslower - Rebuild on LLVM 9 * Tue Aug 06 2019 Jerome Marchand - 0.8.0-4 - remove unstable statement from the man pages * Wed Jul 03 2019 Jerome Marchand - 0.8.0-3 - fix b.support_raw_tracepoint - fix runqslower warning * Wed May 15 2019 Jerome Marchand - 0.8.0-2 - Rebuild for llvm 8 * Thu Apr 11 2019 Jerome Marchand - 0.8.0-1 - Rebase on bcc-8.0.0 - Replace the temporary s390x workaround by a proper fix - Remove the doc of excluded tool from the package - Fix print_log2_hist - Fix yet a few other python3 bytes vs strings issues * Mon Mar 25 2019 Jerome Marchand - 0.7.0-6 - Add CI gating * Thu Dec 13 2018 Jerome Marchand - 0.7.0-5 - Fix biolatency -D - Fix biotop manpage - Rebuild for LLVM 7.0.1 (from Tom Stellard) * Mon Dec 10 2018 Jerome Marchand - 0.7.0-4 - Fix bio* tools * Mon Nov 05 2018 Jerome Marchand - 0.7.0-3 - Fix multiple bytes/string encoding issues - Fix misc covscan warning * Mon Oct 15 2018 Tom Stellard - 0.7.0-2 - Drop explicit dependency on clang-libs * Fri Oct 12 2018 Jerome Marchand - 0.7.0-1 - Rebase on bcc-7.0.0 - Remove useless tools (zfs*, btrfs* and inject) * Thu Sep 20 2018 Jerome Marchand - 0.6.1-1 - Rebase on bcc-0.6.1 * Thu Sep 20 2018 Jerome Marchand - 0.6.0-6 - llcstat: print a nicer error message on virtual machine - Add NSS support to sslsniff - Fixes miscellaneous error uncovered by covscan * Wed Aug 08 2018 Tom Stellard - 0.6.0-5 - Use llvm-toolset-6.0 prefix for clang-libs dependency * Fri Aug 03 2018 Tom Stellard - 0.6.0-4 - Rebuld for llvm-toolset-6.0 * Wed Jul 18 2018 Jerome Marchand - 0.6.0-3 - Disable lua on all arches * Tue Jun 26 2018 Jerome Marchand - 0.6.0-2 - Add clang-libs requirement - Fix manpages symlinks * Tue Jun 19 2018 Jerome Marchand - 0.6.0-1 - Rebase on bcc-0.6.0 * Thu May 24 2018 Jerome Marchand - 0.5.0-5 - Enables build on ppc64(le) and s390x arches * Thu Apr 05 2018 Rafael Santos - 0.5.0-4 - Resolves #1555627 - fix compilation error with latest llvm/clang * Wed Feb 07 2018 Fedora Release Engineering - 0.5.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild * Fri Feb 02 2018 Igor Gnatenko - 0.5.0-2 - Switch to %%ldconfig_scriptlets * Wed Jan 03 2018 Rafael Santos - 0.5.0-1 - Rebase to new released version * Thu Nov 16 2017 Rafael Santos - 0.4.0-4 - Resolves #1517408 - avoid conflict with other manpages * Thu Nov 02 2017 Rafael Santos - 0.4.0-3 - Use weak deps to not require lua subpkg on ppc64(le) * Wed Nov 01 2017 Igor Gnatenko - 0.4.0-2 - Rebuild for LLVM5 * Wed Nov 01 2017 Rafael Fonseca - 0.4.0-1 - Resolves #1460482 - rebase to new release - Resolves #1505506 - add support for LLVM 5.0 - Resolves #1460482 - BPF module compilation issue - Partially address #1479990 - location of man pages - Enable ppc64(le) support without lua - Soname versioning for libbpf by ignatenkobrain * Wed Aug 02 2017 Fedora Release Engineering - 0.3.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild * Wed Jul 26 2017 Fedora Release Engineering - 0.3.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild * Thu Mar 30 2017 Igor Gnatenko - 0.3.0-2 - Rebuild for LLVM4 - Trivial fixes in spec * Fri Mar 10 2017 Rafael Fonseca - 0.3.0-1 - Rebase to new release. * Fri Feb 10 2017 Fedora Release Engineering - 0.2.0-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild * Tue Jan 10 2017 Rafael Fonseca - 0.2.0-2 - Fix typo * Tue Nov 29 2016 Rafael Fonseca - 0.2.0-1 - Initial import