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,遇到问题就从头来一遍 :)