DTraceで遊ぶ : やっぱり Sun がスキ! やっぱり Sun がスキ!

やっぱり Sun がスキ!

http://blogs.sun.com/yappri/date/20070123 2007年 1月 23日 火曜日

DTraceで遊ぶ

今回は、DTrace を使って uname の出力結果を(あくまでお遊びで)強制的に 変更する例を紹介します。
実際に Nevada の環境に Solaris 10 のパッケージをインストールしたいんだけど、 インストールパッケージの中で OS のバージョンチェック が入り、 pkgadd がはじかれてしまう時がありますよね。
こんな時、 DTrace を使って uname の表示を Solaris 10 用に変更する事で、 Nevada に Solaris 10 対応のパッケージをインストールできる場合があります。

下記の Dスクリプト(port2.d)は、Nevada で実行した uname -a の結果を Solaris 10 で実行した出力結果に置き換えてしまいます。
このスクリプトは、 Peter Karlsson の DTrace Code Camp 資料 Page 97 で紹介されている port.d スクリプトからヒントを得ました。

【port2.d スクリプト】

#!/usr/sbin/dtrace -Cs
#include

#pragma D option destructive

syscall::uname:entry
{
   self->addr = arg0;
}

syscall::uname:return
{
    copyoutstr("SunOS", self->addr,257);
    copyoutstr("pana", self->addr+257,257);
    copyoutstr("5.10", self->addr+(257*2),257);
    copyoutstr("Generic_118855-33", self->addr+(257*3),257);
    copyoutstr("i86pc", self->addr+(257*4),257);
}

では早速実行してみましょう。
ホスト名 pana にインストールされている Nevada_43 で試してみました。

<テストログ>
pana# uname -a
SunOS pana 5.11 snv_43 i86pc i386 i86pc
使用しているOS が 5.11 snv_43 と表示されます。
ここでuname 出力変更プログラムを実行
pana# ./port2.d &
dtrace: script './port2.d' matched 2 probes
dtrace: allowing destructive actions
もう一度 uname -a を実行
pana# uname -a
SunOS pana 5.10 Generic_118855-33 i86pc i386 i86pc
はい、uname の出力が Solaris 10 11/06 に変更できました!!


<実践編>
 それでは、実際に N1 Service Provisioning System のパッケージで試してみましょう。

<dtraceで OS 情報変更前>
pana# ./cr_cli_solaris_x86_pkg_5.0.sh

N1 Grid Service Provisioning System (N1 Grid SPS) Installation Setup
A log of events during this installation is being generated in
/tmp/N1GridSPSInstaller.log.1552.

Hit enter to accept the (default values) or enter a valid value from the
list provided: [valid values]


        ERROR! Unable to continue with N1 Grid SPS CLI Client installation.
        The highest OS version is 5.10, and this machine is running 5.11.


        For information on how to continue the installation on an unsupported
        platform, see the N1 Grid Service Provisioning System 5.0 Installation
        Guide.
このパッケージは、使用している OS が 5.11 (サポート対象外)を使用して いる事をチェックしており、インストールがはじかれてしまいます。

<dtraceで OS 情報を変更し、インストールを実行>
pana# ./port2.d &
dtrace: script './port2.d' matched 2 probes
dtrace: allowing destructive actions
pana# ./cr_cli_solaris_x86_pkg_5.0.sh

N1 Grid Service Provisioning System (N1 Grid SPS) Installation Setup
A log of events during this installation is being generated in
/tmp/N1GridSPSInstaller.log.1591.

Hit enter to accept the (default values) or enter a valid value from the
list provided: [valid values]

        Checking for required and recommended Solaris 5.10 patches.
        Done checking for required and recommended Solaris 5.10 patches.

        Checking the integrity of the package.
        Package is intact.

....
....
今度は、インストール処理で uname のチェックではじかれていたパスがスルーされました。

今回はお遊びで OS 情報の変更を試しましたが、 DTrace の copyoutstr() は、コマンドや関数のに対して、 リコンパイルせずにダイナミックに任意の 引数を渡す事ができますので、デバッグ時に活躍すると思います。

投稿されたコメント:

コメント
  • HTML文法 不許可