2013-07-11 39 views
4

我的目标是获得在Ubuntu 12.04 /精确主机上使用用户空间探测的能力。这可能从3.5.0内核开始,因此我安装了以下软件包:是否可以在Ubuntu 12.04上使用3.5.0/3.8.0内核的systemtap 1.7/2.1?

linux-headers-3.5.0-34 
linux-headers-3.5.0-34-generic 
linux-image-3.5.0-34-generic 
linux-image-3.5.0-34-generic-dbgsym 
linux-image-generic-lts-quantal 
linux-source 
linux-source-3.5.0 

和systemtap v1.7从12.10/quantal。

但我在开始任何STAP脚本后,唯一看到的是:

ERROR: module version mismatch (#55-Ubuntu SMP Thu Jun 6 20:18:19 UTC 2013 vs #55~precise1-Ubuntu SMP Fri Jun 7 16:25:50 UTC 2013), release 3.5.0-34-generic 
ERROR: Build-id mismatch [man error::buildid]: "/usr/lib/debug/boot/vmlinux-3.5.0-34-generic" byte 0 (0x84 vs 0xc2) address 0xffffffff8168e60c rc 0 

UNAME -a:从13.04 /节目铆足了劲完全相同的错误

Linux nginx-dev01g 3.5.0-34-generiC#55~precise1-Ubuntu SMP Fri Jun 7 16:25:50 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux 

SystemTap的V2.1。

的SystemTap V1.6(在12.04默认版本)未能在编译时:

In file included from /usr/share/systemtap/runtime/transport/transport.c:53:0, 
      from /usr/share/systemtap/runtime/print.c:18, 
      from /usr/share/systemtap/runtime/runtime.h:128, 
      from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:59: 
/usr/share/systemtap/runtime/transport/relay_v2.c:241:2: error: initialization from incompatible pointer type [-Werror] 
/usr/share/systemtap/runtime/transport/relay_v2.c:241:2: error: (near initialization for ‘__stp_relay_callbacks.create_buf_file’) [-Werror] 
In file included from /usr/share/systemtap/runtime/print.c:18:0, 
      from /usr/share/systemtap/runtime/runtime.h:128, 
      from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:59: 
/usr/share/systemtap/runtime/transport/transport.c: In function ‘_stp_get_root_dir’: 
/usr/share/systemtap/runtime/transport/transport.c:386:8: error: ‘struct hlist_head’ has no member named ‘next’ 
In file included from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:61:0: 
/usr/share/systemtap/runtime/stat.c: In function ‘_stp_stat_get’: 
/usr/share/systemtap/runtime/stat.c:213:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/stat.c:213:2: note: each undeclared identifier is reported only once for each function it appears in 
/usr/share/systemtap/runtime/stat.c: In function ‘_stp_stat_clear’: 
/usr/share/systemtap/runtime/stat.c:248:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
In file included from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:13594:0: 
/usr/share/systemtap/runtime/pmap-gen.c: In function ‘_stp_pmap_new_sx’: 
/usr/share/systemtap/runtime/pmap-gen.c:717:3: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/pmap-gen.c: In function ‘_stp_pmap_get_sx’: 
/usr/share/systemtap/runtime/pmap-gen.c:943:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
In file included from /usr/share/systemtap/runtime/map.c:20:0, 
      from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:13609: 
/usr/share/systemtap/runtime/map-stat.c: In function ‘_stp_pmap_new_hstat_linear’: 
/usr/share/systemtap/runtime/map-stat.c:71:3: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/map-stat.c: In function ‘_stp_pmap_new_hstat_log’: 
/usr/share/systemtap/runtime/map-stat.c:98:3: error: ‘cpu_possible_map’ undeclared (first use in this function) 
In file included from /tmp/stapYh6Wqv/stap_c22f4bc3b03cd6f9fed549d2973f11fd_361755.c:13609:0: 
/usr/share/systemtap/runtime/map.c: In function ‘_stp_pmap_new’: 
/usr/share/systemtap/runtime/map.c:242:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/map.c: In function ‘_stp_pmap_clear’: 
/usr/share/systemtap/runtime/map.c:350:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/map.c: In function ‘_stp_pmap_del’: 
/usr/share/systemtap/runtime/map.c:402:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/map.c: In function ‘_stp_pmap_agg’: 
/usr/share/systemtap/runtime/map.c:732:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
/usr/share/systemtap/runtime/map.c: In function ‘_stp_pmap_size’: 
/usr/share/systemtap/runtime/map.c:908:2: error: ‘cpu_possible_map’ undeclared (first use in this function) 
cc1: all warnings being treated as errors 

不幸的是,更新至12.10/13.04是不是一种选择。

那么,有没有机会在Ubuntu 12.04 /精确版上使用3.5.0或3.8.0内核来运行systemtap?

回答

2

您可能需要更新您的systemtap版本,作为一个非常陈旧的版本(例如1.7版本从2012年初开始)通常不适用于新内核(反之亦然)。

OTOH,原始的build-id错误是ubuntu-dbgsym存储库中的一个真正的版本不匹配问题。您需要确保您的运行内核版本与dbgsym版本完全匹配。使用Ubuntu可能会非常棘手,因为“uname -r”和dpkg名称不包含唯一标识构建。见的区别:

#55-Ubuntu SMP Thu Jun 6 20:18:19 UTC 2013 

#55~precise1-Ubuntu SMP Fri Jun 7 16:25:50 UTC 2013 

为什么你需要对用户空间探测虽然内核调试符号?请包括您的stap脚本和stap-report输出。尝试一下stap-prep脚本。

另一个复杂的因素是Ubuntu内核中可能缺少CONFIG_UPROBES。另请参阅http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=691167

1

我编译的systemstap release-2.3。 它可以在Ubuntu 12.04上使用linux-image-3.5.0-40-generic-dbgsym。

用调试信息安装内核。 Where to get debug symbols for kernel X?

编译systemstap 2.3

sudo apt-get build-dep systemtap 
git clone git://sourceware.org/git/systemtap.git 
cd systemtap 
git checkout release-2.3 
./configure 
make all # you can ignore the xmlto error 

# enjoy it 
sudo ./stap testsuite/systemtap.examples/network/tcpdumplike.stp