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