40.2. 初始化 SystemTap 的交叉检测

初始化 SystemTap 的交叉检测,以从一个系统上的 SystemTap 脚本构建 SystemTap 检测模块,并在另一个系统上使用未完全部署 SystemTap 的系统上构建 SystemTap 检测模块。

先决条件

  • 主机系统上安装 SystemTap,如安装 Systemtap 所述。
  • systemtap-runtime 软件包安装在每个 目标系统中 :

    # dnf install systemtap-runtime
  • 主机系统目标系统都是相同的架构。
  • 主机系统目标系统都使用相同的 Red Hat Enterprise Linux 主版本(如 Red Hat Enterprise Linux 9)。
重要

内核打包错误可能会阻止在一个系统中安装多个 kernel-debuginfokernel-devel 软件包。在这种情况下,主机系统目标系统的次版本必须匹配。如果发生错误,将其报告为 https://bugzilla.redhat.com/

流程

  1. 确定在每个目标系统中运行的内核:

    $ uname -r

    为每个目标系统重复此步骤。

  2. 主机系统中,根据安装Systemtap 中描述的方法,为每个目标系统安装目标内核和相关的软件包。
  3. 主机系统中构建检测模块,将这个模块复制到目标系统中并在其中运行:

    1. 使用远程实现:

      # stap --remote target_system script

      这个命令在目标系统中远程实施指定的脚本。您必须确保能够通过 SSH 从主机系统连接到目标系统

    2. 手动:

      1. 主机系统中构建检测模块:

        # stap -r kernel_version script -m module_name -p 4

        此处 kernel_version 是指在第 1 步中确定的目标内核版本,script 是要转换为检测模块的脚本,module_name检测模块的名称。p4 选项告知 SystemTap 不要加载并运行已编译的模块。

      2. 编译检测模块后,将其复制到目标系统并使用以下命令载入它:

        # staprun module_name.ko