42.2. SystemTap のクロスインストルメンテーションの初期化
SystemTap のクロスインストルメンテーションを初期化し、あるシステムで SystemTap スクリプトから SystemTap インストルメンテーションモジュールを構築して SystemTap が完全にデプロイされていない別のシステムで使用します。
前提条件
- SystemTap は、SystemTap のインストール で説明されているように、ホストシステム にインストールされます。
各 ターゲットシステム に
systemtap-runtimeパッケージがインストールされている。# dnf install systemtap-runtime- ホストシステム と ターゲットシステム の両方のアーキテクチャーが同じである。
- ホストシステム と ターゲットシステム の両方が同じメジャーバージョンの Red Hat Enterprise Linux (Red Hat Enterprise Linux 9 など) を実行している。
カーネルパッケージのバグが原因で複数の 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