centos7安装bcc和简单测试

系统环境

uname -r
5.10.2-1.el7.elrepo.x86_64
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

升级内核版本 https://www.cnblogs.com/xzkzzz/p/9627658.html

按照官方的安装流程安装

https://github.com/iovisor/bcc/blob/master/INSTALL.md#centos—source

安装依赖

更新安装会花一些时间

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

安装llvm

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 ../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 ../cfe-7.0.1.src
make
sudo make install
cd ..

按照教程里下载速度非常慢,可以直接去github上找到源码包下载 https://github.com/llvm/llvm-project/releases

安装bcc

git clone https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake3 ..
make
sudo make install

报错

error: no matching function for call to ‘llvm::object::SectionRef::getName() const’

搜索之后发现是因为最新的bcc对llvm的版本有要求,最低支持llvm11 https://github.com/iovisor/bcc/issues/3881

有两种解决方法

1. 下载llvm11 重新安装
2. bcc版本切换到release 0.24.0, commit 8f40d6f,使用旧版本bcc进行编译就可以成功了

由于上面已经安装过了llvm7,所以不想再编译安装一次,这里使用了方法2

测试

新建hello.c文件

int hello_world(void *ctx)
{
    bpf_trace_printk("Hello, World!");
    return 0;
}

新建hello.py

#!/usr/bin/env python3
from bcc import BPF

b = BPF(src_file="hello.c")
b.attach_kprobe(event="do_sys_openat2", fn_name="hello_world")
b.trace_print()

测试

sudo python3 hello.py
posted @ 2022-04-14 23:14  fainli  阅读(28)  评论(0)    收藏  举报  来源