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

2021-07-08 12:09:49 浏览数 (1)

本文转载自: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 文件,在最后面添加如下两行:

代码语言:javascript复制
deb http://ddebs.ubuntu.com/ precise main
deb http://ddebs.ubuntu.com/ precise-updates main

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

代码语言:javascript复制
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,可能会在最后看到如下错误消息:

代码语言:javascript复制
正在读取软件包列表... 完成                                                                                                         
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 添加该源的公钥.

代码语言:javascript复制
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECDCAD72428D7C01

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

3. 更新源信息

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

代码语言:javascript复制
sudo apt-get update

4. 查找和安装 dbgsym 软件包

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

代码语言:javascript复制
sudo aptitude search 'linux-image-.*-dbgsym'

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

代码语言:javascript复制
sudo aptitude search 'linux-image-'$(uname -r)'-dbgsym'

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

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

代码语言:javascript复制
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:

代码语言:javascript复制
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 安装:

代码语言:javascript复制
sudo dpkg -i linux-image-3.13.0-32-generic-dbgsym_3.13.0-32.57~precise1_amd64.ddeb

或者下载deb包,下载完默认在/var/cache/apt/archives/目录下

apt-get install --download-only linux-image-$(uname -r)-dbgsym

0 人点赞