如何在CentOS上配置eBPF开发环境

简介: 【2月更文挑战第5天】

首先,对于 CentOS 来说,根据官方文档,CentOS 8 已在 2021 年底被放弃,所以不再推荐将其作为生产环境继续使用。对于已有的用户来说,可以升级到 CentOS Stream 或 Rocky Linux 继续获得开源社区的支持。比如,你可以执行下面的命令,把 CentOS 8 升级为 CentOS Stream 8:

sudo dnf --disablerepo '*' --enablerepo extras swap centos-linux-repos centos-stream-repos -y
sudo dnf distro-sync -y

打开一个终端,SSH 连接到 CentOS Stream 8 系统后,执行 dnf info bcc-tools 查询 BCC 的版本,你会看到如下的输出:

Available Packages
Name         : bcc-tools
Version      : 0.19.0
Release      : 5.el8
Architecture : x86_64
Size         : 448 k
Source       : bcc-0.19.0-5.el8.src.rpm
Repository   : appstream
Summary      : Command line tools for BPF Compiler Collection (BCC)
URL          : https://github.com/iovisor/bcc
License      : ASL 2.0
Description  : Command line tools for BPF Compiler Collection (BCC)

为了使用较新的 BCC,从源码编译安装就是比直接使用 dnf 安装更好的选择。


在终端中执行下面的命令,我们就可以从源码编译和安装 BCC 0.24.0 版本:

# 第一步,安装必要的开发工具和开发库
sudo dnf makecache --refresh
sudo dnf groupinstall -y "Development tools"
sudo dnf install -y git bison flex cmake3 clang llvm bpftool elfutils-libelf-devel clang-devel llvm-devel ncurses-devel
# 第二步,从源码编译安装BCC
git clone -b v0.24.0 https://github.com/iovisor/bcc.git
mkdir bcc/build; cd bcc/build
cmake -DENABLE_LLVM_SHARED=1 ..
make
sudo make install
cmake -DPYTHON_CMD=python3 .. # build python3 binding
pushd src/python/
make
sudo make install
popd

命令执行成功后,所有的 BCC 工具都会安装到 /usr/share/bcc/tools 目录下。比如,你可以执行 sudo python3 /usr/share/bcc/tools/execsnoop 命令来运行 BCC 自带的 execsnoop 工具。


从 bpftrace 预先编译好的容器镜像中复制二进制文件。


我们执行下面的命令,安装容器工具 podman 之后,借助 podman 拉取 bpftrace 容器镜像,再将其中的 bpftrace 二进制文件复制出来,就可以把 bpftrace 安装到当前目录了:

# 第一步,安装podman
sudo dnf install -y podman
# 第二步,下载镜像后从中复制bpftrace二进制文件
podman pull quay.io/iovisor/bpftrace:master-vanilla_llvm_clang_glibc2.23
podman run --security-opt label=disable -v $(pwd):/output quay.io/iovisor/bpftrace:master-vanilla_llvm_clang_glibc2.23 /bin/bash -c "cp /usr/bin/bpftrace /output"

这里需要你留意一点:在上面的命令中,我们使用了 podman 工具来拉取镜像并运行容器,这是因为 CentOS Stream 自带的软件包中不包含 Docker。


安装成功后,你可以执行下面的命令验证 bpftrace 的功能:

sudo ./bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'

如果一切正常,你将会看到类似下面的输出:

Attaching 1 probe...
vmstats /proc/meminfo
vmstats /proc/stat
vminfo /var/run/utmp
...

到这里,我们就完成了 CentOS Stream 开发环境的配置。


接下来从内核源码编译安装 bpftool 的第一步是下载内核的源码。根据发行版的不同,内核源码的下载方法可以分为三种:

  • 利用发行版自带的工具,下载安装发行版提供的内核源码包。比如 RHEL、CentOS、Ubuntu 等,都可以使用这种方法。
  • 直接从内核网站 kernel.org 下载内核源码,注意下载前要先执行 uname -r 查询系统的内核版本。
  • 发行版提供的代码仓库下载内核源码,比如对于 WSL2,就可以到 GitHub 下载。


后两种方法比较简单,只要从相关的网站中找到链接就可以直接下载了;而对于第一种方法,你可以执行下面的步骤,借助 yumdownloader 或 apt 工具下载发行版提供的内核源码包。


比如,在 CentOS Stream 8 系统中,你可以执行下面的命令,下载内核源码并安装内核编译所需的开发工具和开发库:

# 第一步,开启必需的软件包仓库
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --set-enabled powertools
# 第二步,下载内核源码
yumdownloader --source kernel
rpm -ivh kernel-*.src.rpm
# 第三步,安装依赖包
cd rpmbuild/SPECS/
sudo dnf builddep kernel.spec
# 第四步,解压内核源码并切换到解压后的内核源码目录(注意替换为你的内核版本)
rpmbuild -bp --target=x86_64 kernel.spec
cd ../BUILD/kernel-4.18.0-373.el8/linux-4.18.0-373.el8.x86_64/

内核源码下载成功后,它的 tools/bpf/bpftool 目录就包含了 bpftool 工具的源代码,因而你就可以从这个目录重新编译和安装 bpftool。


不过在编译之前要注意,libbfd 库包含在 binutils 开发库中,因而你还需要先安装 binutils 开发包。具体的安装和编译步骤如下所示:

# 第一步,安装binutils开发库
## CentOS执行dnf命令
sudo dnf install -y binutils-devel
## Ubuntu执行apt命令
sudo apt install -y binutils-dev
# 第二步,从源码编译并安装bpftool
make -C tools/bpf/bpftool
sudo make install -C tools/bpf/bpftool/


上述命令执行成功后,再次执行 sudo bpftool prog dump jited id 2 之后,你可以发现,现在已经可以正常看到 eBPF 程序的指令了。


相关文章
|
1月前
|
Linux 网络安全 Apache
CentOS 7.2配置Apache服务httpd(上)
CentOS 7.2配置Apache服务httpd(上)
194 1
|
11天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
51 2
|
25天前
|
Java jenkins 持续交付
Centos7下docker的jenkins下载并配置jdk与maven
通过上述步骤,您将成功在CentOS 7上的Docker容器中部署了Jenkins,并配置好了JDK与Maven,为持续集成和自动化构建打下了坚实基础。
78 1
|
27天前
|
存储 监控 Linux
在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践
本文详细介绍了在 CentOS 7 中如何对新硬盘进行分区、格式化、挂载及配置最佳实践,包括使用 `fdisk` 创建分区、`mkfs` 格式化分区、创建挂载点、编辑 `/etc/fstab` 实现永久挂载等步骤,旨在有效管理服务器磁盘空间,提高系统稳定性和可维护性。
32 1
|
1月前
|
Linux PHP Apache
CentOS 7.2配置Apache服务httpd(下)
CentOS 7.2配置Apache服务httpd(下)
47 1
|
3月前
|
弹性计算 关系型数据库 MySQL
centos7 mysql安装及配置
本文详细介绍了在阿里云服务器ECS上通过yum源安装MySQL 8.0.12的过程,包括更新yum源、下载并安装MySQL源、解决安装过程中可能遇到的问题等步骤。此外,还介绍了如何启动MySQL服务、设置开机自启、配置登录密码、添加远程登录用户以及处理远程连接异常等问题。适合初学者参考,帮助快速搭建MySQL环境。
390 8
centos7 mysql安装及配置
|
2月前
|
Linux
CentOS 7.x时间同步服务chrony配置详解
文章详细介绍了在CentOS 7.x系统中如何安装和配置chrony服务,以及它与ntpd服务的对比,强调了chrony在时间同步方面的高效性和准确性。
160 1
CentOS 7.x时间同步服务chrony配置详解
|
28天前
|
安全 Linux 数据库连接
CentOS 7环境下DM8数据库的安装与配置
【10月更文挑战第16天】本文介绍了在 CentOS 7 环境下安装与配置达梦数据库(DM8)的详细步骤,包括安装前准备、创建安装用户、上传安装文件、解压并运行安装程序、初始化数据库实例、配置环境变量、启动数据库服务、配置数据库连接和参数、备份与恢复、以及安装后的安全设置、性能优化和定期维护等内容。通过这些步骤,可以顺利完成 DM8 的安装与配置。
179 0
|
1月前
|
Linux
CentOS-Stream-9配置chfs
通过上述步骤,您就可以在CentOS Stream 9上配置并运行CHFS,为用户提供基于HTTP的文件分享服务。请注意,实际操作时应根据CHFS的具体版本和文档进行适当调整。
48 0
|
1月前
|
Ubuntu 网络协议 Linux
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
liunx各大发行版(centos,rocky,ubuntu,国产麒麟kylinos)网卡配置和包管理方面的区别
104 0
下一篇
无影云桌面