温暖的电波  

背景

在使用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
posted on 2022-09-11 08:53  温暖的电波  阅读(37)  评论(0编辑  收藏  举报