mbox series

[SRU,BIONIC,v3,0/2] add bpftool to linux-tools-common

Message ID 20191120114823.27955-1-quentin.monnet@netronome.com
Headers show
Series add bpftool to linux-tools-common | expand

Message

Quentin Monnet Nov. 20, 2019, 11:48 a.m. UTC
BugLink: https://bugs.launchpad.net/bugs/1774815

[Impact]

bpftool is a debugging and introspection tool for BPF elements,
developed by the BPF kernel community. It is essential to list and dump
BPF programs and maps loaded on the system. Its sources are located in
the kernel repository, and because it is not packaged, administrators
willing to use bpftool must download the whole kernel sources, compile
and install the utility.

[Fix]

Adding bpftool to linux-tools and linux-tools-common packages makes it
easily accessible. These packages are already used to provide other
tools located in the kernel repository, such as perf.

The bpftool version provided with kernel 4.15 does not build properly,
because the API changed at some point in bfd.h from binutils-dev. Also,
it should be noted that the binutils-dev package description forbids
dependencies on libbfd:

   This package includes header files and static libraries necessary to
   build programs which use the GNU BFD library, which is part of
   binutils.  Note that building Debian packages which depend on the
   shared libbfd is Not Allowed.

Therefore, the proposed solution here is to get rid of the
libbfd/binutils-dev dependency entirely. So far it was used by perf
only, but perf can also be compiled without it anyway. Removing
binutils-dev also avoids being locked to a specific libbfd version in
case of future API changes.

This series contains four patches: the first to add feature detection to
bpftool Makefile, the second to use those features and to leave out the
bits relying on libbpfd. Then third patch removes dependency on
binutils-dev for the Linux package. At last, fourth patch adds packaging
for bpftool.

[Testcase]

A test linux package was successfully built, at:

https://launchpad.net/~qmonnet/+archive/ubuntu/ppa-linux-bpftool

(Built with:
  do_zfs=false
  do_dkms_nvidia=false
  do_dkms_vbox=false
  skipabi=true
  skipmodule=true
  skipretpoline=true)

Packages linux-tools-$(uname -r) and linux-tools-common can be built
with "debian/rules binary", and contain bpftool's binary and related
files (redirection script, bpftool manual pages, bash completion),
respectively.

[Regression Potential]

Low, as far as I can tell:

- binutils-dev was only used for building perf, but it is not mandatory
  and perf can be built without libbfd. The dependency on binutils-dev
  has been successfully removed on eoan.

- The backported patches touch only bpftool and one feature in
  tools/build/feature (only used with bpftool), all of it user space
  tools not used for anything other than bpftool itself.

- bpftool packaging does not change the way other tools are packaged
  (apart from creating $(toolsman)/man8 a few lines earlier), and should
  have no impact on the packaging of other tools. One dependency is
  added to Build-Depends-Indep.

---
Packaging for bpftool is upstream in eoan/master-next as commit 8579afd20b0c.

Discussion on v2 for bionic is available at:
https://lists.ubuntu.com/archives/kernel-team/2019-October/104622.html

Changes in v3:
- Remove dependency on libbpf (bintutils-dev package). This adds two
  patches: one to actually remove the dependency, the other (backported)
  to make bpftool build without libbfd. The commit fixing the build for
  binutils >= 2.9, backported in the previous iteration to fix bpftool
  compilation, is kept in this series because it adds feature detection
  to bpftool Makefile (required to build without libbfd).

Changes in v2:
- Patch has been applied to eoan.
- Switch from python-docutils to python3-docutils for the dependency
  providing rst2man for manual pages.
- Set CROSS_COMPILE when building bpftool.

I have been away from work for some time, please accept my sincere
apologies for the delay since v2 - especially because I chased up in the
past to have the set reviewed.

Quentin Monnet (1):
  UBUNTU: [Debian] package bpftool in linux-tools-common

Roman Gushchin (1):
  tools/bpftool: fix bpftool build with bintutils >= 2.9

Seth Forshee (1):
  UBUNTU: [Debian] Remove binutils-dev build dependency

Stanislav Fomichev (1):
  bpftool: make libbfd optional

 debian.master/control.stub.in                 |  2 +-
 debian.master/rules.d/amd64.mk                |  1 +
 debian.master/rules.d/arm64.mk                |  1 +
 debian.master/rules.d/armhf.mk                |  1 +
 debian.master/rules.d/i386.mk                 |  1 +
 debian.master/rules.d/ppc64el.mk              |  1 +
 debian.master/rules.d/s390x.mk                |  1 +
 debian/rules                                  |  2 +-
 debian/rules.d/1-maintainer.mk                |  1 +
 debian/rules.d/2-binary-arch.mk               |  9 +++++
 debian/rules.d/3-binary-indep.mk              | 12 +++++-
 tools/bpf/Makefile                            | 29 +++++++++++++++
 tools/bpf/bpf_jit_disasm.c                    |  7 ++++
 tools/bpf/bpftool/Makefile                    | 37 ++++++++++++++++++-
 tools/bpf/bpftool/jit_disasm.c                | 13 +++++++
 tools/bpf/bpftool/main.c                      |  3 --
 tools/bpf/bpftool/main.h                      | 13 +++++++
 tools/bpf/bpftool/prog.c                      |  3 ++
 tools/build/feature/Makefile                  |  4 ++
 .../feature/test-disassembler-four-args.c     | 15 ++++++++
 20 files changed, 148 insertions(+), 8 deletions(-)
 create mode 100644 tools/build/feature/test-disassembler-four-args.c

Comments

Seth Forshee Jan. 21, 2020, 8:11 p.m. UTC | #1
On Wed, Nov 20, 2019 at 11:48:19AM +0000, Quentin Monnet wrote:
> BugLink: https://bugs.launchpad.net/bugs/1774815
> 
> [Impact]
> 
> bpftool is a debugging and introspection tool for BPF elements,
> developed by the BPF kernel community. It is essential to list and dump
> BPF programs and maps loaded on the system. Its sources are located in
> the kernel repository, and because it is not packaged, administrators
> willing to use bpftool must download the whole kernel sources, compile
> and install the utility.
> 
> [Fix]
> 
> Adding bpftool to linux-tools and linux-tools-common packages makes it
> easily accessible. These packages are already used to provide other
> tools located in the kernel repository, such as perf.
> 
> The bpftool version provided with kernel 4.15 does not build properly,
> because the API changed at some point in bfd.h from binutils-dev. Also,
> it should be noted that the binutils-dev package description forbids
> dependencies on libbfd:
> 
>    This package includes header files and static libraries necessary to
>    build programs which use the GNU BFD library, which is part of
>    binutils.  Note that building Debian packages which depend on the
>    shared libbfd is Not Allowed.
> 
> Therefore, the proposed solution here is to get rid of the
> libbfd/binutils-dev dependency entirely. So far it was used by perf
> only, but perf can also be compiled without it anyway. Removing
> binutils-dev also avoids being locked to a specific libbfd version in
> case of future API changes.
> 
> This series contains four patches: the first to add feature detection to
> bpftool Makefile, the second to use those features and to leave out the
> bits relying on libbpfd. Then third patch removes dependency on
> binutils-dev for the Linux package. At last, fourth patch adds packaging
> for bpftool.
> 
> [Testcase]
> 
> A test linux package was successfully built, at:
> 
> https://launchpad.net/~qmonnet/+archive/ubuntu/ppa-linux-bpftool
> 
> (Built with:
>   do_zfs=false
>   do_dkms_nvidia=false
>   do_dkms_vbox=false
>   skipabi=true
>   skipmodule=true
>   skipretpoline=true)
> 
> Packages linux-tools-$(uname -r) and linux-tools-common can be built
> with "debian/rules binary", and contain bpftool's binary and related
> files (redirection script, bpftool manual pages, bash completion),
> respectively.
> 
> [Regression Potential]
> 
> Low, as far as I can tell:
> 
> - binutils-dev was only used for building perf, but it is not mandatory
>   and perf can be built without libbfd. The dependency on binutils-dev
>   has been successfully removed on eoan.
> 
> - The backported patches touch only bpftool and one feature in
>   tools/build/feature (only used with bpftool), all of it user space
>   tools not used for anything other than bpftool itself.
> 
> - bpftool packaging does not change the way other tools are packaged
>   (apart from creating $(toolsman)/man8 a few lines earlier), and should
>   have no impact on the packaging of other tools. One dependency is
>   added to Build-Depends-Indep.
> 
> ---
> Packaging for bpftool is upstream in eoan/master-next as commit 8579afd20b0c.
> 
> Discussion on v2 for bionic is available at:
> https://lists.ubuntu.com/archives/kernel-team/2019-October/104622.html
> 
> Changes in v3:
> - Remove dependency on libbpf (bintutils-dev package). This adds two
>   patches: one to actually remove the dependency, the other (backported)
>   to make bpftool build without libbfd. The commit fixing the build for
>   binutils >= 2.9, backported in the previous iteration to fix bpftool
>   compilation, is kept in this series because it adds feature detection
>   to bpftool Makefile (required to build without libbfd).
> 
> Changes in v2:
> - Patch has been applied to eoan.
> - Switch from python-docutils to python3-docutils for the dependency
>   providing rst2man for manual pages.
> - Set CROSS_COMPILE when building bpftool.
> 
> I have been away from work for some time, please accept my sincere
> apologies for the delay since v2 - especially because I chased up in the
> past to have the set reviewed.

And I apologize for not acking this sooneer, seems I missed it on the
list when it was sent.

Acked-by: Seth Forshee <seth.forshee@canonical.com>
Kleber Sacilotto de Souza Feb. 13, 2020, 5:23 p.m. UTC | #2
On 20.11.19 12:48, Quentin Monnet wrote:
> BugLink: https://bugs.launchpad.net/bugs/1774815
> 
> [Impact]
> 
> bpftool is a debugging and introspection tool for BPF elements,
> developed by the BPF kernel community. It is essential to list and dump
> BPF programs and maps loaded on the system. Its sources are located in
> the kernel repository, and because it is not packaged, administrators
> willing to use bpftool must download the whole kernel sources, compile
> and install the utility.
> 
> [Fix]
> 
> Adding bpftool to linux-tools and linux-tools-common packages makes it
> easily accessible. These packages are already used to provide other
> tools located in the kernel repository, such as perf.
> 
> The bpftool version provided with kernel 4.15 does not build properly,
> because the API changed at some point in bfd.h from binutils-dev. Also,
> it should be noted that the binutils-dev package description forbids
> dependencies on libbfd:
> 
>    This package includes header files and static libraries necessary to
>    build programs which use the GNU BFD library, which is part of
>    binutils.  Note that building Debian packages which depend on the
>    shared libbfd is Not Allowed.
> 
> Therefore, the proposed solution here is to get rid of the
> libbfd/binutils-dev dependency entirely. So far it was used by perf
> only, but perf can also be compiled without it anyway. Removing
> binutils-dev also avoids being locked to a specific libbfd version in
> case of future API changes.
> 
> This series contains four patches: the first to add feature detection to
> bpftool Makefile, the second to use those features and to leave out the
> bits relying on libbpfd. Then third patch removes dependency on
> binutils-dev for the Linux package. At last, fourth patch adds packaging
> for bpftool.
> 
> [Testcase]
> 
> A test linux package was successfully built, at:
> 
> https://launchpad.net/~qmonnet/+archive/ubuntu/ppa-linux-bpftool
> 
> (Built with:
>   do_zfs=false
>   do_dkms_nvidia=false
>   do_dkms_vbox=false
>   skipabi=true
>   skipmodule=true
>   skipretpoline=true)
> 
> Packages linux-tools-$(uname -r) and linux-tools-common can be built
> with "debian/rules binary", and contain bpftool's binary and related
> files (redirection script, bpftool manual pages, bash completion),
> respectively.
> 
> [Regression Potential]
> 
> Low, as far as I can tell:
> 
> - binutils-dev was only used for building perf, but it is not mandatory
>   and perf can be built without libbfd. The dependency on binutils-dev
>   has been successfully removed on eoan.
> 
> - The backported patches touch only bpftool and one feature in
>   tools/build/feature (only used with bpftool), all of it user space
>   tools not used for anything other than bpftool itself.
> 
> - bpftool packaging does not change the way other tools are packaged
>   (apart from creating $(toolsman)/man8 a few lines earlier), and should
>   have no impact on the packaging of other tools. One dependency is
>   added to Build-Depends-Indep.
> 
> ---
> Packaging for bpftool is upstream in eoan/master-next as commit 8579afd20b0c.
> 
> Discussion on v2 for bionic is available at:
> https://lists.ubuntu.com/archives/kernel-team/2019-October/104622.html
> 
> Changes in v3:
> - Remove dependency on libbpf (bintutils-dev package). This adds two
>   patches: one to actually remove the dependency, the other (backported)
>   to make bpftool build without libbfd. The commit fixing the build for
>   binutils >= 2.9, backported in the previous iteration to fix bpftool
>   compilation, is kept in this series because it adds feature detection
>   to bpftool Makefile (required to build without libbfd).
> 
> Changes in v2:
> - Patch has been applied to eoan.
> - Switch from python-docutils to python3-docutils for the dependency
>   providing rst2man for manual pages.
> - Set CROSS_COMPILE when building bpftool.
> 
> I have been away from work for some time, please accept my sincere
> apologies for the delay since v2 - especially because I chased up in the
> past to have the set reviewed.
> 
> Quentin Monnet (1):
>   UBUNTU: [Debian] package bpftool in linux-tools-common
> 
> Roman Gushchin (1):
>   tools/bpftool: fix bpftool build with bintutils >= 2.9
> 
> Seth Forshee (1):
>   UBUNTU: [Debian] Remove binutils-dev build dependency
> 
> Stanislav Fomichev (1):
>   bpftool: make libbfd optional
> 
>  debian.master/control.stub.in                 |  2 +-
>  debian.master/rules.d/amd64.mk                |  1 +
>  debian.master/rules.d/arm64.mk                |  1 +
>  debian.master/rules.d/armhf.mk                |  1 +
>  debian.master/rules.d/i386.mk                 |  1 +
>  debian.master/rules.d/ppc64el.mk              |  1 +
>  debian.master/rules.d/s390x.mk                |  1 +
>  debian/rules                                  |  2 +-
>  debian/rules.d/1-maintainer.mk                |  1 +
>  debian/rules.d/2-binary-arch.mk               |  9 +++++
>  debian/rules.d/3-binary-indep.mk              | 12 +++++-
>  tools/bpf/Makefile                            | 29 +++++++++++++++
>  tools/bpf/bpf_jit_disasm.c                    |  7 ++++
>  tools/bpf/bpftool/Makefile                    | 37 ++++++++++++++++++-
>  tools/bpf/bpftool/jit_disasm.c                | 13 +++++++
>  tools/bpf/bpftool/main.c                      |  3 --
>  tools/bpf/bpftool/main.h                      | 13 +++++++
>  tools/bpf/bpftool/prog.c                      |  3 ++
>  tools/build/feature/Makefile                  |  4 ++
>  .../feature/test-disassembler-four-args.c     | 15 ++++++++
>  20 files changed, 148 insertions(+), 8 deletions(-)
>  create mode 100644 tools/build/feature/test-disassembler-four-args.c
> 

These changes look good to me.

Thank you!


Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Kleber Sacilotto de Souza Feb. 14, 2020, 10:42 a.m. UTC | #3
On 20.11.19 12:48, Quentin Monnet wrote:
> BugLink: https://bugs.launchpad.net/bugs/1774815
> 
> [Impact]
> 
> bpftool is a debugging and introspection tool for BPF elements,
> developed by the BPF kernel community. It is essential to list and dump
> BPF programs and maps loaded on the system. Its sources are located in
> the kernel repository, and because it is not packaged, administrators
> willing to use bpftool must download the whole kernel sources, compile
> and install the utility.
> 
> [Fix]
> 
> Adding bpftool to linux-tools and linux-tools-common packages makes it
> easily accessible. These packages are already used to provide other
> tools located in the kernel repository, such as perf.
> 
> The bpftool version provided with kernel 4.15 does not build properly,
> because the API changed at some point in bfd.h from binutils-dev. Also,
> it should be noted that the binutils-dev package description forbids
> dependencies on libbfd:
> 
>    This package includes header files and static libraries necessary to
>    build programs which use the GNU BFD library, which is part of
>    binutils.  Note that building Debian packages which depend on the
>    shared libbfd is Not Allowed.
> 
> Therefore, the proposed solution here is to get rid of the
> libbfd/binutils-dev dependency entirely. So far it was used by perf
> only, but perf can also be compiled without it anyway. Removing
> binutils-dev also avoids being locked to a specific libbfd version in
> case of future API changes.
> 
> This series contains four patches: the first to add feature detection to
> bpftool Makefile, the second to use those features and to leave out the
> bits relying on libbpfd. Then third patch removes dependency on
> binutils-dev for the Linux package. At last, fourth patch adds packaging
> for bpftool.
> 
> [Testcase]
> 
> A test linux package was successfully built, at:
> 
> https://launchpad.net/~qmonnet/+archive/ubuntu/ppa-linux-bpftool
> 
> (Built with:
>   do_zfs=false
>   do_dkms_nvidia=false
>   do_dkms_vbox=false
>   skipabi=true
>   skipmodule=true
>   skipretpoline=true)
> 
> Packages linux-tools-$(uname -r) and linux-tools-common can be built
> with "debian/rules binary", and contain bpftool's binary and related
> files (redirection script, bpftool manual pages, bash completion),
> respectively.
> 
> [Regression Potential]
> 
> Low, as far as I can tell:
> 
> - binutils-dev was only used for building perf, but it is not mandatory
>   and perf can be built without libbfd. The dependency on binutils-dev
>   has been successfully removed on eoan.
> 
> - The backported patches touch only bpftool and one feature in
>   tools/build/feature (only used with bpftool), all of it user space
>   tools not used for anything other than bpftool itself.
> 
> - bpftool packaging does not change the way other tools are packaged
>   (apart from creating $(toolsman)/man8 a few lines earlier), and should
>   have no impact on the packaging of other tools. One dependency is
>   added to Build-Depends-Indep.
> 
> ---
> Packaging for bpftool is upstream in eoan/master-next as commit 8579afd20b0c.
> 
> Discussion on v2 for bionic is available at:
> https://lists.ubuntu.com/archives/kernel-team/2019-October/104622.html
> 
> Changes in v3:
> - Remove dependency on libbpf (bintutils-dev package). This adds two
>   patches: one to actually remove the dependency, the other (backported)
>   to make bpftool build without libbfd. The commit fixing the build for
>   binutils >= 2.9, backported in the previous iteration to fix bpftool
>   compilation, is kept in this series because it adds feature detection
>   to bpftool Makefile (required to build without libbfd).
> 
> Changes in v2:
> - Patch has been applied to eoan.
> - Switch from python-docutils to python3-docutils for the dependency
>   providing rst2man for manual pages.
> - Set CROSS_COMPILE when building bpftool.
> 
> I have been away from work for some time, please accept my sincere
> apologies for the delay since v2 - especially because I chased up in the
> past to have the set reviewed.
> 
> Quentin Monnet (1):
>   UBUNTU: [Debian] package bpftool in linux-tools-common
> 
> Roman Gushchin (1):
>   tools/bpftool: fix bpftool build with bintutils >= 2.9
> 
> Seth Forshee (1):
>   UBUNTU: [Debian] Remove binutils-dev build dependency
> 
> Stanislav Fomichev (1):
>   bpftool: make libbfd optional
> 
>  debian.master/control.stub.in                 |  2 +-
>  debian.master/rules.d/amd64.mk                |  1 +
>  debian.master/rules.d/arm64.mk                |  1 +
>  debian.master/rules.d/armhf.mk                |  1 +
>  debian.master/rules.d/i386.mk                 |  1 +
>  debian.master/rules.d/ppc64el.mk              |  1 +
>  debian.master/rules.d/s390x.mk                |  1 +
>  debian/rules                                  |  2 +-
>  debian/rules.d/1-maintainer.mk                |  1 +
>  debian/rules.d/2-binary-arch.mk               |  9 +++++
>  debian/rules.d/3-binary-indep.mk              | 12 +++++-
>  tools/bpf/Makefile                            | 29 +++++++++++++++
>  tools/bpf/bpf_jit_disasm.c                    |  7 ++++
>  tools/bpf/bpftool/Makefile                    | 37 ++++++++++++++++++-
>  tools/bpf/bpftool/jit_disasm.c                | 13 +++++++
>  tools/bpf/bpftool/main.c                      |  3 --
>  tools/bpf/bpftool/main.h                      | 13 +++++++
>  tools/bpf/bpftool/prog.c                      |  3 ++
>  tools/build/feature/Makefile                  |  4 ++
>  .../feature/test-disassembler-four-args.c     | 15 ++++++++
>  20 files changed, 148 insertions(+), 8 deletions(-)
>  create mode 100644 tools/build/feature/test-disassembler-four-args.c
> 

Applied to bionic/linux.

Thanks,
Kleber