CentOS 7.6上构建bcc-tools
## 更新: 在CentOS 7.7中,文件已经解决。直接`yum install bcc-tools`就可以了。
目前公司的CentOS 7.6系统上已经有bcc-tools软件包了,直接yum install bcc-tools就可以。遗憾的是,安装了之后程序运行报错。
CentOS 7.6 1810, with kernel 3.10.0-957.27.2.el7.x86_64 #1
运行tcplife,报错如下:
[hbcheng@myhost ~]$ sudo /usr/share/bcc/tools/tcplife [641/667]
[sudo] password for hbcheng:
In file included from /virtual/main.c:4:
In file included from /lib/modules/3.10.0-957.27.2.el7.x86_64/build/include/linux/tcp.h:21:
……
/lib/modules/3.10.0-957.27.2.el7.x86_64/build/arch/x86/include/asm/signal.h:23:2: note: array ‘sig’ declared here
unsigned long sig[_NSIG_WORDS];
^
49 warnings and 1 error generated.
Traceback (most recent call last):
File “/usr/share/bcc/tools/tcplife”, line 479, in <module>
b = BPF(text=bpf_text)
File “/usr/lib/python2.7/site-packages/bcc/__init__.py”, line 318, in __init__
raise Exception(“Failed to compile BPF text”)
Exception: Failed to compile BPF text
网上查了一下,好像跟llvm有关。于是决定从源码自己构建。
根据官方文档,流程如下:
## Centos - Source ## For Centos 7.6 only #Install build dependencies sudo yum install -y epel-release sudo yum update -y sudo yum groupinstall -y "Development tools" sudo yum install -y elfutils-libelf-devel cmake3 git bison flex ncurses-devel sudo yum install -y luajit luajit-devel # for Lua support ##Install and compile LLVM ## You could compile LLVM from source code curl -LO http://releases.llvm.org/7.0.1/llvm-7.0.1.src.tar.xz curl -LO http://releases.llvm.org/7.0.1/cfe-7.0.1.src.tar.xz tar -xf cfe-7.0.1.src.tar.xz tar -xf llvm-7.0.1.src.tar.xz mkdir clang-build mkdir llvm-build cd llvm-build cmake3 -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../llvm-7.0.1.src make sudo make install cd ../clang-build cmake3 -G "Unix Makefiles" -DLLVM_TARGETS_TO_BUILD="BPF;X86" \ -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr ../cfe-7.0.1.src make sudo make install cd .. ## Install and compile BCC git clone https://github.com/iovisor/bcc.git mkdir bcc/build; cd bcc/build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install
llvm和clang的构建比较费时间。在make那一步,可以试试make -j 8 (根据自己电脑性能调整数字)
incomplete definition of type ‘struct kiocb’
## 还有一个关键就是你需要安装跟系统内核版本对应的kernel 源码包,不然编译BPF程序的时候会报错。