从去年就开始想办法在 WSL2 上安装 BCC,但无论是官方教程1还是网上的其它解决方法2都没能很好地解决问题。直到今天,在综合了一堆方案后,终于完美解决。下面是具体的步骤:
当前系统版本信息
$ wsl --version WSL 版本: 2.2.1.0 内核版本: 5.15.150.1-2
-
下载内核:
git clone --depth 1 https://github.com/microsoft/WSL2-Linux-Kernel.git -b linux-msft-wsl-$(uname -r | cut -d '-' -f 1) cd WSL2-Linux-Kernel
-
安装必要工具:
sudo apt install flex bison build-essential libelf-dev libncurses-dev libssl-dev bc binutils dwarves
-
复制配置文件:
cp Microsoft/config-wsl .config
在
.config
中修改以下选项:CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_NET_CLS_BPF=m CONFIG_NET_ACT_BPF=m CONFIG_BPF_JIT=y CONFIG_HAVE_BPF_JIT=y CONFIG_HAVE_EBPF_JIT=y CONFIG_BPF_EVENTS=y CONFIG_IKHEADERS=m CONFIG_NET_SCH_SFQ=m CONFIG_NET_ACT_POLICE=m CONFIG_NET_ACT_GACT=m CONFIG_DUMMY=m CONFIG_VXLAN=m
-
获取内核版本:
export KERNELRELEASE=$(uname -r)
编译:
make KERNELRELEASE=$KERNELRELEASE -j 4 make KERNELRELEASE=$KERNELRELEASE modules -j 4 sudo make KERNELRELEASE=$KERNELRELEASE modules_install
-
挂载:
sudo mount -t debugfs debugfs /sys/kernel/debug
-
按照官方文档安装 BCC。例如,对于 Ubuntu:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4052245BD4284CDD echo "deb https://repo.iovisor.org/apt/$(lsb_release -cs) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/iovisor.list sudo apt-get update sudo apt-get install bcc-tools libbcc-examples linux-headers-$(uname -r)
需要注意的是,BCC 官方编译好的版本只给到了 bionic(Ubuntu 18.04 LTS)3,如果你的系统版本在此之上,就不得不从源码自己编译。
-
如果要从源码编译,首先要安装必要的工具链。
如果你自己之前折腾过了,先清理一下,不然会出问题:
sudo rm /usr/lib/python3/dist-packages/bcc*
例如,对于我的 jammy(Ubuntu 22.04 LTS):
sudo apt install -y zip bison build-essential cmake flex git libedit-dev libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-setuptools liblzma-dev libdebuginfod-dev arping netperf iperf sudo ln -s /usr/bin/python3 /usr/bin/python
然后编译安装 BCC:
git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. make sudo make install cmake -DPYTHON_CMD=python3 .. pushd src/python/ make sudo make install popd
-
确认安装成功:
cd /usr/share/bcc/tools sudo ./execsnoop
祝愿你此刻没有任何报错!
后续使用时,如果你重启过系统,只需要重新编译安装一下内核即可。
Comments