背景
在使用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