按照SystemTap Beginners Guide的部分安装了SystemTap,但是在安装过程中还是出现问题,在这里记录下解决方法。
环境 安装 安装SystemTap先安装如下两个RPM包:
systemtap
systemtap-runtime
以root运行如下命令:
# yum install systemtap systemtap-runtime
在运行SystemTap之间,还需要装必要的内核信息包。在现代系统上,可以运行如下stap-prep来安装这些包,如下:
# stap-prep Need to install the following packages: kernel-devel-3.10.0-693.2.2.el7.x86_64 kernel-debuginfo-3.10.0-693.2.2.el7.x86_64 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile No package kernel-devel-3.10.0-693.2.2.el7.x86_64 available. No package kernel-debuginfo-3.10.0-693.2.2.el7.x86_64 available. Error: Nothing to do Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Could not find debuginfo for main pkg: kernel-3.10.0-693.2.2.el7.x86_64 No debuginfo packages available to install package kernel-devel-3.10.0-693.2.2.el7.x86_64 is not installed package kernel-debuginfo-3.10.0-693.2.2.el7.x86_64 is not installed problem installing rpm(s) kernel-devel-3.10.0-693.2.2.el7.x86_64 kernel-debuginfo-3.10.0-693.2.2.el7.x86_64
运行stap-prep的时候,它探测出还要安装kernel-devel-3.10.0-693.2.2.el7.x86_64包和kernel-debuginfo-3.10.0-693.2.2.el7.x86_64包 (实际上还有kernel-debuginfo-common包),但是自动安装失败。我们可以按照如下方法手动安装。
手动安装必要的内核信息包SystemTap需要安装内核内核符号文件来probe内核。必要的内核信息包含在如下三个包中:
kernel-debuginfo
kernel-debuginfo-common
kernel-devel
一定要安装与当前内核版本一致的包。当前环境的内核版本是3.10.0-693.2.2.el7.x86_64,所以需要安装的包为:
kernel-debuginfo-3.10.0-693.2.2.el7.x86_64
kernel-debuginfo-common-3.10.0-693.2.2.el7.x86_64
kernel-devel-3.10.0-693.2.2.el7.x86_64
注意:其实在上一步运行stap-prep时,已经把需要的包的名称及其内核精准地打印在屏幕上了。
接下来安装这三个包,注意不要直接yum install kernel-debuginfo kernel-debuginfo-common kernel-devel, 即使能找到相应的包,也是安装的最新版本,不会自动匹配当前版本。所以我们下载RPM包,再用rpm命令依次安装。
对于CentOS来说,内核符号文件一版在上有各个版本非常完整的包,但是一般从境内下载都比较慢,特别是kernel-debuginfo,比较大下载可能非常慢。所以在debuginfo.centos.org上下了kernel-debuginfo-common包,另外两个包在Google上搜了一把,分别找了两个镜像。下了之后才发现这个地方有坑,这个坑在后面展开讲。
wget https://ftp.sjtu.edu.cn/scientific/7/archive/debuginfo/kernel-debuginfo-3.10.0-693.2.2.el7.x86_64.rpm wget http://debuginfo.centos.org/7/x86_64/kernel-debuginfo-common-x86_64-3.10.0-693.2.2.el7.x86_64.rpm wget ftp://mirror.switch.ch/pool/4/mirror/scientificlinux/7.0/x86_64/updates/security/kernel-devel-3.10.0-693.2.2.el7.x86_64.rpm
下载之后,直接用rpm命令安装就好:
# rpm -ivh kernel-debuginfo-common-x86_64-3.10.0-693.2.2.el7.x86_64.rpm # rpm -ivh kernel-debuginfo-3.10.0-693.2.2.el7.x86_64.rpm # rpm -ivh kernel-devel-3.10.0-693.2.2.el7.x86_64.rpm
至此安装步骤完毕,下面来测试SystemTap能不能正常运行。
运行SystemTap为了测试stap是否能正常运行,用如下简单命令打印:
# stap -e 'probe begin{printf("Hello, World"); exit();}'
运行失败...结果如下:
# stap -e 'probe begin{printf("Hello, World"); exit();}' ERROR: module version mismatch (#1 SMP Tue Sep 12 10:10:26 CDT 2017 vs #1 SMP Tue Sep 12 22:26:13 UTC 2017), release 3.10.0-693.2.2.el7.x86_64 WARNING: /usr/bin/staprun exited with status: 1 Pass 5: run failed. [man error::pass5]