专栏首页随笔+(转载)ubuntu 安装 dbgsym (debug-info)

(转载)ubuntu 安装 dbgsym (debug-info)

本文转载自:http://www.oolap.com/2015-11-07-ubuntu-install-dbgsym

linux 下执行 systemtap 脚本时需要安装系统内核的 debug-info, debug-info 是 redhat 的叫法, ubuntu 下叫 debug symbols, 简称 dbgsym 。 ubuntu 默认安装时不会安装 dbgsym, 默认仓库上也没有 dbgsym 包。 dbgsym 包存在于独立的仓库上,官方仓库地址为 http://ddebs.ubuntu.com/,包名后缀貌似也从 .deb 变成了 .ddeb

要安装 dbgsym 操作步骤如下:

1. 编辑 /etc/apt/sources.list 文件添加 dbgsym 源

要安装 dbgsym 包可手动添加此源,编辑 /etc/apt/sources.list 文件,在最后面添加如下两行:

deb http://ddebs.ubuntu.com/ precise main
deb http://ddebs.ubuntu.com/ precise-updates main

其中 precise 替换为 ubuntu 发行版名称, 可使用如下命令完成操作

python2 -c 'import sys; print "\n".join(sys.argv[1:])' "deb http://ddebs.ubuntu.com/ $(lsb_release --short --codename)"{,-updates}" main #restricted universe multiverse" | sudo tee -a /etc/apt/sources.list

如果要安装其他软件的 dbgsym,可能还要启用 "main" 之外的其他 component.

2. 添加源公钥 key

首次添加源后执行 sudo apt-get update,可能会在最后看到如下错误消息:

正在读取软件包列表... 完成                                                                                                         
W: GPG 错误:http://ddebs.ubuntu.com precise Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY ECDCAD72428D7C01
W: GPG 错误:http://ddebs.ubuntu.com precise-updates Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY ECDCAD72428D7C01

这是因为源公钥没有添加,可使用如下命令从 ubuntu keyserver 添加该源的公钥.

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

最后一个参数 ECDCAD72428D7C01 就是上面报错的 PUBKEY,对 http://ddebs.ubuntu.com/ 来说这个值应该是固定的.

3. 更新源信息

添加公钥后,再次执行如下命令更新源信息:

sudo apt-get update

4. 查找和安装 dbgsym 软件包

更新源后即可像安装普通软件包一样查找和安装 dbgsym,查找时可带上 "-dbgsym" 后缀. 如要查找内核相关 dbgsym,可使用如下命令搜索:

sudo aptitude search 'linux-image-.*-dbgsym'

也可带上版本号直接搜索当前内核的 dbgsym:

sudo aptitude search 'linux-image-'$(uname -r)'-dbgsym'

由于 linux 内核版本也经常迭代更新,可能当前内核版本的 dbgsym 已经在仓库上下线,不能找到和安装对应的 dbgsym, 此时建议系统重装一个存在对应 dbgsym 的内核版本. 如果对最新版本内核没有强需求,建议从 dbgsym 列表中选择一个版本较旧但相对稳定未下线的版本.

如我当前找到如下 dbgsym 版本列表:

p   linux-image-3.13.0-30-generic-dbgsym                      - Linux kernel debug image for version 3.13.0 on 64 bit x86 SMP       
p   linux-image-3.13.0-30-generic-dbgsym:i386                 - Linux kernel debug image for version 3.13.0 on 32 bit x86 SMP       
p   linux-image-3.13.0-32-generic-dbgsym                      - Linux kernel debug image for version 3.13.0 on 64 bit x86 SMP       
p   linux-image-3.13.0-32-generic-dbgsym:i386                 - Linux kernel debug image for version 3.13.0 on 32 bit x86 SMP       
p   linux-image-3.13.0-65-generic-dbgsym                      - Linux kernel debug image for version 3.13.0 on 64 bit x86 SMP       
p   linux-image-3.13.0-65-generic-dbgsym:i386                 - Linux kernel debug image for version 3.13.0 on 32 bit x86 SMP       
p   linux-image-3.13.0-66-generic-dbgsym                      - Linux kernel debug image for version 3.13.0 on 64 bit x86 SMP       
p   linux-image-3.13.0-66-generic-dbgsym:i386                 - Linux kernel debug image for version 3.13.0 on 32 bit x86 SMP       
p   linux-image-3.13.0-67-generic-dbgsym                      - Linux kernel debug image for version 3.13.0 on 64 bit x86 SMP       
p   linux-image-3.13.0-67-generic-dbgsym:i386                 - Linux kernel debug image for version 3.13.0 on 32 bit x86 SMP       

则我会选择安装 3.13.0-32-generic 版本, linux-image 和 linux-headers 最好同时安装上, 可使用如下命令同时安装对应内核和 dbgsym:

sudo aptitude install linux-{image,headers}-3.13.0-32-generic linux-image-3.13.0-32-generic-dbgsym

linux-image 建议 (suggests) 安装 linux-headers,但不是推荐 (recommends), 使用 aptitude 安装软件包时默认会安装推荐的软件包, 但是对建议的软件包不会管, 建议的软件包通常有很多是不需要的, 如果需要安装可以手动指定。

由于 dbgsym 官方源在国外, 没找到镜像, 从源下载安装通常会很慢, 也可以把下载好的安装包拷贝过来, 使用 dpkg -i 安装:

sudo dpkg -i linux-image-3.13.0-32-generic-dbgsym_3.13.0-32.57~precise1_amd64.ddeb

原文链接:http://www.oolap.com/2015-11-07-ubuntu-install-dbgsym

我来说两句

0 条评论
登录 后参与评论

相关文章

  • systemtap实现定位内核丢包工具

    前些日子业务报过来一个容器作为http client访问http server出现随机性丢包超时问题,经过抓包分析确定在虚拟机端口eth0到Pod所在的veth...

    chudi
  • systemd挂盘超时导致系统进入emergency问题分析

    手工输入快捷键ctrl+d系统才能继续启动系统后在message日志中也可以看到相关信息:

    chudi
  • ubuntu kernel编译

    cp /boot/config-4.15.0-88-generic ./.config 或make oldconfig

    chudi
  • Grafana+prometheus+php 自动创建监控图

    在grafana+ prometheus+php 监控系统实践文章当中已经实现了我们的第一个监控图表,现在我们有了一个新需求,需要对多个节点实现不同的监控,以及...

    汤青松
  • 印象笔记下的MarkDown

    印象笔记终于还是终于出了markdown语法编辑方式,苦苦等了几年的我们是一个什么样子的体验?

    恒宇少年
  • 从头开始编写一个强化学习足球经纪人!

    欢迎来到数学和代码turorial系列的第一部分。展示如何实施一种称为近端策略优化(PPO)的强化学习算法,用于教授AI代理如何踢足球/足球。在本教程结束时,将...

    代码医生工作室
  • Linux系统中同时运行多个comcat

    vi /etc/profile   在其中加入   ##########first tomcat###########   CATALINA_BASE=/...

    week
  • Android GPS学习 (三) :GPS 问题抓取 log 步骤

    前言:GPS 的 log 与其他模块不同,正常打开开发者模式很多关键类是不会打印log的,需要手动打开手机权限。

    用户7557625
  • 如何分析珠宝市场需求,并且建立可执行渠道

    前几年崖柏火热时,购进了大量原料,在古玩城卖爆——虽然售价高,好在库存足,进价低,品质好,工艺好。 但这近年炒家太多,上来就假货加价格战,线下难搞——所以想布局...

    沉默的白面书生
  • iOS View添加点击事件

    剑行者

扫码关注云+社区

领取腾讯云代金券