ubuntu 20.04.4 安装 eBPF bcc

按理讲, 装个 bcc 有啥可记录的? 官方都有详细的安装说明, 直接一步步来不就好了. 其实我一开始也是这么想的. 然而现实很残酷, 花了我至少30分钟.

环境

supra@suprabox:~$ cat /etc/issue
Ubuntu 20.04.4 LTS \n \l

supra@suprabox:~$ uname -a
Linux suprabox 5.4.0-117-generic #132-Ubuntu SMP Thu Jun 2 00:39:06 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

官方安装文档

链接: https://github.com/iovisor/bcc/blob/master/INSTALL.md
关于 kernel 的配置, 由于 Ubuntu 20.04.4 的 kernel 已经是5.4.0, 所以默认已经全配置了.
由于官方说使用 package binary 的2种方式的 package 已经 outdated. 所以选用 source 编译安装.
自己编译需要 LLVM, Clang, cmake, gcc 根据不同的 Ubuntu 版本有不同的安装包, 复制命令执行就好

到真正安装和编译 BCC 的部分的时候, 出问题了:

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd

首先, git clone 在这个国家 clone 不下来, 于是设置代理:

git config --global http.proxy http://proxy.mycompany:80
//如果代理需要用户名密码:
git config --global http.proxy http://mydomain\\myusername:mypassword@myproxyserver:8080/

好的, clone 成功, 然后一步一步安装编译, 编译的时候, 有出错了, 错误消息大概是这样:

/tmp/bcc/src/cc/bpf_module.cc:108:46: error: no matching function for call to ‘llvm::object::SectionRef::getName() const’
       auto sec_name = section.get()->getName();

这个帖子一样的问题, 还给出了解决方案. 我采用的是使用 v0.24.0 版本. 所以只要切换到这个 tag 就好了:

git checkout v0.24.0

安装完成之后, 直接执行测试命令:

supra@suprabox:/usr/lib/python3/dist-packages/bcc$ sudo ~/bpf/bcc/examples/hello_world.py
Traceback (most recent call last):
  File "/home/supra/bpf/bcc/examples/hello_world.py", line 9, in <module>
    from bcc import BPF
ImportError: No module named bcc

看到之前编译的时候, 使用的是 Python3, 所以看了一些, 系统默认的 python 是2.7:

supra@suprabox:~$ $(which python) --version
Python 2.7.18

于是改用 python3, 就好了:

sudo python3  ~/bpf/bcc/examples/hello_world.py
[sudo] password for supra:
b'         splunkd-5799    [005] .... 47245.389935: 0: Hello, World!'
b'         splunkd-5799    [005] .... 47245.393749: 0: Hello, World!'

supra@suprabox:~$ sudo python3 ~/bpf/bcc/examples/tracing/tcpv4connect.py
PID    COMM         SADDR            DADDR            DPORT
158736 python3.7    127.0.0.1        127.0.0.1        8089
838    qualys-cloud 10.249.64.103    64.39.104.103    443
159247 curl         127.0.0.1        127.0.0.1        8089
158736 python3.7    127.0.0.1        127.0.0.1        8089
159329 curl         127.0.0.1        127.0.0.1        8089

至此, 安装成功.

标签: none

添加新评论