38.2. 初始化 SystemTap 的交叉检测
初始化 SystemTap 的交叉检测,以从一个系统上的 SystemTap 脚本构建 SystemTap 检测模块,并在另一个系统上使用未完全部署 SystemTap 的系统上构建 SystemTap 检测模块。
先决条件
- 在主机系统上安装 SystemTap,如安装 Systemtap 所述。
systemtap-runtime
软件包安装在每个 目标系统中 :# yum install systemtap-runtime
- 主机系统和目标系统都是相同的架构。
- 主机系统和目标系统都使用相同的 Red Hat Enterprise Linux 主版本(如 Red Hat Enterprise Linux 8),它们可以在不同的次版本中运行(如 8.1 和 8.2)。
内核打包错误可能会阻止在一个系统中安装多个 kernel-debuginfo
和 kernel-devel
软件包。在这种情况下,主机系统和目标系统的次版本必须匹配。如果发生错误,将其报告为 https://bugzilla.redhat.com/。
流程
确定在每个目标系统中运行的内核:
$ uname -r
为每个目标系统重复此步骤。
- 在主机系统中,根据安装Systemtap 中描述的方法,为每个目标系统安装目标内核和相关的软件包。
在主机系统中构建检测模块,将这个模块复制到目标系统中并在其中运行:
使用远程实现:
# stap --remote target_system script
这个命令在目标系统中远程实施指定的脚本。您必须确保能够通过 SSH 从主机系统连接到目标系统。
手动:
在主机系统中构建检测模块:
# stap -r kernel_version script -m module_name -p 4
此处 kernel_version 是指在第 1 步中确定的目标内核版本,script 是要转换为检测模块的脚本,module_name 是检测模块的名称。
p4
选项告知 SystemTap 不要加载并运行已编译的模块。编译检测模块后,将其复制到目标系统并使用以下命令载入它:
# staprun module_name.ko