38.2. SystemTap のクロスインストルメンテーションの初期化
SystemTap のクロスインストルメンテーションを初期化し、あるシステムで SystemTap スクリプトから SystemTap インストルメンテーションモジュールを構築して SystemTap が完全にデプロイされていない別のシステムで使用します。
前提条件
- SystemTap のインストール で説明されているように、SystemTap が ホストシステム にインストールされている。
各 ターゲットシステム に
systemtap-runtimeパッケージがインストールされている。yum install systemtap-runtime
# yum install systemtap-runtimeCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ホストシステム と ターゲットシステム の両方のアーキテクチャーが同じである。
- ホストシステム と ターゲットシステム の両方が Red Hat Enterprise Linux (例: Red Hat Enterprise Linux 8) の同じバージョンをしている。ただし、異なるマイナーバージョンを使用することは 可能です (例: 8.1 および 8.2)。
カーネルパッケージのバグが原因で複数の kernel-debuginfo と kernel-devel パッケージがシステムにインストールできない場合があります。このような場合は、ホストシステム と ターゲットシステム のマイナーバージョンが同じでなければなりません。バグが発生した場合は、https://bugzilla.redhat.com/ で報告してください。
手順
各 ターゲットシステム で実行しているカーネルを確認します。
uname -r
$ uname -rCopy to Clipboard Copied! Toggle word wrap Toggle overflow ターゲットシステム ごとにこの手順を繰り返します。
- Systemtap のインストール で説明されている方法に従って、ホストシステム で各 ターゲットシステム の ターゲットカーネル と関連パッケージをインストールします。
ホストシステム でインストルメンテーションモジュールを構築し、このモジュールをコピーして ターゲットシステム でこのモジュールを実行します。
リモート実装の使用
stap --remote target_system script
# stap --remote target_system scriptCopy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、指定したスクリプトを ターゲットシステム にリモートで実装します。これを正常に実行するには、ホストシステム から ターゲットシステム に SSH 接続できるようしておく必要があります。
手動:
ホストシステム でインストルメンテーションモジュールを構築します。
stap -r kernel_version script -m module_name -p 4
# stap -r kernel_version script -m module_name -p 4Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、kernel_version は手順 1 で判断した ターゲットカーネル を、script は インストルメンテーションモジュール に変換するスクリプトを、module_name は インストルメンテーションモジュール の任意の名前を指します。
-p4オプションは、SystemTap にコンパイルしたモジュールを読み込まないように指示します。インストルメンテーションモジュールがコンパイルされたら、ターゲットシステムにコピーして、以下のコマンドを使用して読み込みます。
staprun module_name.ko
# staprun module_name.koCopy to Clipboard Copied! Toggle word wrap Toggle overflow