CentOSには、SystemTap 0.9.7が標準搭載されています。SystemTapの現時点の最新は1.1で、C++のスコープ演算子が利用できるようになった等利用したい機能があるため、SystemTap Ver.1.1のCentOS 5用RPMを作成します。
ソースファイル、旧バージョンのソースRPMの入手
まず、SystemTapのソース(systemtap-1.1.tar.bz2)を以下URLから入手します。
systemtap-0.9.7-5.el5.src.rpmをCentOSのミラーyumリポジトリから入手します。例えば以下URL。
また、elfutilsのソースを入手します。systemtapのsrc.rpmにはelfutils-0.141.tar.bz2が含まれていますが、最新版(elfutils-0.144.tar.bz2)を取得しました。
Fedora12の最新ソースRPMの入手
SPECファイルについて参考とするため、Fedora12のsystemtap-1.1のソースRPMをFedoraのミラーyumリポジトリから入手します。
systemtap.specの修正
SystemTapのバージョンアップでファイル構成が変化しているので、specファイルを修正する必要があります。今回は、0.9.7のspecファイルをまずはそのまま使ってrpmbuildコマンドでビルドを行い、エラーが出たらFedora12の最新RPMのspecファイルを参照して修正を入れる方法で作業を進めました。
-%{!?elfutils_version: %define elfutils_version 0.141} +%{!?elfutils_version: %define elfutils_version 0.144} -Version: 0.9.7 -Release: 5%{?dist} +Version: 1.1 +Release: 1%{?dist} -Patch2: rhbz438737.patch -Patch3: rhbz498018-1.patch -Patch4: rhbz498018-2.patch -Patch5: rhbz498018-3.patch -Patch6: rhbz498040.patch -Patch7: rhbz499688.patch -Patch8: rhbz501795.patch -Patch9: rhbz503225.patch -Patch10: rhbz504007-1.patch -Patch11: rhbz504007-2.patch -Patch12: rhbz504007-3.patch -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 -%patch6 -p1 -%patch7 -p1 -%patch8 -p1 -%patch9 -p1 -%patch10 -p1 -%patch11 -p1 -%patch12 -p1 -install -m 644 initscript/config $RPM_BUILD_ROOT%{_sysconfdir}/systemtap +install -m 644 initscript/config.systemtap $RPM_BUILD_ROOT%{_sysconfdir}/systemtap/config +%{_bindir}/stap-authorize-signing-cert +%{_mandir}/man8/stap-authorize-signing-cert.8* %files client : -%{_bindir}/stap-find-servers -%{_bindir}/stap-find-or-start-server -%{_bindir}/stap-add-server-cert -%{_bindir}/stap-client-connect -%{_mandir}/man8/stap-server.8* +%{_bindir}/stap-authorize-server-cert +%{_libexecdir}/%{name}/stap-find-servers +%{_libexecdir}/%{name}/stap-client-connect +%{_mandir}/man8/stap-client.8* +%{_mandir}/man8/stap-authorize-server-cert.8* %files server : -%{_bindir}/stap-serverd -%{_bindir}/stap-start-server -%{_bindir}/stap-stop-server -%{_bindir}/stap-gen-server-cert -%{_bindir}/stap-server-connect +%{_libexecdir}/%{name}/stap-serverd +%{_libexecdir}/%{name}/stap-start-server +%{_libexecdir}/%{name}/stap-find-or-start-server +%{_libexecdir}/%{name}/stap-stop-server +%{_libexecdir}/%{name}/stap-gen-cert +%{_libexecdir}/%{name}/stap-server-connect +%{_libexecdir}/%{name}/stap-sign-module %files sdt-devel : -%doc initscript/README.initscript +%doc initscript/README.systemtap
C++のスコープ演算子を使用
例えば、
probe process("/home/torutk/bin/myapp").function("MyClass::*") { printf("MyClassのメンバ関数が呼び出されました\n") }
のように指定できます。
SystemTapの参考資料
日本語の資料
英語の資料
- http://sourceware.org/systemtap/wiki/LW2008SystemTapTutorial?action=AttachFile&do=view&target=jistone-systemtap-linuxworld08.pdf
- http://sourceware.org/systemtap/wiki/LPC2008SystemTapTutorial?action=AttachFile&do=view&target=LPC_2008_stap.pdf
- http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/SystemTap_Beginners_Guide/index.html