本文转载自: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 添加该源的公钥.
代码语言: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:
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
或者下载deb包,下载完默认在/var/cache/apt/archives/目录下
apt-get install --download-only linux-image-$(uname -r)-dbgsym