Linux问题情报分享(3):CentOS 7上最新kernel-debuginfo包与当前内核版本不匹配

CentOS 7上最新的kernel-debuginfo包,是kernel-debuginfo-4.x.x-x.el7,而当前内核是kernel-3.10.0。因此,如果安装或者升级到了最新的kernel-debuginfo包,会导致类似SystemTap这样需要内核头文件和调试符号的工具执行出错。这是CentOS 7的bug

SystemTap为例,其报错大致如下

[root@pusf ~]# rpm -qa | grep kernel-debuginfo
kernel-debuginfo-4.9.31-203.el7.centos.x86_64
kernel-debuginfo-common-x86_64-4.9.31-203.el7.centos.x86_64[root@pusf ~]
[root@pusf ~]# stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'
Pass 1: parsed user script and 119 library scripts using 117224virt/33688res/3120shr/30824data kb, in 240usr/10sys/292real ms.
semantic error: while resolving probe point: identifier 'kernel' at /usr/share/systemtap/tapset/linux/vfs.stp:882:18
        source: probe vfs.read = kernel.function("vfs_read")
                      ^
semantic error: missing x86_64 kernel/module debuginfo [man warning::debuginfo] under '/lib/modules/3.10.0-514.26.2.el7.x86_64/build'
semantic error: while resolving probe point: identifier 'vfs' at <input>:1:7
        source: probe vfs.read {printf("read performed\n"); exit()}
                      ^
semantic error: no match

Pass 2: analyzed script: 0 probes, 0 functions, 0 embeds, 0 globals using 120568virt/37092res/5108shr/32068data kb, in 100usr/140sys/443real ms.
Missing separate debuginfos, use: debuginfo-install kernel-3.10.0-514.26.2.el7.x86_64
Pass 2: analysis failed.  [man error::pass2]
[root@pusf ~]#

因此,出现这种情况时,需要卸载kernel-debuginfo-4.x.x-x.el7和kernel-debuginfo-common-4.x.x-x.el7的包,重新按照当前内核版本安装kernel-debuginfo即可

rpm -qa | grep -E '^kernel-' | grep -v 3.10.0 | xargs yum -y remove
debuginfo-install -y kernel-$(uname -r)

再测试下SystemTap的脚本,会发现问题已经解决了

[root@pusf ~]# rpm -qa | grep kernel-debuginfo
kernel-debuginfo-common-x86_64-3.10.0-514.26.2.el7.x86_64
kernel-debuginfo-3.10.0-514.26.2.el7.x86_64
[root@pusf ~]# stap -v -e 'probe vfs.read {printf("read performed\n"); exit()}'

Pass 1: parsed user script and 119 library scripts using 117224virt/33684res/3120shr/30824data kb, in 230usr/10sys/293real ms.

Pass 2: analyzed script: 1 probe, 1 function, 4 embeds, 0 globals using 248216virt/165932res/4336shr/161816data kb, in 1260usr/370sys/1809real ms.

Pass 3: translated to C into "/tmp/stapI5iwL4/stap_1aa47f863c3f13e51da3e80cc92942be_1682_src.c" using 248216virt/166236res/4640shr/161816data kb, in 20usr/40sys/57real ms. 

Pass 4: compiled C into "stap_1aa47f863c3f13e51da3e80cc92942be_1682.ko" in 5550usr/1240sys/7187real ms.

Pass 5: starting run.
read performed
Pass 5: run completed in 0usr/60sys/378real ms.
[root@pusf ~]#

在CentOS官方修正bug前,可以在/etc/yum.conf中加入如下配置,先排除问题包

exclude=kernel-debuginfo*

这样,升级时不会再次安装了问题包。当然,内核升级时,需要额外调整下配置。

顺便说下,在Ubuntu上使用SystemTap,需要额外配置和步骤,请参考SystemTap on Ubuntu

参考

  1. SystemTap
  2. SystemTap on CentOS
  3. SystemTap on Ubuntu
  4. Where to find the kernel-debuginfo package
时间: 2025-01-01 19:40:38

Linux问题情报分享(3):CentOS 7上最新kernel-debuginfo包与当前内核版本不匹配的相关文章

Linux问题情报分享(1):内核Stack Clash补丁导致Java程序启动失败

关于Stack Clash,缺少耐心的读者,请参考Stack Clash 漏洞正粉碎 Linux 防御危及 root 权限,较全面的介绍请参考Stack Guard Page Circumvention Affecting Multiple Packages. 各个Linux发行版都已经发布了升级,合并了上游补丁. 上游补丁通过增大stack guard gap(堆栈保护措施,更多请参考Buffer overflow protection)尺寸到1M的方式,修复了Linux Kernel Sta

Linux问题情报分享(2):grub-install工具不能处理/dev/xvda*路径

如果你的系统盘是/dev/xvda,而你又需要重新安装grub,你可能会遇到这样的问题 [root@demo ~]# fdisk -l -u Disk /dev/xvda: 42.9 GB, 42949672960 bytes 255 heads, 63 sectors/track, 5221 cylinders, total 83886080 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical

Linux有问必答:如何在CentOS上安装phpMyAdmin

Linux有问必答:如何在CentOS上安装phpMyAdmin 问题:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库.在CentOS上安装phpMyAdmin的最佳方法是什么? phpMyAdmin是一款以PHP为基础,基于Web的MySQL/MariaDB数据库管理工具.虽然已经存在着一些诸如Adminer的轻量级数据库管理工具, 但是phpMyAdmin还是更加广泛应用于网站管理员之中来进行各种MySQL/MariaD

Linux有问必答:如何在CentOS或RHEL 7上修改主机名

Linux有问必答:如何在CentOS或RHEL 7上修改主机名 问题:在CentOS/RHEL 7上修改主机名的正确方法是什么(永久或临时)? 在CentOS或RHEL中,有三种定义的主机名:a.静态的(static),b.瞬态的(transient),以及 c.灵活的(pretty)."静态"主机名也称为内核主机名,是系统在启动时从/etc/hostname自动初始化的主机名."瞬态"主机名是在系统运行时临时分配的主机名,例如,通过DHCP或mDNS服务器分配.

在CentOS系统上查看用户登录记录的方法

  保留.维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一.对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕.例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报. 在CentOS系统上,用户登录历史存储在以下这些文件中: /var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么

实现Linux中Mysql数据库自动备份并上传到远程FTP服务器

这篇文章很有分享价值,因为我们在实际的生产环境中需要将数据库进行自动备份,然后上传到指定的位置,当然也可以像以下文章中所讲的一样,上传到你指定的FTP服务器中,从而实现Mysql数据库自动备份并上传到远程FTP服务器的部署,在Linuxhttp://www.aliyun.com/zixun/aggregation/31093.html">技术交流群中,也有朋友会遇到这方面的问题,可以将此文分享给群友共益. 注意:任何的操作都会具有风险性,请在本机实际测试通过之后再部署到服务器环境,这样即熟

u盘-linux小白问题,关于centos

问题描述 linux小白问题,关于centos centos的dvd iso ,everything iso和minimal iso 这三个版本有什么区别啊,我想用U盘刻录安装,这三个版本都是可以的吧 解决方案 Linux CentOS 中 mount 问题从一些小白问题想到的小白一样的表单提交问题 解决方案二: CentOS-7.0-1406-x86_64-DVD.iso 标准安装版,一般下载这个就可以了 CentOS-7.0-1406-x86_64-NetInstall.iso 网络安装镜像

CentOS 7上搭建安全、容灾、高可用的etcd集群

本文讲的是CentOS 7上搭建安全.容灾.高可用的etcd集群[编者的话]etcd 是 CoreOS 团队发起的开源项目,基于 Go 语言实现,做为一个分布式键值对存储,通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作. 本文目标是部署一个基于TLS(Self-signed certificates)的安全.快速灾难恢复(Disaster Recovery, SNAPSHOT)的高可用(High Availability)的etcd集群. 准备工作

如何在 CentOS 7 上安装 Elastic Stack

Elasticsearch 是基于 Lucene 由 Java 开发的开源搜索引擎.它提供了一个分布式.多租户的全文搜索引擎(LCTT 译注:多租户是指多租户技术,是一种软件架构技术,用来探讨与实现如何在多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性.),并带有 HTTP 仪表盘的 Web 界面(Kibana).数据会被 Elasticsearch 查询.检索,并且使用 JSON 文档方案存储.Elasticsearch 是一个可扩展的搜索引擎,可用于搜索所有类型的文本