背景
在使用pip3安装了最新的drgn后执行
drgn -s vmlinux -c ./vmcore
命令后报出如下错误:
drgn 0.0.20+unknown (using Python 3.6.8, elfutils 0.186, without libkdumpfile) Traceback (most recent call last): File "/usr/local/bin/drgn", line 11, in <module> load_entry_point('drgn==0.0.20+unknown', 'console_scripts', 'drgn')() File "/usr/local/lib64/python3.6/site-packages/drgn-0.0.20+unknown-py3.6-linux-x86_64.egg/drgn/internal/cli.py", line 164, in main prog.set_core_dump(args.core) ValueError: drgn was built without libkdumpfile support
问题原因
默认情况下pip3安装的drgn没有集成kdump格式解析功能,默认是/proc/kcore解析;因此要先安装libkdumpfile,且把kdump功能编译到drgn。
解决方案
1 安装libkdumpfile库
对于Fedora或者EPEL on RHEL/CentOS >= 8系统可以通过dnf install libkdumpfile-devel来安装;
对于其他版本的centos需要通过源码来安装:从libkdumpfile下载源码,然后进入源码目录执行如下几个步骤进行编译、安装。
autoconf ./configure make make install
注意:1) autoconf命令 可能会失败,报错autoconfig:possibly undefined macro: AM_INIT_AUTOMAKE,此时可通过autoreconf --install来解决。
2) 上面的安装路径可能非标准的路径,可能会影响后续drgn编译。对于这种情况有两种解决方案,一种是在configure时指定安装路径参数,安装在自己的标准系统路径;另一种解决方法会在下面drgn编译是讲。
2 编译安装drgn
2.1 先安装依赖,下面是centos的安装;其他系统可参考drgn官方docs;
$ sudo dnf install autoconf automake elfutils-devel gcc git libtool make pkgconf python3 python3-devel python3-pip python3-setuptools
2.2 到drgn仓库下载代码,进入源码目录;
2.3 修改编译脚本,并添加libkdumpfile,如果libkdumpfile的安装路径不是默认的路径,还需要修改PKG_CONFIG_PATH.
diff --git a/setup.py b/setup.py index 2c0703a..f94615b 100755 --- a/setup.py +++ b/setup.py @@ -67,6 +67,8 @@ class build_ext(_build_ext): os.path.relpath("libdrgn/configure", self.build_temp), "--disable-static", "--enable-python", + "--with-libkdumpfile=yes", + "PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/" ]
2.4 编译、安装
python3 setup.py build sudo python3 setup.py install
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】