本文档翻译自systemtap README,翻译时文件的最新提交是92cb703ed remove dejazilla support
,大部分借助于ChatGPT翻译,仅作为我个人的参考,如果你想查阅,建议看英文文档,因为我不确定我记录的中文翻译是否完整和正确。
SystemTap是一个Linux跟踪/探测工具。
请访问项目网站 http://sourceware.org/systemtap,获取开发者和用户的文档和邮件列表信息。
这是自由软件。
有关再分发/修改条款,请参阅COPYING文件。
有关通用构建说明,请参阅INSTALL文件。
有关贡献建议,请参阅HACKING文件。
先决条件:
- Linux内核
- 内核模块构建环境(kernel-devel rpm)和/或dyninst
- 可选: 被检测的内核/用户空间的调试信息
- C编译器(与内核编译使用的相同),用于构建内核模块
- C++11编译器,如gcc 4.8+,用于构建SystemTap本身
- elfutils 0.151+及其带有libdwfl的版本,用于解析调试信息
- Python,用于脚本工具(例如dtrace(1))
- root权限
安装步骤:
- 如果使用的是elfutils版本0.178或更高版本,请尝试使用debuginfod进行自动调试信息下载。这是一个实验性的公共服务器,可能足够使用:
% export DEBUGINFOD_URLS=https://debuginfod.elfutils.org/
% export DEBUGINFOD_PROGRESS=1
更多详情请参阅 https://sourceware.org/elfutils/Debuginfod.html。
- 否则,请安装所需的调试信息包,适用于内核和/或用户空间。在现代Fedora上,可以使用以下命令:
# debuginfo-install kernel [...]
(注意内核、kernel-debug以及kernel-PAE等变体之间的混淆。每种变体通常都有对应的开发和调试信息包。)
- 安装SystemTap包。
在现代Fedora上,执行以下命令:
# yum install systemtap systemtap-runtime
构建步骤:
- 考虑安装kernel-debuginfo、kernel-devel、gcc和它们的依赖包(或者如果从源代码构建自己的内核,请参见下文)。如果仅使用纯用户空间的dyninst后端,请安装gcc和dyninst-devel。
- 如果可用,请安装您发行版的elfutils及其开发头文件/库。
或者如果希望,可以单独构建elfutils一次,并安装到/usr/local。
参见 https://elfutils.org/。
elfutils版本0.178引入了自动调试信息下载功能,可以使systemtap的使用更加简便。
- 在现代Fedora上,安装一般的可选构建先决条件:
# yum-builddep systemtap
在现代Debian/Ubuntu上,类似地:
# apt-get build-dep systemtap
- 下载systemtap源代码:
https://sourceware.org/systemtap/ftp/releases/
https://sourceware.org/systemtap/ftp/snapshots/
(或者)使用git克隆:
git clone git://sourceware.org/git/systemtap.git
(或)https://sourceware.org/git/systemtap.git
- 正常构建systemtap:
% .../configure [其他autoconf选项]
在configure之前添加env LDFLAGS=-L/path/ CPPFLAGS=-I/path/,以在非系统目录中定位库文件。
考虑使用"--prefix=DIRECTORY"配置选项,指定除了/usr/local之外的安装目录。它可以是普通的个人目录。
% make all
# make install
若要卸载systemtap:
# make uninstall
或者,在类似Fedora的系统上:
% make rpm
# rpm -i /path/to/rpmbuild/.../systemtap*rpm
- 运行systemtap:
安装完成后,要运行systemtap,请将$prefix/bin添加到您的$PATH中,或直接使用$prefix/bin/stap。如果保留了构建树,也可以在那里使用"stap"二进制文件。
一些示例应该可以在$prefix/share/doc/systemtap/examples目录下找到。
对于基于普通Linux内核模块的后端,请以root身份运行"stap"。如果需要,可以在/etc/groups中创建"stapdev"和"stapusr"条目。任何位于"stapdev"和"stapusr"组中的用户都可以像使用root权限一样运行systemtap。只有位于"stapusr"组中的用户可以启动(使用"staprun")预编译的探测模块(由管理员复制到/lib/modules/`uname -r`/systemtap下)。"stapusr"用户也可以被允许创建自己的任意非特权systemtap脚本。有关更多设置信息,请参阅README.unprivileged。
运行简单测试:
# stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
从构建树运行完整的测试套件,请安装dejagnu,然后以root权限运行:
# make installcheck
对于原型dyninst纯用户空间后端,请任何用户运行"stap":
% stap --runtime=dyninst -e 'probe process.function("*") {
println(pn(), ":", $$parms) }' -c 'ls'
对于原型bpf后端,请作为root运行"stap":
# stap --runtime=bpf -e 'probe kernel.function("do_exit") {
printf("bye %d\n", pid()) }'
提示:
- 默认情况下,systemtap会在以下位置查找调试信息:
/boot/vmlinux-`uname -r`
/usr/lib/debug/lib/modules/`uname -r`/vmlinux
/lib/modules/`uname -r`/vmlinux
/lib/modules/`uname -r`/build/vmlinux
构建kernel.org内核:
- 使用您通常的流程构建内核。启用以下配置选项: CONFIG_DEBUG_INFO、CONFIG_KPROBES、CONFIG_RELAY、CONFIG_DEBUG_FS、CONFIG_MODULES、CONFIG_MODULE_UNLOAD、CONFIG_UPROBES(如果可用)。
- % make modules_install install headers_install
- 启动到内核。
- 如果希望保留内核构建树,简单地运行:
% stap -r /path/to/kernel/build/tree [...]
完成。
- 或者,如果希望将内核构建/调试信息数据安装到systemtap可以找到而无需"-r"选项的位置:
% ln -s /path/to/kernel/build/tree /lib/modules/RELEASE/build
- 您也可以使用环境变量SYSTEMTAP_RELEASE来指定systemtap使用的内核数据,而不是使用"-r"选项。