eBPF开发环境搭建

Posted 2023-11-22 01:57 +0800 by ZhangJie ‐ 1 min read

分享:  

问题背景

如果读者朋友使用的是Linux机器,而且系统是Ubuntu这些社区比较活跃的发行版,那么你遇到问题的时候,一般可以比较快地解决,或者很少遇到这种被他人反复才坑已经修复的问题。所以本篇文章并不一定适合你,不过看看也说不定有其他方面收获。

我使用的开发环境如下:

  • 处理器:i9 13900K (x86_64)
  • 操作系统:Windows 11
  • WSL版本:v2
  • Linux发行版:RedHat 8.5
  • Linux内核版本:5.15.90.1-microsoft-standard-WSL2+

2023年9月份已经在阅读lizrice的learning-ebpf一书了,并且自己还跑了下书中的用例,并对测试时遇到的环境设置问题进行了解决,但是隔了一段时间,因为执行了 yum update吧,clang、llvm、kernel-headers、bcc相关包,它们之间的依赖没有明显问题,但是整合到一起编译构建、运行ebpf程序的时候,开始报错。

于是2023.11.21日这天花费了大量时间来重新解决eBPF的开发环境设置问题,先记录下,供大家以及自己日后参考。

环境设置

内核配置

1、git clone https://github.com/kernel-newbies/WSL2-Linux-Kernel

2、cd WSL2-Linux-Kernel && git checkout linux-msft-wsl-5.15.90.1

​ 选择版本5.15.90.1,与lizrice/learning-ebpf中推荐版本5.15.x.y尽可能对齐

3、执行 make config 配置编译构建选项

​ 直接使用这里的.config ,这个已经是配置好了必要的ebpf选项的配置了

4、执行 make -j8 进行内核构建,内核输出到了vmlinuz文件

5、执行 sudo make headers_install 进行内核头文件安装

工具链配置

1、sudo yum install clang clang-devel llvm llvm-devel

​ 注意llvm不同版本兼容性有些问题,可能在低版本上编译ok升级后反而失败了,

​ 我就是遇到的这样的坑,原本bcc 0.26可以在llvm 16上编过,升级到llvm 17失败

2、不使用yum源中的bcc 0.25.0,有bug未修复,直接从源码安装

​ git clone https://github.com/iovisor/bcc iovisor_bcc

​ cd iovisor_bcc && mkdir build && cd build

​ cmake -DENABLE_LLVM_SHARED=1 ../

​ 有可能会遇到一些不严重的warning或者提示,最好都解决下:

​ sudo yum install zip xz-devel libffi-devel libdebuginfod-client-devel …

​ 继续执行编译构建:

​ sudo make install -j8

​ 此时python包、二进制工具、man手册都已经安装好了,可以在install_manifest…..txt文件中看详情。

3、也可以继续安装bpftool以及libbpf,这些都可以从源码安装:

​ cd iovisor_bcc/libbpf-tools/bpftool/src && sudo make install

​ cd iovisor_bcc/libbpf-tools/bpftool/libbpf && sudo make install

bpf程序跑侧

1、cd lizrice/learning-ebpf/chapter2

2、sudo ./hello.py

​ sudo ./hello-tail.py

用chapter 2的demo跑侧下,没有问题,继续把其他几个chapter的跑侧下。

本文小结

本文总结了下Windows WSL + eBPF程序开发过程中的快速环境设置,这么操作下来可以规避大多数棘手的问题。不妨收藏一下作为eBPF环境设置的checklist,遇到问题就从头来一遍 :)