简介
本文档介绍如何识别、解决和验证安全终端Linux连接器中的故障11。
确定BTF支持
为了使连接器使用eBPF监控文件系统和网络事件,必须满足以下条件之一:
- 当前内核已启用
CONFIG_DEBUG_INFO_BTF
,或
- 已为当前内核安装内核标头。
您的内核最好已启用CONFIG_DEBUG_INFO_BTF
。要检查当前内核是否启用了CONFIG_DEBUG_INFO_BTF
,请运行以下命令:
cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF
如果显示CONFIG_DEBUG_INFO_BTF=y
,则内核支持BTF,并且连接器可以使用eBPF监视文件系统和网络事件。 Linux连接器版本1.25.0和更新版本支持eBPF CO-RE,允许监控BTF支持的内核上的文件系统和网络事件,而无需安装内核报头。
故障11
如果当前的内核不支持BTF并且缺少所需的内核标头,则Linux连接器将引发故障11。使用以下步骤之一解决故障:
- 将内核和连接器升级到BTF支持的版本(首选解决方案),或
- 安装缺少的内核标头
支持BTF的分发
默认情况下,这些分配在最新内核版本中启用了CONFIG_DEBUG_INFO_BTF
:
- Centos/RHEL 8.2及更高版本
- Ubuntu 20.04及更高版本
- Oracle Linux 8.5及更高版本
- Debian 11及更高版本
- Alma Linux 8.3及更高版本
- Rocky Linux 8.3及更高版本
- SUSE Enterprise 15 SP4 / openSUSE Leap 15.4及更高版本
升级到BTF支持的内核
如果您所在的分布支持更高内核版本中的BTF,则最好更新内核以解决故障11。
在继续更新内核之前,请首先将Linux连接器升级到版本1.25.0或更新版本,以确保您的连接器支持BTF。
基于RPM的分配
本部分适用于:
- 阿尔玛Linux
- Amazon Linux
- CentOS Linux
- Oracle Linux Red Hat兼容内核(RHCK)
- Red Hat企业版Linux
- Rocky Linux
要升级到最新内核版本,请执行以下操作:
- 检查是否有可用于内核的更新:
yum check-update
如果在输出中看到kernel.x86_64
,则表示有可用的内核升级。
- 更新内核包:
sudo yum update kernel
- 重新启动系统:
sudo reboot
- 验证新内核是否支持BTF,并且连接器是否清除了故障11。
Oracle Linux Unbreakable Enterprise Kernel (UEK)
要升级到最新内核版本,请执行以下操作:
- 检查是否有可用于内核的更新:
yum check-update
如果在输出中看到kernel-uek.x86_64
,则表示存在可用的内核升级。
- 更新内核包:
sudo yum update kernel-uek
- 重新启动系统:
sudo reboot
- 验证新内核是否支持BTF,并且连接器是否清除了故障11。
SUSE Linux Enterprise和openSUSE Leap
要升级到最新内核版本,请执行以下操作:
- 检查当前的内核版本:
uname -r
- 列出可用的
内核默认
包: zypper search -s --match-exact kernel-default
输出显示为:
| kernel-default | package |
|
|
找到比步骤1中确定的当前内核版本更高的版本
。
- 使用以下命令安装新版本的
kernel-default
: sudo zypper install kernel-default=
- 重新启动系统:
sudo reboot
- 验证新内核是否支持BTF,并且连接器是否清除了故障11。
基于Debian的分布
要升级到最新内核版本,请执行以下操作:
- 检索最新的程序包列表:
sudo apt update
- 安装最新的软件包:
sudo apt upgrade
- 重新启动系统:
sudo reboot
- 验证新内核是否支持BTF,并且连接器是否清除了故障11。
安装缺少的内核标头
在安装缺少的内核标头之前,请尝试将系统升级到BTF支持的版本。如果这无法解决故障11,或者您的分发不支持最新版本的BTF,则继续安装缺少的内核标头。
基于RPM的分配
本部分适用于:
- 阿尔玛Linux
- Amazon Linux
- CentOS Linux
- Oracle Linux Red Hat兼容内核(RHCK)
- Red Hat企业版Linux
- Rocky Linux
验证
基于RPM的发行版要求为当前运行的内核安装内核级
软件包。要验证当前运行的内核是否安装了内核级
程序包,请运行:
rpm -qa | grep kernel-devel-$(uname -r)
如果没有结果,则缺少所需的内核级
软件包,需要安装。
分辨率
要安装所需的内核级别
程序包,请运行命令:
sudo dnf install -y kernel-devel-$(uname -r)
重新验证。故障11会在大约一分钟后由连接器清除。
Oracle Linux Unbreakable Enterprise Kernel (UEK)
验证
Oracle Linux UEK要求为当前运行的内核安装内核级别
程序包。要验证当前运行的内核是否安装了kernel-uek-level
程序包,请运行:
rpm -qa | grep kernel-uek-devel-$(uname -r)
如果没有结果,则缺少所需的kernel-uek-level
软件包,需要安装。
分辨率
要安装所需的kernel-uek-level
程序包,请运行命令:
sudo dnf install -y kernel-uek-devel-$(uname -r)
重新验证。故障11会在大约一分钟后由连接器清除。
SUSE Linux Enterprise和openSUSE Leap
验证
SUSE和openSUSE要求为当前运行的内核安装kernel-default-level
包。要验证当前运行的内核是否安装了kernel-default-level
程序包,请运行:
zypper search -si kernel-default-devel | grep $(uname -r | sed "s/-default//")
如果没有结果,则缺少所需的kernel-default-level
软件包,需要安装。
分辨率
安装内核报头
- 要确定是否可以安装适用于您的内核版本的正确的
kernel-default-level
软件包,请运行以下命令: zypper search -s kernel-default-devel | grep $(uname -r | sed "s/-default//")
输出包括语法:
| kernel-default-devel |
|
|
|
如果看到类似的输出,请注意输出中指定的version
,然后继续进行步骤2。否则,请跳过此部分,转而使用更新内核和安装匹配的内核报头的步骤。
- 使用此命令安装
kernel-default-level
程序包,将<version>
替换为上一步中确定的可用版本: sudo zypper install --oldpackage kernel-default-devel=
- 验证是否安装了
kernel-default-level
程序包。故障11会在约一分钟后由连接器清除。
更新内核并安装匹配的内核标头
如果所需的kernel-default-level
软件包不可用,请将内核更新为受支持的版本并安装匹配的内核标头。
- 使用以下命令列出可用的
kernel-default
和kernel-default-devele
程序包: zypper search -s --match-exact kernel-default kernel-default-devel
查找kernel-default
和kernel-default-level
软件包的匹配版本。例如:
| kernel-default | package |
|
|
| kernel-default-devel | package |
|
|
请注意输出中指定的new-version
。
注意:如果您无法找到要升级到的较新内核,则必须升级到更新的分发发行版本。
- 使用以下命令安装新版本的
kernel-default
和kernel-default-devel
: sudo zypper install kernel-default=
kernel-default-devel=
- 重新启动系统:
sudo reboot
- 重新验证。连接器会清除故障11。
基于Debian的分布
验证
基于Debian的分发版本要求为当前运行的内核安装linux-headers
程序包。要验证当前运行的内核是否安装了linux-headers
程序包,请运行:
apt list linux-headers-$(uname -r)
如果没有结果,则缺少所需的linux-headers
程序包,需要安装该程序包。
分辨率
要安装所需的linux-headers
程序包,请运行命令:
sudo apt install linux-headers-$(uname -r)
重新验证。故障11会在约一分钟后由连接器清除。