40.2. 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