在Ubuntu上安装使用Systemtap

  因为最近开始学习Nginx,在网上看到别人介绍了一款强大的内核探测工具Systemtap,于是便准备学习下这款探测工具为以后代码分析做准备。

  第一步便是安装。在自己电脑上安装的时候,也是费了一番劲儿。因此,为防止以后需要重新安装,也希望可以帮助后来学习的人,在这里准备写一篇博客做一个记录。

  以下便是安装步骤:

  (0)、安装elfutils,提供分析调试信息的库函数,及libcap-dev。

  借助于Ubuntu方便强大的包管理器,可以很方便进行安装,如下:

sudo apt-get install elfutils
sudo apt-get install  libcap-dev

  (1)、安装systemtap。

  借助于Ubuntu方便强大的包管理器,可以很方便进行安装,如下:    

sudo apt-get install systemtap

  后续如果需要卸载,可执行如下命令:

sudo apt-get remove systemtap

  也可以通过源码进行安装,下载地址:https://sourceware.org/systemtap/ftp/releases/ 。解压然后进入根目录,执行如下命令:

./configure
make
sudo make instal

  如果后续需要卸载,可进入根目录,执行如下命令:

sudo make uninstall

  (2)、安装debug symbols。

   1)、配置ddeb repository。

sudo cat > /etc/apt/sources.list.d/ddebs.list << EOF
deb http://ddebs.ubuntu.com/ precise main restricted universe multiverse
EOF

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01
sudo apt-get update

  上面添加仓库地址也可以直接在ddebs.list文件后面添加相应地址。

    2)、添加完repository之后,便是下载和你当前内核版本相对应的debug symbols。在这里推荐一位外国朋友写的脚本,写的非常好,博文链接(http://www.domaigne.com/blog/random/getting-debug-kernel-on-ubuntu/),感兴趣的可以去学习学习。因此为了减少错误发生,这里采用这里的脚本进行下载和安装:

wget http://www.domaigne.com/download/tools/get-dbgsym

chmod +x get-dbgsym

sudo ./get-dbgsy

  执行脚本后,可以去做些其他事情,因为这里可能需要等待较长的时间。

  3)、生成systemtap/libelf所需的模块信息。将如下命令放入debug_ko.sh:

for file in `find /usr/lib/debug -name ‘*.ko‘ -print`
do
        buildid=`eu-readelf -n $file| grep Build.ID: | awk ‘{print $3}‘`
        dir=`echo $buildid | cut -c1-2`
        fn=`echo $buildid | cut -c3-`
        mkdir -p /usr/lib/debug/.build-id/$dir
        ln -s $file /usr/lib/debug/.build-id/$dir/$fn
        ln -s $file /usr/lib/debug/.build-id/$dir/${fn}.debug
done

    然后执行该文件:

sudo ./debug_ko.sh

  (4)、测试安装是否成功。执行如下命令:

stap -e ‘probe kernel.function("sys_open") {log("hello world") exit()}‘

  如果在终端打印出“hello world”说明安装成功。如果没有,继续往下看。

  (5)、如果按照上述步骤安装完之后,仍然不能使用,那么请参考下面的场景分别进行补充。

  1)、如果执行(4)中的命令后,终端打印如下信息:

stap: Symbol `SSL_ImplementedCiphers‘ has different size in shared object, consider re-linking
In file included from include/linux/mutex.h:15:0,
                 from /tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.c:25:
include/linux/spinlock_types.h:55:14: error: ‘__ARCH_SPIN_LOCK_UNLOCKED’ undeclared here (not in a function)
  .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED,               ^
include/linux/spinlock_types.h:79:15: note: in expansion of macro ‘__RAW_SPIN_LOCK_INITIALIZER’
  { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } }
               ^
include/linux/spinlock_types.h:82:16: note: in expansion of macro ‘__SPIN_LOCK_INITIALIZER’
  (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname)
                ^
include/linux/mutex.h:111:18: note: in expansion of macro ‘__SPIN_LOCK_UNLOCKED’
   , .wait_lock = __SPIN_LOCK_UNLOCKED(lockname.wait_lock)                   ^
include/linux/mutex.h:117:27: note: in expansion of macro ‘__MUTEX_INITIALIZER’
  struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
                           ^
/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.c:26:8: note: in expansion of macro ‘DEFINE_MUTEX’
 static DEFINE_MUTEX(module_refresh_mutex);
        ^
scripts/Makefile.build:258: recipe for target ‘/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.o‘ failed
make[1]: *** [/tmp/staphH2yQD/stap_6e022ad97cbe9c6f46b582f7a0eac81d_1242_src.o] Error 1
Makefile:1398: recipe for target ‘_module_/tmp/staphH2yQD‘ failed
make: *** [_module_/tmp/staphH2yQD] Error 2
WARNING: kbuild exited with status: 2
Pass 4: compilation failed.  [man error::pass4]

  说明有些共享库需要重新readlink,执行如下命令:

readlink /lib/modules/`uname -r`/build/

参考文章如下:

  1、http://www.domaigne.com/blog/random/running-systemtap-on-ubuntu/

  2、https://sourceware.org/systemtap/wiki/SystemtapOnUbuntu

  3、https://wiki.ubuntu.com/Kernel/Systemtap

时间: 02-25

在Ubuntu上安装使用Systemtap的相关文章

64位ubuntu上安装 hadoop-2.4.0

完全参考:http://blog.csdn.net/cruise_h/article/details/18709969 这上面的安装教程 伪分布配置: http://my.oschina.net/mynote/blog/93735 64位ubuntu上安装 hadoop-2.4.0,布布扣,bubuko.com

[异常解决] ubuntu上安装JLink驱动遇到的坑及给后来者的建议

一.前言 最近将整个电脑格式化,改成了linux操作系统 希望这样能让自己在一个新的世界探索技术.提升自己吧- win上的工具用多了,就不想变化了- 继上一篇<ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)> link:http://www.cnblogs.com/zjutlitao/p/5061917.html 遇到的在ubuntu上装虚拟机坑之后,接下来又遇到了一个新的问题—— 如何在在ubuntu上安装

在ubuntu上安装maven

下载maven http://maven.apache.org/download.cgi 解压 用压缩管理器打开,解压至home目录下 配置环境变量 sudo gedit /etc/profile 添加 export M2_HOME=<span style="color:#ff0000;">/home/weibo/apache-maven-3.0.5(视自己的情况而定)</span> export M2=$M2_HOME/bin export PATH=$M2:

Ubuntu上安装QQ

作者:邹祁峰 邮箱:[email protected] 博客:http://blog.csdn.net/qifengzou 日期:2014.06.12 转载请注明来自"祁峰"的CSDN博客 自从腾讯QQ发布Linux QQ后,其他第三方均纷纷退出Linux版本QQ的开发和维护,而后腾讯QQ也停止了Linux QQ的开发和维护,致使目前Ubuntu上只能使用网页QQ. 而直接登陆网页QQ又使用户不能及时方便的获知对方的回复,目前可使用PIDGIN登陆QQ,能很好的解决网页QQ的这个缺点.

如何在ubuntu上安装flash_player

一.如何在ubuntu上安装Flash Player 相信很多玩ubuntu的都会遇到这样一个问题,当你在网上看视频时,屏幕总会弹出你没用安装 Flash Player,然后就有一个选项叫你下载Flash Player. 遇到这种情况时,我们先下载下来,选择linux tar.gz版本,下载,然后解压到当前目录. 接着点开解压后的文件,你会看到libflashplayer.so文件,打开终端,输入以下命令就行了. sudo cp libflashplayer.so /usr/lib/mozill

在64位ubuntu上安装alienbrain客户端

一.首先从Alienbrain_EN_10.5.zip安装包(网上可搜索下载)里提取出linux版安装文件:Installations/Clients/Linux/NoVM/install.bin并chmod+x使之可执行 二.如果直接运行,可能会出现大把问题,逐步解决如下: 1.首先是报libc.so.6找不到:strings: '/lib/libc.so.6': No such file.这里只要做个链接:/lib/libc.so.6 -> /lib/x86_64-linux-gnu/lib

Ubuntu上安装MongoDB(译)

add by zhj:直接从第四步开始就可以了,而且安装好MongoDB后会自动启动的,不必自己去执行启动命令 原文:https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/ 一. 概述 通过这个教程,我们可以用.deb包在LTS Ubuntu上安装MongoDB社区版.虽然Ubuntu自己也有MongoDB包,但是官方的MongoDB社区版通常要更新一些. 注:平台支持 MongoDB只为64位 LTS Ubuntu

通过ppa在ubuntu上安装atom编辑器

在终端中执行以下命令即可,很方便. sudo add-apt-repository ppa:webupd8team/atom sudo apt-get update sudo apt-get install atom 支持Ubuntu 14.10, 14.04, 13.10 和 12.04 通过ppa在ubuntu上安装atom编辑器,布布扣,bubuko.com

ubuntu上安装nodejs

目录: 1. nodejs的下载 2. 解压和安装 3. 安装过程中出现过的问题 4. 总结 1. nodejs的下载 我刚开始没有linux系统,于是安装了nodejs的windows版本进行学习.这两天把ubuntu鼓捣好了,也就想着在ubuntu上装上nodejs. nodejs的官网(http://nodejs.org/)点击install进行下载,而且下载的就是当前的最新版本:不过在windows默认下载的是.msi文件,在linux下默认下载的是.tar.gz!ubuntu下载默认的