在幽兰上体验eBPF

正式发布的幽兰代码本已经预装好 bcc 及其依赖,可以直接通过 Python 接口轻松编写 eBPF 程序并运行,示例程序 Hello_YourLand.py 就在 /home/geduer 目录下,内容如下:

直接使用 sudo ./HelloYourLand.py 即可运行。这时再做一些使用到 clone 的操作(比如启动一个新程序)就检测并打印出相应的信息。通过 eBP F追踪系统调用的过程,可以看挂在系统调用 clone 上的函数 hello 通过 bpf_trace_printk 成功输出 Here is YourLand!

如果是自己写的 python 脚本,注意还要在写完后设置好执行权限才能运行。

附录:若自行编译,需注意

幽兰的环境已经配置好,我们在这里仍然列出环境配置过程,如果你在其他系统安装,可以参考。

官方的安装指南存在一些问题,重点注意 clang 路径相关的问题以及 python 路径相关的问题。

根据 bcc/INSTALL.md at master · iovisor/bcc · GitHub 的指示操作,先安装好依赖。

Trusty (14.04 LTS) and older
VER=trusty
echo "deb http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main
deb-src http://llvm.org/apt/$VER/ llvm-toolchain-$VER-3.7 main" | \
  sudo tee /etc/apt/sources.list.d/llvm.list
wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
sudo apt-get update

For Bionic (18.04 LTS)
sudo apt-get -y install bison build-essential cmake flex git libedit-dev \
  libllvm6.0 llvm-6.0-dev libclang-6.0-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils

For Focal (20.04.1 LTS)
sudo apt install -y bison build-essential cmake flex git libedit-dev \
  libllvm12 llvm-12-dev libclang-12-dev python zlib1g-dev libelf-dev libfl-dev python3-distutils

For Hirsute (21.04) or Impish (21.10)
sudo apt install -y bison build-essential cmake flex git libedit-dev \
libllvm11 llvm-11-dev libclang-11-dev python3 zlib1g-dev libelf-dev libfl-dev python3-distutils

For Jammy (22.04)
sudo apt install -y bison build-essential cmake flex git libedit-dev \
libllvm14 llvm-14-dev libclang-14-dev python3 zlib1g-dev libelf-dev libfl-dev python3-distutils

For other versions
sudo apt-get -y install bison build-essential cmake flex git libedit-dev \
  libllvm3.7 llvm-3.7-dev libclang-3.7-dev python zlib1g-dev libelf-dev python3-distutils

For Lua support
sudo apt-get -y install luajit luajit-5.1-dev

准备好源码。bcc 不同的版本在安装时使用的一些默认路径可能不同,但是官方相应的 CMakeLists.txt 很可能没有更新。这里需要注意,幽兰上成功安装的版本是0.26.0版本,而在看本教程的时候,可能 bcc 已经更新了版本做了改动。如果无法成功安装,可以尝试下载0.26.0的版本安装。

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build

修改 CMakeLists.txt 中 CLANG_SEARCH 路径,否则会找不到 clang 相关的头文件
找到set(CLANG_SEARCH "/opt/local/llvm/lib;/usr/lib/llvm-3.7/lib;${LLVM_LIBRARY_DIRS}")
修改为set(CLANG_SEARCH "/opt/local/llvm/lib;/usr/lib/llvm-12/lib;${LLVM_LIBRARY_DIRS}")

然后再用源码进行编译:

cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd

最后还需要调整 python 链接

sudo rm /usr/bin/python
sudo ln -s /usr/bin/python3 /usr/bin/python

编译安装过程截图:

作者:沈根成  创建时间:2023-03-27 18:10
最后编辑:沈根成  更新时间:2024-05-06 17:42