因为最近开始在Ubuntu上学习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/

更多Ubuntu相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2

本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-02/128727.htm

在Ubuntu上安装使用Systemtap相关推荐

  1. [网摘学习]在Ubuntu上安装和配置OpenStack Nova之二

    再收藏一份Openstack的文章,这两天的操作与此相同.但其中出现的问题还需要查找原因.待个人继续学习研究. 原文参考:http://www.linuxde.net/2011/11/1599.htm ...

  2. 在 Ubuntu 上安装最新版本的 Erlang方法介绍

    Erlang 是一种用于构建大规模可扩展实时系统的函数式编程语言.Erlang 最初是由 爱立信 创建的专有软件,后来被开源. Erlang 在 Ubuntu 的 Universe 仓库 中可用.启用 ...

  3. 在Ubuntu上安装Odoo 11(企业版)

    2019独角兽企业重金招聘Python工程师标准>>> 在Ubuntu上安装Odoo 11(企业版) 2017年10月8日YENTHE666 在本教程中,我将学习如何在Ubuntu ...

  4. 在 Ubuntu 上安装 Android Studio

    在 Ubuntu 上安装 Android Studio http://www.linuxidc.com/Linux/2013-05/84812.htm 打开terminal,输入以下命令 sudo a ...

  5. linux卸载kodi,如何在Ubuntu上安装Kodi 18 Beta

    Kodi的Beta版周期很长.很棒,因为它有助于将错误排除在生产版本之外,而且还可以保留数月的新功能.值得庆幸的是,Kodi开发人员提供了可供测试和使用的"unstable"软件包 ...

  6. [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)

    [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7) 参考文章: (1)[异常解决] ubuntu上安装虚 ...

  7. Ubuntu上安装oracle java 7

    Ubuntu上安装oracle java 7 from: http://sddhn.blog.163.com/blog/static/128187792013103014453434/ 1.通过PPA ...

  8. Ubuntu上安装nginx步骤及问题记录

    在Ubuntu上安装nginx,步骤如下:      1. 向/etc/apt/sources.list增加Nginx的源      2.执行sudo apt-get update更新软件源     ...

  9. 在Ubuntu上安装openResty #1

    在Ubuntu上安装openResty #1 OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方 ...

  10. Ubuntu上安装TensorFlow(python2.7版)

    笔记内容:Ubuntu上安装TensorFlow(python2.7版) 笔记日期:2018-01-31 我的系统环境: Ubuntu 16.04 LTS python 2.7 python 3.5 ...

最新文章

  1. torch量化其他功能(量化、反量化)
  2. SQL语句 goto
  3. 干货!各国圣诞放假时刻表!
  4. APP鉴赏之网易云音乐
  5. 纽约时代广场广告费才7千元每天,花钱装逼值不值?
  6. 安装 VMware Tools
  7. C++预处理指令#define,#if,#endif等
  8. matlab下pid控制仿真,利用Matlab实现PID控制仿真
  9. mysql并发量是多少_如何为 MySQL 选择 CPU?
  10. 创建数据库链接(dblink)步骤
  11. 由中缀式转化为后缀式
  12. 基于Dialog的MFC程序在启动时隐藏为托盘程序(三)
  13. 2021-10-08
  14. 10款电子邮箱测评:新浪邮箱、TOM邮箱、qq邮箱、163邮箱等产品差异明显,这款邮箱安全稳定性最高!
  15. LaTeX 旁注 边注 Marigin Note
  16. TOLUA的文件结构
  17. 流年暗换,是什么偷走了我们的爱情
  18. 大学英语综合教程二 Unit 5 课文内容英译中 中英翻译
  19. 情人节程序员用HTML网页表白【制作属于我们的爱情相册网页】 HTML5七夕情人节表白网页源码 HTML+CSS+JavaScript
  20. ubuntu中的内网穿透cpolar下载安装,后台运行及开机自启

热门文章

  1. 【mysql】使数据表ID连续的两个方法
  2. (转)常用英语100句
  3. python爬取动态网页_Python实现爬取网页中动态加载的数据
  4. ELK在广告系统监控中的应用 及 Elasticsearch简介
  5. IDC:“互联网+流通”将进一步释放活力
  6. Java实时读取日志文件
  7. Linux mysql 允许远程连接
  8. ES(elasticsearch)备份还原脚本
  9. 王思祺2015080360030的第一次作业完全版
  10. 如何配置VS使得可以通过域名或IP访问